惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
月光博客
月光博客
WordPress大学
WordPress大学
C
Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 【当耐特】
大猫的无限游戏
大猫的无限游戏
The GitHub Blog
The GitHub Blog
Google DeepMind News
Google DeepMind News
The Cloudflare Blog
有赞技术团队
有赞技术团队
Microsoft Azure Blog
Microsoft Azure Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
小众软件
小众软件
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
W
WeLiveSecurity
量子位
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Fortinet All Blogs
T
Threat Research - Cisco Blogs
Attack and Defense Labs
Attack and Defense Labs
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
L
LINUX DO - 热门话题
Google Online Security Blog
Google Online Security Blog
S
Security Affairs
V2EX - 技术
V2EX - 技术
TaoSecurity Blog
TaoSecurity Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
宝玉的分享
宝玉的分享
Project Zero
Project Zero
The Hacker News
The Hacker News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
PCI Perspectives
PCI Perspectives
G
GRAHAM CLULEY
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
N
Netflix TechBlog - Medium
S
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 聂微东

博客园 - 系咪噶

[JAVA基础]流文件读写文件编码转换 最近转战东软 apache 新建虚拟机 +Zend Framework建立 Apache + php 配置 php基础教程之PHP面向对象技术(全面讲解) 今日无事,将一同志之毕设完结 SQL Server 高级应用(周六讲座) 面向对象之CoreJava(第一课) CVS的使用(一课时) PL/SQL第三课(学习笔记) PL/SQL第二课(作业) PL/SQL第二课(学习笔记) PL/SQL第一课(学习笔记) Oracle第五课(学习笔记) Oracle第四课(学习笔记) 全步骤安装mysql SQL Server 存储过程的分页 无法连接到Visual Studio 的Localhost Web服务器 Oracle第三课(学习中笔记)
SQL查询基本练习1:(作业)
系咪噶 · 2008-08-20 · via 博客园 - 系咪噶

使用scott/tiger用户下的emp表完成下列练习,表的结构说明如下

emp员工表 字段内容如下:

empno                员工号
ename                员工姓名
job                工作
mgr                上级编号
hiredate        受雇日期
sal                薪金
comm                佣金
deptno                部门编号

--创建表
CREATE TABLE emp
(
        empno NUMBER(4),
        ename VARCHAR2(10),
        job VARCHAR2(10),
        mgr NUMBER(4),
        hiredate DATE,
        sal NUMBER(4),
        comm NUMBER(4),
        deptno NUMBER(4)
);

INSERT INTO emp VALUES (1001,'zhang','MANAGER',1001,TO_DATE('28-JUL-1990','DD-MM-YYYY'),5000,3000,20);
INSERT INTO emp VALUES (1002,'zhang','CLERK',1001,TO_DATE('28-JUL-2000','DD-MM-YYYY'),3000,4500,20);
INSERT INTO emp VALUES (1003,'zhang','CLERK',1001,TO_DATE('28-JUL-2004','DD-MM-YYYY'),2000,NULL,20);
INSERT INTO emp VALUES (1004,'zhang','OTHER',1001,TO_DATE('28-JUL-2003','DD-MM-YYYY'),4000,500,20);
INSERT INTO emp VALUES (1005,'zhang','OTHER',1001,TO_DATE('28-JUL-2005','DD-MM-YYYY'),1000,NULL,20);
INSERT INTO emp VALUES (2001,'zhang','MANAGER',2001,TO_DATE('28-JUL-1990','DD-MM-YYYY'),5000,3000,10);
INSERT INTO emp VALUES (2002,'zhang','CLERK',2001,TO_DATE('28-JUL-1997','DD-MM-YYYY'),3000,8000,10);
INSERT INTO emp VALUES (2003,'zhang','CLERK',2001,TO_DATE('28-JUL-2005','DD-MM-YYYY'),2000,NULL,10);
INSERT INTO emp VALUES (2004,'zhang','OTHER',2001,TO_DATE('28-JUL-2007','DD-MM-YYYY'),4000,50,10);
INSERT INTO emp VALUES (2005,'zhang','OTHER',2001,TO_DATE('28-JUL-2006','DD-MM-YYYY'),1000,NULL,10);
INSERT INTO emp VALUES (3001,'zhang','MANAGER',3001,TO_DATE('28-JUL-1990','DD-MM-YYYY'),5000,3000,30);
INSERT INTO emp VALUES (3002,'zhang','CLERK',3001,TO_DATE('28-JUL-2008','DD-MM-YYYY'),3000,1500,30);
INSERT INTO emp VALUES (3003,'zhang','CLERK',3001,TO_DATE('28-JUL-2006','DD-MM-YYYY'),2000,NULL,30);
INSERT INTO emp VALUES (3004,'zhang','OTHER',3001,TO_DATE('28-JUL-1990','DD-MM-YYYY'),4000,40,30);
INSERT INTO emp VALUES (3005,'zhang','OTHER',3001,TO_DATE('28-JUL-2007','DD-MM-YYYY'),1000,NULL,30);
INSERT INTO emp VALUES (4001,'zhang','MANAGER',4001,TO_DATE('28-JUL-1990','DD-MM-YYYY'),5000,3000,40);
INSERT INTO emp VALUES (4002,'zhang','CLERK',4001,TO_DATE('28-JUL-1989','DD-MM-YYYY'),3000,6000,40);
INSERT INTO emp VALUES (4003,'zhang','CLERK',4001,TO_DATE('28-JUL-1996','DD-MM-YYYY'),2000,NULL,40);
INSERT INTO emp VALUES (4004,'zhang','OTHER',4001,TO_DATE('28-JUL-1991','DD-MM-YYYY'),4000,60,40);
INSERT INTO emp VALUES (4005,'zhang','OTHER',4001,TO_DATE('28-JUL-1993','DD-MM-YYYY'),1000,NULL,40);
INSERT INTO emp VALUES (5001,'zhang','MANAGER',5001,TO_DATE('28-JUL-1990','DD-MM-YYYY'),5000,3000,50);
INSERT INTO emp VALUES (5002,'zhang','CLERK',5001,TO_DATE('28-JUL-2004','DD-MM-YYYY'),3000,1500,50);
INSERT INTO emp VALUES (5003,'zhang','CLERK',5001,TO_DATE('28-JUL-2006','DD-MM-YYYY'),2000,NULL,50);
INSERT INTO emp VALUES (5004,'zhang','OTHER',5001,TO_DATE('28-JUL-1990','DD-MM-YYYY'),4000,3000,50);
INSERT INTO emp VALUES (5005,'zhang','OTHER',5001,TO_DATE('28-JUL-1990','DD-MM-YYYY'),1000,NULL,50);

1.选择部门30中的所有员工.

A:SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE deptno = 30;

2.列出所有办事员(CLERK)的姓名,编号和部门编号.

A:SELECT empno, ename,deptno FROM emp WHERE job='CLERK';

3.找出佣金高于薪金的员工.

A:SELECT empno ,ename FROM emp WHERE comm > sal;

4.找出佣金高于薪金的60%的员工.

A:SELECT empno ,ename FROM emp WHERE comm > sal*1.6;

5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.

A:SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno
        FROM emp
        WHERE (deptno =10 AND job ='MANAGER') OR (deptno =20 AND job ='CLERK');

6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.

A:SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno
        FROM emp
        WHERE ((deptno =10 AND job ='MANAGER') OR (deptno =20 AND job ='CLERK'))
                        OR
                        (job <> 'MANAGER' AND job <> 'CLERK' AND sal >=2000)

7.找出收取佣金的员工的不同工作.

A:SELECT job FROM emp WHERE comm>0 GROUP BY job;

8.找出不收取佣金或收取的佣金低于100的员工.

A:SELECT empno,ename FROM emp
        WHERE  comm<100                --不收取佣金,内部表内是空值 还是0呢?此答题内容为0的方式答题

SELECT empno ,ename FROM emp
        WHERE comm IS NULL OR comm<100   --这个方式是内部表为空值的情况

9.找出各月倒数第3天受雇的所有员工.

A:SELECT empno ,ename ,hiredate FROM emp
        WHERE LAST_DAY(hiredate)-hiredate=3        --执行成功

10.找出早于12年前受雇的员工.

A:SELECT * from emp
        where MONTHS_BETWEEN(SYSDATE,hiredate)>12*12; --执行成功

11.以首字母大写的方式显示所有员工的姓名.

A:SELECT INITCAP(ename) AS ename FROM emp;        --执行成功

12.显示正好为5个字符的员工的姓名.

A:SELECT ename FROM emp WHERE LENGTH(ename)=5;        --执行成功

13.显示不带有"R"的员工的姓名.

A:SELECT ename FROM emp WHERE ename NOT LIKE '%R%';         --执行成功

14.显示所有员工姓名的前三个字符.

A:SELECT SUBSTR(ename,1,3) AS ename FROM emp;        --执行成功

15.显示所有员工的姓名,用a替换所有"A"

A:SELECT REPLACE(ename,'a','A') FROM emp ;        --执行成功

16.显示满10年服务年限的员工的姓名和受雇日期.

A:SELECT ename,hiredate FROM emp
        WHERE MONTHS_BETWEEN(sysdate,hiredate)>=10*12;        --执行成功

17.显示员工的详细资料,按姓名排序.

A:SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno        --执行成功
        FROM emp ORDER BY ename;

18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.

A:SELECT ename,hiredate, MONTHS_BETWEEN(sysdate,hiredate) AS Bmonths                --执行成功
        FROM emp ORDER BY Bmonths DESC;                                                                               

19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.

A:SELECT ename,job,sal
        FROM emp
        ORDER BY job DESC,sal ;

20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.

A:SELECT ename,TO_NUMBER(TO_CHAR(hiredate,'YYYY')) AS year,TO_CHAR(hiredate,'MM') AS month       
        FROM emp
        ORDER BY month,year ;--执行成功,这里存在一个问题!就是月份的 高低排序的问题,我用的是字符串进行排序的,没有NUMBER看起来舒服。

21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.

A:SELECT TRUNC(sal/30) AS DaySAL FROM emp

22.找出在(任何年份的)2月受聘的所有员工。

A:SELECT empno,ename FROM emp WHERE TO_CHAR(hiredate,'MM')='02';

23.对于每个员工,显示其加入公司的天数.

A:SELECT empno,ename,(SYSDATE-hiredate) AS days
        FROM emp;        --根据题目的意思肯定是这么写,但是情况有点复杂就是DAYS有小数存在,那么我们就可以使用ROUND 或者TRUNC函数进行取舍。具体情况具体对待
ROUND:SELECT empno,ename,ROUND(SYSDATE-hiredate) AS days FROM emp;
       
TRUNC:SELECT empno,ename,TRUNC(SYSDATE-hiredate) AS days FROM emp;
24.显示姓名字段的任何位置包含"A"的所有员工的姓名.

A:SELECT empno ,ename FROM emp WHERE empno LIKE '%A%'; --执行成功

25.以年月日的方式显示所有员工的服务年限. (大概)

A:
MONTH:
SELECT empno,ename,MONTHS_BETWEEN(SYSDATE,hiredate) AS Bmonths FROM emp ;-- 详细
ROUND:SELECT empno,ename,ROUND(MONTHS_BETWEEN(SYSDATE,hiredate)) AS Bmonths FROM emp ;--round 大概
TRUNC:SELECT empno,ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)) AS Bmonths FROM emp ;--trunc 大概
DAY:
SELECT empno,ename,(SYSDATE-hiredate) ASBdays FROM emp; -- 详细
ROUND:SELECT empno,ename,ROUND(SYSDATE-hiredate) AS Bdays FROM emp; --round大概
TRUNC:SELECT empno,ename,TRUNC(SYSDATE-hiredate) AS Bdays FROM emp; --trunc大概
YEAR:
SELECT empno,ename,(MONTHS_BETWEEN(SYSDATE,hiredate))/12AS Byears FROM emp;-- 详细
ROUND:SELECT empno,ename,ROUND(MONTHS_BETWEEN(SYSDATE,hiredate)/12) AS Bmonths FROM emp ; --round大概
TRUNC:SELECT empno,ename,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) AS Bmonths FROM emp ; --trunc大概