SQL with NUll處理,Join系列,between,in對比exists以及少許題目

1.一些題目:html

選擇在每一組B值相同的數據中對應的a最大的記錄的全部信息,(用於論壇每個月排行榜)數據庫

Selecta,b,c from tableta  wherea=(select max(a) from tabletb where tableb.b= tableta.b )oracle

隨機抽取出10條數據函數

Select top 10 * from tablename order bynewid()測試

刪除重複的記錄大數據

Delete from tablename where id notin(select max(id) from tablename group by col1,col2…..)ui

選擇從10到15的記錄spa

Select top 5 * from (select top 15* fromtable order by id asc) table_別名 order by id desc.net

oracle order by 處理NULL 值

適用狀況: 
oracle 對查詢結果進行排序時,被排序的欄位存在null值,且要指定NULL值排在最前面或者最後面 

關鍵字:Nulls First;Nulls Last 

默認狀況:null 默認爲最大值(即:asc 升序<小-->大>,null值排在最後;desc 降序<大-->小>,null值排在最前面) 

指定: 
1. Oracle Order by支持的語法 
2. 指定Nulls first 則表示null值的記錄將排在最前(無論是asc 仍是desc) 
3. 指定Nulls last 則表示null值的記錄將排在最後(無論是asc 仍是desc) 
語法舉例:(Table:Tab_A 有部分空值的欄位Col_A) 
select * from Tab_A order by Tab_A. Col_A (asc/desc) nulls first ------>null 值排在最前面 
select * from Tab_A order by Tab_A. Col_A (asc/desc) nulls last ------>null 值排在最後面 

其餘方法: 
在order by 的時候,用Nvl、NVL2 、Decode、case .....when....end;等函數對欄位的null值進行處理 
例如:select * from Tab_A order by NVL(Tab_A. Col_A,'abc' ) (asc/desc) ;


SQL JOIN類型的查詢語句:


INNER JOIN//JOIN:若是表中有至少一個匹配,則返回行.(INNER JOIN 與 JOIN 是相同的.)
LEFT JOIN: 即便右表中沒有匹配,也從左表返回全部的行
RIGHT JOIN: 即便左表中沒有匹配,也從右表返回全部的行
FULL JOIN: 只要其中一個表中存在匹配,就返回行.在某些數據庫中, FULL JOIN 稱爲 FULL OUTER JOIN。

1.INNER JOIN(join)
select u.realname,r.num,r.roles from userinfo as u INNER JOIN roles as r ON u.id=r.uid  
查詢出符合條件的信息.

2.left join
select u.realname,r.num,r.roles from userinfo as u LEFT JOIN roles as r ON u.id=r.uid 
查詢出符合條件的信息後,左表不匹配的也會從左表返回全部的行,而且顯示右邊的數據爲空(可是已查出的某行數據<適合的多是多條>,不會在最後不匹配隊列中返回.)

3.right join
和left join反過來,不解釋了.

4.full jion(FULL OUTER JOIN)
MySql貌似不支持,其實就是left jion,right jion,兩個查詢的 UNION 合集.

5.默認地,UNION 操做符選取不一樣的值。若是容許重複的值,請使用 UNION ALL。
UNION 操做符用於合併兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有類似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。
補充2個SQLSERVER下的高級查詢:

B: except 運算符[1有但2沒有的數據]code

EXCEPT運算符經過包括全部在 TABLE1 中但不在 TABLE2 中的行並消除全部重複行而派生出一個結果表。當 ALL 隨EXCEPT 一塊兒使用時(EXCEPTALL),不消除重複行。

C:intersect 運算符[1,2都有的數據]

INTERSECT運算符經過只包括 TABLE1 和 TABLE2 中都有的行並消除全部重複行而派生出一個結果表。當 ALL 隨INTERSECT 一塊兒使用時(INTERSECTALL),不消除重複行。 注:使用運算詞的幾個查詢結果行必須是一致的。


3.between的用法

between限制查詢數據範圍時包括了邊界值,not between不包括
select* from table1 where time between time1 and time2
selecta,b,c, from table1 where a not between 數值1and 數值2

4.使用in效率和exists效率

in適用於小數據量,若是大數據量使用exists.更詳細的測試以下,不過我以爲前面的話就很適用了.
相關文章
相關標籤/搜索