SQL循序漸進 17 JOIN子句

2021-04-17 05:49:45 字數 2295 閱讀 4200

join

子句不知你有沒有發現直到現在我們利用select語句來檢索的時候只能從乙個表中進行。如果你想從兩個表或者更多的表中進行檢索,該怎麼辦呢?好在我們可以使用sql和關係資料庫系統的乙個很有用的特性,即"join"。為了簡單說明,實際上"join"就是使得關係資料庫系統相關的東東。"join"允許你從兩個表或者更多的表連線資料進行資料檢索,而只需要利用乙個select語句。如果在from關鍵字之後有多個表的話,"join"可以在sql select語句中識別它們。

下面舉個例子:

select "list-of-columns"

from table1,table2

where "search-condition(s)"

"join"

通過示範當你只處理乙個表的時候會發生什麼事情可以使得"join"的解釋更簡單,所以這裡我沒有使用"join"。這個單一的資料庫有事也被稱為"flat table"(平表)。現在你有乙個表的資料庫用來檢索所有顧客的資訊以及他們從你的商店買了什麼,下面就是這個表的所有列:

每次乙個新行被插入到表中,所有的列都將被更新,這樣就導致了不必要的」多餘資料」。比如,每次jenny買東西,下面的行都將被插入到表中:

為了避免」多餘資料」,乙個最好的方法:讓資料庫有兩個表: 其中乙個用來對顧客保持跟蹤;另外乙個用來對他們買什麼東西保持跟蹤。 即有"customer_info" 表和"purchases" 表:

"customer_info" 表為:

customer_number

firstname

lastname

address

city

state

zip

"purchases" 表為:

customer_number

date

item

price

現在開始,不管顧客什麼時候進行重複的購物,只有第二個表"purchases" 需要更新。這樣我們就減少了多餘的資料,也就是說我們規格化了這個資料庫。

你仔細點就會發現兩個表中還是有乙個"cusomer_number"列是相同的。這個列包含了單獨的顧客號,它將用來join(連線)兩個表。下面舉個例子來使用這兩個表,假如你想搜尋顧客的名字以及他們所買的東西,你可以使用以下的語句來實現:

select customer_info.firstname, customer_info.lastname, purchases.item

from customer_info, purchases

where customer_info.customer_number = purchases.customer_number;

特殊的"join"有為"inner join" 或者"equijoin",這是乙個最常見的"join"型別,以後我們經常用使用到或者看到。

這裡要注意每列總是在表名之前,這卻也不是必需的。這是乙個好的練習對於幫助你澄清列後面跟著表的認識有很大幫助。如果兩個表之間有乙個相同的列,它就是必須的。我這裡推薦在使用join的時候最好在所有列之後加上表名。

注意;上面描述的這個語法將在絕大多數的資料庫系統起作用,本教程的也是一樣。但是結果你會發現你上面的語句並不起作用,請仔細檢查一下吧。

當然你可以試一試修改以上的**,你可以使用join(ansi sql-92語法規範中的inner join):

select customer_info.firstname, customer_info.lastname, purchases.item

from customer_info inner join purchases

on customer_info.customer_number = purchases.customer_number;

再舉另外乙個例子:

select employee_info.employeeid, employee_info.lastname, employee_sales.comission

from employee_info, employee_sales

where employee_info.employeeid = employee_sales.employeeid;

這個例子將從employee_info和employee_sales表中選擇當employee_info表的employeeid等於employee_sales表的employeeid的employeeid 、emplyee_info表中lastname以及employee_sales表中的comission數值。

從上面的例子中可以發現利用jion的語句比價簡練。既然有這樣的有點,我們何樂而不為呢?

SQL循序漸進 24 嵌入SQL

嵌入 sql為了更好的理解嵌入 sql,本節利用乙個具體例子來說明。嵌入 sql允許程式連線資料庫並且包括 sql 到程式中,這樣在程式中就可以對資料庫進行使用 操作以及處理資料等等。以下是用c語言編寫的使用嵌入 sql的例程,它將列印乙個報告 這個程式必須在普通的編譯之前先預編譯 sql語句。嵌入...

Linux循序漸進 1

第一課 什麼是linux 簡單地說,linux是一套免費使用和自由傳播的類unix作業系統,它主要用於基於i ntel x86系列cpu的計算機上。這個系統是由全世界各地的成千上萬的程式設計師設計和實現 的。其目的是建立不受任何商品化軟體的版權制約的 全世界都能自由使用的unix相容 產品。linu...

循序漸進學程式設計

軟體開發者是乙個日新月異的領域 it 中的大師,今天的程式設計方式與明天的程式設計或許截然不同,技術在不斷地革新,新語言 新平台的如雨後春筍般出現 更好的解決方案的冒出,因此我們需要跟得上節奏,我們沒有選擇,唯有努力提高自己。下面的幾點建議或許能幫助你成為乙個優秀地開發者。你是否聽說過 kaizen...