sql語句中inner join on可以連線三張或四張表嗎,具體怎麼連 表和表之間沒設外來鍵

時間 2021-10-14 22:23:54

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...