日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

詳解SQL嵌套子查詢_Mssql數(shù)據(jù)庫(kù)教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:詳解SQL命令大全--中文翻譯
SQL語(yǔ)句功能 -- 數(shù)據(jù)操作 SELECT--從數(shù)據(jù)庫(kù)表中檢索數(shù)據(jù)行和列 INSERT--向數(shù)據(jù)庫(kù)表添加新數(shù)據(jù)行 DELETE--從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)行 UPDATE--更新數(shù)據(jù)庫(kù)表中的數(shù)據(jù) -- 數(shù)據(jù)定義 CREATETABLE--創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表 DROPTABLE--從數(shù)據(jù)庫(kù)中刪除表 ALTERTABLE--修改數(shù)

一些初級(jí)程序員常常對(duì)SQL語(yǔ)法中的子查詢,由其對(duì)嵌套子查詢(子查詢中包含一個(gè)子查詢)的使用比較生疏,本文就此做一個(gè)基本講解,相信新手會(huì)有一定收獲。
    使用子查詢的原則
 
1.一個(gè)子查詢必須放在圓括號(hào)中。 
  2.將子查詢放在比較條件的右邊以增加可讀性。 
子查詢不包含 ORDER BY 子句。對(duì)一個(gè) SELECT 語(yǔ)句只能用一個(gè) ORDER BY 子句, 
并且如果指定了它就必須放在主 SELECT 語(yǔ)句的最后。  
ORDER BY 子句可以使用,并且在進(jìn)行 Top-N 分析時(shí)是必須的。 
  3.在子查詢中可以使用兩種比較條件:?jiǎn)涡羞\(yùn)算符和多行運(yùn)算符。 

    子查詢的類型 
單行子查詢:從內(nèi) SELECT 語(yǔ)句只返回一行的查詢 
多行子查詢:從內(nèi) SELECT 語(yǔ)句返回多行的查詢 

    單行子查詢 
單行子查詢是從內(nèi)查詢返回一行的查詢。在該子查詢類型中用一個(gè)單行操作符�;脽羝辛谐隽藛涡胁僮鞣�。 

顯示那些 job ID 與雇員 141 相同的雇員。 
SELECT last_name, job_id 
FROM employees 
WHERE job_id = 
(SELECT job_id 
FROM employees 
WHERE employee_id = 141); 

SELECT last_name, job_id, salary 
FROM employees 
WHERE job_id = 
(SELECT job_id 
FROM employees 
WHERE employee_id = 141) 
AND salary > 
(SELECT salary 
FROM employees 
WHERE employee_id = 143); 

顯示 job ID 與雇員 141 相同,并且薪水 高于雇員 143 的那些雇員。 

注:外和內(nèi)查詢可以從不同的表中取得數(shù)據(jù)。 

SELECT last_name, job_id, salary 
FROM employees 
WHERE salary = 
(SELECT MIN(salary) 
FROM employees); 

求所有人誰(shuí)的工資最小。 

SELECT department_id, MIN(salary) 
FROM employees 
GROUP BY department_id 
HAVING MIN(salary) > 
(SELECT MIN(salary) 
FROM employees 
WHERE department_id = 50); 

求每個(gè)部門的最小工資,但是要高于50號(hào)部門的工資。 

SELECT employee_id, last_name 
FROM employees 
WHERE salary = 
(SELECT MIN(salary) 
FROM employees 
GROUP BY department_id); 

問題出現(xiàn)在:?jiǎn)涡凶硬樵兎祷亓硕鄠(gè)查詢值; 
應(yīng)改為: 
SELECT employee_id, last_name 
FROM employees 
WHERE salary in 
(SELECT MIN(salary) 
FROM employees 
GROUP BY department_id);

SELECT last_name, job_id 
FROM employees 
WHERE job_id = 
(SELECT job_id 
FROM employees 
WHERE last_name = ’Haas’); 

如果子查詢返回的是零值,不會(huì)對(duì)主程序造成影響; 
如果子查詢返回的是空值,那么會(huì)影響主程序的返回值; 
SELECT employee_id, 
last_name 
FROM employees 
WHERE employee_id NOT IN 
(SELECT manager_id 
FROM employees) 

SELECT employee_id, 
last_name 
FROM employees 
WHERE employee_id NOT IN 
(SELECT manager_id 
FROM employees 
WHERE manager_id IS NOT NULL) 

放在select下的子查詢的返回值必須是一個(gè)具體值, 
from后面也可以加子查詢; 
having后面也可以加子查詢; 
order by后面也可以; 

 

多列子查詢適應(yīng)于:成對(duì)比較;非成對(duì)比較。  

SELECT employee_id, manager_id, department_id  
FROM employees  
WHERE (manager_id, department_id) IN  
(SELECT manager_id, department_id  
FROM employees  
WHERE employee_id IN (178,174))  
AND employee_id NOT IN (178,174);  

輸出:176 149 80  

只有要查詢的東西和你子查詢返回的東西一一對(duì)應(yīng)上了,你的查詢才能成功。  
如果有一個(gè) 對(duì)應(yīng)不上那么你的查詢不會(huì)成功。  

非成對(duì)的子查詢:  
SELECT employee_id, manager_id, department_id  
FROM employees  
WHERE manager_id IN (SELECT manager_id  
FROM employees  
WHERE employee_id IN (174,141))  
AND department_id IN (SELECT department_id  
FROM employees  
WHERE employee_id IN (174,141))  
AND employee_id NOT IN(174,141);  

輸出:144 124 50  
143 124 50  
142 124 50  
176 149 80  
上面兩個(gè)程序就是成對(duì)子查詢和非成對(duì)子查詢兩者之間的區(qū)別。  

如果我想去顯示員工信息,要求:?jiǎn)T工的工資高于本部門的平均工資。  
SELECT a.last_name,  
a.salary,  
a.department_id  
FROM employees a  
WHERE a.salary >  
(SELECT AVG(salary)  
FROM employees b  
WHERE b.department_id = a.department_id);  

in line view(內(nèi)聯(lián)視圖)  

SELECT a.last_name, a.salary,  
a.department_id, b.salavg  
FROM employees a, (SELECT department_id,  
AVG(salary) salavg  
FROM employees  
GROUP BY department_id) b  
WHERE a.department_id = b.department_id  
AND a.salary > b.salavg;


數(shù)據(jù)分散于多個(gè)表中需要進(jìn)行拼合
SELECT DISTINCT c.LastName, c.FirstName 
FROM Person.Contact c JOIN HumanResources.Employee e
ON e.ContactID = c.ContactID WHERE EmployeeID IN 
(SELECT SalesPersonID 
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN 
(SELECT SalesOrderID 
FROM Sales.SalesOrderDetail
WHERE ProductID IN 
(SELECT ProductID 
FROM Production.Product p 
WHERE ProductNumber LIKE 'FW123%')));

分享:揭秘SQL Server2000安全設(shè)置全攻略
Microsoft建立了一種既靈活又強(qiáng)大的安全管理機(jī)制,它能夠?qū)τ脩粼L問SQLServer服務(wù)器系統(tǒng)和數(shù)據(jù)庫(kù)的安全進(jìn)行全面地管理。按照本文介紹的步驟,你可以為SQLServer2000構(gòu)造出一個(gè)靈活的、可管理的安全策略,而且它的安全性經(jīng)得起考驗(yàn)。 一、驗(yàn)證方法選擇 本文對(duì)

來源:模板無憂//所屬分類:Mssql數(shù)據(jù)庫(kù)教程/更新時(shí)間:2010-02-25
相關(guān)Mssql數(shù)據(jù)庫(kù)教程