一,多表關(guān)系
1.一對(duì)多
實(shí)現(xiàn):在多的一方建立外鍵,指向一的一方的主鍵
2.多對(duì)多
關(guān)系:一個(gè)學(xué)生可以選修多門課程,一門課程也可以供多個(gè)學(xué)生選擇
實(shí)現(xiàn):建立第三張中間表,中間表至少包含兩個(gè)外鍵,分別關(guān)聯(lián)兩方主鍵
3.一對(duì)一
關(guān)系:一對(duì)一關(guān)系,多用于單表拆分,將一張表的基礎(chǔ)字段放在一張表中, 其他詳情字段放在另一張表中,以提升操作效率
實(shí)現(xiàn):在任意一方加入外鍵, 關(guān)聯(lián)另外一方的主鍵,并且設(shè)置外鍵為唯一(UNIQUE)
二,多表查詢概述
1.多表查詢方法:
多表查詢使用select*from 表1,表2;這種方法時(shí)會(huì)出現(xiàn)笛卡爾積現(xiàn)象,要消除笛卡爾積就要在該語(yǔ)句后面加入where語(yǔ)句進(jìn)行篩選,找出符合某條件的結(jié)果
2.多表查詢的分類:
連接查詢
內(nèi)連接:相當(dāng)于查詢A、B交集部分?jǐn)?shù)據(jù)
外連接:
左外連接:查詢左表所有數(shù)據(jù),以及兩張表交集部分?jǐn)?shù)據(jù)
右外連接:查詢右表所有數(shù)據(jù),以及兩張表交集部分?jǐn)?shù)據(jù)
自連接:當(dāng)前表與自身的連接查詢,自連接必須使用表別名
子查詢
3.連接查詢
(1).內(nèi)連接查詢語(yǔ)法(內(nèi)連接查詢的時(shí)兩張表交集的部分)
隱式內(nèi)連接:SELECT 字段列表 FROM 表1,表2WHERE 條件......;
顯式內(nèi)連接:SELECT 字段列表 FROM 表1,[INNER] JOIN 表2 ON 連接條件...;
(2).外連接查詢語(yǔ)法
左外連接:SELECT字段列表FROM表1 LEFT [OUTER] JOIN表2 ON條件... ;
相當(dāng)于查詢表1(左表)的所有數(shù)據(jù)包含表1和表2交集部分的數(shù)據(jù)
右外連接:SELECT字段列表FROM表1 RIGHT [ OUTER] JOIN表2 ON條件...;
相當(dāng)于查詢表2(右表)的所有數(shù)據(jù)包含表1和表2交集部分的數(shù)據(jù)
(3)自連接查詢語(yǔ)法
SELECT字段列表FROM 表A別名A JOIN 表A別名B ON條件
自連接查詢,可以是內(nèi)連接查詢,也可以是外連接查詢。
4.聯(lián)合查詢(UNION,UNION ALL)
SELECT字段列表FROM表A
...
UNION [ALL ]
SELECT字段列表FROM表B
...
對(duì)于union查詢,就是把多次查詢的結(jié)果合并起來(lái),形成一個(gè)新的查詢結(jié)果集。
UNION ALL是直接將所有查詢結(jié)果直接合并,而UNION是將查詢后去重的結(jié)果
對(duì)于聯(lián)合查詢的多張表的列數(shù)必須保持一致, 字段類型也需要保持一致。
5.子查詢(嵌套查詢)
概念: SQL語(yǔ)句中嵌套SELECT語(yǔ)句,稱為嵌套查詢,又稱子查詢。
SELECT * FROM t1 WHERE column1= ( SELECT column1 FROM t2 );
子查詢外部的語(yǔ)句可以是INSERT / UPDATE / DELETE / SELECT的任何一個(gè)。
根據(jù)子查詢結(jié)果不同,分為:
?標(biāo)量子查詢(子查詢結(jié)果為單個(gè)值)
?列子 查詢(子查詢結(jié)果為- -列)
?行子查詢(子 查詢結(jié)果為- -行)
?表子查詢(子 查詢結(jié)果為多行多列
(1)標(biāo)量子查詢
子查詢返回的結(jié)果是單個(gè)值(數(shù)字、字符串、日期等),最簡(jiǎn)單的形式,這種子查詢成為標(biāo)量子查詢。
常用的操作符:=, <>, >, >=, <,<=
(2)列子查詢
子查詢返回的結(jié)果是一列(可以是多行),這種子查詢稱為列子查詢。
常用的操作符: IN、NQTIN、ANY、SOME、ALL
(3)行子查詢
子查詢返回的結(jié)果是一行(可以是多列) ,這種子查詢稱為行子查詢。
常用的操作符:=、<>、IN、NOT IN