天天看點

Mysql學習筆記08——多表查詢(下)細枝末節格式連接配接類型:

細枝末節

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;

繼續閱讀