Sql题目精选练习

1.每日经典sql

 1.1.1 根据三张关系表查询雇员中工资最高的雇员的员工姓名、工资和部门号。

 salary(工资表)        employee(员工表)        department(部门表)

    

Sql语句: 

 1 SELECT
 2     emp.ename as'姓名',
 3     sal.sal as '薪资',
 4     dep.depname as '部门'
 5 FROM
 6     employee AS emp
 7     INNER JOIN salary AS sal
 8     INNER JOIN department dep ON dep.salid = sal.salid 
 9     AND dep.empid = emp.empid 
10     AND sal.sal = ( SELECT max( sal ) FROM salary )

  1.1.2 找出各月倒数第3天受雇的所有员工.
  emp(练习表)

Sql语句:

1 SELECT
2     * 
3 FROM
4     emp 
5 WHERE    --关键点:last_day()函数返回日期的最后一天
6     hiredate = last_day( hiredate ) -2

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

Sql语句:

1 SELECT
2     ename,
3     job 
4 FROM
5     emp 
6     WHERE-- MONTHS_BETWEEN函数返回两个日期之间的月份数    sysdate表示当前日期
7     months_between( SYSDATE, hiredate ) / 12 > 12;

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

Sql语句: 

1 SELECT
2     ename,
3     job 
4 FROM
5     emp 
6 WHERE
7     ename NOT LIKE '% R %'

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

Sql语句:

1 SELECT    --SUBSTR函数则是切割字符串函数
2     SUBSTR( ename, 1, 3 ) name,
3     job,
4     hiredate 
5 FROM
6     emp;

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

Sql语句:

1 SELECT REPLACE    --replace函数 替换一些字符
2     ( ename, 'A', 'a' ) name,
3     job,
4     hiredate 
5 FROM
6     emp;

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

Sql语句:

1 SELECT
2     * 
3 FROM
4     EMP 
5 WHERE
6     MONTHS_BETWEEN( SYSDATE, HIREDATE ) / 12 >= 10;

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

 Sql语句:

1 SELECT
2     ename, --to_char函数是用来截取时间的
3     to_char( hiredate, 'yyyy' ) year,
4     to_char( hiredate, 'mm' ) months 
5 FROM
6     emp 
7 ORDER BY
8     months,
9     year ASC;

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

 Sql语句:

 

1 SELECT
2     ename,
3     sal / 30 dailysal 
4 FROM
5     emp;

 

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

 

 Sql语句:

1 SELECT
2     ename,
3     hiredate 
4 FROM
5     emp 
6 WHERE    --to_char是获取当前时间 'mm'代表月份
7     to_char( hiredate, 'mm' ) = '02';

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

 Sql语句:

1 SELECT    --当前时间-入职时间
2     ename,
3     SYSDATE - hiredate 天数 
4 FROM
5     emp;

  1.2.2 显示姓名字段的任何位置包含"A"的所有员工的姓名.

 Sql语句:

1 --Oracle instr函数返回要截取的字符串在源字符串中的位置。只检索一次,也就是说从字符的开始到字符的结尾就结束。
2 SELECT
3     ename 
4 FROM
5     emp 
6 WHERE
7     instr( ename, 'A', 1 ) > 0;

  1.2.3以年月日的方式显示所有员工的服务年限.

Sql语句:

1 SELECT
2     ename, --直接获取当前用户姓名和年月日  
3     to_char( hiredate, 'yyyy/mm/dd' ) 
4 FROM
5     emp;

  1.2.4 列出至少有一个员工的所有部门.   

Sql语句:

 1 --第一种方式:进行联表查询关键点是公司相同,并对用户姓名进行分组
 2 SELECT
 3     dname 
 4 FROM
 5     emp,
 6     dept 
 7 WHERE
 8     emp.DEPTNO = dept.DEPTNO 
 9 GROUP BY
10     dname
11 --第二种方式: 第二种方式与第一种基本一样
12 SELECT DISTINCT
13     dname 
14 FROM
15     emp,
16     dept 
17 WHERE
18     emp.deptno = dept.deptno;

  1.2.5 列出薪金比“SMITH”多的所有员工. --upper函数 小写字符转化成大写的函数

Sql语句:

1 SELECT
2     ename,
3     sal 
4 FROM
5     emp 
6 WHERE
7     sal > ( SELECT sal FROM emp WHERE upper( ename ) = 'SMITH' );

  1.2.6 列出所有员工的姓名及其直接上级的姓名.

Sql语句:

1 SELECT    --查出一样的员工编号和领导编号
2     a.ename,
3     b.ename mgrname 
4 FROM
5     emp a,
6     emp b 
7 WHERE
8     a.mgr = b.empno;

  1.2.7 列出受雇日期早于其直接上级的所有员工

Sql语句:

1 SELECT    --有点小懵 以后看到多看几眼
2     e.ename,
3     m.ename 
4 FROM
5     emp e,
6     emp m 
7 WHERE
8     e.mgr = m.empno 
9     AND ( e.hiredate < m.hiredate );

  1.2.8 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门

Sql语句:

 1 SELECT
 2     dname,    --就是通过同部门的条件deptno相同的条件的数据展示出来
 3     emp.* 
 4 FROM
 5     dept,
 6     emp 
 7 WHERE
 8     emp.deptno ( + ) = dept.deptno 
 9 ORDER BY
10     dname;

 

 

转载于:https://www.cnblogs.com/joeyJss/p/11094366.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值