当前市场中,数据库在互联网整个技术链中的重要性是亘古不变的,站在实现业务功能的角度来说我们最常用的就是与数据库和缓存进行交互,而最终持久化存储最常见的依旧是关系型数据库。数据库中我们做常用的就是SQL基本查询语言,甚至有些人认为数据库就是SQL,SQL就是数据库。虽然这种观点是错误的,但是也确实从一个方面体现了这种面向结果的查询语言的重要性。
SQL语言:DDL、DML、DQL、DCL
-
数据定义语言(DDL)
DDL全称是Data Definition Language,即数据定义语言,定义语言就是定义关系模式、删除关系、修改关系模式以及创建数据库中的各种对象,比如表、聚簇、索引、视图、函数、存储过程和触发器等等。
数据定义语言是由SQL语言集中负责数据结构定义与数据库对象定义的语言,并且由CREATE、ALTER、DROP和TRUNCATE四个语法组成。
-
数据操纵语言(DML)
数据操纵语言全称是Data Manipulation Language,主要是进行插入元组、删除元组、修改元组的操作。主要有insert、update、delete语法组成。
-
数据查询语言(DQL)
数据查询语言全称是Data Query Language,所以是用来进行数据库中数据的查询的,即最常用的select语句
-
数据控制语言(DCL)
数据控制语言:Data Control Language。用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,能够对数据库进行监视。
比如常见的授权、取消授权、回滚、提交等等操作。
SQL语言的基本定义
(1)基本数据类型:
类型 | 含义 |
char(n) | 存放固定长度的字符串,用户指定长度为n。如果没有使用n个长度则会在末尾添加空格。 |
varchar(n) | 可变长度的字符串,用户指定最大长度n。char的改进版,大多数情况下我们最好使用varchar。 |
int | 整数类型 |
smallint | 小整数类型 |
numeric(p,d) | 定点数,精度由用户指定。这个数有p位数字(包括一个符号位)d位在小数点右边。 |
real ,double precision | 浮点数和双精度浮点数。 |
float(n) | 精度至少位n位的浮点数 |
(2)特殊关键字:
类型 | 含义 | 示例 |
primary key | 主键,后面括号中是作为主键的属性 | primary key(student_id) |
foreign key references | 外键,括号中为外键,references后为外键的表 | foreign key(course_id) references Course |
not null | 不为空,前面为属性的定义 | name varchar(10) not null |
(3)SQL插入:
类型 | 含义 |
create table | 创建一张表 |
insert into…values | 向表中插入一条信息 |
delete from | 从表中删除一条信息 |
update…set…where | 在where的位置,更新内容为set的值 |
drop table | 删除表 |
alter table…add | 向表中添加某个属性 |
alter table…drop | 将表中的某个属性删除 |
SQL查询:(SQL中最重要的就是查询)
(1)单关系查询:(只一张表中的内容查询有关信息,不涉及其他的表)
类型 | 含义 |
select | 表示要查找出的表所含有的属性 |
from | 表示要操作的表 |
where | 判断条件,根据该判断条件选择信息 |
distinct | 在select后加入关键字distinct表示将结果去重 |
all | 在select后加入关键字all表示不去重(默认) |
and | 在where中使用and表示将判断条件连接起来 |
or | 在where中使用or表示判断条件多选一 |
not | 在where中使用not表示判断条件取反 |
(2)多关系查询:(多个表中通过一些操作查找出希望的信息)
A,B | 在from后面通过逗号连接多张表,表示将这些表进行笛卡儿积运算 |
natural join | 将natural join关键字前后的两张表进行自然连接运算 |
A join B using(c) | 将A和B通过c属性自然连接 |
A inner join B on | 内连接,只返回符合条件的行 |
A left join B on | 左连接,包含左边所有行,如果左边某行在右边无匹配,则结果为空(null) |
A right join B on | 右连接,包含右边所有行,如果右边某行在左边无匹配,则结果为空(null) |
A full join B on | 全外连接,包含full join左右两表中所有的行,如果左边某行在右边无匹配,则结果为空(null),如果右边某行在左边无匹配,则结果为空(null) |
A cross join B on | 交叉连接,没有where子句的交叉连接将产生连接所涉及的表的笛卡尔积(笛卡尔积是第一个表行数乘以第二个表行数积的大小) |
外连接(左连接、右连接、完全外连接)| outer join(left join、right join、full join)
内连接 | inner join
交叉连接 | cross join
(补充:笛卡尔积)
下面举例说明多关系表连接案例:
Student表 course表
(1)A left join B on
select * from student left join course on student.ID=course.ID
(2)A right join B on
select * from student right join course on student.ID=course.ID
(3) A full join B on
select * from student full join course on student.ID=course.ID
(4) A inner join B on
select * from student inner join course on student.ID=course.ID
(5) A cross join B on
select * from student inner join course on student.ID=course.ID
(3)附加运算查询
类型 | 含义 |
as | 将as前的关系起一个别名,在此语句中,可以用别名来代指这个表 |
* | 在select中通过: “表名.*” 来表示查找出这个表中所有的属性 |
order by | 让查询结果中的信息按照给定的属性排序(默认升序,上小下大) |
desc | 在order by之后的属性后使用,表示采用降序排序 |
asc | 在order by之后的属性后使用,表示采用升序排序(默认) |
between | 在where中使用between表示一个数在两个数值之间取值 |
not between | between的反义词,在两个数之外取值 |
union/union all | 将两个SQL语句做并运算,并且自动去重,添加all表示不去重 |
intersect/intersect all | 将两个SQL语句做交运算,并且自动去重,添加all表示不去重 |
except/except all | 将两个SQL语句做差运算,并且自动去重,添加all表示不去重 |
is null | 在where中使用is null表示这个值是空值 |
is not null | 在where中使用is not null表示这个值不是空值 |
(4)聚集函数运算查询
类型 | 含义 |
avg | 平均值 |
min | 最小值 |
max | 最大值 |
sum | 总和 |
count | 计数 |
distinct | 表示将distinct后的属性去重 |
group by | 将在group by上取值相同的信息分在一个组里 |
having | 对group by产生的分组进行筛选,可以使用聚集函数 |