Day9 MySQL 多表之間的連線

2021-09-25 06:37:16 字數 3724 閱讀 5773

約束型別—primary key:主鍵約束

表示id不可以重複,通過id來確定唯一的一條記錄(唯一標識資料表中的行/記錄)

非空:表示這個列的值不能為空

自增:表示插入記錄的時候不需要手動插入,會自動增長

注意:1:n的關係:就把1放入多的一方。例如:班級和學生是1:n的關係,就在學生表中加入team_id;

n:n的關係:需要通過乙個中間表用來維護兩個之間的關係。例如:老師和班級是n:n的關係,建立乙個team_teacher表,表中包含team_id和teacher_id

例題:查詢501班的老師名字和教的科目名字

思路:

1、先通過班級表找到班級的id

2、通過中間表找到對應班級id的老師id

3、再通過老師表找到對應老師id的老師資訊

select id from team where name ='501';-- 先找到班級的id 501班的id是1

select teacher_id from team_teacher where team_id='1';-- 通過中間表找到班級id是1的老師的id

select * from teacher where id='1' or id='2';-- 再通過老師的id找到老師的資訊

步驟一:

步驟二:

步驟三:

整合:

in():-- in表示 id只要 等於小括號()裡面的值都可以

逗號,相當於 or

-- 兩種方式相同

select name,subject from teacher where id='1' or id='2';

select name,subject from teacher where id in (1,2);

方法一 :使用子查詢

子查詢:把乙個sql查詢的結果,作為另外乙個查詢的條件使用

通過in()方法

select id from team where name =『501』;

select teacher_id from team_teacher where team_id=『1』;

select t.name,t.subject from teacher t where 

t.id in

(select teacher_id from team_teacher where team_id='1');

巢狀兩次子查詢:select id from team where name =『501』;

select teacher_id from team_teacher where team_id=『1』;

select * from teacher where id=『1』 or id=『2』;

select t.name,t.subject from teacher t where t.id in

(select teacher_id from team_teacher where team_id in(select id from team where name ='501'));

方法二 :使用連線

sql連線(join)子句用於將資料庫中兩個或者兩個以上表中的記錄組合起來。連線通過共有值將不同表中的字段組合在一起。

select t.name,t.subject from teacher t left join team_teacher tt 

on (t.id=tt.teacher_id)

left join team te on (te.id=tt.team_id) where te.name='501';

左連線(left join):返回左表中的所有行,即使右表中沒有匹配的行。

右連線(right join):返回右表中的所有行,即使左表中沒有匹配的行。

on(匹配條件)

三、左連線與右連線的結果理解

左連線結果數量:

在查詢結果中,左邊的記錄會全部包含

– on後面的匹配條件,如果匹配到0或者1,對結果的總數沒有影響

– 如果匹配,大於1條,那麼對於結果,結果就增加(匹配數量-1)的個數

select *from team t left join  team_teacher tt on (t.id=tt.team_id);-- 班級表連線中間表
左表 team表(結果記錄id 中至少有3條):

右表 team_teacher表 匹配的 team_id 行:(結果記錄中+1+1)

結果:5條

右連線的結果數量:

在查詢結果中,右邊的記錄會全部包含

select *from team t right join  team_teacher tt on (t.id=tt.team_id);
右表 team_teacher 表(結果記錄team_id 中至少有4條):

左邊 team表 匹配的 id 行:(結果記錄總數沒有影響 —都只有1條)

結果:4條

day04 MySQL多表 事務

笛卡爾積 內連線查詢 顯式內連線 從哪些表中查詢資料 條件是什麼 查詢哪些字段 外鏈結查詢 右外連線 子查詢概念 查詢中巢狀查詢,稱巢狀查詢為子查詢。子查詢的結果是多行單列的 子查詢的結果是多行多列的 概念操作 開啟事務 start transaction 回滾 rollback 提交 commit...

mysql 多表及其之間的關係

一對多關係 客戶和訂單 分類和商品 部門和員工。一對多建表原則 在多的一方建立乙個字段,字段作為外來鍵指向一方的主鍵。商品表 product 多 pid 分類表 category 一 cid 通過外來鍵約束,如下 alter table product add foreign key pid ref...

mysql學習(5) 多表之間的關係

mysql相互關聯的表之間存在一對一,一對多 多對一 多對多的關係。1,一對一的關係 這種關係即多個表具有相同的主鍵,實際中用的並不多,因為完全可以將這種關係的合併為同一張表。2,一對多 多對一 的關係 其中表1的主鍵是表2的外來鍵 即表1的某欄位作為主鍵,表2的相同欄位字段繫結到表1的主鍵欄位上 ...