一.使用比較運(yùn)算符的子查詢
SELECT * FROM employee WHERE
dept_no =(SELECT d_no FROM dept WHERE d_location='BeiJing')
1.使用IN子查詢
使用IN關(guān)鍵字進(jìn)行子查詢是,內(nèi)層查詢語(yǔ)句僅僅返回一個(gè)數(shù)據(jù)列狭莱,這個(gè)數(shù)據(jù)列里的值將提供給外層查詢語(yǔ)句進(jìn)行比較柜思。
--IN
SELECT * FROM employee WHERE dept_no IN(SELECT d_no FROM dept WHERE d_location='BeiJing')
--NOT IN
SELECT * FROM employee WHERE dept_no NOT IN(SELECT d_no FROM dept WHERE d_location='BeiJing')
2.使用ANY的子查詢
通常使用比較運(yùn)算符來(lái)連接ANY得到的結(jié)果爸业,它可以用于比較某一列的值是否全部都大于ANY后面子查詢中查詢的最小值,或者小于ANY后面子查詢中的最大值盐须。
--只要滿足內(nèi)層查詢中的一個(gè)條件,就能查出來(lái)
SELECT * FROM employee WHERE e_salary>ANY
(SELECT e_salary FROM employee WHERE dept_no IN(SELECT d_no FROM dept WHERE d_location='BeiJing')) AND dept_no=20
3.使用ALL的子查詢
使用ALL時(shí)需要同時(shí)滿足所有內(nèi)層查詢的條件。
--查出的數(shù)據(jù)需要滿足內(nèi)層查詢中所有條件
SELECT * FROM employee WHERE e_salary>ALL
(SELECT e_salary FROM employee WHERE dept_no IN(SELECT d_no FROM dept WHERE d_name='SALES')) AND dept_no=20
4.使用EXISTS的子查詢
EXISTS關(guān)鍵字代表‘存在’的意思见擦,子查詢不為空,則返回TRUE羹令,此時(shí)外層查詢語(yǔ)句將進(jìn)行查詢锡宋,否正返回FALSE,外層查詢將不進(jìn)行查詢。
EXISTS和NOT EXISTS的結(jié)果只取決于是否會(huì)返回行特恬,而不在于這些行的內(nèi)容执俩,所以這個(gè)子查詢輸入列表通常是無(wú)關(guān)緊要的。
--子查詢不為空癌刽,外層查詢進(jìn)行查詢
SELECT * FROM employee WHERE EXISTS(SELECT * FROM dept WHERE d_no=50)
二.多表內(nèi)連接查詢
1.笛卡爾積查詢
(1) 笛卡爾積是針對(duì)多種查詢的特殊結(jié)果來(lái)說(shuō)的役首,它的特殊之處在于多表查詢是沒(méi)有指定查詢條件尝丐,查詢的是多個(gè)表中的全部記錄,返回到具體結(jié)果是每張表中列的和衡奥、行的積爹袁。
(2)通過(guò)笛卡爾積可以得出,在使用多表連接查詢時(shí)矮固,一定要設(shè)置查詢條件失息,否者就會(huì)出現(xiàn)笛卡爾積。這樣就會(huì)降低數(shù)據(jù)庫(kù)的訪問(wèn)效率档址。
2.內(nèi)連接的簡(jiǎn)單查詢
(1)等值內(nèi)連接查詢
SELECT * FROM employee
INNER JOIN dept ON employee.dept_no=dept.d_no
(2)不等值內(nèi)連接查詢
SELECT * FROM employee
INNER JOIN dept ON employee.dept_no<>dept.d_no
(2)特殊的內(nèi)連接查詢
在一個(gè)連接查詢中盹兢,涉及的兩種表都是同一張表,這種查詢稱為子連接查詢守伸,也被稱為特殊的內(nèi)連接绎秒,它是指互相連接的表在物理上是同一張表,但可以在邏輯上分為兩張表尼摹。
SELECT DISTINCT e1.e_no,e1.e_name FROM employee AS e1,employee AS e2 WHERE e1.dept_no=e2.dept_no AND e2.dept_no=20
(3)帶條件的內(nèi)連接查詢
SELECT * FROM employee
INNER JOIN dept ON employee.dept_no=dept.d_no
WHERE dept_no=30
三.多表外連接查詢
1.外連接種類
外連接查詢包括左外連接见芹、右外連接以及全外連接。
SELECT * FROM table
LEFT|RIGHT|FULL OUTER JOIN table2
ON conditions;
(1)左外連接:查詢得到的結(jié)果蠢涝,除了符合條件的查詢部分結(jié)果玄呛,還要加上左表中余下的數(shù)據(jù)。
(2)右外連接:查詢得到的結(jié)果和二,除了符合條件的查詢部分結(jié)果把鉴,還要加上右表中余下的數(shù)據(jù)。
(3)全連接:查詢得到的結(jié)果儿咱,除了符合條件的查詢部分結(jié)果庭砍,還要加上左表和右表中余下的數(shù)據(jù)。
2.左外連接
SELECT * FROM employee
LEFT JOIN dept ON employee.dept_no=dept.d_no
3.右外連接
SELECT * FROM employee
RIGHT JOIN dept ON employee.dept_no=dept.d_no
4.全外連接
SELECT * FROM employee
FULL JOIN dept ON employee.dept_no=dept.d_no
四.動(dòng)態(tài)查詢
--設(shè)置變量@location和@job混埠,搭建好查詢語(yǔ)句怠缸,在賦值處輸入查詢條件的值
DECLARE
@location VARCHAR(20),
@job VARCHAR(20)
SELECT @location='BeiJing',@job='ANALYST'
SELECT * FROM employee
LEFT JOIN dept ON employee.dept_no=dept.d_no
WHERE d_location=@location AND e_job=@job