1. 程式人生 > >Oracle學習筆記<2>

Oracle學習筆記<2>

1.排序問題

預設排序規則:按照物理儲存順序。
指定排序規則:order by關鍵字
位置:出現在select語句的最後邊。
語法:select ...
from ...
order by 欄位 排序規則;
欄位用來定義要根據哪個欄位進行排序。
排序規則:
1)升序排列 從小到大 ASC
2)降序排列 從大到小 DESC

例如:
查詢所有員工的id、salary
要求按照工資的降序排列?
select id,salary
from s_emp
order by salary desc;

指定多個排序規則:
select ...
from ....
order by 欄位1 排序規則1,


欄位2 排序規則2,
欄位3 排序規則3.....;
例如:
查詢所有員工的id、salary
按照工資的降序和id的升序進行排列?
select id,salary
from s_emp
order by salary desc,id asc;

commission_pct 存在空值
空值的處理:
排序過程中,空值視為無限大。
在升序排列中,空值應該排在最後。
在降序排列中,空值應該排在最前。

2.限定性查詢/條件查詢
在查詢時要根據指定條件
篩除掉一部分不需要的資料。
關鍵字:where
位置:from子句後面
語法:select ...
from ...
where 判斷條件;
1)等值判斷和不等值判斷


欄位值等於/不等於某個特定的值。
例如:
查詢id為1的員工id、last_name、salary?
select id,last_name,salary
from s_emp
where id = 1;

查詢id不為1的員工id、last_name、salary?
select id,last_name,salary
from s_emp
where id != 1;

不等於:
寫法一:!=
寫法二:^=
寫法三:<>

空值判斷:
例如:
查詢員工表中所有不拿提成的員工
id、last_name、salary?
select id,last_name,salary
from s_emp
where commission_pct is null;

查詢員工表中所有拿提成的員工
id、last_name、salary?
select id,last_name,salary
from s_emp
where commission_pct is not null;

2)範圍判斷
大於 >
小於 <
大於等於 >=
小於等於 <=
練習:
查詢所有工資高於1100元的員工id、
last_name、salary?
select id,last_name,salary
from s_emp
where salary > 1100;

查詢所有工資不低於1100元的員工id、
last_name、salary?
select id,last_name,salary
from s_emp
where salary >= 1100;

3)條件並列
a)邏輯與 and
使用and連線的所有條件必須同時滿足
才會被查詢出來。
b)邏輯或 or
使用or連線的所有條件只需要滿足
其中一個,就會被查詢出來。

練習:
查詢id在10以內並且工資高於1100元的
員工id、last_name、salary?
select id,last_name,salary
from s_emp
where id <= 10 and salary > 1100;

查詢41和42號部門所有員工的
id、last_name、dept_id?
select id,last_name,dept_id
from s_emp
where dept_id = 41 or dept_id = 42;


and的優先順序大於or的優先順序。

查詢所有工資高於1100元並且任職在
41或42號部門的員工資訊?
select id,last_name,dept_id
from s_emp
where salary > 1100
and (dept_id = 41 or dept_id = 42);

4)邏輯比較符
between 在給定的最小值和最大值範圍之間
語法:between 較小值 and 較大值
代表大於等於較小值和
小於等於較大值的結果會被查詢出來。
注意:一定要先寫較小值,再寫較大值。

select id,last_name
from s_emp
where salary>=1100 and salary<=1200;
等同於
where salary between 1100 and 1200;

in 在給定的可選值中選一個
語法:where 欄位值 in(值1,值2,值3...);

練習:
查詢id為1、3、5、7、9的員工資訊?
select id,salary,dept_id
from s_emp
where id = 1 or id = 3 or id =5
or id=7 or id=9;

select id,salary,dept_id
from s_emp
where id in(1,3,5,7,9);

查詢工資不在1100-1200範圍內的員工資訊?
select id,last_name,salary
from s_emp
where salary not between 1100 and 1200;
等同於:
where salary>1200 and salary <1100;

查詢41、42號部門以外的所有員工資訊?
select id,last_name,dept_id
from s_emp
where dept_id!=41 and dept_id!=42;

select id,last_name,dept_id
from s_emp
where dept_id not in(41,42);

3.模糊查詢/關鍵字查詢
語法:where 欄位值 like 模糊值;

萬用字元:
1)% 百分號代表任意數量任意字元
可以沒有 可以有一個 可以有多個
2)_ 下劃線代表一個任意字元 --佔位符
有且只有一個任意字元

例如:
查詢所有last_name中包含'N'的員工資訊?
select id,last_name
from s_emp
where last_name like '%N%';

查詢所有last_name第二位是'e'的員工資訊?
select id,last_name
from s_emp
where last_name like '_e%';

例如:
先向s_emp表中插入一條資料:
insert into s_emp(id,last_name)
values(999,'_briup');
commit;

查詢員工表中last_name以'_'下劃線開頭的使用者資訊?
select id,last_name
from s_emp
where last_name like '_%';

字元轉義:
1)在要轉義的字元前面加上一個標識字元
標識字元可以是任意字元。
2)使用escape關鍵字宣告哪一個字元是標識字元
select id,last_name
from s_emp
where last_name like 'a_%' escape 'a';

select id,last_name
from s_emp
where last_name like '/_%' escape '/';