資料庫之多表操作

2022-09-12 02:12:09 字數 4704 閱讀 7456

分析步驟:

#1、先站在左表的角度去找

是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的乙個欄位foreign key 右表乙個字段(通常是id)

#2、再站在右表的角度去找

是否右表的多條記錄可以對應左表的一條記錄,如果是,則證明右表的乙個欄位foreign key 左表乙個字段(通常是id)

#3、總結:

#多對一:

如果只有步驟1成立,則是左表多對一右表

如果只有步驟2成立,則是右表多對一左表

#多對多

如果步驟1和2同時成立,則證明這兩張表時乙個雙向的多對一,即多對多,需要定義乙個這兩張表的關係表來專門存放二者的關係

#一對一:

如果1和2都不成立,而是左表的一條記錄唯一對應右表的一條記錄,反之亦然。這種情況很簡單,就是在左表foreign key右表的基礎上,將左表的外來鍵字段設定成unique即可

建立表之間的關係

#

一對多或稱為多對一

三張表:出版社,作者資訊,書

一對多(或多對一):乙個出版社可以出版多本書

關聯方式:foreign key

sql示例

********************=多對一********************=create table press(

id int primary key auto_increment,

name varchar(20)

);create table book(

id int primary key auto_increment,

name varchar(20),

press_id int

notnull,

foreign key(press_id) references press(id)

on delete cascade

on update cascade

);insert into press(name) values('

北京工業地雷出版社'),

('人民**不好聽出版社'),

('智財權沒有用出版社')

;insert into book(name,press_id) values('

九陽神功

',1),('

九陰真經

',2),('

九陰白骨爪

',2),('

獨孤九劍

',3),('

降龍十巴掌

',2),('

葵花寶典

',3)

;sql示例

其他示例

班級和學生

乙個班級可以對應多個學生,但乙個學生只能對應乙個班級

主機和機房

乙個機房可以有多台主機,但是乙個主機只能屬於乙個機房

#

多對多三張表:出版社,作者資訊,書

多對多:乙個作者可以寫多本書,一本書也可以有多個作者,雙向的一對多,即多對多

關聯方式:foreign key+一張新的表

多對多sql示例

********************=多對多********************=create table author(

id int primary key auto_increment,

name varchar(20));#

這張表就存放作者表與書表的關係,即查詢二者的關係查這錶就可以了

create table author2book(

id int

notnull unique auto_increment,

author_id int

notnull,

book_id int

notnull,

constraint fk_author foreign key(author_id) references author(id)

on delete cascade

on update cascade,

constraint fk_book foreign key(book_id) references book(id)

on delete cascade

on update cascade,

primary key(author_id,book_id));#

插入四個作者,id依次排開

insert into author(name) values('

egon

'),('

alex

'),('

yuanhao

'),('

wpq');#

每個作者與自己的代表作如下

egon:

九陽神功

九陰真經

九陰白骨爪

獨孤九劍

降龍十巴掌

葵花寶典

alex:

九陽神功

葵花寶典

yuanhao:

獨孤九劍

降龍十巴掌

葵花寶典

wpq:

九陽神功

insert into author2book(author_id,book_id) values

(1,1),

(1,2),

(1,3),

(1,4),

(1,5),

(1,6),

(2,1),

(2,6),

(3,4),

(3,5),

(3,6),

(4,1)

;sql示例

服務和機器

乙個服務可能被部署到多台機器上,一台機器上也可以部署多個服務

學生和課程

乙個學生可以選擇多門課程,一門課程也可以被多個學生選擇

#一對一

兩張表:學生表和客戶表

一對一:乙個學生是乙個客戶

關聯方式:foreign key+unique

create table customer(

->id int primary key auto_increment,

-> name varchar(20) not

null,

-> qq varchar(10) not

null,

-> phone char(16) not

null

->);

create table student(

->id int primary key auto_increment,

-> class_name varchar(20) not

null,

-> customer_id int unique, #

該欄位一定要是唯一的

-> foreign key(customer_id) references customer(id) #

外來鍵的字段一定要保證unique

->on delete cascade

->on update cascade

->);

#增加客戶

mysql>insert into customer(name,qq,phone) values

-> ('

韓蕾','

31811231

',13811341220),

-> ('

楊瀾','

123123123

',15213146809),

-> ('

翁惠天','

283818181

',1867141331),

-> ('

楊宗河','

283818181

',1851143312),

-> ('

袁承明','

888818181

',1861243314),

-> ('

袁清','

112312312

',18811431230)

mysql> #

增加學生

mysql>insert into student(class_name,customer_id) values

-> ('

脫產1班

',3),

-> ('

週末1期

',4),

-> ('

週末1期

',5)

->;

sql示例

例一:乙個使用者只有乙個部落格

使用者表:

id name

1egon

2alex

3wupeiqi

部落格表

fk+unique

id url name_id

1 ***x 1

2 yyyy 3

3 zzz 2例二:乙個管理員唯一對應乙個使用者

使用者表:

id user password

1egon ***x

2alex yyyy

管理員表:

fk+unique

id user_id password

1 1***xx

2 2yyyyy

其他示例

oracle資料庫之多表查詢

select s.stuid,s.stuname,s.stuage,s.gender,cl.classesname from student s,classes cl where s.classesid cl.classesid select s.stuid,s.stuname,s.stuage,s...

資料庫之多表查詢(連線查詢)

一 非等值和等值的多表查詢 select c.catname 圖書類別 b.bookname 書名 b.price from cats c,book b select c.catname 圖書類別 b.bookname 書名 b.price from cats c,book b where c.id...

資料庫Oracle強化練習之多表查詢

1.列出所有雇員的姓名及其直接上級的姓名 select a.ename,a.mgr,b.ename,b.empno from emp a,emp b where a.mgr b.empno 2.列出部門名稱和這些部門的雇員,同時列出那些沒有雇員的部門 select dept.deptno,dname...