理解關係表和關係表的設計。設計關係表的時候,將資訊分散到多個表中,避免在乙個表中存在太多重複資訊。關係錶能更好地擴充套件。
當資訊存在多個表裡時,如何在一條查詢語句裡獲取來自不同表中的資訊。
join就是一種機制,在同乙個條查詢語句中關聯多個表中的資訊。
從關係運算的角度來說,連線運算是從兩個關係的笛卡爾積中選取滿足條件的元組。
一般連線:從兩個關係的笛卡爾積中選取屬性間符合一定條件的元組
等值連線:屬性間的條件為相等
自然連線:屬性間的條件為相等,去掉結果屬性列中的重複項
外連線:在一般連線的基礎上,選取未匹配到的行。左連線即選取左邊未匹配的行,右邊相應的值設為空,右連線同理。
基於兩個表之間的相等性測試的連線,這種連線稱為內連線。
select ta.iten1, tb.item2, tc.item3
form table_a as ta, table_b as tb, table_c as tc
where ta.tb_id = tb.id
and tb.tc_id = tc.id
等價於
select ta.iten1, tb.item2, tc.item3
form table_a as ta inner
join table_b as tb inner
join table_c as tc
on ta.tb_id = tb.id
and tb.tc_id = tc.id
用來代替子查詢的方式
假設乙個場景:某條資料庫中的資料報含字段item1,item2。其中item1的值為text1,item2的值為text2;現要查詢資料中所有與item1=text1時對應的text2相等的資料。
用子查詢的方式:
select t1.item1, t1.item2 from database_demo as t1 where t1.item2 =
(select t2.item2 from database_demo as t2 where t2.item1 =
'text1'
)
改用自聯結的方式為:
select t1.item1, t1.item2 from database_demo as t1, database_demo as t2 where t1.item2 = t2.item2 and t2.item1 =
'text1'
自連線通常用於替換使用子查詢的語句,這些子查詢從與外部語句相同的表中檢索資料。儘管最終結果是相同的,但是許多dbms程序的連線速度要比它們執行子查詢快得多。通常值得嘗試這兩種方法來確定哪一種效能更好。
自然連線只是消除了那些多次出現的情況,因此每個列只返回乙個。進行比較的屬性必須是相同的屬性,比較的條件也是相等條件。
自然連線是只選擇唯一列的連線。這通常在乙個表上使用萬用字元完成
(select *),並顯示列出所有其他表的列的子集。
select c.
*, o.order_num, o.order_date, oi.prod_id, oi.quantity, oi.item_price
from customers as c, orders as o, orderitems as oi
where c.cust_id = o.cust_id
and oi.order_num = o.order_num
and prod_id =
'rgan01'
;
在本例中,萬用字元僅用於第乙個表,所有其他列都被顯式列出,這樣就不會檢索到重複的列。
事實是,到目前為止您所建立的每個內部連線實際上都是乙個自然連線,您可能永遠都不需要乙個不是自然連線的內部連線。
下面的查詢語句是乙個簡單的內部聯接。
select customers.cust_id, orders.order_num
from customers inner
join orders
on customers.cust_id = orders.cust_id;
查出的結果:
改用left outer join
檢索所有客戶的列表,包括那些沒有下訂單的客戶
select customers.cust_id, orders.order_num
from customers left
outer
join orders
on customers.cust_id = orders.cust_id;
與將兩個表中的行關聯起來的內部連線不同,外部連線還包括沒有關聯行的行。在使用外部連線時,必須使用right或
left關鍵字指定包含所有行的表(right為外連線右邊表的行,left為左的行)。
請記住,外部連線總是有兩種基本形式—左外部連線和右外部連線。它們之間唯一的區別是它們所關聯的表的順序。換句話說,只需反轉from或where子句中的表順序,左外連線就可以轉換為右外連線。因此,這兩種型別的外部連線可以互換使用,關於使用哪一種連線的決定純粹是基於方便。
外部連線還有另一種變體,即完整的外部連線,它從兩個表中檢索所有行,並將可能相關的行關聯起來。左外連線或右外連線包含來自單個表的不相關行,而完整的外連線包含來自兩個表的不相關行。完整外部連線的語法如下
select customers.cust_id, orders.order_num
from orders full
outer
join customers
on orders.cust_id = customers.cust_id;
mariadb, mysql, open office base,或sqlite等不支援full outer jo sql基礎語法 聯接查詢
交叉聯接 1.不帶where條件的,將返回兩個表的 行乘積 select c.e.from sales.customers c cross join hr.employees e 2.帶where 條件的,交叉聯接不能使用on select e1.empid,e1.firstname,e1.last...
SQL 三個表聯接的join寫法
select university,difficult level,count qpd.question id count distinct qpd.device id as g answer cnt from question practice detail as qpdleft join use...
Sql 基礎語法join以及多張表join
sql join 用於根據兩個或多個表中的列之間的關係,從這些表中查詢資料。有時為了得到完整的結果,我們需要從兩個或更多的表中獲取結果。我們就需要執行 join。資料庫中的錶可通過鍵將彼此聯絡起來。主鍵 primary key 是乙個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一...