連線查詢包括合併、內連線、外連線和交叉連線,如果涉及多表查詢,了解這些連線的特點很重要。
1.union
合併查詢結果是將多個select語句的查詢結果合併在一起,進行合併操作
使用union和union
all 關鍵字;
使用union關鍵字時,資料庫系統會將所有的查詢結果合併在一起,然後去除
相同的記錄。
而union
all關鍵字則只是簡單的合併在一起。
注意:使用union時,兩張表查詢的結果有相同數量的列、列型別相似。
其語法規則:
select 語句1
union | union
allselect 語句2
union | union
all...
select 語句n
例子:--學生資訊表
create
table students(
id int
primary
keynot
null,
name nvarchar(50),
age int,
city nvarchar(50),
majorid int
)--專業資訊表
create
table majors(
id int
primary
keynot
null,
name nvarchar(50)
)--教師資訊表
create
table teachers(
id int
primary
keynot
null,
name nvarchar(20) not
null
)--預置資料
insert
into students(id,name,age,city,majorid)
values(101,'tom',20,'beijing',10)
insert
into students(id,name,age,city,majorid)
values(102,'lucy',18,'shanghai',11)
insert
into teachers(id,name) values(101,'mrs lee')
insert
into teachers(id,name) values(102,'lucy')
--合併查詢
select id,name from students
union
select id,name from teachers
select id,name from students
union
allselect id,name from teachers
2.inner join(內連線),也成為自然連線
作用:根據兩個或多個表中的列之間的關係,從這些表中查詢資料。
注意: 內連線是從結果中刪除其他被連線表中沒有匹配行的所有行,所以內連線
可能會丟失資訊。
重點:內連線,只查匹配行。
語法:(inner可省略)
--預置指令碼
insert
into students(id,name,age,city,majorid)
values(101,'tom',20,'beijing',10)
insert
into students(id,name,age,city,majorid)
values(102,'lucy',18,'shanghai',11)
insert
into majors(id,name) values(10,'english')
insert
into majors(id,name) values(12,'computer')
例項:查詢學生資訊,包括id,姓名、專業名稱
select students.id,students.name,majors.name as majorname
from students inner
join majors
on students.majorid = majors.id
3. 外連線查詢:外連線可以查出某一張表的所有資訊;`
基本語法:
select 屬性名列表
from 表名1
left | right|full
join 表名2
on 表名1.屬性1=表名2.屬性2;
左連線查詢:結果集保留左表的所有行,但只包含第二個表與第一表匹配的行。
第二個表相應的空行被放入null值。
--執行語句
select students.id,students.name,majors.name as majorname
from students left
join majors
on students.majorid = majors.id
通過結果,我們可以看到左連線包含了第一張表的所有資訊,
在第二張表中如果沒有匹配項,則用null代替。
右連線查詢:右外連線保留了第二個表的所有行,但只包含第乙個表與第二個表
匹配的行。第乙個表相應空行被入null值。
--執行語句
select students.id,students.name,majors.name as majorname
from students right
join majors
on students.majorid = majors.id
通過結果可以看到,包含了第二張表majors的全集,
computer在students表中沒有匹配項,就用null代替。
全外連線,簡稱:全連線。會把兩個表所有的行都顯示在結果表中
--執行語句
select students.id,students.name,majors.name as majorname
from students full
join majors
on students.majorid = majors.id
包含了兩張表的所有記錄,沒有記錄丟失,沒有匹配的行用null代替。
4.交叉連線(cross join)
交叉連線返回左表中的所有行,左表中的每一行與右表中的所有行組合。
交叉連線也稱作笛卡爾積。
簡單查詢兩張表組合,這是求笛卡兒積,效率最低。
笛卡兒積:笛卡爾乘積,也叫直積。假設集合a=,集合b=,
則兩個集合的笛卡爾積為。
可以擴充套件到多個集合的情況。類似的例子有,如果a表示某學校學生的集合,
b表示該學校所有課程的集合,則a與b的笛卡爾積表示所有可能的選課情況。
4.1.交叉連線查詢學生的資訊,其中包括學生id,學生姓名和專業名稱。
--執行語句
select students.id,students.name,majors.name as majorname
from students cross
join majors
4.2.查詢多表,其實也是笛卡兒積,與cross
join等價,以下查詢同上述結果
一樣。這個可能很常見,但是大家一定要注意了,這樣就查詢了兩張表中所有
組合的全集。
--執行語句
select students.id,students.name,majors.name as majorname
from students,majors
4.3.加了查詢條件
注意:在使用cross
join關鍵字交叉連線表時,因為生成的是兩個表
的笛卡爾積,因而不能使用on關鍵字,只能在where子句中定義搜尋條件。
--執行語句
select students.id,students.name,majors.name as majorname
from students cross
join majors
where students.majorid = majors.id
mysql的連表查詢 MySQL 連表查詢
連表查詢 連表查詢通常分為內連線和外連線。內連線就是使用inner join進行連表查詢 而外連線又分為三種連線方式,分別是左連線 left join 右連線 right join 全連線 full join 下來我們一起來看一下這幾種連線方式的區別及基礎用法。內連線inner join inner...
mysql連表查詢
mysql連表查詢 上下 select from a.mobile user where union all select from b.mobile user where 左右 mysql聯合查詢效率較高,以下例子來說明聯合查詢 內聯 左聯 右聯 全聯 的好處 t1表結構 使用者名稱,密碼 use...
SQL連表查詢
感覺好笨,老大寫過想了一會才想明白。因為資料都是在兩個表中的兩個表中,所以是四個表。應該先把乙個表中的兩個表篩選出來,然後再用union.sql union 操作符 union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select 語句必須擁有相同數量的列。...