約束型別—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的主鍵欄位上 ...