MySQL基礎 多表操作

2021-07-30 17:03:24 字數 4961 閱讀 1666

1.外來鍵

(1)定義:

引用另乙個表中的一列或多列,被引用的列應該具有主鍵約束或唯一性約束,外來鍵用於建立和加強兩個表資料之間的連線。

(2)為表新增外來鍵約束

alter

table student add

constraint fk_id foreign

key(gid)

references grade (id)

;

注: gid外來鍵依賴於grade表中的id主鍵,gid是student的外來鍵。

(3)刪除外來鍵約束

alter

table student drop

foreign

key fk_id;

例:

部門表(主表)

create

table dept(

id int

primary

key,

deptname varchar(20

))

修改員工表(副表/從表)

create

table employee(

id int

primary

key,

empname varchar(20

),deptid int

,constraint emlyee_dept_fk foreign

key(deptid)

references dept(id)

-- 外來鍵名稱 外來鍵 參考表(參考字段)

)

注意:

(4)級聯操作

出現原因:當有了外來鍵約束的時候,必須先修改或刪除副表中的所有關聯資料,才能修改或刪除主表!我們希望直接修改或刪除主表資料,從而影響副表資料。就可以使用級聯操作實現!

級聯修改: on update cascade

級聯刪除: on delete cascade

例:

constraint emlyee_dept_fk foreign

key(deptid)

references dept(id)

onupdate

cascade

ondelete

cascade

應用:

例:直接修改部門

update dept set id=

5where id=

4;

例:直接刪除部門

delete

from dept where id=

1;

2.操作關聯表

(1)關聯關係

(2)新增資料

insert

into grade (id,name)

values(1

,'oneclass');

insert

into grade (id,name)

values(2

,'twoclass'

);

注:由於student表的外來鍵與grade表的主鍵關聯,因此在為student表新增資料時,gid的值只能是1或2。

(3)刪除資料

delete

from grade where id =

1;

3.連線查詢
# 建表

create

table tbl_dept(

id int(11

)not

null

auto_increment

,deptname varchar(30

)default

null

,locadd varchar(40

)default

null

,primary

key(id)

)engine

=innodb

auto_increment=1

default

charset

=utf8;

create

table tbl_emp(

id int(11

)not

null

auto_increment

,name varchar(20

)default

null

,deptld int(11

)default

null

,primary

key(id)

,constraint fk_dept_id foreign

key(deptld)

references tbl_dept(id)

)engine

=innodb

auto_increment=1

default

charset

=utf8;

# 插入資料

insert

into tbl_dept(deptname,locadd)

values

(「rd」,11)

;insert

into tbl_dept(deptname,locadd)

values

(「hr」,12)

;insert

into tbl_dept(deptname,locadd)

values

(「mk」,13)

;insert

into tbl_dept(deptname,locadd)

values

(「mis」,14)

;insert

into tbl_dept(deptname,locadd)

values

(「fd」,15)

;insert

into tbl_emp(name,deptld)

values

(「z3」,1)

;insert

into tbl_emp(name,deptld)

values

(「z4」,1)

;insert

into tbl_emp(name,deptld)

values

(「z5」,1)

;insert

into tbl_emp(name,deptld)

values

(「w5」,2)

;insert

into tbl_emp(name,deptld)

values

(「w6」,2)

;

7種連線查詢示例

(1)笛卡爾查詢:兩張表相乘的結果

select

*from dept,possible;

(2)內連線查詢:查詢出左邊表右邊表都有的資料記錄。

select

*from dept,possible where dept.id = possible.dept_id;

select

*from dept inner

join possible on dept.id = possible.dept_id;

(3)外連線查詢

select

*from dept left

join possible on dept.id = possible.dept_id;

select

*from dept right

join possible on dept.id = possible.dept_id;

select

*from dept full

join possible on dept.id = possible.dept_id;

注:mysql不支援全外連線查詢,mysql中合併左外右外查詢從而達到全外連線查詢的目的

4.子查詢

(1)帶in關鍵字的子查詢

select dname from departmaent where did in

(select did from employee where age=20)

;

注:not in 關鍵字與in作用相反;

(2)帶exists關鍵字的子查詢(不產生任何資料,只返回true或false)

select

*from department where

exists

(select

*from employee where age>21)

;

(3)帶any關鍵字的子查詢

select

*from department where did>

any(

select did from employee)

;

(4)帶all關鍵字的子查詢

select

*from department where did >

all(

select did from employee)

;

(5)帶比較運算子的子查詢

select dname from department where id =

(select did from employee where name=

'lee'

);

本人才疏學淺,如有錯誤,請指出

謝謝!

mysql的多表操作 MySQL多表操作

交叉連線 交叉連線 cross join 又稱笛卡爾連線 cartesian join 或叉乘 product 它是所有型別內連線的基礎。它把表看作是行記錄的集合,交叉連線即返回這兩個集合的笛卡爾積。這其實等價於內連線的連線條件始終為 真 或連線條件不存在。笛卡爾積引用自數學,在數學中,兩個集合x和...

MySQL入門基礎 3 多表操作

實際開發中的表之間是存在關係的,用於描述現實生活中的物件關係 alter table 多表名稱 add foreign key 外來鍵名稱 references 一表名稱 主鍵 select a.b.from a join b on ab連線條件 顯示的內連線,join之前表是主表 select a...

MySQL多表操作

方式一 create table stu sid int primary key,sname varchar 20 age int 方式二 create table stu sid int,sname varchar 20 age int,primary key sid 方式三 create tab...