高級查詢

一.使用比較運算符的子查詢

SELECT * FROM employee WHERE 
dept_no =(SELECT d_no FROM dept WHERE d_location='BeiJing')

1.使用IN子查詢
使用IN關鍵字進行子查詢是,內(nèi)層查詢語句僅僅返回一個數(shù)據(jù)列,這個數(shù)據(jù)列里的值將提供給外層查詢語句進行比較。

--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的子查詢
通常使用比較運算符來連接ANY得到的結果,它可以用于比較某一列的值是否全部都大于ANY后面子查詢中查詢的最小值,或者小于ANY后面子查詢中的最大值。

--只要滿足內(nè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時需要同時滿足所有內(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關鍵字代表‘存在’的意思,子查詢不為空,則返回TRUE,此時外層查詢語句將進行查詢,否正返回FALSE,外層查詢將不進行查詢。
EXISTS和NOT EXISTS的結果只取決于是否會返回行,而不在于這些行的內(nèi)容,所以這個子查詢輸入列表通常是無關緊要的。

--子查詢不為空,外層查詢進行查詢
SELECT * FROM employee WHERE EXISTS(SELECT * FROM dept WHERE d_no=50)

二.多表內(nèi)連接查詢

1.笛卡爾積查詢
(1) 笛卡爾積是針對多種查詢的特殊結果來說的,它的特殊之處在于多表查詢是沒有指定查詢條件,查詢的是多個表中的全部記錄,返回到具體結果是每張表中列的和、行的積。
(2)通過笛卡爾積可以得出,在使用多表連接查詢時,一定要設置查詢條件,否者就會出現(xiàn)笛卡爾積。這樣就會降低數(shù)據(jù)庫的訪問效率。

2.內(nèi)連接的簡單查詢
(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)連接查詢
在一個連接查詢中,涉及的兩種表都是同一張表,這種查詢稱為子連接查詢,也被稱為特殊的內(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)左外連接:查詢得到的結果,除了符合條件的查詢部分結果,還要加上左表中余下的數(shù)據(jù)。
(2)右外連接:查詢得到的結果,除了符合條件的查詢部分結果,還要加上右表中余下的數(shù)據(jù)。
(3)全連接:查詢得到的結果,除了符合條件的查詢部分結果,還要加上左表和右表中余下的數(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

四.動態(tài)查詢

--設置變量@location和@job,搭建好查詢語句,在賦值處輸入查詢條件的值
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
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容