SQL單表查詢語句總結

bee11i發表於2020-11-10

關於SQL單表查詢語句總結:


一    基礎查詢:

1.    SELECT 欄位名.... FROM 表名;
2.    SELECT * FROM 表名;

二    條件查詢

(第一個欄位名可以為*,代表從全部資料中查詢)

1.    SELECT 欄位名... FROM 表名
    WHERE 條件表示式;

2.    SELECT 欄位名... FROM 表名
    WHERE 條件表示式 AND 條件表示式....;

3.    SELECT 欄位名... FROM 表名
    WHERE 條件表示式 OR 條件表示式....;
    (或者是OR和AND一起靈活使用)

三    關鍵字查詢/精確查詢

(第一個欄位名可以為*,代表從全部資料中查詢)
1.    IN或者NOT IN
    SELECT 欄位名... FROM 表名
    WHERE 欄位名 [NOT] IN (元素....);
    元素是限定條件,查詢包含某些元素的資料或者是不包含某些元素的資料;

2.    IS NULL 或者 IS NOT NULL
    SELECT 欄位名... FROM 表名
    WHERE 欄位名 [NOT] IN NULL;
    查詢欄位為空或者不為空的資料;

3.    BETWEEN AND    
    SELECT 欄位名... FROM 表名
    WHERE 欄位名 [NOT] BETWEEN 值1 AND 值2;
    查詢某個欄位的值在或不在某個範圍內的資料;

四    模糊查詢

1.    LIKE
    SELECT 欄位名... FROM 表名
    WHERE 欄位名 [NOT] LIKE ‘匹配字串’;(這個字串可以是一個普通的字串,也可    以是包含百分號(%)和下畫線(_)的通配字串,其中百分號表示任意0~n個字元,下劃    線表示任意一個字元。)
例子:
    查詢姓名由5個字母構成的學生的資訊
    mysql> SELECT * FROM stu
          -> WHERE sname LIKE '_____';
            
    查詢姓名由5個字母構成,並且第5個字母為i的學生的資訊
    mysql> SELECT * FROM stu
          -> WHERE sname LIKE '____i';

    查詢姓名以z開頭的學生的資訊
    mysql> SELECT * FROM stu
          -> WHERE sname LIKE 'z%';

    查詢姓名第二個字母為i的學生的資訊
    mysql> SELECT * FROM stu
          -> WHERE sname LIKE '_i%';

    查詢姓名中包含a的學生的資訊
    mysql> SELECT * FROM stu
          -> WHERE sname LIKE '%a%';

2.    DISTINCT(用於去除重複資料)
     SELECT DISTINCT 欄位名 FROM 表名;
例子:    查詢所有員工的月薪,並且去重。
    SELECT DISTINCT sal FROM emp;

五    高階查詢


1.    排序查詢
    SELECT 欄位.... FROM 表名
    ORDER BY 欄位名.... [ASC|DESC];(ORDER BY關鍵字後的欄位名錶示指定排序的欄位,    ASC代表按升序排序,DESC代表按降序排序,如果不寫,預設按升序排序)
    (如果按多個欄位排序,則優先按ORDER BY後排的靠前的欄位排序)
例子:    查詢所有學生記錄,按年齡升序排序
    mysql> SELECT * FROM stu
          -> ORDER BY age ASC;
    或mysql> SELECT * FROM stu
          -> ORDER BY age ASC;
    
2.     聚合函式
    MySQL提供了一系列函式實現資料統計,也稱為聚合函式。

1)    COUNT()函式
    SELECT COUNT (*|1|列名) FROM 表名;
    (該函式有三個可選引數,COUNT(*)是返回行數,包括NULL;
     COUNT(列名)是返回特定列的值具有的行數,不包括NULL;
     COUNT(1)與COUNT(*)的返回結果一樣,不過資料表沒有主鍵.)
例子:
    查詢員工表中的記錄數
    mysql> SELECT COUNT (*) FROM emp;

    查詢員工中有獎金的人數
    mysql> SELECT COUNT (comn)  AS total FROM emp;

    查詢員工表中月薪大於2500元的人數
    mysql> SELECT COUNT (*) AS total FROM emp
          -> WHERE sal > 2500;
    
    IFNULL()函式,可以判斷欄位是否為NULL,若為NULL,則可以將NULL替換為數值0;
例子:
    查詢月薪與獎金之和大於2500的人數
    mysql> SELECT COUNT (*) AS total FROM emp
          -> WHERE sal+IFNULL(comn,0)> 2500;
    
2)    SUM()函式
    用於計算指定列的數值和,若型別不是資料型別,則計算結果是0
    SELECT SUM(欄位名) FROM 表名;
例子:
    查詢員工表中所有員工的月薪和
    mysql> SELECT SUM(sal) FROM emp;
    查詢員工表中所有員工的月薪加獎金的和,查詢出的列名指定為total
    mysql> SELECT SUM(sal+IFNULL(comn,0)) AS total FROM emp;


3)    AVG()函式
    用於計算指定列的平均值,若型別不是資料型別,則計算結果是0
    SELECT AVG(欄位名) FROM 表名;
例子:
    查詢員工表中所有員工的平均月薪
    mysql> SELECT AVG(sal) FROM emp;

4)    MAX()函式
    用於計算指定列的最大值,如果指定列是字串型別,那麼使用字串排序運算
    SELECT MAX(欄位名) FROM 表名;

5)    MIN()函式
    用於計算指定列的最小值,如果指定列是字串型別,那麼使用字串排序運算
    SELECT MIN(欄位名) FROM 表名;

六    分組查詢


1.    GROUP BY
    查詢資料時需要按一定的類別進行統計
    例子:
    查詢員工表中每個部門編號以及每個部門工資大於1500元的人數
    mysql> SELECT deptno,COUNT (*)  FROM emp
          -> WHERE sal>1500
          -> GROUP BY deptno;

2.    HAVING子句
    用於在分組後對資料進行過濾
    SELECT 欄位名.... FROM 表名
    GROUP BY 欄位名..... [HAVING 條件表示式];
例子:
    查詢員工表中工資總和大於9000元的部門編號以及工資和
    mysql> SELECT deptno,SUM(sal)  FROM emp
          -> GROUP BY deptno;    
          -> HAVING SUM(sal) > 9000;
    過程,先分組查詢每個部門編號的工資和,再過濾出工資和大於9000元的部門

3.    LIMIT分頁
    用於限制查詢結果的數量
    SELECT 欄位名.... FROM 表名
    LIMIT [M,]N;
    (第一個引數m可選代表開始索引,預設值為0,代表第一條記錄;第二個引數n必選,代表    從第m+1條記錄開始取n條記錄)
例子:
    查詢學生表中從第三條開始的記錄,總共查詢五條記錄
    mysql> SELECT * FROM stu LIMIT 2,5;

 

 

 

 

 

 

 

 

相關文章