文章目录
- 单表查询
- SELECT语句
- WHERE子句
- 对查询结果排序(ORDER BY句)
- 聚集函数及GROUP BY子句
- 连接查询
- 内连接(INNER JOIN)
- (1)等值连接
- (2)自然连接
- 外连接(OUTER JOIN)
- (1)左外连接(LEFT OUTER JOIN)
- (2)右外连接(RIGHT OUTER JOIN)
- (3)全外连接(FULL OUTER JOIN)
- 自连接(SELF JOIN)
- 交叉连接(CROSS JOIN)
- 嵌套查询
- 子查询的谓词
- 集合查询
- 综合练习实例
单表查询
SELECT:投影运算(All所有是默认的)后一般跟分组属性+集函数, DISTINCT去掉重复列。0
如查找年龄时有多个年龄可用DISTINCT去掉年龄列中重复的
TOP输出前几如(TOP 20 percent:输出前20%)
FROM<来自于哪>
WHERE<元组选择条件>
SELECT语句
SELECT:投影运算(All所有是默认的)后一般跟分组属性+集函数,DISTINCT去掉重复列
如查找年龄时有多个年龄可用DISTINCT去掉年龄列中重复的
TOP输出前几如(TOP 20 percent:输出前20%)
WHERE子句
<>是不等于的意思
判断是否为空:IS NULL,不能用等于
模糊查询可用字符匹配,如下
- 当匹配串中有下划线,使用换码字符,在这个下划线前加入\且句子后加ESCAPE‘\’
- is NULL中的is不能用=替代,AND优先级高于OR可用括号
- 两个条件关系为与
对查询结果排序(ORDER BY句)
- 用ORDER BY对选择结果排序{ASC为升序,DESC为降序(默认升序)}
聚集函数及GROUP BY子句
DISTINCT:去掉重复行
- 聚集函数作用于每组而不作用于全体
GROUP BY:对查询结果按指定列值分组,将属性列值相等的为一个组,通常会在每组中作用聚集函数
HAVING:对分组后进行选择,满足条件的输出。不能用在WHERE中
WHERE作用于记录,HAVING作用于分组
as:(修改列名),或直接加别名在后
连接查询
两种语法形式:ANSI和SQL Server形式(建议用ANSI各种版本通用)
内连接(INNER JOIN)
普通连接(内连接)操作只输出满足连接条件的元组
(1)等值连接
字段类型必须可比
使用“=”
(2)自然连接
等值连接连接的基础上去掉重复目标列(SELECT后跟具体属性),如上图中读者卡号出现了两次
如上仅出现读者表的类别编号
外连接(OUTER JOIN)
外连接以指定表为连接主体,将主体表中不满足连接条件的元组一并输出
(1)左外连接(LEFT OUTER JOIN)
保留左表中的非匹配元组,及右表中符合条件的元组,其中不匹配的分量在查询结果中显示为NULL。
左、右外连接中的OUTER关键字可以省略
(2)右外连接(RIGHT OUTER JOIN)
保留右表中的非匹配元组,及左表中符合条件的元组
(3)全外连接(FULL OUTER JOIN)
查询结果中查询匹配和非匹配的所有记录,是左外连接和右外连接的组合。其中满足条件的记录仅显示一次,不满足条件的分量显示为NULL
自连接(SELF JOIN)
自己与自己连接,一个表内自身的连接操作
交叉连接(CROSS JOIN)
即关系代数的笛卡尔积运算,去掉ON之后的连接条件,则为交叉连接
嵌套查询
将一个查询块嵌在另一个的WHERE/HAVING中,排序语句ORDER BY句不能嵌套在里面
①不相关子查询:由里向外逐层处理
②相关子查询:取外层元组依次放到内层查,若满足条件为真,则返回到结果表中(从内到外)
父查询将表中每一条记录拿去与子查询结果比较,子查询返回True,父查询保留该行,子查询返回False父查询删除该行。父查询最后将得到的结果返回输出
子查询中,在得到的SC表中每一条记录依次查询判断其后的WHERE字句是否成立,成立返回True,否则返回False。
子查询的谓词
- 带有比较运算符的子查询:
格式:<字段名><比较符>(<子查询>) - 带有IN谓词的子查询
格式:<字段名>[NOT] IN (<子查询>) - 带有ANY或ALL谓词的子查询
- 带有EXISTS谓词的子查询
带有IN谓词查询的例子
使用ALL、ALL运算符的例子
ALL、ANY与集函数
[NOT] EXISTS(<子查询>)
EXISTS的查询在WHERE中一定要带上等于的条件,如下看例题
例子
例子
例子
例题
集合查询
将多个SElECT语句的查询结果再进行集合运算。
SQL的组合查询运算符有UNION(并操作)、INTERSECT(交操作)、EXCEPT(差操作)三种。
综合练习实例