MySQL的內部聯結,外部聯結和自然聯結

2021-10-09 11:32:52 字數 1997 閱讀 1837

一、select語句

乙個典型的sql查詢語句具有如下形式:

select a1,a2, ... ,an

from r1, r2, ... ,rm

where p;

select子句列出查詢結果中所需要的屬性。

from子句是乙個查詢求值中需要訪問的關係列表。

where子句是乙個作用在from子句關係屬性上的謂詞。

其中from這個子句定義的是乙個在該子句中列出的關係上的笛卡爾積。可以用如下表述:

for each 元組t1 

in 關係r1

for each 元組t2

in 關係r2

...把t1, t2, ..., 連線成單個元組t

把t加入到結果關係中

舉個例子,我這裡有表1:name

表2:address

測試from語句,會產生如下的笛卡爾積:

二、內部聯結

內部聯結又稱為等值聯結,將兩個表中存在聯結關係的字段符合聯結關係的那些記錄形成記錄集的聯結。用inner join 指定表之間的關係,用on子句指定聯結條件。

首先看看不加聯結條件的內部聯結:

這個結果和select * from name, address一樣。

再加上聯結條件:name.id = address.id

其結果就是顯式id相等的部分。

這個其實和語句select where一樣的,來看下面的結果:

三、自然聯結

自然聯結其實和內部聯結一樣,只是不會出現相同的重複列。比如在上邊的inner join中,出現了兩個id列,他們一模一樣。

在以前的版本中,有natural join 來實現自然聯結,也就是去除重複的列。在最新版本的mysql中,不在支援natural join。把這項工作交給了使用者。

如果我們想得到不重複的列,可以這樣做:

四、外部聯結

如果我們使用內部聯結,就不會出現"fox"這個人的資訊。

但是我想顯示所有人的資訊,不管他們有沒有位址。這就可以使用外部聯結。

外部聯結分為left outer join 和right outer join。比如我這裡使用left outer join:

上邊的語句使用了left outer join。它以左邊的表(也就是name)作為基準,會選擇name中的所有行,如果該行在address表中不存在相應的記錄,就會以null值(必須要支援null值)顯示。

同理,right outer join 是以右邊的表作為基準。

mysql 聯結主鍵 MySQL基礎 聯結

聯結表 mysql是一種關聯式資料庫,所謂關係就是指把資料分解為多個表,乙個類據一 個表。各表之間通過某些常用的值 即關係 相關聯 就比如說有乙個表儲存了 商資訊,商id為主鍵。另乙個表儲存了一些商品的資訊,但是也需要知道商品相應的 商資訊。那麼可以給商品設定乙個 商id 稱為外來鍵,通過這個外來鍵...

mysql使用聯結的好處 Mysql 聯結

聯結 簡介聯結是一種機制,用來在一條select語句中關聯表,聯結是由mysql根據需要而建立的,它存在於select語句的執行當中。在執行資料檢索查詢中使用聯結是sql強大的功能之一,聯結是利用sql的select能執行的最重要的操作,在使用聯結之前,我們必須要了解下關係表。關係表來個栗子說明下 ...

mysql中的聯結 MySQL中的聯結表

使用聯結能夠實現用一條select語句檢索出儲存在多個表中的資料。聯結是一種機制,用來在一條select語句中關聯表,不是物理實體,其在實際的資料庫表中並不存在,dbms會根據需要建立聯結,且會在查詢期間一直存在。聯結的本質是第乙個表中符合條件的每一行與第二個表中符合條件的每一行進行配對,假如沒有w...