首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 查詢進階教程:基本、連接、子查詢、正則表達式完整實戰

     編輯:MySQL 綜合教學

MySQL 查詢進階教程:基本、連接、子查詢、正則表達式完整實戰

資料準備

CREATE TABLE STUDENT(
  STU_ID INT PRIMARY KEY,
  STU_NAME CHAR(10) NOT NULL,
  STU_AGE SMALLINT UNSIGNED NOT NULL,
  STU_SEX CHAR(2) NOT NULL
);
CREATE TABLE GRADE(
  STU_ID INT NOT NULL,
  STU_SCORE INT,
  FOREIGN KEY(STU_ID) REFERENCES STUDENT(STU_ID)
);
-- 插入 20 筆學生與成績測試數據(略)

一、基本查詢語法

SELECT 屬性列表
FROM 表名或視圖列表
[WHERE 條件表達式1]
[GROUP BY 屬性名1 [HAVING 條件表達式2]]
[ORDER BY 屬性名2 [ASC|DESC]];

二、單表查詢實例

  • 全表:SELECT * FROM STUDENT;
  • 條件:比較、IN、BETWEEN、邏輯 AND/OR/NOT、模糊 LIKE(%/_)、空值 IS NULL。

三、聚合查詢

  • GROUP BY 分組,GROUP_CONCAT 查看組內明細。
  • 五大聚合函數:MAX/MIN/SUM/AVG/COUNT。
  • HAVING 過濾分組:SELECT dept, AVG(sal) FROM emp GROUP BY dept HAVING AVG(sal) >= 6000;

四、多表連接查詢

類型語法結果集
隱式內連接FROM a,b WHERE a.id=b.id匹配行
顯式內連接FROM a INNER JOIN b ON a.id=b.id匹配行
左外連接FROM a LEFT JOIN b ON a.id=b.id左表全保留
右外連接FROM a RIGHT JOIN b ON a.id=b.id右表全保留
全外連接MySQL 不支援,用 UNION 模擬兩表全保留

範例:SELECT s.*, g.score FROM student s LEFT JOIN grade g ON s.id=g.stu_id;

五、子查詢

  • IN:SELECT * FROM student WHERE id IN (SELECT stu_id FROM grade WHERE score>85);
  • EXISTS:SELECT * FROM student WHERE EXISTS (SELECT 1 FROM grade WHERE score>=100);
  • ANY/SOME/ALL:SELECT * FROM student WHERE id >= ANY (SELECT stu_id FROM grade WHERE score<67);

六、合並查詢

  • UNION 去重合並,UNION ALL 直接合並(效能更好)。

七、排序與分頁

  • ORDER BY col ASC|DESC,ORDER BY RAND() 隨機。
  • LIMIT [offset,] count:LIMIT 5 前 5,LIMIT 10,5 第 11-15。

八、別名

  • 欄位:SELECT stu_id AS '學號', score AS '分數' FROM grade;
  • 表:SELECT s.name, g.score FROM student s JOIN grade g ON s.id=g.stu_id;

九、正則表達式 REGEXP

模式含義範例
^abc以 abc 開頭WHERE name REGEXP '^abc'
abc$以 abc 結尾WHERE name REGEXP 'abc$'
.任意單字元WHERE name REGEXP '^a...$'
[abc]含 a/b/c 任一WHERE name REGEXP '[abc]'
[a-z0-9]字母數字範圍WHERE name REGEXP '[a-z0-9]'
[^abc]不含 a/b/cWHERE name REGEXP '[^abc]'
{n}前字元重複 n 次WHERE name REGEXP 'ab{2}'
{m,n}重複 m~n 次WHERE name REGEXP 'ab{1,3}'
+前字元至少 1 次WHERE name REGEXP '(fa)+'
*前字元 0 或多次WHERE name REGEXP 'ab*c'
|或關係WHERE name REGEXP 'cat|dog'

插入測試數據 '12wef','faf_23','woop89' 等驗證上述模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved