細枝末節
1. 内連接配接的INNER和外連接配接的OUTER可以省略
2. 篩選條件放在WHERE後,連接配接條件放在ON後,提高分離性,便于閱讀
3. 外連接配接查詢的結果集為主表中所有記錄
4. LEFT和RIGHT作用是指定主表
5. 全連接配接是将兩表都作為主表
6. 交叉連接配接結果集是笛卡爾乘積
格式
SELECT 查詢清單
FROM 表1 别名 [連接配接類型]
JOIN 表2 别名
ON 連接配接條件
[WHERE 篩選條件]
[GROUP BY 分組]
[HAVING 篩選條件]
[ORDER BY 排序清單]
連接配接類型:
1. 内連接配接: IINER
2. 外連接配接:
左外連接配接: LEFT [OUTER]
右外連接配接: RIGHT [OUTER]
全外連接配接: FULL [OUTER]
3. 交叉連接配接: CROSS
内連接配接
FROM 表1 别名
INNER JOIN 表2 别名
分類
1. 等值連接配接
2. 非等值連接配接
3. 内連接配接
等值連接配接
示例
/* 查詢員工名,部門名 */
SELECT e.name, d.name
FROM emp e
INNER JOIN dept d
ON e.dept_id = d.id
/* 查詢名字中包含e的員工名和工種名 */
SELECT e.name, j.name
INNER JOIN job j
ON e.job_id = j.id
WHERE e.name LIKE '%e%';
/* 查詢部門個數>3的城市名和部門個數 */
SELECT city, COUNT(*)
FROM location l
ON d.loc_id = l.id
GROUP BY city
HAVING COUNT(*)>3
/* 查詢員工名,部門名,工種名,并按部門降序 */
SELECT e.name, d.name, j.name
INNER JOIN dept d ON e.dept_id = d.id
INNER JOIN job j ON e.job_id = j.id
ORDER BY d.name DESC;
非等值連接配接
/* 查詢員工的工資級别 */
SELECT salry, grade
INNER JOIN salary_grade g
ON e.salary BETWEEN g.lowwest_sal AND g.highest_sal;
自連接配接
/* 查詢姓名中包含k的員工姓名及其上司姓名 */
SELECT e.name, m.name
INNER JOIN emp m
ON e.mng_id = m.id
WHERE e.name LIKE '%k%';
外連接配接
/* 查詢男朋友不在男生表的女生名 */
/* 第一種方式:左外連接配接 */
SELECT w.name, m.*
FROM womwn w
LEFT OUTER JOIN man m
ON w.cp_id = m.id
WHERE m.name IS NULL;
/* 第二種方式:右外連接配接 */
SELECT w.name m.*
FROM man m
RIGHT OUTER JOIN woman w
WHERE m.nae IS NULL;