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

Oracle上課學習筆記<1>

簡單的select查詢語句

1.select查詢語句基本語法
使用兩個關鍵字:
select 指定要查詢的欄位和內容
from 從哪張表中查詢
語法:select 欄位名 from 表名;

三種不同的用法:
1)查詢某張表中特定的某一個欄位
select 欄位名 from 表名;
例如:查詢員工表中所有員工的id
SQL:select id
from s_emp;
2)查詢某張表中的多個欄位
欄位之間通過逗號分隔
select 欄位1,欄位2,欄位3.... from 表名;
例如:查詢員工表中所有員工的id、last_name?
SQL:select id,last_name
from s_emp;


查詢所有員工的id、last_name、salary?
SQL:select id,last_name,salary
from s_emp;
3)查詢一張表中的所有欄位
1)將所有欄位名全部定義出來進行查詢
2)使用*符號 代表全部欄位的含義
例如:查詢部門表中全部欄位的全部內容?
SQL:select id,name,region_id
from s_dept;
等同於:select * from s_dept;

區別:方式1)直接根據欄位名取欄位值
效率較高
方式2)使用*號,要先查詢當前表中
有哪些欄位,再根據查詢的結果
去取對應的欄位值。
效率較低。

2.算數運算
1)數值型別的運算


包括 加減乘除
+ - * /
例如:查詢員工12個月的總收入?
select salary*12 from s_emp;

練習:員工每個月漲了200元
查詢加薪之後的12個總收入?
select (salary+200)*12
from s_emp;

練習:在加薪200元的基礎上,每位員工有
年終獎500元。
查詢每位員工一年的薪水?
(該公司一年為員工付薪18月)
select (salary+200)*18+500
from s_emp;


2)日期型別的運算
日期型別運算只有加減法
加法代表向指定日期的未來數幾天
減法代表向指定日期的過去數幾天

例如:查詢所有員工入職時間的前一天?
select start_date-1 from s_emp;

3.處理空值
查詢所有員工的id、提成(commission_pct)?
select id,commission_pct
from s_emp;

查詢所有的員工id、工資+提成?
select id,salary+commission_pct
from s_emp;

單值函式:nvl(欄位名,預設值)
把有可能出現空值的欄位,寫在nvl函式中。
如果欄位值查詢結果不為空,則使用原來的值。
如果欄位值為空,使用預設值。
SQL:select id,salary+nvl(commission_pct,0)
from s_emp;

錯誤寫法:
select id,nvl(salary+commission_pct,0)
from s_emp;

4.字串拼接
可以把多個欄位的結果拼接成一個欄位顯示。
例子:查詢員工的全名?
first_name last_name

select first_name,last_name
from s_emp;
在Oracle資料庫中拼接字串使用 ||
語法:字串1||字串2||字串3.....
SQL:select first_name||last_name
from s_emp;

練習:查詢所有員工的全名?
要求:姓氏和名字之間使用“-”分割。
select first_name||'-'||last_name
from s_emp;

concat:字串拼接
select first_name||last_name
from s_emp;
等同於:
select concat(first_name,last_name)
from s_emp;

5.查詢結果起別名
1)查詢結果可以看作是一張表
2)這張表中的欄位名取決於
select關鍵字後面定義的內容(預設)。

四種方式:
1)select 欄位 別名 from 表名;
2)select 欄位 as 別名 from 表名;
3)select 欄位 "別名" from 表名;
4)select 欄位 as "別名" from 表名;

方式1和方式2沒區別。

例如:查詢所有員工的id以及12個月的薪水?
並且12個月的薪水顯示結果為Sal?
select id,salary*12 as "Sal"
from s_emp;
加雙引號和不加雙引號的區別:
在Oracle資料庫中,查詢的結果欄位名預設
為全部大寫字母。
如果需要使用特定的格式(例如包含小寫字母)
就需要把別名用雙引號包含。

6.設定查詢結果的顯示格式
column 修改欄位顯示格式
簡寫為col
語法:
column/col 欄位名 format 格式;
例如:
把last_name欄位設定為顯示15個字元長度。
col last_name format a15;
a:代表要處理的資料是字元型別。
15:要顯示的長度。
欄位名不是特指某張表中的某個特定欄位。
而是指查詢結果欄位。

 注:例題、例題中的表格是上課時插入的表格

練習題:

1)查詢員工的工資和last_name,對工資進行升序排列
select salary,last_name
from s_emp
order by salary asc;
2)查詢員工的工資和last_name,對last_name進行降序排列。
select salary,last_name
from s_emp
order by last_name desc;
字元型別根據首個字母的字典順序。ASCII碼排序
65-90 A-Z 97-122 a-z


3)查詢員工的工資和last_name,先對salary進行降序排列,再對last_name進行升序排列。
select salary,last_name
from s_emp
order by salary desc,last_name asc;
4)請舉例說明空值的排序規則
空值在排列時視為無限大。
所以在降序排列中空值排在最前。
在升序排列中空值排在最後。

5)查詢41號部門員工的資訊?;
select id,last_name,salary,dept_id
from s_emp
where dept_id = 41;
6)查詢工資大於1000的員工的資訊?
select id,last_name,salary
from s_emp
where salary > 1000;
7)查詢工資大於1000小於1500員工的資訊,
使用兩者方式來做?
a)select id,last_name,salary
from s_emp
where salary>1000 and salary<1500;
b)select id,last_name,salary
from s_emp
where salary between 1000 and 1500;
8)查詢41或者42部門員工的資訊,
使用兩者方式來做?
a)select id,last_name,salary
from s_emp
where dept_id = 41 or dept_id = 42;
b)select id,last_name,salary
from s_emp
where dept_id in(41,42);

9)查詢last_name包含n的員工的資訊?
select id,last_name
from s_emp
where last_name like '%n%';

10)查詢last_name包含n或者N的員工的資訊?
select id,last_name
from s_emp
where last_name like '%n%'
or last_name like '%N%';

方法二:
select id,last_name
from s_emp
where upper(last_name) like '%N%';

select id,last_name
from s_emp
where lower(last_name) like '%n%';

upper函式:可以把指定字串轉換成全部大寫的形式。

11)查詢last_name第二個字母為g的員工的資訊?
select id,last_name
from s_emp
where last_name like '_g%';

12)查詢last_name最後一個字母為o的員工的資訊?
select id,last_name
from s_emp
where last_name like '%o';

13)查詢last_name以N開頭的員工的資訊?
select id,last_name
from s_emp
where last_name like 'N%';

14)先插入這條資料
insert into s_emp(id,last_name)
values(999,'_briup');
commit;
然後查詢以_開頭的員工的資訊?
select id,salary
from s_emp
where last_name like 'a_%' escape 'a';
15)找出部門41中所有經理和部門43中的所有辦事員的詳細資料
職稱欄位為:Title
經理職稱為:Warehouse Manager
辦事員的職稱為:Stock Clerk
select id,last_name,salary,dept_id
from s_emp
where dept_id=41
and title='Warehouse Manager'
or dept_id=43 and title='Stock Clerk';