承接上一篇,表結構以下,用戶scottspa
1 desc emp 2 名稱 空值 類型 3 -------- -------- ------------
4 EMPNO NOT NULL NUMBER(4) 5 ENAME VARCHAR2(10) 6 JOB VARCHAR2(9) 7 MGR NUMBER(4) 8 HIREDATE DATE 9 SAL NUMBER(7,2) 10 COMM NUMBER(7,2) 11 DEPTNO NUMBER(2)
1 desc dept 2 名稱 空值 類型 3 ------ -------- ------------
4 DEPTNO NOT NULL NUMBER(2) 5 DNAME VARCHAR2(14) 6 LOC VARCHAR2(13)
數據以下:3d
用SQL完成如下問題列表:code
解答以下:htm
1 --1.找出EMP表中的姓名(ENAME)第三個字母是A 的員工姓名
2 --使用下劃線代替一個字符 若是是第三個字母 那麼使用兩個下劃線
3 SELECT e.ENAME FROM EMP e WHERE e.ENAME like '__A%'; 4 --使用截取 截取第三個字符且截取一個字符
5 SELECT e.ENAME FROM EMP e WHERE substr(e.ename,3,1)='A';
1 --2.找出EMP表員工名字中含有A 和N的員工姓名
2 -- 使用and 兩個like
3 SELECT e.ENAME FROM EMP e WHERE e.ENAME like '%A%' and e.ENAME like '%N%'; 4 -- 或者'%A%N%' 這種我沒有想到
5 SELECT e.ENAME FROM EMP e WHERE e.ENAME like '%A%N%';
1 --3.找出全部有佣金的員工,列出姓名、工資、佣金,顯示結果按工資從小到大 佣金從大到小
2 -- 既然是有佣金 我以爲應該判斷 comm is not null 原做者沒有判斷
3 SELECT e.ENAME,e.SAL+e.COMM,e.COMM FROM EMP e WHERE e.COMM is NOT NULL ORDER BY e.SAL+e.COMM asc,e.COMM desc;
1 --4.列出部門編號爲20的全部職位
2 SELECT DISTINCT e.JOB FROM EMP e WHERE e.DEPTNO='20';
1 --5. 列出不屬於SALES 的部門
2 -- 好幾種方式
3 -- <>、!= 、not in 、not like
4 SELECT * FROM DEPT d WHERE d.DNAME <>'SALES'; 5 SELECT * FROM DEPT d WHERE d.DNAME !='SALES'; 6 SELECT * FROM DEPT d WHERE d.DNAME not in ('SALES'); 7 SELECT * FROM DEPT d WHERE d.DNAME NOT like 'SALES';
1 --6.顯示工資不在1000 到1500 之間的員工信息:名字、工資,按工資從大到小排序
2 -- 工資=sal+comm 因爲comm有null值 因此要給它一個默認值0 否則和sal相加的時候會沒有結果 原答案沒有加nvl
3 SELECT e.SAL+nvl(e.COMM,0) wage FROM EMP e WHERE e.SAL+nvl(e.COMM,0)>1500 OR e.SAL+nvl(e.COMM,0)<1000 ORDER BY wage desc;
--7. 顯示職位爲MANAGER 和SALESMAN,年薪在15000 和20000 之間的員工的信息:名字、職位、年薪 -- 職位能夠使用in('MANAGER','SALESMAN') -- 年薪計算的時候也要注意null值的相加 使用nvl
SELECT e.ENAME,e.JOB,(e.SAL+nvl(e.COMM,0))*12 yearly_salary FROM EMP e WHERE e.JOB IN ('MANAGER','SALESMAN') and (e.SAL+nvl(e.COMM,0))*12 BETWEEN 15000 AND 20000;
--8. 說明如下兩條SQL語句的輸出結果
SELECT EMPNO,COMM FROM EMP WHERE COMM IS NULL; SELECT EMPNO,COMM FROM EMP WHERE COMM = NULL; IS NULL判斷某個字段是否爲空 =NULL判斷某個值是否等於NULL
--9.SELECT ENAME,SAL FROM EMP WHERE SAL > '1500'是否會報錯 -- 不會 存儲隱式類型轉換
-- 10. 讓SELECT 語句的輸出結果爲
SELECT * FROM SALGRADE; SELECT * FROM BONUS; SELECT * FROM EMP; SELECT * FROM DEPT; SELECT 'SELECT * FROM '||table_name||';' from user_tables;
--11.列出當前用戶有多少張數據表,結果集中存在多少條記錄 -- 4
select COUNT(1) from user_tables; -- 23
SELECT sum(num_rows) from user_tables;
原文地址:http://database.51cto.com/art/201106/270285_2.htmblog