SQL語法練習
https://blog.csdn.net/qq_30764991/article/details/81952197
員工表建表語句:
CREATE TABLE EMP (
ENAME VARCHAR2(30),
EMPNO NUMBER(5),
DEPTNO NUMBER(5),
JOB VARCHAR2(20),
HIREDATE DATE,
COMM NUMBER(6,2),
SAL NUMBER(6,2)
);
部門表建表語句:
CREATE TABLE DEPT (
DNAME VARCHAR2(30),
DEPTNO NUMBER(5),
LOC VARCHAR2(50)
);
員工表插入數據:
INSERT INTO EMP VALUES (‘Zhou潤發’, 10001, 10, ‘辦事員’, TO_DATE(‘20161130131322’, ‘YYYYMMDDHH24MISS’), 2500, 2400);
INSERT INTO EMP VALUES (‘Liu德華’, 10002, 10, ‘辦事員’, TO_DATE(‘20170105131334’, ‘YYYYMMDDHH24MISS’), 1800, 2250);
INSERT INTO EMP VALUES (‘Li連杰’, 20001, 20, ‘辦事員’, TO_DATE(‘20170313131339’, ‘YYYYMMDDHH24MISS’), 2200, 2350);
INSERT INTO EMP VALUES (‘xiang華強’, 20000, 20, ‘經理’, TO_DATE(‘20160130131343’, ‘YYYYMMDDHH24MISS’), 3980, 3500);
INSERT INTO EMP VALUES (‘Zhang柏芝’, 30001, 30, ‘辦事員’, TO_DATE(‘20170314131346’, ‘YYYYMMDDHH24MISS’), 1300, 2200);
INSERT INTO EMP VALUES (‘成long’, 10000, 10, ‘經理’, TO_DATE(‘20151031133724’, ‘YYYYMMDDHH24MISS’), 4800, 4000);
INSERT INTO EMP VALUES (‘zhang子怡’, 30000, 30, ‘經理’, TO_DATE(‘20161011133915’, ‘YYYYMMDDHH24MISS’), 3500, 3480);
INSERT INTO EMP VALUES (‘zhang家輝’, 20002, 20, ‘辦事員’, TO_DATE(‘20170330134519’, ‘YYYYMMDDHH24MISS’), 1600, 2000);
INSERT INTO EMP VALUES (‘Liu亦菲’, 30002, 30, ‘駕駛員’, TO_DATE(‘20170330135457’, ‘YYYYMMDDHH24MISS’), NULL, 2500);
INSERT INTO EMP VALUES (‘peng于晏’, 20003, 20, ‘駕駛員’, TO_DATE(‘20170411135625’, ‘YYYYMMDDHH24MISS’), NULL, 2500);
INSERT INTO EMP VALUES (‘Zhang涵予’, 10003, 10, ‘駕駛員’, TO_DATE(‘20170408135706’, ‘YYYYMMDDHH24MISS’), NULL, 2500);
部門表插入數據:
INSERT INTO DEPT VALUES (‘市場部’, 10, ‘北京’);
INSERT INTO DEPT VALUES (‘公關部’, 20, ‘上海’);
INSERT INTO DEPT VALUES (‘研發部’, 30, ‘南京’);
表結構數據圖如下:
兩張表已全部建好,自己用查詢語句查看一下表結構和數據是否沒問題.
Select * From EMP Select * From DEPT
下面是題目:可以復制下來做, 做完再和我做答案對照一下, 當然, 有的題目可以用多種方法去做, 看你自己選擇了.
還有一點需要注意的是:我是用的可視化界面輸入的語句,別名中文不需要加引號,一開始我加引號老是報錯,后來無意間去掉反而好了,不知道為什么.我開始學的時候,別名使用中文是需要加引號的,看你實際的情況吧!!
題目:
–1.選擇30部門的職員
–2.列出所有辦事員的姓名、編號和部門
–3.找出獎金高于薪資的雇員
–4.找出傭金高于薪金60%的雇員
–5.找出部門10中所有經理和部門20中的所有辦事員的詳細資料
–6.找出既不是經理又不是辦事員但其薪金>=2000的所有雇員的詳細資料
–7.找出收取傭金的雇員的不同工作
–8.找出不收取傭金或收取的傭金低于2000的雇員
–9.找出各月最后一天受雇的所有雇員
–10.找出早于1年之前受雇的雇員
–11.顯示只有首字母大寫的所有雇員的姓名
–12.顯示正好為7個字符的雇員姓名
–13.顯示不帶有’Z’的雇員姓名
–14.顯示所有雇員的姓名的前三個字符
–15.顯示所有雇員的姓名,用小寫 z 替換所有大寫 Z .
–16.顯示所有雇員的姓名以及滿1年服務年限的日期
–17.顯示雇員的詳細資料,按姓名排序
–18.顯示雇員姓名,根據其服務年限,將最老的雇員排在最前面
–19.顯示所有雇員的姓名、工作和薪金,按工作的降序順序排序,而工作相同時按薪金升序
–20.顯示所有雇員的姓名和加入公司的年份和月份,按雇員受雇日所在月排序,將最早年份的項目排在最前面
–21.顯示在一個月為30天的情況下所有雇員的日薪金
–22.找出在(任何年份的)1月受聘的所有雇員
–23.對于每個雇員,顯示其加入公司的天數
–24.顯示姓名字段的任何位置,包含 “i” 的所有雇員的姓名
–25.以年、月和日顯示所有雇員的服務年限
答案:
1–
select ename,deptno from emp where deptno=30;
2–
select e.ename,e.empno,d.dname,e.job from emp e,dept d where e.deptno=d.deptno and e.job=‘辦事員’;
3–
select * from emp where comm>sal order by comm desc;
4–
select * from emp where comm>sal*0.6;
5.1–
select * from emp e,dept d where e.deptno=10 and e.job=‘經理’ and e.deptno=d.deptno
union all
select * from emp e,dept d where e.deptno=20 and e.job=‘辦事員’ and e.deptno=d.deptno;
5.2–
select * from emp e,dept d where (e.deptno=10 and e.job=‘經理’ and e.deptno=d.deptno)
or (e.deptno=20 and e.job=‘辦事員’ and e.deptno=d.deptno);
6–
select * from emp e,dept d where e.sal>=2000 and e.job<>‘辦事員’ and e.job<>‘經理’ and e.deptno=d.deptno;
7–
select distinct job from emp where comm>0;
8–
select ename,nvl(comm,0) comms from emp where nvl(comm,0)<2000;
9–
select * from emp where hiredate=last_day(hiredate);
10.1–
select * from emp where months_between(sysdate,hiredate)>12;
10.2–
select * from emp where hiredate 11–
select * from emp where ename=initcap(ename);
12–
select * from emp where length(ename)=7;
13–
select * from emp where instr(ename,‘Z’)=0;
14–
select substr(ename,0,3) from emp
15–
select replace(ename,‘Z’,‘z’) from emp
16–
select ename,add_months(hiredate,12) from emp
17–
select * from emp e,dept d where e.deptno=d.deptno order by e.ename
18.1–
select ename,trunc(months_between(sysdate,hiredate)/12,0) 服務年限 from emp order by 服務年限 desc
18.2–
select ename,hiredate from emp order by hiredate
19–
select ename,job,sal from emp order by job desc,sal asc
20.1–
select ename,extract(year from hiredate) 年份,extract(month from hiredate) 月份 from emp order by 年份,月份
20.2–
select ename,to_char(hiredate,‘yyyy’) 年份,to_char(hiredate,‘mm’) 月份 from emp order by hiredate
21–
select ename,sal/30,trunc(sal/30,1),floor(sal/30),ceil(sal/30) from emp
22.1–
select * from emp where extract(month from hiredate)=1
22.2–
select * from emp where to_char(hiredate,‘mm’)=‘01’
23–
select ename,floor(sysdate-hiredate) 入職天數 from emp order by 入職天數 desc
24.1–
select ename from emp where ename like ‘%i%’;
24.2–
select ename from emp where instr(ename,‘i’)>0
25–
select ename,floor(months_between(sysdate,hiredate)/12) 服務總年數,
floor(months_between(sysdate,hiredate)) 服務總月數,
floor(sysdate-hiredate) 服務總天數 from emp order by 服務總天數;