频道栏目
首页 > 资讯 > SQL Server > 正文

数据库语言SQL从入门到熟练浅析

18-06-04        来源:[db:作者]  
收藏   我要投稿

数据库作为一堆躺在硬件里面的数据的集合,必须要通过一定的规则来和它打交道,如果使用传统的高级语言如C、Python等来调用则失去了数据库本身的意义,为了便捷的调用大量的数据,数据库有其自身的一套标准语言--SQL(Structual Query Language)结构化查询语言,其包含有DDL、DML、DCL(数据库定义、操作、控制)语言,这些语言是我们与数据库沟通所必须要学习和掌握的对象。其具体引擎与内部算法和实现则是进阶内容,本文只讲述SQL本身。

一、概述:

SQL(结构化查询语言),有DDL\DML\DCL三类语言9个关键词,它们分别如下:

DDL:create(创建)、alter(修改)、drop(取消)

DML(核心):Insert、Delete、Uptate、Select(核心中的核心)

DCL:grant(授权)、revoke(取消授权)

SQL语言有三大应用场景:

DBA通过DBMS来使用,此时为交互式SQL

通过高级语言嵌入SQL,此时为嵌入式SQL(与交互SQL基本一致)

设计一些高级抽象数据操作,此时为动态SQL(最难)

二、DDL(括号表示说明内容,中括号表示可选选项,下同)

①、create database 库名; (创建一个库)

②、create Table 表面(列名 数据类型 [Primary key | Unique](是否为主键\候选键) [Not Null](是否可以为空))

③、drop database 库名 \ drop Table 表面 (删除数据库、表)

④、alter Table 表名 [drop {完整性约束名}] [add {colname datatype}] [modify {colname datatype}] (修改表约束、增加属性、修改属性)

⑤、use/close 库名; (打开/关闭库)

三、DML

①、S-F-W基本形式

Select 列名 [,列名。。。。](后文忽略该中括号,此处表示可以多选列名)

From 表名[,列名。。。。](后文忽略该中括号,此处表示可以多选表名,实质是表的笛卡尔积)

[Where 选择条件]

以上为最经典的S-F-W查询模式,后续会对其进行一系列的扩展以满足复杂的需求。

②、From的扩展

实际上,Select命令相当于我们在关系代数中的投影命令,可以选择指定的属性并提取出来。

而From命令相当于表的连接命令,可以将多个表按需要连接起来,连接方式默认为全外连接,如下操作可指定其他连接方式:

From 表1 [Natural](自然连接) [INNER (内连接)| {LEFT | RIGHT | FULL} [OUTER] JOIN 表名2] {ON 连接条件 | Using (colname [,....])}

③、对结果的扩展

a.去除重复结果

在Select 后 属性前 加上符号DISTINCT

b.结果排序命令order by [ASC/Desc](升序or降序)

eg:

Select S# from Student order by s# desc;

③、对Select扩展

a.计算结果表达式与聚类函数

select后面跟随的除了是列名还可以是计算表达式和聚类函数,eg:

Select S.S#,S.Sname, 2018-S.Sage+1 as Syear From Student S;

聚类函数:Count(*) Sum Avg Max/,Min,eg:

Select Sum(salary) From Teacher T;

③、对where扩展

b.模糊查询(类似Linux中的通配符)

where 列名 [Not] like '字符串'

字符串中可出现%匹配若干字符; _ 匹配一个字符 ;\ 转义字符,用于%和_ ; eg:

select S#,Sname From Student

where Sname like '张%'

④、子查询扩展

对where 后的条件中可以添加子查询来进行公式验证,典型的3类子查询为 [Not] In,[<>]theta-some, /[<>]theta-all 和 [Not] Exists:

in 为验证是否在子查询结果中,等价于= some, not in 等价于 <>all,eg:

select S#,Sname From Student

Where S# in (Select S# From SC Where C# = '001';

eg:

Select Tname From Teacher

where salary <= all (select Salary From Teacher);

⑤、分组查询与过滤

SQL可以通过group by将检索结果按一定条件对元组进行分组,同时处理多个组和集合的聚集运算。eg:

Select S#, AVG(Score) From SC

Group by S#;(返回每个学生的平均成绩)

过滤:在group by 后加having 表示限制条件,eg:

Select S# From SC Where Score<60

Group by S# Having Count(*)>2;

⑥、用SQL实现并差交集合运算

基本语法:

子查询 {Union [all] | Intersect [all] | Except [all] } 子查询;(并交差(all表示不除重复元组)) ,eg:

Select S# From SC Where C# = '002'

Intersect

Select S# From SC Where C# = '003'

⑦、空值处理:空值检测只能使用: is [not] null

Select Sname From Student Where Sage is Null;

⑧、其他DML语句:Insert Delete Update

a.Insert

单一增加:

insert into 表名 [列名,....] values(值,......)

批量增加:

insert into 表名 [列名,....] 子查询

b.Delete

Delete From 表名 [where] 不加where为清空表,但表还在。

c.Update

Update 表名

Set 列名 = 表达式 | 子查询。。。。

[where 。。。]

⑨、视图

a.定义视图:

Creat view View_name[(列名,.....)]

as 子查询; eg:

create view compstud

as (select * from student where D# in (select D# from Dept where Dname = '计算机'));

b.使用视图:

Select S.Sname From compstud S

where S.Sage = '17'

c.视图的更新:满足一定条件才可以进行,条件如下:

相关TAG标签
上一篇:简单的MYSQL安装配置教程以及不能“Start service”问题的解决办法
下一篇:Oracle高阶教程之 connect by实例
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站