文章目录
单表查询
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:(修改列名),或直接加别名在后
连接查询
内 连 接 ( I N N E R J O I N ) { ① 等 值 ② 自 然 ( 去 掉 重 复 列 ) 内连接(INNER~~JOIN)\begin{cases} ①等值\\ ②自然(去掉重复列)\end{cases} 内连接(INNER JOIN){①等值②自然(去掉重复列)
外 连 接 ( O U T E R J O I N ) 保 留 某 表 非 匹 配 连 接 { ① 左 外 ② 右 外 ③ 全 外 外连接(OUTER~~JOIN)保留某表非匹配连接\begin{cases} ①左外\\ ②右外\\③全外\end{cases} 外连接(OUTER JOIN)保留某表非匹配连接⎩⎪⎨⎪⎧①左外②右外③全外
自 连 接 S E L F J O I N 自连接SELF~~JOIN 自连接SELF JOIN
交 叉 连 接 C R O S S J O I N 即 笛 卡 尔 积 运 算 交叉连接CROSS~~JOIN即笛卡尔积运算 交叉连接CROSS JOIN即笛卡尔积运算
两种语法形式: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(差操作)三种。