根据给定的SQL题目及其答案,我们可以总结出一系列重要的SQL知识点和技巧,这些知识点对于学习SQL及准备面试都非常有帮助。 ### 1. 比较两个不同表中的记录 **知识点**: 子查询和连接操作是解决此类问题的关键技术。通过在两个不同的表中比较相同字段的数据来找出符合条件的记录。 **示例**: 在第一个问题中,我们通过子查询分别获取了“001”和“002”两门课程的成绩,并通过外部查询将这两组数据进行比较,找出成绩更高的学生学号。 ```sql select a.S# from (select S#, score from SC where C#='001') a, (select S#, score from SC where C#='002') b where a.score > b.score and a.S# = b.S#; ``` ### 2. 使用聚合函数与HAVING子句 **知识点**: AVG()函数用于计算平均值,GROUP BY子句用于对结果集进行分组,HAVING子句则用于过滤这些分组后的结果。 **示例**: 第二个问题展示了如何使用这些功能来找出平均成绩大于60分的学生。 ```sql select S#, avg(score) from sc group by S# having avg(score) > 60; ``` ### 3. 左连接与聚合函数结合使用 **知识点**: LEFT JOIN用于确保左侧表中的所有记录都会出现在结果集中,即使右侧表中没有匹配的记录。与聚合函数结合使用可以统计每位学生的选课数量和总成绩。 **示例**: 第三个问题中,我们使用LEFT JOIN连接学生表和成绩表,然后通过GROUP BY进行分组统计。 ```sql select Student.S#, Student.Sname, count(SC.C#), sum(score) from Student left join SC on Student.S# = SC.S# group by Student.S#, Sname ``` ### 4. 使用LIKE操作符进行模糊匹配 **知识点**: LIKE操作符允许我们在WHERE子句中使用通配符来搜索模糊匹配的字符串。 **示例**: 第四个问题中,我们利用LIKE '李%'来找出所有名字以“李”开头的老师。 ```sql select count(distinct(Tname)) from Teacher where Tname like '李%'; ``` ### 5. 使用NOT IN排除特定条件 **知识点**: NOT IN操作符可以帮助我们排除指定集合中的值,适用于查找不包含某些值的记录。 **示例**: 在第五个问题中,我们找出没有上过“叶平”老师课程的学生。 ```sql select Student.S#, Student.Sname from Student where S# not in (select distinct(SC.S#) from SC, Course, Teacher where SC.C# = Course.C# and Teacher.T# = Course.T# and Teacher.Tname = '叶平'); ``` ### 6. 存在性子查询的应用 **知识点**: EXISTS子句用于检查子查询的结果集是否为空,通常用于判断某个条件是否存在。 **示例**: 第六个问题展示了如何使用EXISTS来找出同时选修了“001”和“002”课程的学生。 ```sql select Student.S#, Student.Sname from Student, SC where Student.S# = SC.S# and SC.C# = '001' and exists (Select * from SC as SC_2 where SC_2.S# = SC.S# and SC_2.C# = '002'); ``` ### 7. 多表连接与子查询嵌套 **知识点**: 当需要从多个表中获取数据并进行复杂的逻辑判断时,可以使用多表连接配合子查询嵌套。 **示例**: 第七个问题中,我们通过多表连接以及嵌套子查询找出了学过“叶平”老师所有课程的学生。 ```sql select S#, Sname from Student where S# in (select S# from SC, Course, Teacher where SC.C# = Course.C# and Teacher.T# = Course.T# and Teacher.Tname = '叶平' group by S# having count(SC.C#) = (select count(C#) from Course, Teacher where Teacher.T# = Course.T# and Tname = '叶平')); ``` ### 8. 复杂的比较操作 **知识点**: 在某些情况下,需要在一个查询中同时比较多个条件下的记录,这通常涉及到子查询和嵌套查询的使用。 **示例**: 第八个问题中,我们使用子查询和嵌套查询来找出课程编号“002”的成绩比课程编号“001”低的所有学生。 ```sql Select S#, Sname from (select Student.S#, Student.Sname, score, (select score from SC SC_2 where SC_2.S# = Student.S# and SC_2.C# = '002') score2 from Student, SC where Student.S# = SC.S# and C# = '001') S_2 where score2 < score; ``` ### 9. 排除特定条件 **知识点**: NOT IN和NOT EXISTS是两种常用的排除特定条件的方法,它们在处理NULL值时有所不同。 **示例**: 第九个问题使用NOT IN来找出所有课程成绩小于60分的学生。 ```sql select S#, Sname from Student where S# not in (select Student.S# from Student, SC where S.S# = SC.S# and score > 60); ``` ### 10. 分组后的条件筛选 **知识点**: GROUP BY配合HAVING子句可以实现对分组后的数据进行进一步的筛选。 **示例**: 第十个问题中,我们使用GROUP BY和HAVING来找出没有学全所有课程的学生。 ```sql select Student.S#, Student.Sname from Student, SC where Student.S# = SC.S# group by Student.S#, Student.Sname having count(C#) < (select count(C#) from Course); ``` ### 11. 利用IN操作符简化查询 **知识点**: IN操作符可以用于匹配一组值中的任意一个,非常适合于简化查询语句。 **示例**: 第十一个问题中,我们使用IN操作符来找出与学号为“1001”的同学所学课程相同的其他同学。 ```sql select S#, Sname from Student, SC where Student.S# = SC.S# and C# in select C# from SC where S# = '1001'; ``` ### 12. 基于已知条件的扩展查询 **知识点**: 当已经知道某些条件时,可以通过扩展这些条件来进一步筛选数据。 **示例**: 第十二个问题中,我们基于已知的学号“001”同学的课程信息,找出所有学过他所学课程的其他同学。 ```sql select distinct SC.S#, Sname from Student, SC where Student.S# = SC.S# and C# in (select C# from SC where S# = '001'); ``` ### 13. 表更新操作 **知识点**: UPDATE语句用于修改表中的数据。通常需要指定哪些列被更新以及更新的条件是什么。 **示例**: 虽然题目只给出了前面的部分,但可以推测这里可能涉及到了对SC表进行某种更新操作。 通过以上分析,我们可以看到这些问题涵盖了SQL的基础知识到高级应用,包括连接操作、聚合函数、子查询、条件判断等多个方面。这些技能不仅对准备SQL面试非常有用,也是日常开发工作中不可或缺的能力。
2025-05-07 18:02:00 56KB sql面试题 面试题 sql
1
经典SQL语句汇总 经典SQL语句汇总 经典SQL语句汇总
2023-05-17 22:27:27 437KB SQL,SQL语句
1
经典SQL语句大全,实在太棒了,包含几乎全部语句,内容精悍。
2023-05-08 16:49:38 91KB sql语句 经典
1
一个项目涉及到50个SQL语句。(经典)
2023-04-25 10:25:10 28KB SQL 经典
1
经典SQL语句大全经典SQL语句大全经典SQL语句大全
2023-04-09 00:21:03 91KB 经典SQL语句大全
1
经典的关联语句经典的关联语句经典的关联语句经典的关联语句经典的关联语句
2022-03-09 16:16:20 2KB sql
1
2021年大数据技术-经典SQL语句大全.pdf
2022-01-27 18:02:06 6.5MB 资料
一、基础 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键: Alter table tabname add primary key(col) 说明:删除主键: Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1=value1 where 范围 查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料! 排序:select * from table1 order by field1,field2 [desc] 总数:select count as totalcount from table1 求和:select sum(field1) as sumvalue from table1 平均:select avg(field1) as avgvalue from table1 最大:select max(field1) as maxvalue from table1 最小:select min(field1) as minvalue from table1 11、说明:几个高级查询运算词 A: UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。 C: INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left (outer) join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b
2021-12-04 10:50:48 21KB sqlserver
1
50个经典sql语句总结: mysql 单表查询,多表查询,分组查询,最大/小,和计算,平均数计算,复杂计算...
2021-12-03 14:36:23 28KB 经典sql语句
1
学sql的神器,我把oracle 中经典实例 一点一点抄到sql中,很费力的。
2021-10-26 22:29:38 1.65MB 经典SQL例子-scott sql 神器
1