MySQL學習筆記 十二 連線查詢 一

2021-09-23 07:58:03 字數 3231 閱讀 3573

含義:

又稱多表查詢,當查詢的字段來自多個表時,就會用到連線查詢

笛卡爾乘積現象:表1 有 m 行,表2 有 n 行,結果 = m*n 行

發生原因:沒有有效的連線條件

如何避免:新增有效的連線條件

分類:按年代分類:

sql192 標準:僅支援內連線

sql199 標準;支援內連線+外連線(左外、右外)+交叉連線

按功能分類:

內連線:

等值連線

非等值連線

自連線外連線:

左外連線

右外連線

全外連線

交叉連線

1、等值連線

a.多表等值連線的結果為多表的交集部分

b.n表連線,至少需要n-1個連線條件

c.多表的順序沒有要求

d.一般需要為表取別名

e.可以搭配前面所有的子句使用,比如排序、分組、篩選

e.g.:查詢員工名和對應的部門名

select

last_name,

department_name

from

employees,

departments

where

employees.department_id = departments.department_id;

2、為表起別名
a.提高語句的簡潔度

b.區分多個重名的字段

注意:如果為表起了別名,則查詢的字段就不能使用原來的表名去限定

e.g.:查詢員工名、工種號、工種名

select

last_name,

e.job_id,

j.job_title

from

employees as e,

jobs as j

where

e.job_id = j.job_id;

3、兩個表的順序可以調換

e.g.:查詢員工名、工種號、工種名

select

last_name,

e.job_id,

j.job_title

from

jobs as j,

employees as e

where

e.job_id = j.job_id;

4、可以加篩選

e.g.:查詢有獎金的員工名、部門名

select

last_name,

department_name,

commission_pct

from

employees as e,

departments as d

where

e.department_id = d.department_id

and commission_pct is

notnull

;

e.g.:查詢城市名中第二個字元為o的部門名和城市名

select

city,

department_name

from

locations l,

departments d

where

l.location_id = d.location_id

and city like '_o%』;

5、可以加分組

e.g.:查詢每個城市的部門個數

select

count(*

) 個數,

city

from

departments d,

locations l

where

d.location_id = l.location_id

group

by city;

e.g.:查詢有獎金的每個部門名和部門的領導編號和該部門的最低工資

select

department_name,

d.manager_id,

min( salary )

from

departments d,

employees e

where

d.department_id = e.department_id

and commission_pct is

notnull

group

by department_name,

manager_id;

6、可以加排序

e.g.:查詢每個工種的工種名和員工個數,並按員工個數降序

select

job_title,

count(*

)from

jobs j,

employees e

where

e.job_id = j.job_id

group

by job_title

order

bycount(*

)desc

;

7、三表連線

e.g.:查詢員工名、部門名、所在城市

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;

與等值連線類似

e.g.:查詢員工名與上級名字

select

e.employee_id 員工編號,

e.last_name 員工名,

m.employee_id 上級編號,

m.last_name 上級名

from

employees e,

employees m

where

e.manager_id = m.employee_id;

Mysql 學習筆記( 》連線查詢 高階查詢五)

create table t tid int unsigned not null auto increment,tname varchar 30 primary key tid engine myisam auto increment 1 default charset utf8 insert in...

MySQL學習筆記(8) 連線查詢

將多張表連在一起查詢 會導致記錄數行和字段數列發生改變 意義 在關係型資料庫設計過程中,實體與實體之間是存在很多聯絡的。在關係型資料庫表的設計過程中,遵循著關係來設計 一對一,一對多,多對多。通常在實際操作中,需要利用這層關係來保證資料的完整性。將兩張表的資料與另外一張表彼此交叉 笛卡爾積 表1 c...

MySQL學習筆記 連線

a table a b table b 1 笛卡爾積 為a,b兩個表產生笛卡爾積 x y x y 的笛卡爾積為,個人理解 即將a表所有的屬性和b表中的所有屬性進行合併,且每條記錄都產生乙個這樣的關係。select from a cross join b orselect from a,b2 自然連線...