基于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)或者复合查询。

组合查询适用于下面两种情境中:

  1. 从多个表中查询出相似结构的数据,并且返回一个结果集
  2. 从单个表中多次SELECT查询,将结果合并成一个结果集返回。

语法规则

  1. Union必须由两条或者两条以上的SELECT语句组成,语句之间使用Union链接。
  2. Union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)
  3. 列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型
  4. union会默认去重,如果不需要去重,用union all
  5. 使用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...)}}

posted @ 2022-02-25 17:14  peterrrr  阅读(71)  评论(0)    收藏  举报