select 查询例子集
ast1.查詢沒有折扣的商店
a.?
use pubs SELECT stor_id AS "store id" ,stor_name AS "Store Name" FROM stores WHERE stor_id NOT IN (SELECT stor_id FROM discounts WHERE stor_id IS NOT NULL)b.
SELECT stor_id AS "store id" ,stor_name AS "Store Name" FROM stores WHERE stor_id in (SELECT stor_id FROM discounts WHERE stor_id IS NULL )?
a?和?b?看似相同,但是a?有結(jié)果,而b卻沒有,因為stord_id如果是null?那怎把null值傳遞回去還是null
?
2.查詢有訂單的顧客的第一筆訂單。
USE Northwind select min(o.OrderID) AS ORDERID,o.CustomerID INTO #TEMP_ORDER from Orders o group by o.CustomerID order by CustomerID select o.OrderID ,o.CustomerID,o.OrderDate from Orders o inner join #TEMP_ORDER b on o.OrderID=b.OrderID order by o.CustomerID#開頭命名的表為臨時表,存放在tempdb中,如用戶使用完畢后不手動刪除此臨時表,只要斷開northwind的連接(比如使用了其他數(shù)據(jù)庫?pubs)則臨時表自動被刪除。
?
3.?.查詢有訂單的顧客的第一筆訂單,從未有過訂單的顯示‘NERVER?ORDER’。
select cu.CompanyName, isnull(cast((select MIN(o.orderdate) from Orders o where o.CustomerID=cu.CustomerID)as varchar),'NERVER ORDERED' ) as "order date" from Customers cu?
ISNULL?函數(shù),ISNULL(<expression?to?test>,<replacement?value?if?null>)
其中還使用到了CAST,因為當‘order?date’列第一列結(jié)果返回的是date類型,但是后面碰到第一列是沒有訂單的,即'NERVER?ORDER'是varchar類型的,不能轉(zhuǎn)換成date類型,所以需要cast來強制轉(zhuǎn)換。cast?列?as?新類型。
?
4.尋找不僅訂購了?chocolade并且訂購了?Vegie-spread的用戶。
use Northwind select distinct c.CompanyName from Customers as c join ( select customerid from orders o join [Order Details] od on o.OrderID=od.OrderID join Products p on od.ProductID=p.ProductID where p.ProductName='chocolade') as spen on c.CustomerID=spen.CustomerID join (select customerid from Orders o join [Order Details] od on o.OrderID=od.OrderID join Products p on od.ProductID=p.ProductID where ProductName='vegie-spread') as spap on c.CustomerID=spap.CustomerID這個查詢用到了派生表———由一個查詢結(jié)果集的列和行構(gòu)成。
?
5.以MM/DD/YY?顯示結(jié)果
use Northwind select convert(varchar(10),HireDate,1) from EmployeesCAST(expression?AS?data_type)
CONVERT(data_type,experession?[,style])
convert?和cast相比,多了一些日期格式轉(zhuǎn)換功能,但是convert不能代替cast!因為cast是ANSI兼容的,而convert?不是。
?
6.沒有定過單的用戶
use Northwind select cu.CompanyName from Customers cu where not exists (select o.CustomerID from orders o where cu.CustomerID=o.CustomerID)EXISTS?一般用于聯(lián)合連接,因為需要外傳遞值進子查詢,然后子查詢返回?TRUE或者FALSE。
?
7.?用戶訂單總額超過25000美元,查出這些用戶的前五條訂單
select * from ( select *, row_number() over( PARTITION by customerid order by orderdate desc) rowid from ( select o.CustomerID,o.OrderID,o.OrderDate from Orders o inner join ( select o.CustomerID,sum(temp.price) as tprice from Orders o join (select od.OrderID, sum(od.ProductID*od.Quantity*(1-od.Discount) )as price from [Order Details] od group by od.OrderID) as temp on temp.OrderID=o.OrderID group by o.CustomerID having SUM(temp.price)>25000 )tmp on o.CustomerID=tmp.CustomerID ) aa )bb where rowid<=5說明:返回結(jié)果集分區(qū)內(nèi)行的序列號,每個分區(qū)的第一行從?1?開始。
語法:ROW_NUMBER?()?OVER?(?[?<partition_by_clause>?]<order_by_clause>?)?。
備注:ORDERBY?子句可確定在特定分區(qū)中為行分配唯一?ROW_NUMBER?的順序。
參數(shù):<partition_by_clause>?:將?FROM?子句生成的結(jié)果集劃入應用了?ROW_NUMBER?函數(shù)的分區(qū)。?
<order_by_clause>:確定將?ROW_NUMBER?值分配給分區(qū)中的行的順序。
返回類型:bigint?。
轉(zhuǎn)載于:https://blog.51cto.com/kingheihei/1209059
總結(jié)
以上是生活随笔為你收集整理的select 查询例子集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下Redis的安装、配置操作说
- 下一篇: Wo Cloud CentOS 挂载磁盘