Sql题目精选练习
2024-09-25 00:59:08
1.每日经典sql
1.1.1 根据三张关系表查询雇员中工资最高的雇员的员工姓名、工资和部门号。
salary(工资表) employee(员工表) department(部门表)
Sql语句:
SELECT
emp.ename AS '姓名',
sal.sal AS '薪资',
dep.depname AS '部门'
FROM
employee AS emp
INNER JOIN salary AS sal
INNER JOIN department dep ON dep.salid = sal.salid
AND dep.empid = emp.empid
AND sal.sal = ( SELECT max( sal ) FROM salary )
1.1.2 找出各月倒数第3天受雇的所有员工.
emp(练习表)
Sql语句:
SELECT
*
FROM
emp
WHERE --关键点:last_day()函数返回日期的最后一天
hiredate = last_day( hiredate ) -2
1.1.3 显示所有员工的姓名,用a替换所有"A"
Sql语句:
SELECT REPLACE --replace函数 替换一些字符
( ename, 'A', 'a' ) name,
job,
hiredate
FROM
emp;
1.1.4 显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.
Sql语句:
SELECT
ename,
--t o_char函数是用来截取时间的 to_char ( hiredate, 'yyyy' ) YEAR,
to_char ( hiredate, 'mm' ) months
FROM
emp
ORDER BY
months,
YEAR ASC;
1.1.5 显示姓名字段的任何位置包含"A"的所有员工的姓名.
Sql语句:
SELECT -- racle instr函数返回要截取的字符串在源字符串中的位置。只检索一次,也就是说从字符的开始到字符的结尾就结束。
ename
FROM
emp
WHERE
instr( ename, 'A', 1 ) > 0;
1.1.6 列出薪金比“SMITH”多的所有员工. --upper函数 小写字符转化成大写的函数
Sql语句:
SELECT
ename,
sal
FROM
emp
WHERE
sal > ( SELECT sal FROM emp WHERE upper( ename ) = 'SMITH' );
1.1.7 列出受雇日期早于其直接上级的所有员工
Sql语句:
SELECT
e.ename,
m.ename
FROM
emp e,
emp m
WHERE
e.mgr = m.empno
AND ( e.hiredate < m.hiredate );
2.1.1 50道经典的Sql题。
2.1.2 查询“3-105”课程比“6-166”课程成绩高的所有学生的学号
Sql语句:
SELECT
*
FROM
SCORE A
WHERE
A.Cno = '3-105'
AND A.Degree > ( SELECT B.Degree FROM SCORE B WHERE B.Cno = '6-166' AND A.Sno = B.Sno )
2.1.2 查询平均成绩大于80分的同学的学号和平均成绩
Sql语句:
SELECT
Sno '学号',
avg( Degree ) '平均成绩'
FROM
score
GROUP BY
Sno
HAVING
avg( Degree ) > 80
2.1.3 查询所有同学的学号、姓名、选课数、总成绩
Sql语句:
SELECT
A.Sno '学号',
A.Sname '姓名',
count( Cno ) '选课数',
sum( B.Degree ) '成绩'
FROM
student A
INNER JOIN score B ON A.Sno = B.Sno
GROUP BY
A.Sno
2.1.4 查询姓“李”的老师的个数
Sql语句:
SELECT
count( 1 )
FROM
teacher A
WHERE
SUBSTR( A.Tname, 1, 1 ) = '李'
2.1.5 查询没学过“李诚”老师课的同学的学号、姓名 --应该有比这个简便的方法但是我想不到
Sql语句:
SELECT
*
FROM
student
WHERE
sno NOT IN (
SELECT
S.sno
FROM
student S
INNER JOIN score SC ON S.Sno = SC.Sno
AND Sc.Cno IN ( SELECT B.Cno FROM teacher A INNER JOIN course B ON A.Tno = B.Tno AND A.Tname = '李诚' )
)
2.1.6 查询学过“3-105”并且也学过编号“3-245”课程的同学的学号、姓名;
Sql语句:
--第一种方式
SELECT
Sno '学号',
Sname '姓名'
FROM
student
WHERE
Sno IN (
SELECT
A.Sno
FROM
score A
WHERE
A.Cno = '3-105'
AND A.Sno IN ( SELECT B.Sno FROM score B WHERE B.Cno = '3-245' )
)
--第二种方式
SELECT
stu.Sno '学号',
stu.Sname '姓名'
FROM
student AS stu,
score sc,
score c
WHERE
stu.Sno = sc.Sno
AND sc.Sno = c.Sno
AND sc.Cno = '3-105'
AND c.Cno = '3-245'
最新文章
- iOS tableview删除多余的空cell
- jQuery属性选择器.attr()和.prop()两种方法
- 【学习笔记】【C语言】算术运算
- MySQL优化器join顺序
- maven build脚本笔记
- 使用链表实现队列------《数据结构与算法分析-C语言描述》
- win8.1 64位环境建设android开发环境
- requestWindowFeature()应用
- how to make a git repo un-git?
- 钩子不仅仅是windows给你留的后门
- ubunut在系统恢复模式下无法修改root密码的分析和解决
- 《Essential C++》读书笔记 之 C++编程基础
- 笔记-Python中逗号的作用
- python appium 封装获取toast方法
- Linux定时运行程序脚本
- Maximal Rectangle leetcode java
- 对Excle的行和列进行检查 单元格类型转换代码 ;
- day19 Models补充+缓存+信号+序列化+分析抽屉页面
- 在VS2010中使用Git【图文】(转)
- Git远程库