目录

数据库书摘 01 - 《SQL 必知必会》

涉及资源列表:
《SQL必知必会》(豆瓣)
PDF 资源(GitHub)

数据查询语句

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
SELECT [DISTINCT/ALL]
  <select_list>
FROM
  <left_table> <join_type> JOIN <right_table>
  ON <join_condition>
WHERE
  <where_condition>
GROUP BY
  <group_by_list>
HAVING
  <having_condition>
ORDER BY
  <sorting_columns> [ASC|DESC]
LIMIT
  <offset_start, row_length>

易错点

  • 多条 SQL 语句必须以分号(;)作分隔
  • 注释语法 – 和 /**/,#大多数不行
  • 检索数据(SELECTLIMITORDER BY
    • DISTINCT 作用于所有的列,而不仅仅是跟在其后的那一列
    • 与 DISTINCT 不同,DESC 关键字只应用到直接位于其前面的列名
  • 过滤数据(WHERE
    • 由于 AND 操作符比 OR 操作符优先级高,需要使用圆括号对操作符进行明确分组
    • IN 操作符最大的优点在于可以包含其他 SELECT 语句
    • 通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符搜索
    • 通配符 % 代表匹配任意字符,甚至可以匹配 0 个字符,但不可匹配 null
  • 计算字段
    • CONUT() 函数中如果指定列名,则会忽略指定列的值为空 NULL 的行;如果用 * 则不忽略
    • 对于文本数据,MIN() 返回排序后最前面的行, MAX() 返回排序后最后面的行
  • 汇总数据
    • 5个聚集函数(AVG、COUNT、MIN、MAX、SUM)都可用于指定 DISTINCT 参数的列,但唯独 COUNT(*) 不可以
  • 分组数据(GROUP BYHAVING
    • 分组统计: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 操作符
  • 函数(文本、数值、时间、系统、聚集、窗口)

数据操作语言

数据定义语言