完整 SELECT 查询语句

一、完整 SELECT 查询语句

Complete SELECT query 
SELECT DISTINCT column, AGG_FUNC(column_or_expression), ... 
FROM mytable 
	JOIN another_table 
	ON mytable.column = another_table.column 
	WHERE constraint_expression 
	GROUP BY column 
	HAVING constraint_expression 
	ORDER BY column ASC/DESC 
	LIMIT count OFFSET count;

二、SELECT 语句执行顺序

2.1 FROM and JOIN s

确定正在查询的数据的总工作集。
在底层创建临时表,其中包含正在连接的表的所有列和行。

2.2 WHERE

一旦有了数据的总工作集,第一个执行的就是 WHERE 约束,该约束将被应用到单个的行上,丢弃不符合约束的行。

2.3 GROUP BY

WHERE 约束后的其余行,根据GROUP BY子句中指定的列中的公共值进行分组。
GROUP BY 常配合聚合函数一起使用。

select a from mytable group by a;
select a, sum(*) from mytable group by a;
select a, avg(b) from mytable group by a,c;

注意:这里有一点需要说明一下,多个字段进行分组时,需要将 a 和 c 看成一个整体,只要是 a 和 c 相同的可以分成一组;如果只是 a 相同, c 不同就不是一组。

2.4 HAVING

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以筛选分组后的各组数据。

2.5 SELECT

从表或视图中查询数据。

2.6 DISTINCT

用于返回唯一不同的值。

# DISTINCT 单列
select DISTINCT a from mytable;

# DISTINCT 多列
select distinct a,b,c from mytable;
select a,b,c from mytable group by a,b,c;

注意:DISTINCT 是同时作用到 a,b,c 三个字段,即“a+b+c”。

2.7 ORDER BY

用于对结果集按照一个列或者多个列进行排序。

SELECT * FROM mytable ORDER BY a, b;

order by A,B        这个时候都是默认按升序排列
order by A desc,B   这个时候 A 降序,B 升序排列
order by A ,B desc  这个时候 A 升序,B 降序排列

注意:

  1. ORDER BY 多列的时候,先按照第一个 column 排序,在按照第二个 column 排序;
  2. ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC;
  3. ORDER BY 多列时, desc 或者 asc 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序。
2.8 LIMIT / OFFSET
  1. Limit 后面可接受一个参数或者两个参数;当接受一个参数count时,表示返回的结果集最多有 count 条。
  2. Limit 后面使用双参数时,第一个参数表示偏移量,即 offset,表示从几个记录后开始返回,第二个参数表示最大数量,即 count,表示最多返回几个记录。我们合起来可以理解为,跳过一定数量(offset)的记录,返回最多 count 个记录。
SELECT [col] FROM [table_name] LIMIT [count];
SELECT [col] FROM [table_name] LIMIT [offset],[count];
  1. Offset 必须与 Limit 搭配使用,且二者都必须是单参数形式。Limit 和 Offset 搭配的作用等同于 Limit 使用双参数。
SELECT [col] FROM [table_name] LIMIT [count] OFFSET [offset];
  1. Limit 和 Offset 常搭配用于数据分页,是很多分页工具的核心操作。
    Limit 其实完全可以替代 Limit + Offset,但考虑到SQL语句的可读性,Limit + Offset的写法更好。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值