內連線
隱式內連線
- 使用 where 關鍵字消除無用資料
- 例子:
SELECT t1.name, -- 員工姓名 t1.gender, -- 員工性別 t2.name, -- 部門名稱 FROM emp t1, -- 員工表命名為t1 dept t2, -- 部門表命名為t2 WHERE t1.`dept_id` = t2.`id`; -- 員工表中部門id和部門表主鍵id匹配
顯式內連線
SELECT 欄位 FROM 表名1 INNER JOIN 表名2 ON 條件
- 例子
SELECT * FROM emp t1 INNER JOIN dept t2 ON t1.`dept_id` = dept.`id`;
外連線
- 左外連線
- 查詢左表所有資料和其交集部分
SELECT 欄位 FROM 表1 LEFT [OUTER] JOIN 表2 ON 條件;
- 右外連線
- 查詢右表所有資料和其交集部分
SELECT 欄位 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 條件;
- 如果所查詢資料和另一表交集為空,則相應的列資料顯示為 NULL
子查詢
- 查詢中巢狀查詢
- 例:查詢工資最高的員工資訊
SELECT emp.`id`, emp.`name` FROM emp WHERE emp.`salary` = (SELECT max(salary) FROM emp);
子查詢不同情況
結果單行單列
- 看上面的例子
結果多行單列
- 例子:查詢財務部和市場部所有員工資訊。由於要查兩個部門,需要用到 IN 關鍵詞限定部門的範圍
SELECT emp.`id`, emp.`name` FROM emp WHERE dept.`id` IN -- 多行查詢的關鍵,查詢出這兩個部門的資訊 SELECT dept.`id` FROM dept WHERE dept.`name` = `財務部` OR dept.`name` = `市場部`;
- 例子:查詢財務部和市場部所有員工資訊。由於要查兩個部門,需要用到 IN 關鍵詞限定部門的範圍
結果多行多列
用子查詢建立一張虛擬表參與查詢
例子:查詢2011年11月11日後入職的員工資訊和部門資訊
子查詢
SELECT * FROM dept t1, SELECT * FROM emp WHERE emp.`join_date` > `2011-11-11` t2 WHERE t1.`id` INNER JOIN t2.`dept_id`;
普通內連線
SELECT * FROM emp t1, dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` > `2011-11-11`;
本作品採用《CC 協議》,轉載必須註明作者和本文連結