程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> SQL語句之 多表管理,sql語句管理

SQL語句之 多表管理,sql語句管理

編輯:MySQL綜合教程

SQL語句之 多表管理,sql語句管理


SQL語句之 多表管理

一個數據庫內通常會有不止一張表,有時候我們要把多張表聯系起來,這就需要用到多表管理的語句。

 

1.外鍵約束

一個表中的非主鍵字段,如果在另外一張表中是主鍵,那麼這個字段我們叫它做外鍵。

 

例如,現在有兩個表:

學生表 - 學號,姓名,性別,所在班級號

班級表 - 班級號,班級人數

 

在學生表中,學號是主鍵;在班級表中,班級號是主鍵,而學生表中‘所在班級號’是非主鍵。所以,所在班級號對學生表來說是一個外鍵。

 

語句:CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid)

外鍵的名字 副表屬性 綁定   主表屬性

先創建主表:

CREATE TABLE class(

cid INT PRIMARY KEY,

ccount INT

);

 

然後創建副表來加入外鍵:

CREATE TABLE student(

sid INT PRIMARY KEY,

sname VARCHAR(20),

sex VARCHAR(4),

classid INT,

CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid)

);

 

外鍵的作用:

 

 

2.級聯操作

如果想要在主表把主鍵的值改變,然後副表外鍵的值跟著改變,那麼就要需要級聯操作。

 

2.1級聯更新

CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid) ON UPDATE CASCADE -- 級聯更新(更新主表數據,副表會跟著改變)

 

2.2級聯刪除

CONSTRAINT student_class_fk FOREIGN KEY (classid) REFERENCES class(cid) ON DELETE CASCADE -- 級聯刪除(刪除主表數據,副表會跟著刪除)

 

3.多表查詢

3.1 交叉查詢

-- 2.1 交叉查詢(產生笛卡爾積: 表1的總記錄 * 表2的總記錄) (不希望出現)

SELECT sid,cid FROM student,class;

 

3.2 內連接

 

-- 2.2 內連接查詢(使用最頻繁)

-- 特點: 要在滿足表條件的前提的數據才顯示出來(不包括null值)

-- 多表查詢的思路: 1) 確定有哪些表  2)確定查詢出哪些字段   3)確定表和表之間的關系(條件數據: n-1)

-- 需求: 查詢1班學生的姓名和1班的人數

SELECT s.sname,c.ccount   -- 哪些字段

FROM  student s,class c        -- 哪些表   

WHERE s.classid=c.cid; -- 表的條件

 

SELECT s.sname,c.ccount

FROM student s

INNER JOIN class c     -- inner join : 內連接查詢

ON s.classid=c.cid; 

 

3.3 左外連接

-- 2.3 左外連接

-- 需求: 查詢哪個班有哪些學生

-- 左外連接查詢: 用左邊的表數據去匹配右邊的表數據,右邊表數據如果匹配成功,則顯示記錄,如果匹配不成功,則顯示null

SELECT s.sname,c.cid

FROM  s.sname

LEFT OUTER JOIN class c 

ON s.classid=c.cid; 

 

3.4 右外連接

 

-- 2.4 右外連接: 和左外連接相反

-- 右外連接查詢: 用右邊的表數據去匹配左邊的表數據,左邊表數據如果匹配成功,則顯示記錄,如果匹配不成功,則顯示null

SELECT s.sname,c.cid

FROM class c 

RIGHT OUTER JOIN s.sname

ON s.classid=c.cid; 

 

3.5 自連接

-- 2.5 自連接(當前表連接當前表) 

自連接就是把同一張表虛擬出兩份一模一樣的表,然後起一個別名,然後連接兩張表來查詢。

SELECT e.ename,b.ename

FROM employee e -- 員工表

LEFT OUTER JOIN employee b  -- 上司表

ON e.boosId=b.eid;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved