基本SQL SELECT語句
1. 下面的語句是否可以執行成功
select ename , job , sal as salary from emp;
2. 下面的語句是否可以執行成功
select * from emp;
3. 找出下面語句中的錯誤
select empno , ename sal * 12 ANNUAL SALARY from emp;
修改后
select empno , ename ,sal * 12 "ANNUAL SALARY" from emp;
4. 顯示表dept的結構,並查詢其中的全部數據
SQL> desc dept;
Name Type Nullable Default Comments
------ ------------ -------- ------- --------
DEPTNO NUMBER(2)
DNAME VARCHAR2(14) Y
LOC VARCHAR2(13) Y
SQL>
5. 顯示出表emp中的不重復的崗位job
SELECT DISTINCT JOB FROM EMP;
6. 連接表emp的全部列,各個列之間用逗號連接,列頭顯示成OUT_PUT(提示:使用連接符||)
select EMPNO|| ',' || ENAME || ',' || JOB || ',' || MGR || ',' || HIREDATE || ',' || SAL || ',' || COMM || ',' || DEPTNO as "OUT_PUT" from emp;
過濾和排序數據
1. 查詢工資大於1600的員工姓名和工資
select ename, sal from emp where sal>1600;
2. 查詢員工號為7369的員工的姓名和部門號
select empno,ename,deptno from emp where empno=7369;
3. 選擇工資不在4000到5000的員工的姓名和工資
select ename,sal from emp where sal not between 4000 and 5000;
4. 選擇雇用時間在1981-2-19到1981-12-3之間的員工姓名,JOB和雇用時間HIREDATE
Select ename, job, hiredate from emp where hiredate between to_date('1981-2-19','YYYY-mm-dd') and to_date('1981-12-3','YYYY-mm-dd');
5. 選擇在20和30號部門工作的員工姓名和部門號
select ename,deptno from emp where deptno in(20,30);
6. 選擇在1987年雇用的員工的姓名和雇用時間
Select ename,hiredate
from emp
where hiredate between to_date('1987-1-1','YYYY-mm-dd')
and to_date('1987-12-31','YYYY-mm-dd');
7. 選擇公司中沒有管理者的員工姓名及JOB
select ename,job
from emp
where mgr is null;
8. 選擇公司中有獎金的員工姓名,工資和獎金
select ename,sal,comm
from emp
where comm is not null
and comm>0;
9. 選擇員工姓名的第三個字母是A的員工姓名
select ename from emp
where ename like '__A%';
10. 選擇姓名中有字母A和E的員工姓名
select ename from emp
where ename like '%A%' and ename like '%E%' ;
單行函數
1. 顯示系統時間
select sysdate from emp;
2. 查詢員工表emp中員工號empno,姓名ename,工資sal,以及工資提高百分之20%后的結果
select empno,ename,sal,sal*0.2+sal from scott.emp
3. 將員工的姓名按首字母排序,並寫出姓名的長度(length)
select ename from scott.emp order by substr(ename,1,1)
4. 查詢各員工的姓名ename,並顯示出各員工在公司工作的月份數(即:與當前日期比較,該員工已經工作了幾個月)。
select ename,hiredate,round((sysdate-hiredate)/30) from scott.emp order by ename
5. 查詢員工的姓名和工資,按下面的形式顯示
Name |
Salary |
SMITH |
$$$$$$$$$$24000 |
select ename,sal,lpad(sal,10,'$') from scott.emp
6. 查詢員工的姓名ename和工資數sal,條件限定為工資數必須大於1200,並對查詢結果按月份數降序方式進行排列
select to_char(hiredate,'mm') as monthorder from scott.emp
where comm>1200
order by monthorder
7. 做一個查詢,產生下面的結果
select ename || ' earns ' || to_char(sal,'$99,999') || ' monthly but wants ' || to_char(sal*3,'$99,999') "Dream Salary"
from scott.emp
<enamename> earns <sal> monthly but wants <sal*3>
Dream Salary |
King earns $24000 monthly but wants $72000
|
8. 做一個查詢,產生類似下面的結果
Ename |
HireDate |
reiew |
SMITH |
1980-12-17 |
1980年12月17日 |
select ename,to_char(hiredate,'yyyy-mm-dd') as hiredate,
to_char(hiredate,'YYYY"年"MONTH"月"DD"日"' ) as review
from scott.emp
9. 使用decode函數,按照下面的條件:
job grade
PRESIDENT A
MANAGER B
ANALYST C
SALESMAN D
CLERK E
產生類似下面形式的結果
ENAME |
Job |
Grade |
SMITH |
CLERK |
E |
select ename,job,
DECODE(job, 'PRESIDENT', 'A',
'MANAGER', 'B',
'ANALYST', 'C',
'SALESMAN', 'D',
'CLERK', 'E'
)
Grade
from scott.emp
10. 將第9題的查詢用case函數重新實現。
select ename,job,
CASE job WHEN 'PRESIDENT' THEN 'A'
WHEN 'MANAGER' THEN 'B'
WHEN 'ANALYST' THEN 'C'
WHEN 'SALESMAN' THEN 'D'
WHEN 'CLERK' THEN 'E'
END "Grade"
from scott.emp