MySQL 笔记 (8) SELECT

语法

1
SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合计函数] -> HAVING -> ORDER BY -> LIMIT

select_expr

  • 可以用 表示所有字段。
    `select
    from tb;`
  • 可以使用表达式(计算公式、函数调用、字段也是个表达式)
    select stu, 29+25, now() from tb;
  • 可以为每个列使用别名。适用于简化列标识,避免多个列标识符重复。
    • 使用 as 关键字,也可省略 as.
      select stu+10 as add10 from tb;

FROM 子句

用于标识查询来源。

  • 可以为表起别名。使用as关键字。

    SELECT * FROM tb1 AS tt, tb2 AS bb;

  • from子句后,可以同时出现多个表。

    • 多个表会横向叠加到一起,而数据会形成一个笛卡尔积。
      SELECT * FROM tb1, tb2;
  • 向优化符提示如何选择索引

1
2
3
USE INDEXIGNORE INDEXFORCE INDEX
SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3;
SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;

WHERE 子句

  • 从from获得的数据源中进行筛选。
  • 整型1表示真,0表示假。
  • 表达式由运算符和运算数组成。
    • 运算数:变量(字段)、值、函数返回值
    • 运算符:
      =, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
      in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
      is/is not 加上ture/false/unknown,检验某个值的真假
      <=>与<>功能相同,<=>可用于null比较

GROUP BY 子句, 分组子句

GROUP BY 字段/别名 [排序方式]

分组后会进行排序。

  • 升序:ASC,
  • 降序:DESC

以下[合计函数]需配合 GROUP BY 使用:

  • count 返回不同的非NULL值数目 count(*)、count(字段)
  • sum 求和
  • max 求最大值
  • min 求最小值
  • avg 求平均值
  • group_concat 返回带有来自一个组的连接的非NULL值的字符串结果。组内字符串连接。

HAVING 子句,条件子句

与 where 功能、用法相同,执行时机不同。

  • where 在开始时执行检测数据,对原数据进行过滤。
  • having 对筛选出的结果再次进行过滤。
  • having 字段必须是查询出来的,where 字段必须是数据表存在的。
  • where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。
  • where 不可以使用合计函数。一般需用合计函数才会用 having

SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。

ORDER BY 子句,排序子句

order by 排序字段/别名 排序方式 [,排序字段/别名 排序方式]...

  • 升序:ASC
  • 降序:DESC

支持多个字段的排序。

LIMIT 子句,限制结果数量子句

仅对处理好的结果进行数量限制。将处理好的结果的看作是一个集合,按照记录出现的顺序,索引从0开始。

limit 起始位置, 获取条数

省略第一个参数,表示从索引0开始。limit 获取条数

DISTINCT, ALL 选项

distinct 去除重复记录
默认为 all, 全部记录

UNION

将多个select查询的结果组合成一个结果集合。

SELECT ... UNION [ALL|DISTINCT] SELECT ...

默认 DISTINCT 方式,即所有返回的行都是唯一的

建议,对每个SELECT查询加上小括号包裹。
ORDER BY 排序时,需加上 LIMIT 进行结合。
需要各select查询的字段数量一样。
每个select查询的字段列表(数量、类型)应一致,因为结果中的字段名以第一条select语句为准。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2021 朝着牛逼的道路一路狂奔 All Rights Reserved.

访客数 : | 访问量 :