基于Mysql的SQL语法 技巧 面试必会!
!重要 select子句执行顺序
select distinct(去重)
from
join
on
where
group by
having
union
order by
limit
根据执行顺序去学习语法,形成框架,事半功倍,其实内容并不多
本文仅提供一些常见的需要注意的点!
join
inner join 内连接(等值):可以与Where子句相互转换
left join 左连接:读取左边数据表的全部数据,即便右边表无对应数据。
right join 右连接:读取右边数据表的全部数据,即便左边边表无对应数据。
GROUP BY
注意!!!
group by 必须出现在where之后 order by 之前
SELECT子句中的列名必须为分组列或列函数
在SELECT语句中指定的每个列名也在GROUP BY子句中提到。未在这两个地方提到的列名将产生错误。
tips:分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句。
having
HAVING 子句是用來取代 WHERE 搭配聚合函數 (aggregate function) 進行條件查詢,因為 WHERE 不能與聚合函數一起使用。
常见的聚合函数:AVG()、COUNT()、MAX()、MIN()、SUM()
SELECT column_name(s), aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name1, column_name2...
HAVING aggregate_function(column_name) operator value;
查询订单price总和<1000的顾客
| O_Id | Price | Customer |
|---|---|---|
| 1 | 1000 | 張一 |
| 2 | 2000 | 王二 |
| 3 | 500 | 李三 |
| 4 | 1300 | 張一 |
| 5 | 1800 | 王二 |
SELECT Customer, SUM(Price) FROM orders
GROUP BY Customer
HAVING SUM(Price)<1000;
ORDER BY
SELECT table_column1, table_column2...
FROM table_name
ORDER BY column_name1 ASC|DESC, column_name2 ASC|DESC...
ASC(默认)【ascend 上升】:从小到大
DESC 【descend 下降】:从大到小
union
在大多数开发中,使用一条SELECT查询就会返回一个结果集。如果,我们想一次性查询多条SQL语句,并将每一条SELECT查询的结果合并成一个结果集返回。就需要用到Union操作符,将多个SELECT语句组合起来,这种查询被称为并(Union)或者复合查询。
组合查询适用于下面两种情境中:
- 从多个表中查询出相似结构的数据,并且返回一个结果集
- 从单个表中多次
SELECT查询,将结果合并成一个结果集返回。
语法规则
Union必须由两条或者两条以上的SELECT语句组成,语句之间使用Union链接。Union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)- 列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型
- union会默认去重,如果不需要去重,用union all
- 使用union时,只能使用一条order by对结果集排序,在最后一条select后
多表组合查询
大型项目中数据经常分布在不同的表,检索的时候需要组合查询出来。多表查询的时候,并不要求两个表完全相同,只需要你检索的字段结构相似就可以。
{{uploading-image-83288.png(uploading...)}}
可以增加一个别名来区分多表!
select posts_id,posts_name,posts_status,'users' as table_name from yy_posts
UNION
select user_id,user_nickname,user_status,'posts' as table_name from yy_user
{{uploading-image-343675.png(uploading...)}}

浙公网安备 33010602011771号