SQL面试必备:复杂查询实战解析

3 下载量 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面试中脱颖而出至关重要。