SQL Server第六章 多表連線查詢

2021-10-24 23:53:13 字數 2787 閱讀 2844

第1關:帶 where 子句的多表查詢

任務描述

本關任務:使用帶 where 子句的多表查詢方法,檢索資料表中的指定內容。

相關知識

為了完成本關任務,你需要掌握:如何使用帶 where 子句的方法查詢多表資料。

理解連線

sql 最強大的功能之一,就是能使用資料檢索語句來連線多張資料表。 連線 (join) 是使用資料庫時最重要的操作,所以理解什麼情況下,能連線和如何連線是學習 sql 中極其重要的部分。

在你使用連線查詢之前,一定要搞清楚資料表之間的關係。那怎麼理解資料表之間是有關係的呢?

舉個例子

假設現在你有一張商品的列表,這張列表裡包含了每個商品的名稱、資訊以及**。現在的問題是,如果這些產品有一部分來自相同的生產廠家,你打算在**儲存這些廠家的資訊(比如廠家位址、資訊及****)?

有兩種選擇,一種是把廠家的資訊和產品資訊儲存在一張資料表裡,另一種是建立新的資料表來儲存廠家的資訊。

不知道你會選哪一種儲存方式?

有很多商品來自同一廠家,在儲存的時候,就勢必會造成大量的重複資訊湧入商品資料表,這樣既浪費時間,又浪費空間;

如果廠家更換了資訊(比如位址或者**),你將要更新每乙個出現在商品資料表中的廠家資訊,這太費勁兒了!

當資訊內容大量重複時,你沒有辦法保證寫入的每一條資訊都和其他的一模一樣,很有可能會在字元上有些許差異,資料不一致將來很難進行操作。

tips:

一張資料表裡出現多條相同的資料並不是一件好事,這個原則也同樣適用於關聯式資料庫的設計。我們推薦把不同種類的資訊放在不同的資料表中,但是有關係的兩張表,可以被同一種資料所關聯。

用where子句創造乙個連線

兩張資料表是如何被關聯起來的呢?

你只需要列出所有被關聯到的表,並寫出他們是怎樣的關係就可以了。抽象嗎?

舉個例子

我們現在有兩張資料表,student 表中儲存了學生資訊,class 表中儲存了班級資訊。但是很顯然,student 資料表裡並沒有儲存學生的班級,而是學生班級的 id。我們只有將兩張表關聯起來,才能查詢到學生所屬的班級,但是,如何將兩張資料表關聯起來呢?

輸入:

select

*from student, class

where student.class_id = class.class_id

該例中,我們在 where 關鍵字後使用student.class_id = class.class_id 語句用來關聯這兩張表。我們可以理解為,當 student 表與 class 表中的 class_id 字段內容相同時,我們可以將兩張表中 class_id 字段對應的內容行拼接成一張表。

輸出:

注意到,class 表中的 class_id = 308 的內容行,並沒有出現在我們的關聯後的新錶中。因為 student 表中的 class_id 並沒有出現過內容 308 。現在我們可以大大方方的說,我們關聯後的表是取了表 student 和表 class 的交集,如下圖所示:

有的同學可能會注意到,這裡出現了重複的顯示項 class_id ,我們將在下一關裡介紹如何去掉它。

程式設計要求

我們已經為你建好了資料庫與資料表,並新增了相應的資料內容。你只需在右側 begin-end 區域內補充**,用 where 子句關聯表 products 和表 vendors 。

表 products 和表 vendors 的內容如下圖所示:

測試說明

測試過程:

本關涉及到的測試檔案是 step1_test.sh ,平台將執行使用者補全的 step1.sql 檔案,得到資料;

將得到的資料與答案比較,判斷**是否正確。

如果操作正確,你將得到如下的結果:

答案

use mall

goset nocount on

--********** begin **********--

select

*from products,vendors

where products.vend_id=vendors.vend_id

--********** end **********--

go

//第2關:內連線查詢

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...

第六章總結

6.1 使用滑鼠 6.1.1 滑鼠時間和滑鼠訊息 根據使用者操作滑鼠時滑鼠的位置,滑鼠訊息分為兩類 客戶區滑鼠訊息和非客戶區滑鼠訊息。1.客戶去滑鼠訊息 2.當滑鼠游標位於視窗的使用者區時,將生成客戶滑鼠訊息。滑鼠訊息和鍵盤訊息有所不同,windows 只將鍵盤有訊息傳送給具有輸入極點的視窗,但滑鼠...