SQL DML,数据操纵语言,分成数据查询和数据更新两类。而数据更新分为插入、删除和修改三种操作。
SQL DDL是对表结构的构建操作,SQL DML是对已经构建好的表结构内增加数据的操作。对于整个数据库来说,前者是框架,后者是内容。
先来看查询:
select语句基本句法: select<属性>
from<关系>
where<条件表达式>
where子句的条件表达式中的运算符:
算术比较运算符:<,<=,>,>=,=,<>或!=
逻辑运算符:and,or,not
集合成员资格运算符:in,not in
谓词:exists(存在量词),all,some,unique
聚合函数:avg(平均值),min(最小值),max(最大值),sum(和),count(计数)
另一个select子句:select子句嵌套
select子句的查询结果可以进行集合的并、交、差操作。
集合运算符:union(并),intersect(交),except(差)
关键是where子句中条件表达式可以很复杂,因此select句型能表达所有的关系代数表达式。
select语句三种写法:连接查询、嵌套查询、带存在量词的嵌套查询
1、连接查询:select s.s#,sname
from s,sc
where s.s#=sc.s# and c#='c2'
先对from后的基本表s和sc做笛卡尔积操作,然后再做等值连接、选择和投影等操作。
2、嵌套查询:select s#,sname
from s
where s# in(select s#
from sc
where c#='c2')
嵌套的子查询先执行,然后执行外层查询。
查询涉及多个基本表时用嵌套结构逐次求解层次分明,具有结构程序设计特点。
嵌套查询的执行效率比连接查询的笛卡尔积效率高。
在嵌套查询中,in是常用谓词,结构“元组in(集合)”,表示元组在集合内。
select s#,sname
from s
where 'c2' in(select c#
from sc
where s#=s.s#)
3、使用存在量词的嵌套查询:select s#,sname
from s
where exists(select *
from sc
where sc.s#=s.s# and c#='c2')
谓词exists表示存在量词符号,语义是内层查询的结果应该为非空(至少存在一个元组)。
select语句完整句法:select<目标表的列名或列表达式序列>
from<基本表名和(或)视图序列>
[where<行条件表达式>]
[group by<列名序列>]
[having<组条件表达式>]
[order by<列名[asc|desc]>,...]
(1)读取from子句中基本表、视图的数据,执行笛卡尔积操作
(2)选取满足where子句中给出的条件表达式的元组
(3)按group子句中指定列的值分组,同时提取满足having子句中组条件表达式的那些组
(4)按select子句中给出的列名或列表达式求值输出
(5)order子句对输出的目标表进行排序,按附加说明asc升序排列,或按desc降序排列。
select子句中,where子句称为“行条件子句”,group子句称为“分组子句”,having子句称为“组条件子句”,order子句称为“排序子句”。
与查询有关的,DDL中创建的索引、视图等,其功能仅限于查询时起作用。