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;