1. 程式人生 > 其它 >MySQ--dql(資料查詢語言)--基礎查詢

MySQ--dql(資料查詢語言)--基礎查詢

技術標籤:MySQLmysql資料庫

文章目錄

分組函式

功能

用作統計使用,又稱為聚合函式或統計函式或組函式

分類

  • sum 求和、
  • avg 平均值、
  • max 最大值、
  • min 最小值、
  • count 計數(非空)

特點

  1. sum,avg一般用於處理數值型max,min,count可以處理任何型別
  2. 以上分組函式都忽略nul1值
  3. 可以和distinct搭配實現去重的運算
  4. count函式的單獨介紹一般使用count(*)用作統計行數
  5. 和分組函式一同查詢的欄位要求是group by後的欄位

條件查詢

使用WHERE 子句,將不滿足條件的行過濾掉,WHERE 子句緊隨 FROM 子句。

語法

  • select <結果> from <表名> where <條件>

比較查詢

  • = ------> 並非賦值, Eg: sex = ‘男’
  • != 或 <> ------> 不等於
  • < , > ------> 小於 , 大於
  • <= , >= ------> 小於等於 , 大於等於

邏輯查詢

  • and 多個條件同時成立 Eg: sex = ‘男’ and score > 60
  • or 多個條件滿足一個即可
  • not 配合is null 使用

模糊查詢

  • like – 是否匹配於一個模式 一般和萬用字元搭配使用,可以判斷字元型數值或數值型.
  • 萬用字元 – % 任意多個字元,包含0個字元 _ 任意單個字元
  • between and – 兩者之間,包含臨界值;
  • in – 判斷某欄位的值是否屬於in列表中的某一項
  • is null(為空的)或 IS NOT NULL(不為空的)

SELECT * FROM yhlz_tea WHERE tea_age BETWEEN 60 AND 100

-- in(值1,值2,值n) 在那個範圍內
SELECT * FROM yhlz_tea WHERE tea_num IN(0,6)

-- not in 不在不是
SELECT * FROM yhlz_tea WHERE tea_num NOT IN(0,6)

-- 性別不為空
SELECT * FROM yhlz_tea WHERE tea_sex IS NOT NULL
-- like % 匹配多個字元
SELECT * FROM yhlz_tea WHERE tea_name LIKE '牛%'

-- like _ 只能匹配一個
SELECT * FROM yhlz_tea WHERE tea_name LIKE '牛_'	
SELECT * FROM yhlz_tea WHERE tea_name LIKE '_奶'
SELECT * FROM yhlz_tea WHERE tea_name LIKE '%奶'

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述

union查詢

UNION用的比較多,union all是直接連線,取到得是所有值,記錄可能有重複 union 是取唯一值,記錄沒有重複

union語法

[SQL 語句 1]
UNION
[SQL 語句 2]

SELECT tea_name,tea_sex FROM yhlz_tea WHERE tea_num > 5
UNION
SELECT tea_name,tea_sex FROM yhlz_tea WHERE tea_age > 60

在這裡插入圖片描述

union all 語法

[SQL 語句 1]
UNION ALL
[SQL 語句 2]

SELECT tea_name,tea_sex FROM yhlz_tea WHERE tea_num > 5
UNION ALL
SELECT tea_name,tea_sex FROM yhlz_tea WHERE tea_age > 60

在這裡插入圖片描述

union 和 union all效率對比

  1. 對重複結果的處理:UNION在進行錶鏈接後會篩選掉重複的記錄,Union All不會去除重複記錄。
  2. 對排序的處理:Union將會按照欄位的順序進行排序;UNION ALL只是簡單的將兩個結果合併後就返回。

從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複資料且不需要排序時的話,那麼就使用UNION ALL。

排序查詢

查詢結果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC

  • asc代表的是升序,desc代表的是降序,如果不寫,預設是升序
  • order by子句中可以支援單個欄位、多個欄位、表示式、函式、別名

-- 順序 asc 
SELECT tea_age FROM yhlz_tea WHERE tea_sex = '男' ORDER BY tea_num

-- 逆序  desc
SELECT tea_age FROM yhlz_tea WHERE tea_sex = '男' ORDER BY tea_num DESC

1.順序
在這裡插入圖片描述
2.逆序
在這裡插入圖片描述

數量限制查詢

limit子句:對查詢的顯示結果限制數目 (sql語句最末尾位置)
語句 : SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset;

  • SELECT * FROM table LIMIT 5;
  • SELECT * from table LIMIT 0,5;
  • SELECT * FROM table LIMIT 2 OFFSET 3;

limit 後面跟一個引數是取多長的量
limit 後面跟倆個引數時,第一個引數表示要眺過的量/ 從第幾個開始,第二個引數是,要取的量
limit 和 offset組合時,limit後的數表示要取的量,offset後面的數字表示要跳過的量/從第幾個開始

原表資訊
在這裡插入圖片描述

1.limit n

SELECT * FROM stu LIMIT 3

在這裡插入圖片描述

SELECT * FROM stu LIMIT 9

在這裡插入圖片描述

SELECT * FROM stu LIMIT 6

在這裡插入圖片描述

2.limit m,n

SELECT * FROM stu LIMIT 0,3
表示跳過0個/從第0個開始,取3個

在這裡插入圖片描述

SELECT * FROM stu LIMIT 3,3
表示跳過3個/從第3個開始,取3個

在這裡插入圖片描述

SELECT * FROM stu LIMIT 6,3
表示跳過6個/從第6個開始,取3個

在這裡插入圖片描述

3.limit m offset n

SELECT * FROM stu LIMIT 3 OFFSET 0
表示跳過0個/從第0個開始,取3個

在這裡插入圖片描述

SELECT * FROM stu LIMIT 3 OFFSET 3
表示跳過3個/從第3個開始,取3個

在這裡插入圖片描述

SELECT * FROM stu LIMIT 3 OFFSET 6
表示跳過6個/從第6個開始取3個

在這裡插入圖片描述

分組查詢

語法

select 分組函式,列(要求出現在group by的後面)
from 表
[where 篩選條件]
group by 分組的列表
[having 分組後的篩選]
[order by 子句]

注意:查詢列表比較特殊,要求是分組函式和group by後出現的欄位
分組查詢中的篩選條件分為兩類:

                   資料來源                     源位置                  關鍵字
分組前篩選           原始表               group by子句的前面            where
分組後篩選       分組後的結果集            group by的後面               having

Eg:

-- 查詢性別人數>2 是哪個性別
SELECT tea_sex,COUNT(*) AS sex
FROM yhlz_tea 
WHERE tea_num > 3 
GROUP BY tea_sex 
HAVING sex > 2 
ORDER BY sex ASC
LIMIT 1

在這裡插入圖片描述

子查詢

出現在其他語句中的select語句,稱為子查詢或內查詢;外部的查詢語句,稱為主查詢或外查詢.

分類

按子查詢出現的位置

  • select後面:僅僅支援標量子查詢
  • from後面:支援表子查詢
  • where或having後面:支援標量子查詢,列子查詢,行子查詢(較少)
  • exists後面(相關子查詢):支援表子查詢

按功能、結果集的行列數不同

  • 標量子查詢(結果集只有一行一列)
  • 列子查詢(結果集只有一列多行)
  • 行子查詢(結果集有一行多列)
  • 表子查詢(結果集一般為多行多列)
-- 標量子查詢  一行一列
SELECT stu_name,(SELECT NOW()),stu_num FROM yhlz_stu

-- 列子查詢  一列多行
SELECT * FROM yhlz_stu WHERE stu_grade IN(SELECT stu_grade FROM yhlz_stu WHERE stu_grade > 50)

-- 行子查詢   一行多列  學號最大,成績最大
SELECT * FROM yhlz_stu WHERE (stu_num,stu_grade) = (SELECT MAX(stu_num),MAX(stu_grade)FROM yhlz_stu)

-- 表子查詢  多行多列  查詢結果當作一章表
SELECT * FROM
(SELECT stu_sex,COUNT(*) AS c FROM yhlz_stu GROUP BY stu_sex) AS t
WHERE t.c > 2

原表資訊
在這裡插入圖片描述

1.標量子查詢
在這裡插入圖片描述
2. 列子查詢
在這裡插入圖片描述
3.行子查詢
在這裡插入圖片描述
4.表子查詢
在這裡插入圖片描述