課程是國外mosh hamedani 的付費mysql課程。 該課程乾貨滿滿,沒有廢話。並且授課方式目的性強,適合各個基礎的學生。 課程在b站有搬運,大家動動手就可以找到~~ 希望能幫助到各位同學
本章覆蓋了mysql中的所有連線方式,包括內連線,外連線,自連線,多表連線,跨資料庫連線,聯合,自然連線,交叉連線。
第一節 內連線
為了資料的穩定性和可維護性,我們通常把每一種資料(比如customers)抽離形成單獨的表,比如在orders表中我們通過customer_id來標註是哪乙個客戶下的訂單,而不是使用使用者的名字。因為使用者可能在將來修改自己的位址,名字等屬性,這就會造成表的高度耦合。 通過抽離我們可以直接在customer表中修改客戶屬性來實現資料的更新,不需要我們在orders表中修改客戶的屬性。
首先我們觀察orders表的資料。
我們可以觀察到這裡我們看不見使用者的具體資訊,所以我們要通過連線orders表和customers表來在同乙個表(結果集)中展示訂單和使用者的具體資訊
select
o.order_id,c.first_name
from
sql_store.orders o
join
customers c on o.customer_id = c.customer_id //這樣我們就實現了在一張表中展示訂單號和下訂單的客戶名
章節練習
在一張表中展示訂單號,具體的產品名字,數量,單價
第二節 跨資料庫連線
這個比較簡單,只需要在表的前面加上具體資料庫的字首便可
select oi.order_id,p.name,oi.quantity,oi.unit_price from
sql_store.order_items oi// 注意這兩行**,這裡把products表移到了另乙個資料庫,我們利用字首關聯了跨資料庫的兩張表
join sql_inventory.products p //注意這兩行**,這裡把products表移到了另乙個資料庫,我們利用字首關聯了跨資料庫的兩張表
on oi.product_id = p.product_id
第三節 自連線
首先我們觀察目標資料,這是一張employee**,裡面記錄了員工的基本資訊。請重點觀察reports_to列,這裡記錄了每乙個員工的匯報物件。恰好這個物件就是37270,這個人沒有匯報物件。所以我們可以自連線本表,把每個員工的匯報物件替換成乙個具體的人名。
第三節 多表連線
在orders表中,有status 狀態一列屬性,用於標註訂單的狀態資訊。
在之前的章節中,我們通過連線orders.customer_id = customers.customer_id實現了在一張**顯示 訂單編號和具體的客戶名字,現在我們可以通過order.status = order_statues.status_id 在同一張表上顯示 訂單編號和頂帶狀態
select
*from sql_store.orders o
join customers c on o.customer_id = c.customer_id
join order_statuses os on o.
status
= os.order_status_id
第四節 復合連線
對於有多個主鍵的表單連線,需要匹配所有的主鍵列。
第五節 隱式連線
和明示連線相比,mysql也提供的隱式連線的語法支援,即不明確的使用 join 關鍵字來連線2張表 。 對於實現相同功能,隱式連線有如下不同
明示連線 使用join
select
*from orders o
join customers c on
o.customer_id = c.customer_id
隱式連線 不使用join
select
*from
orders o, customers c
where o.customer_id = c.customer_id
並不推薦這種隱式連線語法。
第六節 外連線
select
*from
orders o
right
join customers c
on o.customer_id = c.customer_id
等價於
select
*from
customers c
left
join orders o
on o.customer_id = c.customer_id
多表外連線的方式語法類似。
第九節 自外連線 self outer join
第十節 using 關鍵字
如果背連線的兩張表有想通的列名,我們可以省略 join …on … 語法直接使用 using(列名)
select
*from
orders
join customers
using
(customer_id)
自然連線 nature join 交叉連線
聯合 union
select
order_id,
order_date,
'active'
asstatus
from
sql_store.orders
where
order_date >=
'2019-01-01'
union
//我在這!!!!!!!!!!!!
單身三連之三
這是最終章,永久的思念。題目大意 有n張牌,每張牌兩面都有數字,範圍都在1到2n之間,求最少的反轉次數,使得每張牌朝上的一面的數字各不相同,並求出達到這個效果的方案數。多測,初始時每張牌正面朝上,無解輸出 1 1 題解 20 資料 n 20 直接搜尋即可。100 資料 n 1 105 搜尋複雜度不允...
NOIP三連測總結
近三天舉行了三場考試,好像考得都不咋地,與上一周專題訓練相比相差甚遠。單就分數來說,基本看不下去。基本就在20名左右徘徊。但是,三天以來,從第一天思維僵化忽略各種情況到今天想到第二題正解 雖然寫掛了 個人感覺自己的狀態還是在變好,並且收穫了一些乾貨 1.對於輸入輸出接近longlong的題目,不要因...
單身三連之一
乙個讓單身狗們崩潰的題 題目大意 有n件物品,一共取d次,一次取的必須少於m件,問共有多少種取法。每個物品相同,有多測,對998244353取模 題解 30 演算法 n,d 20,m 10 簡單的dp。設f i j 為取了i次,共取了j件物品的方案數,則有如下狀態轉移方程 f i j kk max ...