含義:
又稱多表查詢,當查詢的字段來自多個表時,就會用到連線查詢
笛卡爾乘積現象:表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 自然連線...