根据给定的信息,我们可以整理出以下几个重要的SQL知识点及相关示例: ### 1. 删除重复记录中的非最小ID **需求**: 删除表`Table_1`中具有相同`name`值的记录,但只保留每组中`id`最小的记录。 **SQL 代码**: ```sql DELETE FROM Table_1 WHERE id NOT IN (SELECT MIN(id) FROM Table_1 GROUP BY name); ``` ### 2. 查询平均分低于60分的学生数量超过2个的情况 **需求**: 需要查询出平均分数低于60分且这样的学生数量超过2个的情况。 **SQL 代码**: ```sql SELECT L.SID, AVG(L.Score) AS AverageScore FROM Link L WHERE L.SID IN ( SELECT S.SID FROM ( SELECT SID, COUNT(SID) AS Num FROM Link WHERE Score < 60 GROUP BY SID ) S WHERE Num >= 2 ) GROUP BY L.SID; ``` ### 3. 合并两张表并计算输入输出总和 **需求**: 给定两张表`table1`和`table2`,需要合并这两张表,并计算每个产品的输入输出总量。 **SQL 代码**: ```sql SELECT A.PID, A.Product, SUM(A.InputNum) AS InputNum, SUM(A.OutputNum) AS OutputNum FROM ( SELECT P1.PID, P1.Product, P1.InputNum, 0 AS OutputNum FROM Product1 P1 UNION ALL SELECT P2.PID, P2.Product, 0 AS InputNum, P2.OutputNum FROM Product2 P2 ) A GROUP BY A.PID, A.Product; ``` ### 4. 比较两个课程的成绩 **需求**: 给定学号(SID)、课程编号(COURSEID)和成绩(SCORE),需要查询出第1门课程成绩高于第2门课程成绩的学生情况。 **SQL 代码 1** (使用窗口函数): ```sql WITH A AS ( SELECT L.SID, L.COURSEID, L.Score AS Score1, 0 AS Score2 FROM Link L WHERE L.CourseID = 1 ), B AS ( SELECT L.SID, L.COURSEID, 0 AS Score1, L.Score AS Score2 FROM Link L WHERE L.CourseID = 2 ) SELECT D.* FROM ( SELECT C.SID, SUM(SCORE1) AS Score1, SUM(SCORE2) AS Score2 FROM ( SELECT * FROM A UNION SELECT * FROM B ) C GROUP BY C.SID ) D WHERE D.Score1 > D.Score2; ``` **SQL 代码 2** (使用子查询): ```sql SELECT A.SID, A.Score AS Course1Score, B.Score AS Course2Score FROM ( SELECT SID, Score FROM Link WHERE CourseID = 1 ) A JOIN ( SELECT SID, Score FROM Link WHERE CourseID = 2 ) B ON A.SID = B.SID WHERE A.Score > B.Score; ``` ### 5. 更新表B中的b2列使其与表A中的a2列相等,其中A.a1=B.b1 **需求**: 更新表B中的`b2`列,使其等于表A中对应的`a2`值,其中`A.a1=B.b1`。 **SQL 代码**: ```sql UPDATE B SET B.b2 = A.a2 FROM A WHERE A.a1 = B.b1; ``` ### 6. 使用窗口函数生成行号、排名等 **需求**: 给定表`A`,使用窗口函数生成行号、排名等。 **SQL 代码 1** (使用窗口函数): ```sql SELECT ROW_NUMBER() OVER (ORDER BY a1 ASC) AS RowID, RANK() OVER (ORDER BY a1 ASC) AS RankX, DENSE_RANK() OVER (ORDER BY a1 ASC) AS RankY, NTILE(4) OVER (ORDER BY a1 ASC) AS TileZ, * FROM A ORDER BY a1 ASC; ``` **SQL 代码 2** (创建临时表并使用IDENTITY函数): ```sql CREATE TABLE tmp_table1 (ID INT IDENTITY(1, 1), A1 INT, A2 INT, A3 INT, A4 INT); INSERT INTO tmp_table1 (A1, A2, A3, A4) SELECT * FROM A; SELECT * FROM tmp_table1; ``` 这些示例展示了如何在实际应用中使用SQL解决复杂的问题,涵盖了删除重复记录、多表查询、窗口函数等多种技术。通过这些示例的学习,可以提高面试者对于SQL的理解和运用能力,为面试做更充分的准备。
id number,
name varchar2(7)
其中id是主键,name有重复记录
要求删除name字段重复的记录,保留其中id字段值最小的那条记录
如:
id name
1 test
2 test
3 test
4 test1
5 test1
6 test1
删完 了保留
1 test
4 test1
SQL: delete from Table_1 where id not in (select min(id) from Table_1 group by name)
例子2) 有三张表
1。student有两个字段 id name
2。course 也有两个字段 id cname
3 link 有三个字段 sid(关联student表的id 字段) cid(关联course表的id字段) score
要求查询出有两门以上不及格的学生的平均成绩
提示:先查询出至少2门不及格的学生
SQL: select SID, avg(score) from Link L where L.SID IN
( select sID from
(select sID, count(Sid) as num from Link WHERE Score<60 group by SID )A
where num>=2
例子3) 题目:现有两张表,table1和table2,两个表的内容及结构如下:
table1
pid product inputNum
1 A 20
3 C 10
5 E 30
table2
pid product outputNum
1 A 30
2 B 8
4 D 15
现在要查询得出如下结果:
pid product inputNum outputNum
1 A 20 30
2 B 0 8
3 C 10 0
4 D 0 15
5 E 30 0
请写出得到上述结果的SQL语句!
SQL: SELECT A.PID,A.PNAME,SUM(A.INPUTNUM)as INPUTNUM ,SUM(A.OUTPUTNUM) as OUTPUTNUM FROM
(SELECT P1.*,0 AS OUTPUTNUM FROM PRODUCT1 P1
UNION ALL
SELECT P2.PID,P2.PNAME, 0 AS INPUTNUM,P2.OUTPUTNUM FROM PRODUCT2 P2)A
GROUP BY A.PID,A.PNAME
例子4) 表如下:
剩余12页未读,继续阅读
- 粉丝: 2
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助