首先說一下什麼是外鍵,外鍵是指引用另外一個表中的一列或多列,被引用的列應該具有主鍵約束或唯一性約束。使用外鍵的好處就是保證數據的完整性。比如說有一個班級表和一個學生表,當刪除一個班級的時候,學生表中班級的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=’趙四’).