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