SQL数据库面试题以和答案

合集下载

sql面试题及答案

sql面试题及答案

sql面试题及答案SQL(Structured Query Language)是一种用于管理关系型数据库系统的标准化语言。

在面试过程中,针对SQL的相关问题被广泛应用,以评估面试者对数据库和SQL的理解程度和能力。

以下是一些常见的SQL面试题及其答案,供读者参考。

一、简答题1. 什么是SQL?SQL是一种用于管理关系型数据库系统的标准化语言。

它可以用于创建数据库、插入、更新、删除和查询数据。

2. SQL语言的分类有哪些?SQL语言可以分为DDL(数据定义语言)、DML(数据操作语言)和DQL(数据查询语言)。

3. DDL和DML的区别是什么?DDL用于定义和管理数据库结构,如创建表、修改表的结构等;DML用于对数据库中的数据进行操作,如增加、修改、删除数据等。

4. 什么是主键?主键是用于唯一标识表中每一条记录的列或一组列。

它具有唯一性和非空性约束。

5. 什么是外键?外键是一个表中的列,它与另一个表的主键建立关系。

它用于保持表与表之间的完整性,可以实现关系数据库的特性。

6. 什么是索引?索引是一种帮助数据库系统快速查找数据的数据结构。

它可以加快数据检索的速度,但会增加数据修改的时间。

7. 请解释SQL中的JOIN操作。

JOIN操作用于将两个或多个表中的数据连接起来,根据某个共同的列值将它们关联起来。

常见的JOIN操作包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN。

8. 请解释SQL中的GROUP BY和HAVING操作。

GROUP BY用于将数据按照指定的列进行分组;HAVING则用于对GROUP BY结果进行过滤,只选择满足条件的分组。

9. 什么是视图?视图是一个虚拟的表,它是由数据库中的一个或多个表的数据组成的。

视图是基于某个或多个表的查询结果,可以简化复杂的查询操作。

二、编程题1. 如何在表中插入数据?使用INSERT INTO语句向表中插入数据。

例如,INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3)。

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语句在面试中常见的问题及答案。

常用sql面试题

常用sql面试题

常用sql面试题常用 SQL 面试题SQL 是结构化查询语言(Structured Query Language)的缩写,是用于管理关系型数据库的一种标准化语言。

在数据库相关的面试中,SQL 面试题是非常常见的一类题目。

下面将介绍一些常用的 SQL 面试题,供大家参考。

1. 查询语句查询是 SQL 最基本也是最常用的操作,下面是几个常见的查询问题。

问题一:如何查询一张表的所有数据?答案:使用 `SELECT * FROM table_name;` 的语句可以查询一张表的所有数据,其中 `table_name` 为表名。

问题二:如何查询指定条件的数据?答案:使用 `SELECT * FROM table_name WHERE condition;` 的语句可以查询满足指定条件的数据,其中 `table_name` 为表名,`condition` 为查询条件。

问题三:如何查询指定列的数据?答案:使用 `SELECT column1, column2 FROM table_name;` 的语句可以查询指定列的数据,其中 `column1` 和 `column2` 为列名。

2. 排序和限制在查询时,通常需要对结果进行排序和限制显示的记录数量。

问题四:如何按照某一列进行升序或降序排序?答案:使用 `SELECT * FROM table_name ORDER BY column_name ASC/DESC;` 的语句可以按照某一列进行升序或降序排序,其中`table_name` 为表名,`column_name` 为要排序的列名,`ASC` 表示升序,`DESC` 表示降序。

问题五:如何限制查询结果的数量?答案:使用 `SELECT * FROM table_name LIMIT num;` 的语句可以限制查询结果的数量,其中 `table_name` 为表名,`num` 表示要显示的记录数量。

3. 聚合函数和分组聚合函数可以对一列或多列数据进行计算,而分组可以根据指定的列对数据进行分组统计。

sql 面试题及答案

sql 面试题及答案

sql 面试题及答案在面试过程中,SQL (Structured Query Language) 是常见的一个考察重点。

以下是一些常见的 SQL 面试题及其答案,帮助你在面试中更好地准备。

1. 什么是 SQL?SQL 是一种用于管理关系数据库系统的标准化语言。

它用于访问和操作数据库中的数据,并提供了创建、修改和删除数据库中的表、视图和存储过程等功能。

2. SQL 的主要分类有哪些?SQL 主要分为以下几类:- 数据定义语言 (DDL):用于创建和管理数据库中的对象,例如CREATE、ALTER、DROP 等。

- 数据操作语言 (DML):用于从数据库中获取、插入、修改和删除数据,例如 SELECT、INSERT、UPDATE 和 DELETE 等。

- 数据控制语言 (DCL):用于定义数据库对象的访问权限,例如GRANT 和 REVOKE 等。

3. 什么是表和视图?- 表:表是存储数据的基本结构,由列和行组成。

每个表代表一个数据实体,如用户、订单等。

- 视图:视图是从一个或多个表中导出的虚拟表。

它基于特定的查询定义,并可像表一样使用。

视图可以简化复杂的查询操作,并提供对数据的安全性和抽象性。

4. 什么是主键、外键和唯一键?- 主键 (Primary Key):主键是用来唯一标识表中每条记录的列或列组合。

它必须保证唯一性和非空性。

- 外键 (Foreign Key):外键是用来建立表之间的关联关系的列。

它建立在另一个表的主键上,并用于维护数据完整性。

- 唯一键 (Unique Key):唯一键是用来确保列或列组合的唯一性,但允许为空值。

5. 什么是索引?索引是一种数据结构,用于加快数据访问的速度。

它可以在一个或多个列上创建,以提高查找、排序和分组等操作的性能。

6. 什么是连接 (JOIN)?连接是指根据一定的条件将两个或多个表中的数据进行合并。

常见的连接类型有内连接 (INNER JOIN)、左连接 (LEFT JOIN)、右连接(RIGHT JOIN) 和全连接 (FULL JOIN)。

sql面试题及答案

sql面试题及答案

sql面试题及答案在现代的软件开发和数据处理领域中,SQL(Structured Query Language)是一种常见的工具和语言。

它被广泛应用于数据库管理系统中,用于查询和操作数据。

因此,对于从事相关工作的人员来说,掌握SQL是必不可少的技能。

在职业发展过程中,可能会面临SQL面试的考核,下面将为您提供一些常见的SQL面试题及其答案。

题目1:什么是SQL?答案:SQL是一种用于管理和处理关系型数据库的编程语言。

它允许我们通过编写结构化的查询语句从数据库中提取和操作数据。

题目2:什么是关系数据库?答案:关系数据库是一种基于关系模型的数据库系统。

它使用表来组织和存储数据,每个表由多个列和行组成,每个列代表一个属性,每个行代表一个记录。

题目3:SQL中的常见数据类型有哪些?答案:常见的SQL数据类型包括整数(INT),浮点数(FLOAT),字符型(VARCHAR),日期时间型(DATE,TIME,DATETIME)等。

不同的数据库可能会有一些特定的数据类型。

题目4:如何创建一个新表?答案:可以使用CREATE TABLE语句来创建一个新表。

例如,创建一个名为"students"的表,拥有id、name和age三个列,可以使用以下语句:```CREATE TABLE students (id INT,name VARCHAR(50),age INT);```题目5:如何插入新的数据行到一个表中?答案:可以使用INSERT INTO语句来插入新的数据行。

例如,向"students"表中插入一条记录,可以使用以下语句:```INSERT INTO students (id, name, age) VALUES (1, 'John', 20);```题目6:如何查询表中的数据?答案:可以使用SELECT语句来从表中查询数据。

例如,查询"students"表中所有记录的id和name列,可以使用以下语句:SELECT id, name FROM students;```题目7:如何更新表中的数据?答案:可以使用UPDATE语句来更新表中的数据。

sql面试题目

sql面试题目

sql面试题目一、介绍SQL(Structured Query Language)是一种用于管理和操作关系数据库系统的标准化语言。

在数据库相关的面试中,SQL题目是常见的考察内容之一。

以下是一些常见的SQL面试题目和对应的解答,希望对你有所帮助。

二、选择题1. SQL语言中"SELECT"关键字的作用是什么?A. 查询数据B. 插入数据C. 更新数据D. 删除数据答案:A. 查询数据2. 下列哪个关键字用于过滤数据库查询结果?A. WHEREB. SELECTC. INSERTD. UPDATE答案:A. WHERE3. 下面的SQL语句中,用于拉取指定行数数据的关键字是?A. LIMITB. ORDER BYC. GROUP BYD. HAVING答案:A. LIMIT4. 下列哪个SQL聚合函数用于统计行数?A. COUNTB. AVGC. MAXD. SUM答案:A. COUNT5. 下面的SQL语句中,用于删除表中所有数据的关键字是?A. DELETEB. TRUNCATEC. UPDATED. DROP答案:B. TRUNCATE三、简答题1. SQL中的数据类型有哪些?请列举一些常见的数据类型及其用途。

答:SQL中的数据类型包括整型、浮点型、字符型、日期型等。

其中,常见的数据类型有:- 整型:INT、BIT、TINYINT、BIGINT等,用于存储整数值。

- 浮点型:FLOAT、DOUBLE等,用于存储浮点数值。

- 字符型:CHAR、VARCHAR、TEXT等,用于存储文本信息。

- 日期型:DATE、TIME、DATETIME等,用于存储日期和时间信息。

2. SQL中的JOIN操作是用来做什么的?请简要解释。

答:JOIN操作用于在多个表中根据指定的条件将数据进行关联。

通过JOIN操作,可以将具有关联关系的数据进行合并,从而实现表之间的数据连接查询。

常见的JOIN操作包括INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和FULL JOIN(全连接)等。

经典的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 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面试题及答案

数据库sql面试题及答案

数据库sql面试题及答案数据库sql面试题及答案【篇一:sql数据库经典面试题(修改笔试题)(有答案)】部门,平均工资,要求按部门的字符串顺序排序,不能含有human resource部门,employee结构如下:employee_id, employee_name,depart_id,depart_name,wage 答:select depart_name, avg(wage)from employee where depart_name human resourcegroup by depart_name order by depart_name-------------------------------------------------------------------------- 29. 给定如下sql数据库:test(numint(4)) 请用一条sql语句返回num的最小值,但不许使用统计功能,如min,max等答:select top 1 num from test order by num-------------------------------------------------------------------------- 33.一个数据库中有两个表: 一张表为customer,含字段id,name;一张表为order,含字段id,customerid(连向customer中id的外键),revenue;写出求每个customer的revenue总和的sql语句。

建表create table customer(id int primary key,name char(10)) gocreate table [order](id int primary key,customerid int foreign key references customer(id) , revenue float) go--查询select customer.id, sum( isnull([order].revenue,0) ) from customer full join [order]on( [order].customerid=customer.id ) group by customer.id select customer.id,sum(order.revener) from order,customer where customer.id=customerid group by customer.idselect customer.id, sum(order.revener ) from customer full join orderon( order.customerid=customer.id ) group by customer.id 5数据库(10)a tabel called “performance”contain :name and score,please 用 sql语言表述如何选出score最high的一个(仅有一个)仅选出分数,select max(score) from performance 仅选出名字,即选出名字,又选出分数: select top 1score ,name from per order by scoreselect name1,score from per where score in/=(select max(score) from per) .....4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade) 1 问上课程 db的学生noselect count(*) from c,sc where came=db and co=sco select count(*) from sc where cno=(select cno from c where came=db)2 成绩最高的学生号select sno from sc where grade=(select max(grade) from sc ) 3 每科大于90分的人数select came,count(*) from c,sc where co=sco and sc.grade90 group by cameselect came,count(*) from c join sc on co=sco and sc.grade90 group by came 数据库笔试题 *建表: dept:deptno(primary key),dname,loc emp:empno(primary key),ename,job,mgr,sal,deptno */1 列出emp表中各部门的部门号,最高工资,最低工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno from emp group by deptno;2 列出emp表中各部门job为clerk的员工的最低工资,最高工资 select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部门号 from emp where job = clerk group by deptno;3 对于emp中最低工资小于1000的部门,列出job为clerk 的员工的部门号,最低工资,最高工资select max(sal) as 最高工资,min(sal) as 最低工资,deptno as 部门号 from emp as bwhere job=clerk and 1000(select min(sal) from emp asa where a.deptno=b.deptno) group by b.deptno4 根据部门号由高而低,工资有低而高列出每个员工的姓名,部门号,工资select deptno as 部门号,ename as 姓名,sal as 工资from emp order by deptno desc,sal asc 5 写出对上题的另一解决方法(请补充)6 列出张三所在部门中每个员工的姓名与部门号select ename,deptno from emp where deptno = (select deptno from emp where ename = 张三)7 列出每个员工的姓名,工作,部门号,部门名select ename,job,emp.deptno,dept.dname from emp,dept where emp.deptno=dept.deptno8 列出emp中工作为clerk的员工的姓名,工作,部门号,部门名 select ename,job,dept.deptno,dname from emp,dept where 9 对于emp中有管理者的员工,列出姓名,管理者姓名(管理者外键为mgr)select a.ename as 姓名,b.ename as 管理者 from emp as a,emp as b where a.mgr is not null and a.mgr=b.empno10 对于dept表中,列出所有部门名,部门号,同时列出各部门工作为clerk的员工名与工作select dname as 部门名,dept.deptno as 部门号,ename as 员工名,job as 工作 from dept,empwhere dept.deptno *= emp.deptno and job = clerk11 对于工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序select a.deptno as 部门号,a.ename as 姓名,a.sal as 工资 from emp as a where a.sal(select avg(sal) from emp asb where a.deptno=b.deptno) order by a.deptno12 对于emp,列出各个部门中平均工资高于本部门平均水平的员工数和部门号,按部门号排序select count(a.sal) as 员工数,a.deptno as 部门号 from emp as awhere a.sal(select avg(sal) from emp as b wherea.deptno=b.deptno) group by a.deptno order bya.deptno13 对于emp中工资高于本部门平均水平,人数多与1人的,列出部门号,人数,按部门号排序select count(a.empno) as 员工数,a.deptno as 部门号,avg(sal) as 平均工资 from emp as awhere (select count(c.empno) from emp as c wherec.deptno=a.deptno and c.sal(select avg(sal) from emp as b where c.deptno=b.deptno))1 group by a.deptno order by a.deptno14 对于emp中低于自己工资至少5人的员工,列出其部门号,姓名,工资,以及工资少于自己的人数select a.deptno,a.ename,a.sal,(select count(b.ename) from emp as b where b.sala.sal) as 人数 from emp as a where (select count(b.ename) from emp as b whereb.sala.sal)5 数据库笔试题及答案第一套一.选择题1. 下面叙述正确的是ccbad ______。

sql 面试题及答案

sql 面试题及答案

sql 面试题及答案在以下文章中,我将为您提供一些常见的SQL面试题以及它们的答案。

这些问题涵盖了SQL的基本概念、语句和技巧。

希望这些问题和答案能够帮助您在SQL面试中取得好成绩。

问题1:什么是SQL?答案:SQL是Structured Query Language(结构化查询语言)的缩写,是一种用于数据库管理系统的标准查询语言。

它用于存储、操纵和检索关系型数据库中的数据。

SQL语言具有简单、高效和功能强大的特点,广泛应用于各种数据库平台。

问题2:什么是数据库?答案:数据库是一个有组织的数据集合,用于存储和管理数据。

它可以是一个文件、一组文件或是一个完整的数据库管理系统。

数据库将数据以表格的形式进行组织,并使用关系模型来建立不同表之间的关系。

问题3:什么是关系型数据库?答案:关系型数据库是基于关系模型的数据库。

它使用表格(也称为关系)来存储和管理数据。

关系型数据库的数据以行和列的形式存储,其中每行代表一个记录,每列代表一种数据类型。

关系型数据库的一个重要特点是表格之间可以建立关系,并通过使用主键和外键来连接数据。

问题4:什么是主键?答案:主键是表中用来唯一标识每个记录的一列或一组列。

它的值必须在表中是唯一且非空的。

主键可以用于在表之间建立关系,也可以用于快速访问表中的数据。

问题5:什么是外键?答案:外键是一个表中的字段,它用于建立该表与其他表之间的关系。

外键是其他表的主键,在被引用表中的外键列中存储了其所引用表中的主键值。

通过外键,可以在多个表之间建立引用完整性约束,并实现表之间的数据关联和一致性。

问题6:什么是索引?答案:索引是一个特殊的数据结构,用于加快对表中数据的检索速度。

它通过创建一个排序的数据结构来提高访问表中数据的效率。

索引可以根据一个或多个列来创建,并可以根据这些列进行排序和过滤。

问题7:请解释SQL中的SELECT语句。

答案:SELECT语句用于从表中检索数据。

它可以从一个或多个表中选择所需的列,并根据条件过滤数据。

SQL_面试题及答案

SQL_面试题及答案

1、SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值dd我们希望马上得到这个新用户的ID,因为我们一般都是把这种用户ID的字段设置成自增长类型的,乍看起来好像没有要得到那个新ID很麻烦,其实sql server内置了一些全局的变量,使我们很容易就得到那个新的自增字段的ID,就是使用@@IDENTITY。

在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。

如果语句未影响任何包含标识列的表,则@@IDENTITY 返回 NULL。

如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。

如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。

在具体应用中可以这样来写SQL语句:string strSql = "INSERT INTO[User]([Name],[LoginName],[Pwd],[RegTime],[IsSuper],[Remark])" +"VALUES(@Name,@LoginName,@Pwd,@RegTime,@IsSuper,@Remark);select@@IDENTITY ;";执行的时候直接用command.ExecuteScalar();就可以了,能直接返回该条记录的UserID;解答二:经过实验,得如下结论:select DISTINCT @@IDENTITY as iden from FaWen解释:上述语句对 SQL SERVER 的一个会话,也就是一条连接,返回该连接最后一条插入记录得到的自增字段的值。

假设有3个程序,分别连接SQL SERVER,有三个连接。

3个程序都向同一个表依顺序插入数据,得到的值分别是1、2、3,那么,只要3个程序对SQL的连接还保持着,第一个程序使用上述语句,将得到1,而不是3,第二个程序将得到2,也不是3。

SQL数据库面试题目及其答案

SQL数据库面试题目及其答案

1.什么是存储过程?用什么来调用?答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。

如果某次操作需要执行多次SQL使用存储过程比单纯SQL语句执行要快。

可以用一个命令对象来调用存储过程。

2.索引的作用?和它的优点缺点是什么?答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。

它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。

索引可以是唯一的,创建索引允许指定单个列或者是多个列。

缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

3。

什么是内存泄漏?答:一般我们所说的内存泄漏指的是堆内存的泄漏。

堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。

当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free 或者delete 释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

3.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?答:我是这样做的,尽可能使用约束,如check, 主键,外键,非空字段等来约束,这样做效率最高,也最方便。

其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。

最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

4.什么是事务?什么是锁?答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。

为了确保要么执行,要么不执行,就可以使用事务。

要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

锁:在所以的DBMS^,锁是实现事务的关键,锁可以保证事务的完整性和并发性。

与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。

sql面试题目汇总(3篇)

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面试题及答案SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言。

在数据库领域的求职面试中,SQL面试题是非常常见的考察内容。

本文将介绍一些常见的SQL面试题,并提供相应的答案供参考。

1. 介绍一下SQL的主要命令。

答案:SQL的主要命令包括:- SELECT:用于从数据库中获取数据记录。

- INSERT:用于向数据库中插入新的数据记录。

- UPDATE:用于更新数据库中已有的数据记录。

- DELETE:用于删除数据库中的数据记录。

- CREATE:用于创建数据库和表。

- DROP:用于删除数据库和表。

- ALTER:用于修改数据库和表的结构。

2. 什么是索引?请说明索引的作用和使用场景。

答案:索引是一种特殊的数据结构,通过提前创建索引可以加快数据库的查询速度。

索引按照某些列的值在数据库中建立起来,并通过对这些列的值进行排序,以便更快地查找数据。

索引可以减少磁盘I/O操作,提高查询性能。

使用场景包括频繁查询的字段、连接表的字段、排序和分组的字段等。

3. 请解释一下SQL中的INNER JOIN和LEFT JOIN的区别。

答案:- INNER JOIN:该操作返回两个表中满足条件的交集,即两个表中共有的数据行。

- LEFT JOIN:该操作返回左表中的所有数据行,以及右表中与左表相关联的数据行。

如果没有匹配的数据行,右表中的数据将显示为NULL。

4. 请解释一下SQL的事务(Transaction)。

答案:SQL的事务指的是要么全部执行成功,要么全部不执行的一组SQL 操作。

事务必须具备以下四个特性(ACID):- 原子性:事务中的操作要么全部成功,要么全部失败回滚。

- 一致性:事务在执行之前和之后,数据库保持一致的状态。

- 隔离性:事务的执行是相互隔离的,一个事务的执行不应该影响其他事务的执行。

- 持久性:一旦事务提交后,其结果应该持久保存在数据库中。

sql面试题及答案

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面试题及答案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数据库经典面试题(笔试题)】=txt>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数据库面试题和答案

常见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经典面试题及答案

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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#,score from SC wh ere c#='002')b Where a.score>b.score and a.s# = b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩select S#, avg(score) from sc group by S# having avg(score)>603、查询所有同学的学号、姓名、选课数、总成绩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,Teacherwhere sc.c#=course.c# AND teacher.T#=course.T# AND Teahcer.Tname ='叶平');6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:select S#,Sname from Studentwhere S# in (select S# from SC ,Course ,Teacherwhere SC.C#=Course.C# and Teacher.T#=Course.T#and Teacher.Tname='叶平' group by S#having count(SC.C#)=(select count(C#) from Course,Teacherwhere Teacher.T#=Course.T# and Tname='叶平'));7、查询学过“011”并且也学过编号“002”课程的同学的学号、姓名:select Student.S#,Student.Snamefrom Student,SC where Student.S#=SC.S#and SC.C#='001'andexists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名:Select S#,Snamefrom (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2from Student,SCwhere Student.S#=SC.S# and C#='001') S_2where 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.snamehaving count(c#)<(select count(c#) from course);11、查询至少有一门课与学号为“1001”同学所学相同的同学的学号和姓名:select s#, Snamefrom Student, SCwhere 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(s2_Score) From sc s2 Where s2.c#=sc.c#)Where c# IN(Select c# From sc cs INNER JOIN Teacher tc ON cs.t#=tc.t# WHERE 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 where s#='1002');15、删除学习“叶平”老师课的SC表记录:delect scfrom course, Teacherwhere course.c#=sc.c#and course.t#=teacher.t#and tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、002号课的平均成绩: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 Rwhere L.c# = R.c#and L.score = (select max(IL.score)from sc IL, student as IMwhere L.c#=IL.c# and IM.s#=IL.s#group by IL.c#)and R.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(*) DESC 20、查询如下课程平均成绩和及格率的百分数(用”1行”显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004):21、查询不同老师所教不同课程平均分从高到低显示:SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,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):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 T1 WHERE 平均成绩 > 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)26、查询每门课程被选修的学生数:select c#, count(s#)from scgroup by c#;27、查询出只选修一门课程的全部学生的学号和姓名:select sc.s#, student.sname, count(c#) as 选课数from sc,studentwhere sc.s# =student.s#group by sc.s#,Student.snamehaving count(c#)=1;28、查询男生、女生人数:select count(Ssex) as 男生人数from studentgroup by Ssexhaving Ssex='男';select count(Ssex) as 女生人数from studentgroup by Ssexhaving Ssex='女';29、查询姓“张”的学生名单:select snamefrom studentwhere sname like '张%';30、查询同名同姓的学生名单,并统计同名人数:select sanme,count(*)from studentgroup by snamehavang count(*)>1;31、1981年出生的学生名单(注:student表中sage列的类型是datetime):select sname, convert(char(11),DATEPART(year,sage)) as agefrom studentwhere convert(char(11),DATEPART(year,Sage))='1981';32、查询平均成绩大于85的所有学生的学号、姓名和平均成绩:select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S#group by SC.S#,Snamehaving avg(score)>85;33、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列:select C#, avg(score)from scgroup by c#order by avg(score), c# desc;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 scwhere score<60order by c#;38、查询课程编号为“003”且课程成绩在80分以上的学生的学号和姓名:select sc.s#,student.snamefrom sc,studentwhere sc.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.scorefrom sc a ,sc bwhere a.score=b.scoreand a.c#<>b.c#;43、查询每门课程成绩最好的前两名:select t1.s# as 学生ID,t1.c# 课程ID, Score as 分数from sc t1where score in (select top 2 score from scwhere t1.c#=c#order by score desc)order by t1.c#;44、统计每门课程的学生选修人数(超过10人的课程才统计)。

相关文档
最新文档