1樓:匿名使用者
一、外連線
1.概念:包括左向外聯接、右向外聯接或完整外部聯接
2.左連線:left join 或 left outer join
(1)左向外聯接的結果集包括 left outer 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值(null)。
(2)sql語句
select * from table1 left join table2 on table1.id=table2.id
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
4 wang null null
------------------------------
註釋:包含table1的所有子句,根據指定條件返回table2相應的欄位,不符合的以null顯示
3.右連線:right join 或 right outer join
(1)右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
(2)sql語句
select * from table1 right join table2 on table1.id=table2.id
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
null null 3 70
------------------------------
註釋:包含table2的所有子句,根據指定條件返回table1相應的欄位,不符合的以null顯示
4.完整外部聯接:full join 或 full outer join
(1)完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。
(2)sql語句
select * from table1 full join table2 on table1.id=table2.id
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
4 wang null null
null null 3 70
------------------------------
註釋:返回左右連線的union(見上左、右連線)
二、內連線
1.概念:內聯接是用比較運算子比較要聯接列的值的聯接
2.內連線:join 或 inner join
3.sql語句
select * from table1 join table2 on table1.id=table2.id
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100
------------------------------
註釋:只返回符合條件的table1和table2的列
4.等價(與下列執行效果相同)
a:select a.*,b.* from table1 a,table2 b where a.id=b.id
b:select * from table1 cross join table2 where table1.id=table2.
id (注:cross join後加條件只能用where,不能用on)
三、交叉連線(完全)
1.概念:沒有 where 子句的交叉聯接將產生聯接所涉及的表的笛卡爾積。
第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。(table1和table2交叉連線產生3*3=9條記錄)
2.交叉連線:cross join (不帶條件where...)
3.sql語句
select * from table1 cross join table2
-------------結果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 1 90
4 wang 1 90
1 lee 2 100
2 zhang 2 100
4 wang 2 100
1 lee 3 70
2 zhang 3 70
4 wang 3 70
------------------------------
註釋:返回3*3=9條記錄,即笛卡爾積
4.等價(與下列執行效果相同)
a:select * from table1,table2
2樓:匿名使用者
和外來鍵沒有關係,外來鍵只是強行約束了引用關係
只要你的資料存在邏輯上的關聯,就可以將表進行連線查詢。
3樓:匿名使用者
inner join(等值連線) 只返回兩個表中聯結欄位相等的行
left join(左聯接) 返回包括左表中的所有記錄和右表中聯結欄位相等的記錄
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄
inner join 語法:
inner join 連線兩個資料表的用法:
select * from 表1 inner join 表2 on 表1.欄位號=表2.欄位號
inner join 連線三個資料表的用法:
select * from (表1 inner join 表2 on 表1.欄位號=表2.欄位號) inner join 表3 on 表1.欄位號=表3.欄位號
inner join 連線四個資料表的用法:
select * from ((表1 inner join 表2 on 表1.欄位號=表2.欄位號) inner join 表3 on 表1.
欄位號=表3.欄位號) inner join
表4 on member.欄位號=表4.欄位號
inner join 連線五個資料表的用法:
select * from (((表1 inner join 表2 on 表1.欄位號=表2.欄位號) inner join 表3
on 表1.欄位號=表3.欄位號) inner join 表4 on member.欄位號=表4.欄位號) inner join 表5 on
member.欄位號=表5.欄位號
4樓:
可以的select *
from t1 a inner join t2 b on a.id = b.id
inner join t3 c on a.cid = c.cidinner join t4 d on b.name = d.name..................
on後面是兩表的關聯欄位,跟外來鍵沒有關係
sql中left join from 多個表怎麼寫
5樓:兔丞飛
sql中left join from 多個表應該這樣寫:
select a.id, 其他欄位
from a,b,c,d left join e
on e.id=a.id
left join f on f.id=c.id
1、兩個表連線
select a.*,b.* from a left join b on a.id =b.id;
2、三個以上
select a.*,b.* from a left join b on a.id=b.id left join c on a.id=b.id where …;
注:可以有多種變換,連線條件,顯示欄位跟具體結合具體場景靈活運用。
擴充套件資料
select colunm_name1,colunm_name2
from table_name1
left join table_name2
on table_name1.colunmname=table_name2.colunmname
其中join_table指出參與連線操作的表名,連線可以對同一個表操作,也可以對多表操作,對同一個表操作的連線稱為自連線, join_type 為連線型別,可以是left join 或者right join 或者inner join 。
6樓:大野瘦子
1、兩個表連線
select a.*,b.* from a left join b on a.id =b.id;
2、三個以上
select a.*,b.* from a left join b on a.id=b.id left join c on a.id=b.id where …;
注:可以有多種變換,連線條件,顯示欄位跟具體結合具體場景靈活運用。
sql語句中的多表關係
一對多:用於去重,left join 要連線的表 on 唯一欄位(標識) = 多欄位
一對一 :用於查詢,left join 要連線的表 on 唯一欄位 = 唯一欄位
多對一:用於分組,left join 要連線的表 on 多欄位 = 唯一欄位
例項:select r.roleid,r.
rolename,r.deptid,d.deptname,group_concat(m.
menuname separator ',' ) menuname
from js_role r
left join js_role_menu rm on r.roleid = rm.roleid
left join js_menu m on m.menuid = rm.menuid
left join js_dept d on d.deptid = r.deptid
group by r.roleid
注:group_concat(m.menuname separator 『,』 ) - 表示:按組,合併列表中的menuname欄位並以』,'分隔
sql語句中,SQL語句中USE
三歲喝酒 use pubs 選擇 名字 pubs 的資料庫 select title id from sales where title id in 查詢欄位title id符合號內限定條件的表sales的 title id 列 select title id from titles where t...
sql語句中能否使用多個,sql語句中能否使用多個union
可以的。union 操作符用於合併兩個或多個 select 語句的結果集。需要注意的是 1 union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。2 這個命令連線的結果集中有重複的值不會被顯示。想忽略重複值,可以使...
SQL語句中AS是什麼意思,sql語句中as的作用?
伏廷謙潭培 sql語句中as的意思是 別名。as用處 query時 用來重新指定返回的column名字。示例一個table有個column叫 id,query是select idfrom table1 如果不想叫id,就可重新命名。如叫systemid,可這樣寫 selectidas systemi...