MySQL數據庫之多表操作

首先說一下什麼是外鍵,外鍵是指引用另外一個表中的一列或多列,被引用的列應該具有主鍵約束或唯一性約束。使用外鍵的好處就是保證數據的完整性。比如說有一個班級表和一個學生表,當刪除一個班級的時候,學生表中班級的id就相當於是垃圾數據或者錯誤數據。所以學生表使用外鍵關聯到班級表,當刪除班級的時候,只有學生表中沒有使用該班級的id(也就是沒有該班級的學生時)纔可以刪除班級,若有學生的話,必須先刪除學生,或者把學生表中班級的id值空。纔可以刪除。如何爲表添加外鍵呢:alter table 表名add constraint FK_ID foreign key (外鍵字段名) references 外表表名 (主鍵字段名);

如:alter table student add constraint FK_IDforeign key (class_id) references class (id);

刪除外鍵的語句:alter table 表名drop foreign key 外鍵名;

如:alter table student drop foreign key FK_ID;

當學生表中引用班級表的id,就說明班級是主表,學生是從表。因爲外鍵列只能插入參照列存在的值,所以如果要爲兩個表添加數據,就先爲主表添加數據。

       多表操作的重點是連接查詢和子查詢。分別是:交叉連接—select * from 表1 cross join 表2;這種方法一般很少用。

下面說一下內連接—select 查詢字段 from 表1 [inner] join表2 on 表1.關係字段 =表2.關係字段;

如:select employee.name, department.dname fromdepartment join employee on department.did=employee.did;

首先判斷員工表的id是否等於部門表的id,也就是查各部門的員工。這句相當於:select employee.name, department.dname from department,employee where department.did=employee.did;

       外鏈接分爲左連接、左外鏈接、右連接、右外鏈接,語法格式爲:

Select 所有字段 from 表1 left|right [outer] join 表2 on 表1.關係字段=表2.關係字段 where 條件;

左連接:返回包括左表中的所以記錄和有表中符合連接條件的記錄。

右連接:返回包括右表中的所以記錄和有表中符合連接條件的記錄。

如:select department.did, department.dname, employee.namefrom department left join employee on department.did=employee.did;

id

dname

name

1

網絡部

王紅

1

網絡部

李強

2

媒體部

趙四

3

研發部

null

5

人事部

Null

而右連接是這樣的:如:

select department.did,department.dname, employee.name from department right join employee ondepartment.did=employee.did;

id

dname

Name

1

網絡部

王紅

1

網絡部

李強

2

媒體部

趙四

Null

null

何娟

最後看一下子查詢:子查詢是嵌套在另一個語句內部的查詢,可以嵌套在select、insert…into等中,在執行查詢語句時,首先執行子查詢,然後將返回結果作爲外層語句的過濾條件。子查詢包括IN、EXISTS、ANY、ALL。

下面直接上語句:select * from department where did [NOT] IN(select did from employee where age=20);查詢存在員工年齡等於20 的部門;關鍵字exists只返回true或false,

select * fromdepartment where did exists(select did from employee where age>20);如果有年齡大於20的,就查詢所有部門。ANY關鍵字表示滿足其中任意一個條件便可。他們可以返回一個值列表,然後給外層查詢進行比較,如:select * from department where did>any(selectdid from employee);查詢員工表中的所以id,並返回一個id列表,供department 中的did比較,只要滿足就返回。ALL關鍵字與ANY關鍵字類似,他要滿足子查詢的所有條件。select * from department where did>all(select didfrom employee);再看一條語句,select * from department where did=(selectdid from employee where name=’趙四’).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章