首頁 > 軟體

MySQL中的連線查詢(等值連線)

2022-07-20 14:03:25

1. 笛卡爾乘積

表1有m行資料,表2有n行資料,查詢結果有m*n行資料。

2. 分類

(1)按年代分類

sql92標準:僅支援內連線

sql99標準(推薦):支援內連線、外連線(左外連線和右外連線)、交叉連線

(2)按功能分類

內連線:等值連線、非等值連線、自連線

外連線:左外連線、右外連線、全外連線

交叉連線

3. 等值連線

(1)查詢女生名及其對應的男朋友名

SELECT 
    girlname,
    boyname
FROM
    boys,
    girls
WHERE
    girls.boyfriend_id=boys.girlfriend_id;

(2)查詢員工名(last_name)和對應的部門名(department_name)-------------(根據關聯的id查詢)

SELECT 
    last_name,
    department_name
FROM
    JDSC,
    SNSC
WHERE
    JDSC.`id`=SNSC.`id`;

(3)查詢員工名(last_name)、工種號(job_id)、工種名(job_title) (員工表:JDSC  工作表:JOBSC)------為表起別名,提升簡潔度,避免歧義

#"e.job_id"是為了避免歧義
SELECT
    last_name,
    e.job_id,
    job_title
FROM
    ESC e,
    JOBSC j
WHERE
    e.`job_id`=j.`job_id`;

注意:

如果為表起了別名,則查詢的欄位不能使用原來的表名去限定。

上述兩個表的順序可互換

(4)查詢有獎金的員工名、部門名

#員工名:last_name
#部門名:department_name
#獎金率:commissiom_pct
SELECT
    last_name,
    department_name,
    commissiom_pct
FROM
    employees e,
    department d
WHERE
    e.`department_id`=d.`department_id`
AND
    e.`commissiom_pct` IS NOT NULL;

(5)分組查詢——查詢每個城市的部門個數

#城市分組表名:city
#部門分組表名:departments 
SELECT
    COUNT(*) 個數,
    city
FROM
    departments d,
    locations l
WHERE
    d.`location_id`=l.`location_id`
GROUP BY
    city;

(6)排序——查詢每個工種的工種名和員工個數,並按員工個數降序

SELECT 
    job_title,
    COUNT(*)
FROM
    emloyees e,
    jobs j
WHERE
    e.`job_id`=j.`job_id`
GROUP BY
    job_title
ORDER BY
    COUNT(*) DESC;

(7)三表連線——查詢員工名、部門名和所在的城市

SELECT
    last_name,
    department_name,
    city
FROM
    employees e,
    departments d,
    locations l
WHERE
    e.`department_id`=d.`department_id`
AND
    d.`location_id`=l.`location_id`
AND 
    city LIKE 's%';

4. 總結

1)多表等值連線的結果為多表的交集部分

2)m表連線,至少需要n-1個連線條件

3)多表的順序沒有要求

4)一般需要為表起別名

5)可以搭配所有子句使用,例如排序、分組、篩選

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com