SQL面试必备:复杂查询实战解析
136 浏览量
更新于2024-06-16
收藏 214KB PDF 举报
"SQL经典面试题集锦"
在SQL面试中,常常会遇到一些经典的题目来测试应聘者的数据库操作能力。以下是对给定文件中部分SQL问题的详细解答和解析:
1. 学生表S、课程表C和学生课程表SC的创建
这是关于数据库设计的问题,创建三张表以表示学生、课程和它们之间的选课关系。在MySQL数据库中,可以使用以下语句创建表格:
```sql
CREATE TABLE S (
id INT PRIMARY KEY,
name VARCHAR(20)
);
CREATE TABLE C (
id INT PRIMARY KEY,
name VARCHAR(20)
);
CREATE TABLE SC (
sid INT REFERENCES S(id),
cid INT REFERENCES C(id),
PRIMARY KEY (sid, cid)
);
```
2. 查询选修了所有选修课程的学生
这个问题的目的是找出选修了所有课程的学生。首先,我们需要知道课程总数,然后检查每个学生是否选修了所有课程。SQL语句如下:
```sql
SELECT s.id, s.name
FROM S s
WHERE (SELECT COUNT(*) FROM SC WHERE sid = s.id) =
(SELECT COUNT(*) FROM C);
```
这个查询比较了每个学生选修的课程数量与总课程数量,如果相等,则表示该学生选修了所有课程。
3. 查询选修了至少5门以上课程的学生
这个查询类似上一个问题,但条件是学生至少选修了5门课程:
```sql
SELECT s.id, s.name
FROM S s
WHERE (SELECT COUNT(*) FROM SC WHERE sid = s.id) >= 5;
```
4. 列出所有年龄比所属主管年龄大的员工ID和名字
此问题涉及到子查询,我们要找出员工年龄大于其主管年龄的情况。SQL语句如下:
```sql
SELECT employee.name
FROM Test employee
WHERE employee.age > (SELECT manager.age FROM Test manager WHERE manager.id = employee.manager);
```
在这个查询中,我们使用了嵌套查询来获取每个员工的主管年龄,并将其与员工自己的年龄进行比较。
5. 查询选修了'计算机原理'课程的学生学号和姓名
这是简单的联接查询,通过学生表和选课表找出选修特定课程的学生:
```sql
SELECT stu.sno, stu.sname
FROM Student stu
WHERE EXISTS (SELECT 1 FROM Sc sc JOIN Course c ON sc.cid = c.cid WHERE sc.sno = stu.sno AND c.cname = '计算机原理');
```
或者使用INNER JOIN:
```sql
SELECT stu.sno, stu.sname
FROM Student stu
JOIN Sc sc ON stu.sno = sc.sno
JOIN Course c ON sc.cid = c.cid
WHERE c.cname = '计算机原理';
```
这些SQL语句展示了在实际数据库操作中常见的查询技巧,包括子查询、联接查询和聚合函数的使用。熟练掌握这些技巧对于在SQL面试中脱颖而出至关重要。
2024-04-28 上传
2012-04-22 上传
102 浏览量
2010-09-23 上传
2011-05-10 上传
zz_ll9023one
- 粉丝: 915
- 资源: 5091
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析