【MySQL基礎】04數據查詢語言DQL(上)

目錄

一、數據查詢語言DQL:用於查詢數據庫表中的記錄。

二、運算符

三、select語句書寫順序與執行順序

四、單表查詢


一、數據查詢語言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可以。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章