SQL查詢語句

AS用做別名,若別名中希望區分大小寫,或其中包含空格,則必須用雙引號引起來。

where語句如果比較的是字符或者日期類型必須用單引號引起來。數字則可以引起來和不引起來。

查詢條件:>,<,>=,<=,!=,<>,= ,AND,OR,IN,Not IN,between.............and..............,is null,is not null

模糊查詢:Like   其中%表示0到多個字符,_表示一個字符。例如:select job from emp where ename like '_lk%';

使用any和all提交必須和(>=,>,<,<=)配合使用。

>any:大於最小

<any:小於最大

>all:大於最大

<all:小於最小

例如:select name from emp where sal>any(4000,4500,5000)

查詢條件中可以使用表達式和函數

distinct用於去掉重複的值。

排序:

order by column [asc|desc] 默認降序asc 升序排列,null值爲最大。 注意多列排序時每個列都必須設置排序方式。order by deptno asc, sal desc;

聚合函數:將表中的全部數據劃分爲幾組數據,每組數據統計出一個結果。(分組函數,多行函數,集合函數)

max()

min()

avg()

sum()

count()

聚合函數會忽略Null值,所以要與空值函數配合使用。例如:select avg(nvl(sal,0)) from emp

分組:

group by

having

order by

查詢優化:

from從右到左,數據量少的表放到後面

where從右到左,將能過濾掉最大數量的記錄條件寫在where子句中的最右。

group by 從左到右,在group by 之前最好將不需要的記錄過濾掉。

避免使用having

select 少用*號

關聯查詢:

笛卡爾積

等值連接:使用“=”連接相關的表

內連接:JOIN   ON 返回所有滿足連接條件的記錄。

外連接:有時候返回那些不滿足連接條件的記錄,需要使用到外連接。(Left、Right、Full JOIN........ON...........)

其中full全外連接,返回滿足連接條件和不滿足連接條件的所有其他行。

自連接:來源於一個表,關聯關係爲單個表中的多個列。

高級查詢:

子查詢:是嵌入在其他SQL語句中的Select語句,大部分出現在Where子句中。

根據返回結果的不同,子查詢可以分爲單行子查詢、多行子查詢及多列子查詢。

例如:查找薪水比整個機構平均薪水高的員工。Select * from emp e where sal>(Select avg(sal) from emp);

如果子查詢返回多行,主查詢可以使用多行比較操作符包括IN、ALL、ANY。

例如:查詢部門中有SALESMAN但是職位不是SALSMAN的員工信息。

Select * From emp where deptno IN (Select deptno From emp where job='SALESMAN') AND job <> 'SALEMAN';

Exists

例如:列出那些有員工的部門信息。Select * From deptno d  where exists(Select * From emp e where e.deptno=d.deptno);

子查詢在Having子句中。例如:查詢列出最低薪水高於部門30的最低薪水的部門信息。

Select * From dept d group by deptno having MIN(salary)>(Select salary from dept where deptno = 30);

子查詢在From部分。

子查詢在Select部分。可以認爲是外連接的另一種表現形式。

Oracle的分頁查詢:

Rownum僞列,用於返回標識行數據順序的數字。從1開始。

例子:利用Rownum截去結果集中的部分數據。Select * from(Select Rownum rn,e.* From emp e) Where rn Between 8 and 9;

Oracle的分頁語句:Select * From (Select Rownum rn,e.* From e)t  Where t.rn Between ((n-1)*pageSize +1) AND (n*pageSize) ;

Decode函數:

Decode(expr,search1,result1[,result2][default]) 用於比較參數expr的值,如果匹配到哪一個search條件,就返回對應的result結果,如果沒有匹配到返回default結果或null

例如:Select job ,name ,sal Decode(job,

                                                                    'MANAGER',sal*1.2,

                                                                    'SALESMAN',sal*1.5,

                                                                    sal

                                                                 )bonus

From emp ;

Case的功能和decode類似:

Select ename job case job

                                when 'MANAGER' then sal*1.2

                                when 'ANALYST' then sal*1.1

                                 ELSE sal END

                            bonus

From emp;

DECODE函數在分組查詢中的應用,

一:按字段內容分組:例如:計算職位的人數,analyst/manager屬於vip,其餘屬於operation

Select Decode(job,'ANALYST','vip','MANAGER','vip','operation') job, count(1) job_cn From emp group by Decode(job,'ANALYST','vip','MANAGER','vip','operation');

二:按字段內容排序:例如:Select * From dept Order By Decode(dname,'Operation','1','account','2');

排序函數:

Row_Number()over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2排序。

Rank() over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2給予等級標識。有重複值。

Rense_Rank() over( partition by col1 order by col2)不重複

集合操作:

UNION、UNION ALL、INTERSECT和MINUS

UNION合併,去重複記錄,排序

UNION ALL 合併,不去重複,不排序

INTERSECT,交集

MINUS,差集

高級分組:

Rollup、Cube、Groupting sets運算符是GROUP By 子句的擴展。

例如:假設表test 有a、b、c      group by rollup(a,b,c)等價於group by a,b,c Union All group by a,b Union All group by a group by ..

例如:group by cube(a,b,c) 依次(a,b),(a,c),(b,c),(a),(b),(c),(a,b,c)

grouping sets可以生成與使用單個group by 、rollup或cube運算符所生成的結果集相同的結果集。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章