数据库书摘 01 - 《SQL 必知必会》
目录
涉及资源列表:
《SQL必知必会》(豆瓣)
PDF 资源(GitHub)
数据查询语句
|
|
易错点
- 多条 SQL 语句必须以分号(;)作分隔
- 注释语法 – 和 /**/,#大多数不行
- 检索数据(
SELECT
、LIMIT
、ORDER BY
)- DISTINCT 作用于所有的列,而不仅仅是跟在其后的那一列
- 与 DISTINCT 不同,DESC 关键字只应用到直接位于其前面的列名
- 过滤数据(
WHERE
)- 由于 AND 操作符比 OR 操作符优先级高,需要使用圆括号对操作符进行明确分组
- IN 操作符最大的优点在于可以包含其他 SELECT 语句
- 通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索
- 通配符 % 代表匹配任意字符,甚至可以匹配 0 个字符,但不可匹配 null
- 计算字段
- CONUT() 函数中如果指定列名,则会忽略指定列的值为空 NULL 的行;如果用 * 则不忽略
- 对于文本数据,MIN() 返回排序后最前面的行, MAX() 返回排序后最后面的行
- 汇总数据
- 5个聚集函数(AVG、COUNT、MIN、MAX、SUM)都可用于指定 DISTINCT 参数的列,但唯独 COUNT(*) 不可以
- 分组数据(
GROUP BY
、HAVING
)- 分组统计:GROUP BY 分组后进行聚集函数运算;分组排序:利用窗口函数及 OVER 子句
- 除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句中给出
- Having 支持所有 Where 操作符,区别在于 having 用于过滤分组,而 where 用于过滤行
- 子查询
- 两种使用方法
- WHERE 子句的 IN 操作符中
- 用来填充计算字段
- 作为子查询的 SELECT 语句只能查询单个列
- 两种使用方法
- 联结表:自联结的实现需要用到表别名
- 组合查询(
UNION
)- UNION 中的每个查询必须包括相同的列、表达式或聚集函数,但各个列不需要以相同的次序列出
- UNION 默认会从查询结果中自动去掉重复的行,如果想返回全部的行,可以使用 UNION ALL
- 在用 UNION 组合查询时,只能使用一条 ORDER BY 子句,它只能位于最后一条 SELECT 语句之后
- UNION 在需要组合多个表的数据时也很有用,当列名写法不一致时可以借助别名来实现组合查询,检索到一个结果集
背诵点
- 不同平台差异点:
- 限制结果语句 - 不同平台实现起来并不一样——TOP、FETCH、ROWNUM、LIMIT
- 通配符 #(%/*、_/?、[]、^/!)
- 拼接字段(+/||)
- 函数
- WHERE 子句的条件操作符(=、<>/!=、>、<、>=/!<、<=/!>、between、is null)、AND/OR/IN/NOT/LIKE 操作符
- 函数(文本、数值、时间、系统、聚集、窗口)