SQL经典面试题及答案
sql语句面试题及答案
sql语句面试题及答案一、基本查询1. 简单查询请问如何查询一个表中的所有记录?答:可以使用SELECT * FROM table_name; 命令来查询表中的所有记录。
2. 条件查询如果我只想查询特定条件下的记录,例如查询年龄大于30的员工信息,应该怎么做?答:可以使用WHERE子句来进行条件查询,语句如下:SELECT * FROM employees WHERE age > 30;3. 限制查询结果在查询时,如果只想获取前5条记录,应该如何操作?答:可以使用LIMIT关键字来限制查询结果的数量,语句如下:SELECT * FROM table_name LIMIT 5;二、聚合查询1. 计数如何计算某个表中的记录数?答:可以使用COUNT()函数来计算表中的记录数,语句如下:SELECT COUNT(*) FROM table_name;2. 求和如果需要计算某列的总和,例如计算销售总额,应该怎么做?答:可以使用SUM()函数来计算某列的总和,语句如下:SELECT SUM(sales_amount) FROM sales_table;3. 平均值如何求某列的平均值,比如平均工资?答:可以使用AVG()函数来计算某列的平均值,语句如下:SELECT AVG(salary) FROM employees;三、分组查询1. 分组统计请问如何按照某个字段进行分组,并计算每个分组的记录数?答:可以使用GROUP BY子句来进行分组统计,语句如下:SELECT department, COUNT(*) FROM employees GROUP BY department;2. 多列分组如果需要按照多个字段进行分组,应该如何操作?答:可以在GROUP BY子句中列出所有需要分组的字段,语句如下:SELECT department, job_title, COUNT(*) FROM employees GROUP BY department, job_title;3. 分组聚合运算在分组查询中,如何对每个分组执行聚合运算,例如计算每个部门的最高工资?答:可以使用GROUP BY子句结合聚合函数来进行分组聚合运算,语句如下:SELECT department, MAX(salary) AS max_salary FROM employees GROUP BY department;四、连接查询1. 内连接如何查询两个表中有关联的记录?答:可以使用INNER JOIN来查询两个表中有关联的记录,语句如下:SELECT * FROM table1 INNER JOIN table2 ON mon_field = mon_field;2. 左连接如果需要查询左表的所有记录,以及右表中与之关联的记录,没有关联的则显示NULL,应该怎么做?答:可以使用LEFT JOIN来实现,语句如下:SELECT * FROM table1 LEFT JOIN table2 ON mon_field = mon_field;3. 右连接请问如何查询右表的所有记录,以及左表中与之关联的记录?答:可以使用RIGHT JOIN来实现,语句如下:SELECT * FROM table1 RIGHT JOIN table2 ON mon_field = mon_field;五、子查询1. 非相关子查询在查询时,如果需要在WHERE子句中使用一个SELECT语句作为条件,应该怎么做?答:可以使用非相关子查询来实现,语句如下:SELECT * FROM table1 WHERE column_name IN (SELECT column_name FROM table2);2. 相关子查询如果子查询需要引用外部查询的列,应该怎么做?答:可以使用相关子查询,在子查询中使用外部查询的列,语句如下:SELECT * FROM table1 WHERE column_name = (SELECT column_name FROM table2 WHERE related_column = table1.related_column);六、更新和删除操作1. 更新数据请问如何使用SQL语句来更新表中的记录?答:可以使用UPDATE语句来更新表中的记录,语句如下:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;2. 删除数据如果需要删除表中的某些记录,应该如何操作?答:可以使用DELETE语句来删除记录,语句如下:DELETE FROM table_name WHERE condition;七、排序和索引1. 排序查询结果如何对查询结果进行排序?答:可以使用ORDER BY子句对查询结果进行排序,语句如下:SELECT * FROM table_name ORDER BY column_name ASC/DESC;2. 创建索引为了提高查询效率,如何为表中的列创建索引?答:可以使用CREATE INDEX语句来创建索引,语句如下:CREATE INDEX index_name ON table_name (column_name);通过以上问题的探讨,我们了解了SQL语句在面试中常见的问题及答案。
面试经典50题sql解析
面试经典50题sql解析在数据库领域中,SQL是一种常用的查询语言,也是面试中经常被问到的重要知识点。
下面将解析面试中经典的50个SQL问题。
1. 什么是SQL?SQL(Structured Query Language)是一种用于管理关系型数据库的语言,用于查询、插入、更新和删除数据。
2. 什么是关系型数据库?关系型数据库是一种以表格形式存储数据的数据库,其中数据之间存在关系。
3. 什么是主键?主键是一列或一组列,用于唯一标识表中的每一行数据。
4. 什么是外键?外键是一列或一组列,用于建立表与表之间的关系。
5. 什么是索引?索引是一种数据结构,用于加快数据库查询的速度。
6. 什么是事务?事务是一组数据库操作,要么全部执行成功,要么全部回滚。
7. 什么是ACID属性?ACID是指数据库事务应具备的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
8. 什么是视图?视图是一种虚拟表,由查询语句定义,可以简化复杂的查询操作。
9. 什么是触发器?触发器是一种特殊的存储过程,当满足特定条件时自动执行。
10. 什么是存储过程?存储过程是一组预编译的SQL语句,可以在数据库中存储和重复使用。
11. 什么是游标?游标是一种用于遍历查询结果集的数据库对象。
12. 什么是连接?连接是将两个或多个表中的数据关联起来的操作。
13. 什么是内连接?内连接是根据两个表之间的共同值将数据连接起来。
14. 什么是外连接?外连接是根据两个表之间的共同值将数据连接起来,并包括没有匹配的数据。
15. 什么是子查询?子查询是嵌套在其他查询语句中的查询语句。
16. 什么是联合查询?联合查询是将多个查询结果合并成一个结果集的操作。
17. 什么是交叉连接?交叉连接是将一个表的每一行与另一个表的每一行进行组合的操作。
18. 什么是聚合函数?聚合函数是对一组数据进行计算并返回单个值的函数,如SUM、AVG、COUNT等。
sql优化面试题
sql优化面试题答案一:在进行SQL性能优化的时候,我们需要关注以下几个方面:1. 数据库结构优化:a. 合理设计表结构,避免过多冗余字段和无效索引的存在。
b. 设计适当的主键和外键,以提升查询效率。
c. 使用合适的数据类型,减少存储空间和提高查询性能。
2. 索引优化:a. 合理创建索引,对于经常用于查询的字段和JOIN操作的关联字段,可以考虑创建索引。
b. 避免创建过多的索引,因为索引的更新和维护也会带来性能开销。
c. 定期对索引进行优化和重建,以提高查询性能。
3. SQL查询优化:a. 使用合适的查询语句,避免使用过于复杂的SQL语句。
b. 避免使用SELECT *,只选取需要的字段,减少数据传输。
c. 调整查询顺序,优化JOIN操作的顺序和条件。
d. 避免使用子查询,可以将子查询转换为JOIN操作或者临时表的方式实现。
e. 尽量减少数据库访问次数,使用批量操作替代逐条操作。
4. 数据库配置优化:a. 合理配置数据库连接池,避免过多的空闲连接和频繁的连接创建。
b. 调整数据库参数,如缓存大小、并发连接数等,以适应具体的应用场景。
5. SQL语句调优:a. 使用Explain分析SQL语句执行计划,根据执行计划来优化查询语句。
b. 使用合适的JOIN方式,避免全表扫描和笛卡尔积等低效操作。
c. 避免使用OR条件,可以使用IN或者UNION替代。
d. 使用LIMIT限制返回的行数,避免返回大量无用数据。
6. 数据库缓存优化:a. 合理利用数据库缓存,缓存经常使用的查询结果和数据。
b. 使用合适的缓存策略,如LRU(最近最少使用)等。
综上所述,SQL优化不是一蹴而就的任务,需要我们综合考虑数据库结构、索引、查询语句、数据库配置以及缓存等各个方面的优化策略。
只有全面考虑并有针对性地进行优化,才能提升数据库的性能和响应速度。
答案二:在面试中,SQL优化是一个常见的话题。
下面我将介绍一些SQL 优化的面试题及其解答:1. 什么是SQL优化,为什么需要进行SQL优化?SQL优化是通过调整和优化SQL语句的结构、索引和查询方式,以提升数据库的性能和响应速度。
sql语句面试题及答案
sql语句面试题及答案本文将为您提供一些常见的SQL语句面试题,并给出相应的答案。
通过阅读本文,您将对SQL语句有更深入的了解,从而在面试中更加自信。
一、查询相关的面试题1. 如何用SQL语句查询一张表的所有记录?答案:使用SELECT语句来查询表中的所有记录,语法为:SELECT * FROM 表名;2. 如何查询指定条件的记录?答案:使用SELECT语句的WHERE子句来查询指定条件的记录,语法为:SELECT * FROM 表名 WHERE 条件;3. 如何对查询结果进行排序?答案:使用SELECT语句的ORDER BY子句来对查询结果进行排序,语法为:SELECT * FROM 表名 ORDER BY 列名 ASC/DESC;4. 如何获取查询结果的前几条记录?答案:使用SELECT语句的TOP或LIMIT子句来获取查询结果的前几条记录,语法为:SELECT TOP 数量 * FROM 表名; 或 SELECT * FROM 表名 LIMIT 数量;5. 如何对查询结果进行分页?答案:使用SELECT语句的LIMIT子句来实现分页效果,语法为:SELECT * FROM 表名 LIMIT 起始位置, 每页数量;二、插入、更新和删除相关的面试题1. 如何插入一条新记录?答案:使用INSERT INTO语句来插入一条新记录,语法为:INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3);2. 如何更新已有的记录?答案:使用UPDATE语句来更新已有的记录,语法为:UPDATE表名 SET 列名 = 新值 WHERE 条件;3. 如何删除指定的记录?答案:使用DELETE FROM语句来删除指定的记录,语法为:DELETE FROM 表名 WHERE 条件;三、聚合函数相关的面试题1. 如何计算表中记录的数量?答案:使用COUNT(*)函数来计算表中记录的数量,语法为:SELECT COUNT(*) FROM 表名;2. 如何计算某一列的总和?答案:使用SUM(列名)函数来计算某一列的总和,语法为:SELECT SUM(列名) FROM 表名;3. 如何计算某一列的平均值?答案:使用AVG(列名)函数来计算某一列的平均值,语法为:SELECT AVG(列名) FROM 表名;四、连接查询相关的面试题1. 如何在两个表之间进行连接查询?答案:使用JOIN语句来进行连接查询,语法为:SELECT * FROM 表1 JOIN 表2 ON 表1.列 = 表2.列;2. 如何实现左连接和右连接?答案:使用LEFT JOIN或RIGHT JOIN来实现左连接和右连接,语法为:SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.列 = 表2.列; 或SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1.列 = 表2.列;五、其他面试题1. 如何创建一个新表?答案:使用CREATE TABLE语句来创建一个新表,语法为:CREATE TABLE 表名 (列1 数据类型, 列2 数据类型, 列3 数据类型);2. 如何修改表的结构?答案:使用ALTER TABLE语句来修改表的结构,语法为:ALTER TABLE 表名 ADD 列名数据类型; 或 ALTER TABLE 表名DROP 列名;3. 如何在表中创建索引?答案:使用CREATE INDEX语句来在表中创建索引,语法为:CREATE INDEX 索引名 ON 表名 (列名);总结:本文介绍了一些常见的SQL语句面试题和对应的答案,涵盖了查询、插入、更新、删除、聚合函数、连接查询、表的创建和修改等方面。
sql面试必会6题经典
sql面试必会6题经典面试题
1. SQL有哪些数据类型?
SQL数据类型包括:数值类型(整数、实数、位类型)、字符串类型(字符串、固定长度字符串、可变长度字符串)、日期/时间类型、二进制类型以及用户自定义的特殊类型。
2. 什么是 SQL 联合查询?
SQL联合查询是一种在单个查询中使用多个表进行信息检索的技术,可以将多个相关表中的数据检索出来并进行合并显示。
常用的联合查询有内连接(Inner Join)、左外连接(Left Join)、右外连接(Right Join)、全外连接(Full Join)等。
3. 什么是 SQL 索引?
SQL索引是数据库表中用于快速检索数据的数据结构,它可以加快数据库表中某一列或多列上的查询速度。
常见的索引类型有B树索引、哈希索引、空间索引等。
4. 什么是SQL视图?
SQL视图是一种虚拟表,用于从一个或多个表中检索数据,并提供一种抽象的方法来访问表中的数据。
它可以让用户只能看到所需要看到的列和行,而不需要查看整个表。
5. SQL语句有哪些?
SQL语句有以下几种:CREATE(创建)、SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、ALTER(修改)、DROP(删除)等。
6. 什么是子查询?
子查询是一种在SQL语句中嵌套另一个完整的SQL语句的查询,它可以从其它表中检索数据,也可以从当前表中检索数据。
它可以让你更有效地检索数据,并且可以让你在不使用连接的情况下实现类似于连接的结果。
SQL常见面试题及答案整理
SQL常见⾯试题及答案整理本⽂转载⾃公众号:风控圈⼦,作者:研习社-winnie。
如有侵权,请联系我删除。
每天早上8点半⼀起实现⾃我增值1理论篇1、什么是SQL?SQL(结构化查询语⾔)是⼀种设计⽤于检索和操作数据的数据库。
它属于美国国家标准协会(ANSI)的⼀种标准,可⽤于执⾏Select(选择)、Update(更新)、Delete(删除)和Insert(插⼊)等数据任务。
2、数据库中的表和字段是什么?数据库是有序形式的⼀组信息,⽤于访问、存储和检索数据,表是在具有列和⾏的模型中设计的数据集合。
在表中,指定了列数称为字段,但未定义⾏数称为记录。
3、DBMS的类型是什么?DBMS是⼀个控制数据维护和使⽤的程序,它被认为是管理数据的⽂件管理器。
有四种类型的DBMS:关系DBMS分层DBMS⽹络DBMS⾯向对象的关系DBMS,最有⽤的DBMS是Relational DBMS。
它为数据提供了⼀个关系运算符。
4、SQL中的视图是什么?它包含来⾃⼀个或多个表的⾏和列,可以定义为虚拟表。
它消耗的内存较少。
句法:CREATE VIEW view_name ASSELECT column_name1, column_name2FROM table_nameWHERE CONDITION;5、什么是SQL中的Joins(连接)?Join⽤于从相关的⾏和列中检索数据。
它在两个或多个表之间⼯作,并且它从两个表返回⾄少⼀个匹配。
Joins类型是:Right Join (右连接)Left Join(左连接)Inner Join(内连接)Outer Join(外连接)Self-Join (⾃连接)Cross Join(交叉连接)·Full Join(全连接)6、SQL中的Constraints(约束)是什么?它可⽤于设置表中数据类型的限制。
在创建或更新表语句时,可以使⽤约束。
⼀些限制是:NOT NULLPRIMARY KEYFOREIGN KEYUNIQUECHECKDEFAULT7、SQL中有多少Key(键),它们如何⼯作?SQL中有不同类型的键:SuperKey(超级密钥)——⼀个或多个密钥的集合被定义为超级密钥,它⽤于唯⼀地标识表中的记录。
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');
update SC set score=(select avg(SC_2.score)
from SC SC_2
where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');
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='叶平');
4、查询姓“李”的老师的个数;
select count(distinct(Tname))
from Teacher
where Tname like '李%';
5、查询没学过“叶平”老师课的同学的学号、姓名;
select Student.S#,Student.Sname
14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;
经典sql面试题及答案
SQL面试题数据结构如下:模拟数据:ss1:选修过“李明”老师讲授课程的所有学生姓名步骤:1找到选修老师的学生id参考答案1参考答案22:找出没有选修过“李明”老师讲授课程的所有学生姓名步骤1 找见选修李明老师的学生参考答案1参考答案23:列出有两门以上(含两门)不及格课程的学生姓名及其平均成绩步骤:找见不及格的成绩的数量大于2的学生id参考答案1参考答案24:列出即学过名称为“1”号课程,又学过名称为“2”号课程的所有学生姓名步骤1 查询出课程1步骤2 查询出课程2参考答案1参考答案25:列出名称为“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号步骤1 找出课程1的所有成绩步骤2找出2号同学的成绩参考答案1参考答案26:列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩步骤1 找出一号课的成绩步骤2找出2号课的成绩参考答案1参考答案27:查询不选修课程编号为'5'学员的编号,姓名步骤:先查出选修5课程的学员参考答案1参考答案28:查询选修课程编号为'1'学员的编号,姓名步骤1 查询选修课程1的学号参考答案1参考答案29:查询选修课程名称为'5'的学员的编号,姓名步骤: 找出选修课程名称为5的学员编号参考答案1参考答案210:查询选修了课程的学员人数参考答案1参考答案211:查询选修全部课程的学员的编号,姓名步骤1 查询出一共有多少课程步骤2 查询用户的选修参考答案12:查询选修课程超过2门的学生步骤1 查询出一共有多少课程参考答案13:查询至少有3名学生选修的并且课程号2为的学生及平均分数步骤:至少有3名学生选修的参考答案14:查询学生选修了至少3门课程并且课程号3为的学生及平均分数步骤1 学生选修了至少3门课程参考答案115:查询最低分数大于60分,最高分数小于95分的学生学生的编号步骤1 先找出每个学生的最高分步骤2 找出最低分参考答案1参考答案216:显示选修了课程名称为“1”号课程的成绩高于“7”号同学成绩的所有同学的学生的编号步骤找出课程1的成绩步骤2 找出7号同学1号课程的成绩参考答案参考答案217:查询成绩比该课程平均成绩低的同学的成绩表步骤1:找出每门课程的平均成绩参考答案118:查询选修某课程的同学人数多于2人的课程号,课程名,教师姓名步骤找出选修的人数达鱼2人的课程id参考答案1参考答案219:横向列出每个学生的成绩(假说固定有门课程)。
SQL经典面试题及答案
SQL经典面试题及答案1.一道SQL语句面试题,关于group by表内容:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2005-05-10 负如果要生成下列结果, 该如何写sql语句?胜负2005-05-09 2 22005-05-10 1 2------------------------------------------create table #tmp(rq varchar(10),shengfu nchar(1))insert into #tmp values('2005-05-09','胜')insert into #tmp values('2005-05-09','胜')insert into #tmp values('2005-05-09','负')insert into #tmp values('2005-05-09','负')insert into #tmp values('2005-05-10','胜')insert into #tmp values('2005-05-10','负')insert into #tmp values('2005-05-10','负')1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq2) select N.rq,N.勝,M.負 from (select rq,勝=count(*) from #tmp where shengfu='胜'group by rq)N inner join(select rq,負=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq3)select a.col001,a.a1 胜,b.b1 负 from(select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a,(select col001,count(col001) b1 from temp1 where col002='负' group by col001) bwhere a.col001=b.col0012.请教一个面试中遇到的SQL语句的查询问题表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
经典的sql数据库面试题以及答案
Student(S#,Sname,Sage,Ssex) 学生表 S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别Course(C#,Cname,T#) 课程表 C#,课程编号;Cname:课程名字;T#:教师编号SC(S#,C#,score) 成绩表 S#:学号;C#,课程编号;score:成绩Teacher(T#,Tname) 教师表 T#:教师编号; Tname:教师名字问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S# from (select s#,score from SC where C#='001') a,(select s#,scorefrom SC where C#='002') bwhere a.score>b.score and a.s#=b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup by S# having avg(score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;select Student.S#,Student.Sname,count(SC.C#),sum(score)from Student left Outer join SC on Student.S#=SC.S#group by Student.S#,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;select Student.S#,Student.Snamefrom Studentwhere 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、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Sname from Student,SC whereStudent.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、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere 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 whereTeacher.T#=Course.T# and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Sname from (selectStudent.S#,Student.Sname,score ,(select score from SC SC_2 whereSC_2.S#=Student.S# and SC_2.C#='002') score2from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;9、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);10、查询没有学全所有课的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct SC.S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC where S#='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select S# from SC where C# in (select C# from SC where S#='1002') group by S# having count(*)=(select count(*) from SC whereS#='1002');15、删除学习“叶平”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;Insert SC select S#,'002',(Select avg(score)from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT S# as 学生ID,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩FROM SC AS tGROUP BY S#ORDER BY avg(t.score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.C# = R.C# andL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.C# = IL.C# and IM.S#=IL.S#GROUP BY IL.C#)ANDR.Score = (SELECT MIN(IR.score)FROM SC AS IRWHERE R.C# = IR.C#GROUP BY IR.C#);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.C# AS 课程号,max(ame)AS 课程名,isnull(AVG(score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM SC T,Coursewhere t.C#=course.C#GROUP BY t.C#ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数 ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM SC21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere T.C#=C.C# and C.T#=Z.T#GROUP BY C.C#ORDER BY AVG(Score) DESC22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3SC.S# As 学生学号,Student.Sname AS 学生姓名 ,T1.score AS 企业管理,T2.score AS 马克思,T3.score AS UML,T4.score AS 数据库,ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分FROM Student,SC LEFT JOIN SC AS T1ON SC.S# = T1.S# AND T1.C# = '001'LEFT JOIN SC AS T2ON SC.S# = T2.S# AND T2.C# = '002'LEFT JOIN SC AS T3ON SC.S# = T3.S# AND T3.C# = '003'LEFT JOIN SC AS T4ON SC.S# = T4.S# AND T4.C# = '004'WHERE student.S#=SC.S# andISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)NOT IN(SELECTDISTINCTTOP 15 WITH TIESISNULL(T1.score,0) + ISNULL(T2.score,0) +ISNULL(T3.score,0) + ISNULL(T4.score,0)FROM scLEFT JOIN sc AS T1ON sc.S# = T1.S# AND T1.C# = 'k1'LEFT JOIN sc AS T2ON sc.S# = T2.S# AND T2.C# = 'k2'LEFT JOIN sc AS T3ON sc.S# = T3.S# AND T3.C# = 'k3'LEFT JOIN sc AS T4ON sc.S# = T4.S# AND T4.C# = 'k4'ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) +ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT SC.C# as 课程ID, Cname as 课程名称,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85],SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]FROM SC,Coursewhere SC.C#=Course.C#GROUP BY SC.C#,Cname;24、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT S#,AVG(score) AS 平均成绩FROM SCGROUP BY S#) AS T1WHERE 平均成绩 > T2.平均成绩) as 名次,S# as 学生学号,平均成绩FROM (SELECT S#,AVG(score) 平均成绩FROM SCGROUP BY S#) AS T2ORDER BY 平均成绩 desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 3 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;26、查询每门课程被选修的学生数select c#,count(S#) from sc group by C#;27、查询出只选修了一门课程的全部学生的学号和姓名select SC.S#,Student.Sname,count(C#) AS 选课数from SC ,Studentwhere SC.S#=Student.S# group by SC.S# ,Student.Sname havingcount(C#)=1;28、查询男生、女生人数Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男';Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女';29、查询姓“张”的学生名单SELECT Sname FROM Student WHERE Sname like '张%';30、查询同名同性学生名单,并统计同名人数select Sname,count(*) from Student group by Snamehaving count(*)>1;;31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age from studentwhere CONVERT(char(11),DATEPART(year,Sage))='1981';32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S# group by SC.S#,Snamehaving avg(score)>85;34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <60;35、查询所有学生的选课情况;SELECT SC.S#,SC.C#,Sname,CnameFROM SC,Student,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# ;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;SELECT distinct student.S#,student.Sname,SC.C#,SC.scoreFROM student,ScWHERE SC.score>=70 AND SC.S#=student.S#;37、查询不及格的课程,并按课程号从大到小排列select c# from sc where scor e <60 order by C# ;38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;select SC.S#,Student.Sname from SC,Student whereSC.S#=Student.S# and Score>80 and C#='003';39、求选了课程的学生人数select count(*) from sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩select Student.Sname,scorefrom Student,SC,Course C,Teacherwhere Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );41、查询各个课程及相应的选修人数select count(*) from sc group by C#;42、查询不同课程成绩相同的学生的学号、课程号、学生成绩select distinct A.S#,B.score from SC A ,SC B whereA.Score=B.Score and A.C# <>B.C# ;43、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;44、统计每门课程的学生选修人数(超过10人的课程才统计)。
sql面试必会6题经典
SQL面试必会6题经典在SQL面试中,有一些问题是经典且必会的。
这些问题涵盖了SQL的基本概念和技巧,能够帮助面试官对面试者的SQL能力有一个全面的了解。
以下是6道经典的SQL面试题,包含了SELECT、JOIN、GROUP BY和子查询等常见的SQL操作。
题目一:查询表中的所有记录SELECT*FROM table_name;这是一个非常基本的查询,它能够返回表中的所有记录。
在面试中,可以用这个问题来考察面试者对SQL语法的熟悉程度。
题目二:查询表中的指定字段SELECT column1, column2 FROM table_name;这个问题要求面试者从表中选择指定的字段,而不是返回所有字段。
这能够考察面试者对SELECT语句的掌握程度。
题目三:查询表中的记录数SELECT COUNT(*) FROM table_name;在面试中,有时候会需要知道一张表中的记录数。
这个问题考察面试者是否知道如何使用COUNT函数来做这个事情。
题目四:查询表中的最大值和最小值SELECT MAX(column_name), MIN(column_name) FROM table_name;面试者需要使用MAX和MIN函数来查询表中某一列的最大值和最小值。
这个问题考察面试者是否了解这些聚合函数的用法。
题目五:查询表中满足指定条件的记录SELECT*FROM table_name WHERE condition;在面试中,很常见的需求是查询满足某些条件的记录。
这个问题考察面试者是否熟悉SQL中的WHERE子句的用法。
题目六:查询表中的重复记录SELECT column1, column2, COUNT(*) FROM table_n ame GROUP BY column1, column2 HAVING COUNT(*) >1;有时候需要查询表中的重复记录,这个问题考察面试者是否熟悉使用GROUP BY和HAVING来对聚合结果做筛选。
sql 面试题及答案
sql 面试题及答案在以下文章中,我将为您提供一些常见的SQL面试题以及它们的答案。
这些问题涵盖了SQL的基本概念、语句和技巧。
希望这些问题和答案能够帮助您在SQL面试中取得好成绩。
问题1:什么是SQL?答案:SQL是Structured Query Language(结构化查询语言)的缩写,是一种用于数据库管理系统的标准查询语言。
它用于存储、操纵和检索关系型数据库中的数据。
SQL语言具有简单、高效和功能强大的特点,广泛应用于各种数据库平台。
问题2:什么是数据库?答案:数据库是一个有组织的数据集合,用于存储和管理数据。
它可以是一个文件、一组文件或是一个完整的数据库管理系统。
数据库将数据以表格的形式进行组织,并使用关系模型来建立不同表之间的关系。
问题3:什么是关系型数据库?答案:关系型数据库是基于关系模型的数据库。
它使用表格(也称为关系)来存储和管理数据。
关系型数据库的数据以行和列的形式存储,其中每行代表一个记录,每列代表一种数据类型。
关系型数据库的一个重要特点是表格之间可以建立关系,并通过使用主键和外键来连接数据。
问题4:什么是主键?答案:主键是表中用来唯一标识每个记录的一列或一组列。
它的值必须在表中是唯一且非空的。
主键可以用于在表之间建立关系,也可以用于快速访问表中的数据。
问题5:什么是外键?答案:外键是一个表中的字段,它用于建立该表与其他表之间的关系。
外键是其他表的主键,在被引用表中的外键列中存储了其所引用表中的主键值。
通过外键,可以在多个表之间建立引用完整性约束,并实现表之间的数据关联和一致性。
问题6:什么是索引?答案:索引是一个特殊的数据结构,用于加快对表中数据的检索速度。
它通过创建一个排序的数据结构来提高访问表中数据的效率。
索引可以根据一个或多个列来创建,并可以根据这些列进行排序和过滤。
问题7:请解释SQL中的SELECT语句。
答案:SELECT语句用于从表中检索数据。
它可以从一个或多个表中选择所需的列,并根据条件过滤数据。
sql面试题目汇总(3篇)
第1篇第一部分:基础SQL查询1. 如何使用SELECT语句从数据库中查询数据?- 答案:SELECT语句用于从数据库表中查询数据。
基本语法如下:```sqlSELECT column1, column2, ... FROM table_name;```2. 如何使用WHERE子句对查询结果进行过滤?- 答案:WHERE子句用于过滤查询结果,只返回满足特定条件的行。
语法如下: ```sqlSELECT column1, column2, ... FROM table_name WHERE condition;```3. 如何使用ORDER BY子句对查询结果进行排序?- 答案:ORDER BY子句用于对查询结果进行排序。
语法如下:```sqlSELECT column1, column2, ... FROM table_name ORDER BY column1ASC|DESC;```4. 如何使用LIMIT子句限制查询结果的数量?- 答案:LIMIT子句用于限制查询结果的数量。
语法如下:```sqlSELECT column1, column2, ... FROM table_name LIMIT row_count;```5. 如何使用DISTINCT关键字去除查询结果中的重复值?- 答案:DISTINCT关键字用于去除查询结果中的重复值。
语法如下:```sqlSELECT DISTINCT column1, column2, ... FROM table_name;```第二部分:高级SQL查询6. 如何使用JOIN子句进行多表查询?- 答案:JOIN子句用于连接两个或多个表,并返回满足连接条件的行。
常见的JOIN类型包括:- INNER JOIN:返回两个表中匹配的行。
- LEFT JOIN(或LEFT OUTER JOIN):返回左表的所有行,即使右表中没有匹配的行。
- RIGHT JOIN(或RIGHT OUTER JOIN):返回右表的所有行,即使左表中没有匹配的行。
sql面试题及答案
sql面试题及答案sql面试题及答案一1. 简述索引存取的方法的作用和建立索引的原则作用:加快查询速度。
原则:(1) 如果某属性或属性组经常出现在查询条件中,考虑为该属性或属性组建立索引;(2) 如果某个属性常作为最大值和最小值等聚集函数的参数,考虑为该属性建立索引;(3) 如果某属性经常出现在连接操作的连接条件中,考虑为该属性或属性组建立索引;2. 简述数据库的设计过程数据库设计分为五个阶段:需求分析:主要是准确收集用户信息需求和处理需求,并对收集的结果进行整理和分析,形成需求说明。
概念结构设计:对用户需求进行综合、归纳、抽象,形成一个与与具体的DBMS无关概念模型(一般为ER模型)。
逻辑结构设计:将概念结构设计的概念模型转化为某个特定的DBMS所支持的数据模型,建立数据库逻辑模式,并对其进行优化,同时为各种用户和应用设计外模式。
物理结构设计:为设计好的逻辑模型选择物理结构,包括存储结构和存取方法等,建立数据库物理模式。
实施和维护:实施就是使用DLL语言建立数据库模式,将实际数据载入数据库,建立真正的数据库。
维护阶段是对运行中的数据库进行评价、调整和修改。
3. 什么是内存泄漏?答案:一般我们所说的内存泄漏指的是堆内存的泄漏。
堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。
当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。
4. 什么是基本表?什么是视图?答案:基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。
视图是从一个或几个基本表导出的表。
视图本身不独立存储在数据库中,是一个虚表5. 试述视图的优点(1) 视图能够简化用户的操作(2) 视图使用户能以多种角度看待同一数据;(3) 视图为数据库提供了一定程度的逻辑独立性;(4) 视图能够对机密数据提供安全保护。
sql面试题及答案
sql面试题及答案SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准编程语言。
在面试中,SQL问题通常用来评估候选人对数据库查询、数据操作和数据库设计的理解。
以下是一些常见的SQL面试题及其答案:# 1. 什么是SQL?答案:SQL是一种用于存储、操作和检索数据的编程语言,主要用于关系数据库管理系统(RDBMS)。
# 2. 列举一些基本的SQL命令。
答案:基本的SQL命令包括:- SELECT:用于从数据库中检索数据。
- INSERT INTO:用于向数据库表中插入新数据。
- UPDATE:用于修改表中的数据。
- DELETE:用于从表中删除数据。
- CREATE TABLE:用于创建新表。
- ALTER TABLE:用于修改现有表的结构。
- DROP TABLE:用于删除表。
# 3. 什么是主键(Primary Key)?答案:主键是数据库表中的一个或多个字段,用于唯一标识表中的每条记录。
主键的值必须是唯一的,并且不能为NULL。
# 4. 什么是外键(Foreign Key)?答案:外键是一个表中的字段,它引用了另一个表的主键。
外键用于建立两个表之间的关联,确保数据的引用完整性。
# 5. 什么是索引(Index)?答案:索引是数据库表中的一个结构,用于提高查询速度。
通过索引,数据库可以快速定位到表中的数据,而不需要扫描整个表。
# 6. 什么是事务(Transaction)?答案:事务是一系列的数据库操作,它们作为一个整体被执行,具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)的特性。
# 7. 什么是SQL注入?答案:SQL注入是一种安全漏洞,攻击者可以通过在应用程序的输入字段中插入恶意SQL代码,来操纵后端数据库。
# 8. 如何防止SQL注入?答案:防止SQL注入的方法包括:- 使用参数化查询。
常用sql语句面试题
常用sql语句面试题常用 SQL 语句面试题SQL(Structured Query Language)是一种专门用于与关系型数据库进行交互的标准化语言。
在面试过程中,经常会涉及到 SQL 语句的相关问题,考察应聘者对 SQL 语法的理解和熟练应用能力。
下面我们将介绍一些常见的 SQL 语句面试题以及它们的答案。
1. 请查询指定表中的所有数据。
答案:SELECT * FROM 表名;2. 请查询指定表中的部分数据,并按照指定字段升序排列。
答案:SELECT 字段1, 字段2, ... FROM 表名 ORDER BY 字段1 ASC;3. 请查询指定表中满足条件的数据。
答案:SELECT * FROM 表名 WHERE 条件;4. 请查询指定表中的数据,并按照指定字段降序排列,取前N条记录。
答案:SELECT * FROM 表名 ORDER BY 字段1 DESC LIMIT N;5. 请查询指定表中每个字段的不同取值及其对应的数量。
答案:SELECT 字段, COUNT(*) FROM 表名 GROUP BY 字段;6. 请查询指定表中的数据,并计算指定字段的平均值。
答案:SELECT AVG(字段) FROM 表名;7. 请查询指定表中满足条件的数据,并计算指定字段的总和。
答案:SELECT SUM(字段) FROM 表名 WHERE 条件;8. 请查询指定表中数据的个数。
答案:SELECT COUNT(*) FROM 表名;9. 请查询指定表中的数据,并按照指定字段分组,计算每组的平均值。
答案:SELECT 字段, AVG(字段) FROM 表名 GROUP BY 字段;10. 请查询指定表中满足条件的数据,并根据指定字段进行分页。
答案:SELECT * FROM 表名 WHERE 条件 LIMIT (页数-1)*每页数量, 每页数量;总结:以上是一些常见的 SQL 语句面试题及其答案,通过对这些问题的了解和掌握,可以更好地准备SQL 面试,并提高面试的成功率。
常见SQL数据库面试题和答案
常见SQL数据库面试题和答案(一)Student(S#,Sname,Sage,Ssex) 学生表 S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别Course(C#,Cname,T#) 课程表 C#,课程编号;Cname:课程名字;T#:教师编号SC(S#,C#,score) 成绩表 S#:学号;C#,课程编号;score:成绩Teacher(T#,Tname) 教师表 T#:教师编号; Tname:教师名字问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select # from (select s#,score from SC where C#='001') a,(select s#,scorefrom SC where C#='002') bwhere > and #=#;2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup by S# having avg(score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;select #,,count#),sum(score)from Student left Outer join SC on #=#group by #,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;select #,from Studentwhere S# not in (select distinct( #) from SC,Course,Teacher where #=# and #=# and ='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select #, from Student,SC where #=# and #='001'and exists( Select * from SC as SC_2 where #=# and #='002');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere S# in (select S# from SC ,Course ,Teacher where #=# and #=# and ='叶平' group by S# having count#)=(select count(C#) from Course,Teacher where #=# and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Sname from (select #,,score ,(select score from SC SC_2 where #=# and#='002') score2from Student,SC where #=# and C#='001') S_2 where score2 <score;9、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select # from Student,SC where #=# and score>60);10、查询没有学全所有课的同学的学号、姓名;select #,from Student,SCwhere #=# group by #, having count(C#) <(select count(C#) from Course);11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select S#,Sname from Student,SC where #=# and C# in select C# from SC where S#='1001';12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct #,Snamefrom Student,SCwhere #=# and C# in (select C# from SC where S#='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avgfrom SC SC_2where #=# ) from Course,Teacher where #=# and #=# and ='叶平');14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select S# from SC where C# in (select C# from SC where S#='1002')group by S# having count(*)=(select count(*) from SC where S#='1002');15、删除学习“叶平”老师课的SC表记录;Delect SCfrom course ,Teacherwhere #=# and #= # and Tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;Insert SC select S#,'002',(Select avg(score)from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT S# as 学生ID,(SELECT score FROM SC WHERE #=# AND C#='004') AS 数据库,(SELECT score FROM SC WHERE #=# AND C#='001') AS 企业管理,(SELECT score FROM SC WHERE #=# AND C#='006') AS 英语,COUNT(*) AS 有效课程数, AVG AS 平均成绩FROM SC AS tGROUP BY S#ORDER BY avg18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT # As 课程ID, AS 最高分, AS 最低分FROM SC L ,SC AS RWHERE # = # and= (SELECT MAXFROM SC AS IL,Student AS IMWHERE # = # and #=#GROUP BY #)AND= (SELECT MINFROM SC AS IRWHERE # = #GROUP BY #);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT # AS 课程号,maxAS 课程名,isnull(AVG(score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM SC T,Coursewhere #=#GROUP BY #ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM SC。
SQL经典面试题及答案
1。
用一条SQL 语句查询出每门课都大于80 分的学生姓名name kecheng fenshu张三语文81张三数学75李四语文76李四数学90王五语文81王五数学100王五英语90A:select distinct name from table where name not in (select distinct name from table where fenshu<=80)select name from table group by name having min(fenshu)>80select name from table group by name having count(kecheng)〉=3 and min (fenshu)〉=802。
学生表如下:自动编号学号姓名课程编号课程名称分数1 2005001 张三0001 数学692 2005002 李四0001 数学893 2005001 张三0001 数学69删除除了自动编号不同,其他都相同的学生冗余信息A:delete tablename where 自动编号not in(select min(自动编号) from tablename group by 学号, 姓名,课程编号,课程名称, 分数)3。
面试题:怎么把这样一个表儿year month amount1991 1 1.11991 2 1.21991 3 1.31991 4 1.41992 1 2。
11992 2 2。
21992 3 2.31992 4 2。
4查成这样一个结果year m1 m2 m3 m41991 1.1 1。
2 1.3 1。
41992 2。
1 2.2 2。
3 2。
4答案一、select year,(select amount from aaa m where month=1 and m.year=aaa.year) as m1,(select amount from aaa m where month=2 and m。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 用一条SQL 语句查询出每门课都大于80 分的学生姓名
name kechengfenshu
张三语文81
张三数学75
李四语文76
李四数学90
王五语文81
王五数学100
王五英语90
A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)
select name from table group by name having min(fenshu)>80
select name from table group by name having count(kecheng)>=3 and min(fenshu)>=80
2. 学生表如下:
自动编号学号姓名课程编号课程名称分数
1 2005001 张三0001 数学69
2 2005002 李四0001 数学89
3 2005001 张三0001 数学69
删除除了自动编号不同, 其他都相同的学生冗余信息
A: delete tablename where 自动编号not in(select min( 自动编号) from tablename group by 学号, 姓名, 课程编号, 课程名称, 分数)
3. 面试题:怎么把这样一个表儿
year month amount
1991 1 1.1
1991 2 1.2
1991 3 1.3
1991 4 1.4
1992 1 2.1
1992 2 2.2
1992 3 2.3
1992 4 2.4
查成这样一个结果
year m1 m2 m3 m4
1991 1.1 1.2 1.3 1.4
1992 2.1 2.2 2.3 2.4
答案一、
select year,
(select amount from aaa m where month=1 and m.year=aaa.year) as m1, (select amount from aaa m where month=2 and m.year=aaa.year) as m2, (select amount from aaa m where month=3 and m.year=aaa.year) as m3, (select amount from aaa m where month=4 and m.year=aaa.year) as m4
from aaa group by year
4. 说明:拷贝表( 拷贝数据, 源表名:a 目标表名:b)
SQL: insert into b(a, b, c) select d,e,f from a;
5.有一张表,里面有3个字段:语文,数学,英语。
其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
显示格式:
语文数学英语
及格优秀不及格
------------------------------------------
select
(case when 语文>=80 then '优秀'
when 语文>=60 then '及格'
else '不及格') as 语文,
(case when 数学>=80 then '优秀'
when 数学>=60 then '及格'
else '不及格') as 数学,
(case when 英语>=80 then '优秀'
when 英语>=60 then '及格'
else '不及格') as 英语,
from table
6、编写SQL语句
1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话
Create table stu (学号int ,
姓名varchar(8),
年龄int,
性别varchar(4),
家庭地址varchar(50),
联系电话int
);
2) 修改学生表的结构,添加一列信息,学历
Alter table stu add 学历varchar(6);
3) 修改学生表的结构,删除一列信息,家庭住址
Alter table stu drop column 家庭地址
4) 向学生表添加如下信息:
学号姓名年龄性别联系电话学历
1A22男123456小学
2B21男119中学
3C23男110高中
4D18女114大学
Insert into stu values(1,‟A‟,22,‟男‟,123456,‟小学‟)
Insert into stu values(2,‟B‟,21,‟男‟,119,‟中学‟)
Insert into stu values(3,‟C‟,23,‟男‟,110,‟高中‟)
Insert into stu values(4,‟D‟,18,‟女‟,114,‟大学‟)
5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专”Update stu set 学历=‟大专‟ where 联系电话like …11%‟
6) 删除学生表的数据,姓名以C开头,性别为…男‟的记录删除
Delect from stu where 性别=‟男‟ and 姓名like …c%‟
7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来
Select 姓名,学号from stu where 年龄<22 and 学历=‟大专‟
8) 查询学生表的数据,查询所有信息,列出前25%的记录
Select top 25 percent * from stu
9) 查询出所有学生的姓名,性别,年龄降序排列
Select 姓名,性别from stu order by 年龄desc
10) 按照性别分组查询所有的平均年龄
Select avg(年龄) from stu group by 性别
7、查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:
select top 10 * from A where ID >(select max(ID) from (select top 30 ID from
A order by A ) T) order by A
8、查询表A中存在ID重复三次以上的记录,完整的查询语句如下:
select * from(select count(ID) as count from table group by ID)T where
T.count>3
9、说出以下聚合数的含义:avg ,sum ,max ,min , count ,count(*)
AVG:求平均值
SUM:求和
MAX:求最大值
MIN:求最小值
COUNT(*):返回所有行数
*****************************************************************
事务Transaction 触发器TRIGGER 继续continue 唯一unqiue
主键primary key 标识列identity 外键foreign key 检查check
约束constraint
*****************************************************************
10、说明:随机取出10条数据
select top 10 * from tablename order by newid()
11、查询平均成绩大于60分的同学的学号和平均成绩;
select stuId,avg(score)
from Scores
group by stuId having avg(score) >60;。