1 查詢語句 查看賬戶下的所有表 1 select * from tab; 查看賬戶下的所有表的詳細信息 1 select * from user_tables; 1.1 select select 用於從數據看查詢數據。語法: 1 select field1,filed2,.. . 2 from ...
1 查詢語句
- 查看賬戶下的所有表
1 select * from tab;
- 查看賬戶下的所有表的詳細信息
1 select * from user_tables;
1.1 select
select 用於從數據看查詢數據。語法:
1 select field1,filed2,.. . 2 from tablename 3 [where condition];
利用 Oracle 資料庫 Scott 賬戶下的 EMP 表進行練習
1 -- 查詢所有員工的名字和雇員號 2 select empno,ename from emp; 3 4 -- 查詢所有員工的雇員號、姓名、崗位 5 select empno,ename,job from emp; 6 7 -- 欄位的別名 as 8 select ename as "姓名" from emp; 9 select ename as "姓名",job as "崗位" from emp; 10 11 -- 別名一定要用雙引號,不能用單引號 12 select ename "姓名",job "崗位" from emp; 13 -- 雙引號可以省略 14 select ename 姓名 from emp; 15 16 -- 表的別名 17 select emp.ename,emp.job from emp; 18 select e.ename,e.job from emp e;
查詢所有欄位可以用通配符 "*"
1.2 distinct 去重
把重覆性的記錄去掉,只保留一條。
1 -- 查詢公司的工種 2 select distinct e.job 3 from emp e;
可以修飾多欄位,多個欄位的值都一樣的記錄才去掉。
1.3 where 字句
where 表示查詢的條件。
- =,!=,<>,<,>,<=,>= 關係運算符
<> 表示不等於
1 -- 把部分10的雇員查詢出來 2 select * 3 from emp 4 where deptno = 10; 5 6 -- 把名稱為smith的雇員 7 select e.* 8 from emp e 9 where e.ename = 'SMITH'; 10 11 -- 查詢底薪大於等於1000的員工 12 select e.* 13 from emp e 14 where e.sal >= 1000; 15 16 select e.* 17 from emp e 18 where e.sal <> 800
- any/some/all (list)
any/some(list) 滿足list列表中的任意一個條件
all(list) 滿足 list 列表的中所有條件
1 -- 查詢薪資大於 800 的雇員 2 select e.* 3 from emp e 4 where e.sal > some(1000,800); 5 6 -- 查詢薪資大於 1000 7 select e.* 8 from emp e 9 where e.sal > all(1000,800);
- is null/is not null
null 在 SQL 中表示的是不確定
1 -- 查詢沒有津貼的雇員 2 select e.* 3 from emp e 4 where e.comm is null; 5 6 -- 查詢有津貼的雇員 7 select e.* 8 from emp e 9 where e.comm is not null;
- between x and y
表示一個值位於[x,y]區間,x/y 可以是數字或字元串。
字元串小寫字母大於大寫字母;逐位比字母,字母相同再比長度。
1 -- 查詢薪資在1000-5000之間的雇員 2 select e.* 3 from emp e 4 where e.sal between 1000 and 5000;
- in/not in (list)
表示欄位值是否在 list 列表中
1 -- 查詢部門號是10和20的員工 2 select e.* 3 from emp e 4 where e.deptno in(10,20); 5 6 -- 查詢部門號不是10和20的員工 7 select e.* 8 from emp e 9 where e.deptno not in(10,20); 10 11 -- 查詢薪資是1000,2000,5000的員工 12 select e.* 13 from emp e 14 where e.sal in (1000,2000,5000);
- 模糊查詢
like 關鍵字用於模糊查詢,其中:
- %:表示任意字元出現多次(含0次),
- _:表示任意字元出現1次。
- 當需要查詢的格式包含關鍵字,需要用轉義字元。escape(‘x’) 表示指定轉義字元為x,一般指定為\
1 -- 查詢名字是c開頭的雇員 2 select e.* 3 from emp e 4 where e.ename like 'c%'; 5 6 -- 查詢名字中第二個字母是M的雇員 7 select e.* 8 from emp e 9 where e.ename like '_M%' 10 11 -- 查詢名字中含有M的雇員 12 select e.* 13 from emp e 14 where e.ename like '%M%'; 15 16 -- 查詢名字中含有%的雇員 17 select e.* 18 from emp e 19 where e.ename like '%\%%' escape('\');
2 複雜查詢(and/or)
where 後面的條件可以跟多個通過 and 或者 or 連接。
1 -- 查詢部門10且薪資大於等2000的雇員 2 select e.* 3 from emp e 4 where e.deptno = 10 and e.sal >= 2000; 5 6 -- 查詢名字中含M且薪資大於1000的雇員 7 select e.* 8 from emp e 9 where e.ename like '%M%' and e.sal > 1000 10 11 -- 查詢部門在10或20的雇員 12 select e.* 13 from emp e 14 where e.deptno = 10 or e.deptno = 20
where 中 and、or 的執行效率問題
- and 中,讓結果數據量少的先執行
- or 中,讓結果數據量多的先執行
- where 中,條件的執行順序從後向前
- and 和 or 同時存在時,and 先執行
綜合案例
根據部門名稱,查詢雇員信息。部門名稱存在於 DEPT 表中,其中的 DEPTNO 和 雇員表 EMP 中的 DEPTNO 對應。
1 select e.ename,e.sal,e.deptno 2 from emp e 3 where e.deptno in 4 ( 5 select d.deptno 6 from dept d 7 where d.dname = 'SALES' or d.dname = 'RESEARCH' 8 );
3 計算欄位
我們經常需要把資料庫中檢索出來的信息進行再加工,允許的操作+、-、*、/。通過四則運算得到新的欄位(計算欄位)。
1 -- 查詢出每個雇員的月薪(收入) 2 select e.ename,e.sal+e.comm as "收入",e.deptno 3 from emp e;
這裡要註意,表中部分記錄的 comm 欄位為空,null + 具體數字的結果依然是 null。可以通過 nvl 函數把 null 轉換成具體數值方便計算。
nvl(a , b)-若 a 為 null,則函數值為 b;若 a 不為 null,則函數值為 a。
1 -- nvl函數優化 2 select e.ename,e.sal+nvl(e.comm,0) "收入",e.deptno 3 from emp e;