MySQL必知必會 12MySQL聯結表

2021-07-27 08:54:44 字數 4386 閱讀 6258

建立聯結

select

vend_name

,

prod_name

,

prod_price

from

vendors

,

products

where

vendors

.vend_id

=products

.vend_id

order by

vend_name

,

prod_name

;

在一條select語句中聯結幾個表時,相應的關係是在執行中構造的。

在聯結兩個表時,實際上做的是將第乙個表中的每一行與第二個表中的每一行配對。

where子句作為過濾條件,它只包含那些匹配給定條件(聯結條件)的行。沒有where子句,第乙個表中的每個行將與第二個表中的每個行配對,而不管它們邏輯上是否可以配在一起。

笛卡兒積

由沒有聯結條件的表關係返回的結果為笛卡兒積。檢索出來的數目將是第乙個表中的行數乘以第二個表中的行數。

select

vend_name

,

prod_name

,

prod_price

from

vendors

,

products

;

內部聯結

建立聯結的第乙個例子,所使用的聯結稱為等值聯結,它基於兩個表之間的相等測試。這種聯結也稱為內部聯結。

對於這種聯結可以使用稍微不同的語法來明確指定聯結的型別。例如:

select

vend_name

,

prod_name

,

prod_price

from

vendors

inner join products on vendors

.vend_id

=products

.vend_id

;

兩個表之間的關係用inner join指定,聯結條件用特定的on子句而不是where子句給出。

傳遞給on的實際條件與傳遞給where的相同。

ansi sql規範首選inner join語法,儘管使用where子句定義聯結的確比較簡單,但是使用明確的聯結語法能夠確保不會忘記聯結條件,有時候這樣做也能影響效能。

聯結多個表

sql對一條select語句中可以聯結的表的數目沒有限制。建立聯結的基本規則也相同。

例子一:

select

prod_name

,

vend_name

,

prod_price

,

quantity

from

orderitems

,

products

,

vendors

where

products

.vend_id

=vendors

.vend_id

and orderitems

.prod_id

=products

.prod_id

;

第二種寫法

select

prod_name

,

vend_name

,

prod_price

,

quantity

from

products

inner join vendors on products

.vend_id

=vendors

.vend_id

inner join orderitems on orderitems

.prod_id

=products

.prod_id

;

例子二:

select

prod_name

,

vend_name

,

prod_price

,

quantity

from

orderitems

,

products

,

vendors

where

products

.vend_id

=vendors

.vend_id

and orderitems

.prod_id

=products

.prod_id

and order_num

=20005

;

第二種寫法

select

prod_name

,

vend_name

,

prod_price

,

quantity

from

products

inner join vendors on products

.vend_id

=vendors

.vend_id

inner join orderitems on orderitems

.prod_id

=products

.prod_id

where

orderitems

.order_num

=20005

;

第三種寫法

select

prod_name

,

vend_name

,

prod_price

,

quantity

from

products

inner join vendors on products

.vend_id

=vendors

.vend_id

inner join orderitems on orderitems

.prod_id

=products

.prod_id

and orderitems

.order_num

=20005

;

mysql必知必會 mysql必知必會(四)

十四 理解子查詢 1 通過子查詢過濾 這本書在所有的章節都關連到了資料庫表,訂單資料是儲存在兩個表中,orders表儲存著 訂單號碼 顧客id和訂單日期。個人的訂單列表關連著orderitems表,訂單表沒有儲存顧客資訊,它只是儲存著顧客id,這實際的顧客資訊是儲存在customers表中。現在假設...

mysql的必知必會 mysql 必知必會 筆記

好久沒有寫了。1 show columns from table 等同於describe table顯示的是表的結構。而select from table 則顯示的是整個表中插入的資料。2 select distinct c1,c2 from table除非列不相同,否則所有行將被檢索出來,即不能對...

mysql必知必會

一周了,總想寫點什麼,有的時候進步真的很難在一周顯示出來,週三的時候,我跟我的領導說,好快啊,又週三了,不知不覺,他說是啊,現在對於他來說,有時候他過一天可能跟我過一周的感覺差不多,每天都在忙,時間過的特別快,也沒有感覺做出來點什麼,當然實際肯定是怎麼做了一些東西的,是否我以後也會如此呢?說說技術把...