目錄
一、數據查詢語言DQL:用於查詢數據庫表中的記錄。
二、運算符
【注意】
- Between … and …:是包括兩端值
三、select語句書寫順序與執行順序
1、select語句書寫順序:
select -> from -> [left | right | inner] join ->on -> where -> group by -> having -> order by -> limit
【select和from是一定要寫的,其他關鍵詞根據實際需求寫】
2、單表查詢執行順序:
From -> where -> group by -> having -> select -> order by ->limit
【例】
- Select deptno部門, avg(sal) 平均工資from emp group by deptno having平均工資>3000;
(在mysql軟件中,having可以使用select命的新名,而其他軟件則不可以。)
- Select hour(paytime_new) 時間段, sum(otherpay) 時間段銷售額, sum(sum(otherpay)) over(order by hour(paytime_new)) 累計銷售額 from orderinfo group by hour(paytime_new) order by hour(paytime_new);
- Select distinct hour(paytime_new) 時間段, sum(otherpay) over(partition by hour(paytime_new) order by hour(paytime_new)) 累計銷售額 from orderinfo order by hour(paytime_new);
(這兩者返回回來的累計銷售額值是一樣的,他們的區別在於執行順序不同,第一種寫法先執行from-->groupby分組後再執行 select中的函數,所以要實現求分組後的累計和就需要sum()裏嵌套一個分組後的求和值,如果在over()里加partitionby分組也是無法實現,因爲over是根據原錶行進行計算,而不是根據groupby後的行進行計算。)
3、多表查詢執行順序:
From -> on ->[left | right | inner] join -> where -> select
四、單表查詢
【from】
1、全表查詢:select * from 表名;
2、查詢指定列:select 字段1[,字段2,…] from 表名;
【備註】別名的設置:select 字段名[ as] 列別名 from 原表名 [as ]表別名;
3、查詢不重複的記錄:select distinct 字段名 from 表名;
【where】
4、條件查詢:select 字段1[,字段2,…] from 表名 where 查詢條件;
5、空值查詢:select 字段1[,字段2,…] from 表名 where 空值字段 is[ not] null;
6、模糊查詢: select 字段1[,字段2,…] from 表名 where 字符串字段[ not] like 通配符;
【注意】
- 百分號(%)通配符:匹配多個字符(0或多個字符)
- 下劃線(_)通配符:匹配一個字符
【order by】
7、查詢結果排序:select 字段1[,字段2,…] from 表名 order by 字段1[ 排序方向,字段2 排序方向,…];
【注意】多字段排序時,先按第一個字段排序,第一個字段值相同時再按第二個字段排序。指定排序方向:asc升序,desc降序(沒有指定排序方向時,默認是asc升序)
【limit】
8、限制查詢結果數量:select 字段1[,字段2,…] from 表名 limit [偏移量,] 行數;
【注意】
- limit接受一個或兩個數字參數,參數必須是一個整數常量。
- 第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目。如果只給定一個參數,默認偏移量爲0,這參數表示返回最大的記錄行數目。
- 偏移量:是相對於第一行來說,目標行位於第幾行減1。
【group by】
9、分組查詢:select 字段1[,字段2,…] from 表名[ where 查詢條件] group by 分組字段1[,分組字段2,…];
【注意】
- 將查詢結果按照一個或多個字段進行分組,字段值相同的爲一組,對每個組進行聚合計算。
- Group by 還有一個作用就是去重,效率和distinct差不多,寫了group by就不用寫distinct避免重複操作降低效率。
- 注意用group by時,select後跟多少個字段(除聚合函數外)group by後面也要跟相同的字段。
- 和group by 分組統計作用相同的,還有開窗函數,將會在函數章節詳細說明。
【having】
10、分組後篩選:select 字段1[,字段2,…] from 表名[ where 查詢條件][ group by 分組字段1[,分組字段2,…]] having 篩選條件;
【注意】where與having的區別:
- where子句作用於表,having子句作用於組。
- where條件查詢的作用域是針對數據表進行篩選,而having條件查詢則是對分組結果進行過濾。
- where在分組和聚合計算之前篩選行,而having 在分組和聚合之後篩選分組的行,因此where子句不能包含聚合函數,而having可以。