常见SQL数据库面试题和答案(一)

合集下载

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语句有更深入的了解,从而在面试中更加自信。

一、查询相关的面试题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 数据库 面试题

sql 数据库 面试题

sql 数据库面试题SQL数据库面试题1. 数据库基础知识数据库是用来存储、管理和操作大量数据的工具。

在进行SQL数据库面试时,你可能会被问到一些基础的数据库知识问题。

1.1 数据库的定义和作用数据库是一个组织数据的集合,可以存储和管理大量结构化数据。

它的作用是提供数据的持久化存储和高效的数据访问。

1.2 关系型数据库和非关系型数据库的区别关系型数据库使用表格来组织和管理数据,通过定义表格之间的关系来建立数据模型。

非关系型数据库则以其他形式来存储和组织数据,例如键值对、文档、图形等。

1.3 主键和外键的概念和作用主键是表格中的一列或多列,用来唯一标识每一行数据。

外键是表格中的一列,用来建立表格之间的联系。

1.4 视图的作用和优势视图是虚拟的表格,它是从一个或多个基本表中导出的。

它可以简化数据的查询和操作,并且提供了更高的数据安全性。

2. SQL查询语句在数据库的使用过程中,最常见的操作之一就是查询数据。

以下是一些关于SQL查询语句的面试题。

2.1 SELECT语句及其用法SELECT是用于从数据库中查询数据的关键字。

它可以用来选择特定的列、过滤数据、排序结果等。

2.2 WHERE子句的作用和用法WHERE子句用于过滤满足特定条件的数据。

它可以在SELECT语句中使用,以便筛选满足特定要求的数据。

2.3 JOIN语句的作用和用法JOIN语句可以将两个或多个表格中的数据连接起来。

它通过共享表格之间的字段,来获取相关联的数据。

2.4 GROUP BY和HAVING的概念和区别GROUP BY用于将数据分组,并对每个组应用聚合函数。

HAVING 子句用于过滤分组结果。

3. SQL数据操作语句数据库不仅仅是用来查询数据的,还可以对数据进行新增、修改和删除操作。

以下是一些关于SQL数据操作语句的面试题。

3.1 INSERT语句及其用法INSERT语句用于向数据库中插入新的数据行。

它可以插入单行或多行数据,并指定插入的列和值。

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 是一种用于管理关系数据库的编程语言。

以下是常见的SQL 面试题目:1. 基础知识:解释什么是 SQL?描述 SQL 的主要功能。

什么是主键?什么是外键?什么是索引?2. 查询语句:写一个查询来从一个名为 `employees` 的表中选取所有列。

写一个查询来从一个名为 `employees` 的表中选取所有行,但只显示 `first_name` 和 `last_name` 列。

写一个查询来从 `employees` 表中选取 `first_name` 为 "John" 的所有员工。

3. 数据操作:如何插入一行数据到一个表中?如何更新表中的数据?如何删除表中的数据?4. 聚合函数:使用 `COUNT()` 函数计算表中的行数。

使用 `SUM()` 函数计算表中某列的总和。

使用 `AVG()` 函数计算表中某列的平均值。

5. 排序和分组:使用 `ORDER BY` 对查询结果进行排序。

使用 `GROUP BY` 对结果进行分组。

6. 子查询和连接:解释什么是子查询,并给出一个例子。

解释什么是内连接,并给出一个例子。

解释什么是左连接,并给出一个例子。

7. 视图和存储过程:解释什么是视图,为什么使用它?解释什么是存储过程,为什么使用它?8. 事务处理:解释什么是事务?如何开始一个事务?如何结束一个事务?9. 数据库规范化:解释第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。

给出一个反范式的例子,并解释为什么它是反范式的。

10. 安全性问题:如何防止 SQL 注入攻击?如何为数据库设置权限,确保用户只能访问他们需要的数据?。

经典sql面试题及答案

经典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:横向列出每个学生的成绩(假说固定有门课程)。

2022年SQL数据库经典面试题笔试题

2022年SQL数据库经典面试题笔试题

SQL数据库典型面试题(笔试题)1.一道SQL语句面试题,有关group by表内容:-05-09 胜-05-09 胜-05-09 负-05-09 负-05-10 胜-05-10 负-05-10 负如果要生成下列成果, 该如何写sql语句?胜负-05-09 2 2-05-10 1 2------------------------------------------create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values('-05-09','胜')insert into #tmp values('-05-09','胜')insert into #tmp values('-05-09','负')insert into #tmp values('-05-09','负')insert into #tmp values('-05-10','胜')insert into #tmp values('-05-10','负')insert into #tmp values('-05-10','负')1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmpgroup 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数据库面试题以及答案

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面试必会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的基本概念、语句和技巧。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

数据库面试题及部分答案

数据库面试题及部分答案

数据库面试题及部分答案1.数据库1.1.数据库【炎黄盈动】C员工表的定义如下:Last_name VARCHAR2(25)First_name VARCHAR2(25)Salary NUMBER(7,2)现查询显示未达到平均工资的员工姓名.请考察下面的SQL语句: SELECT last_name, first_name FROM employee WHERE salary < avg(salary);对这条SQL做以下哪项修改能够达到目的?A.改变WHERE子句B.把聚合函数移到SELECT列表中,并增加GROUP子句C.通过子查询得出平均工资水平并在父查询的WHERE子句中比较D.把聚合函数移到SELECT列表中,并增加GROUP BY子句和HAVING子句1.2.数据库【炎黄盈动】D要从员工表中查询所有姓Smith的人,但是并不能确定所有Smith的大小写,以下哪条语句能解决问题?A.SELECT last_name, first_name FROM emp WHERE last_name=’smith’B.SELECT last_name, first_name FROM emp WHERE UPPER(last_name)=’smith’C.SELECT last_name, first_name FROM emp WHERE last_name=UPPER(‘smith’)D.SELECT last_name, first_name FROM emp WHERE LOWER(last_name)=’smith’1.3.delete from tablea & truncate table tablea的区别 ( CD ) 【中美寰宇】A.没有区别B.速度相同C.速度不同D.日志记录不同1.4.下列哪些(或哪个)不是PL/SQL的组成部分(BC)【四川银海】A.DECLAREB.CATCHC.THROWD.EXCEPTION1.5.SQL语句中修改表结构的命令是C。

SqlServer数据库面试题(一)

SqlServer数据库面试题(一)

SQL面试题目SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句:1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表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 only5、说明:删除新表drop table tabname6、说明:增加一个列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注:索引是不可更改的,想更改必须删除重新建。

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面试题及答案一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 语句面试题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数据库基础面试题复习题考试题-全(1)

sql数据库基础面试题复习题考试题-全(1)

不定项选择题(针对以下题目,请选择最符合题目要求的答案,每道题有一项或二项正确答案。

针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。

题量为50道,每题2分,总分为100分。

)第一章1、是SQLServer数据库的主数据文件的扩展名。

(选择一项)A、.sqlB、.mdbC、.ldfD、.mdf2、在SQL Server 2005中,有系统数据库和用户数据库,下列不属于系统数据库的是()。

(选择一项)A、masterB、pubsC、modelD、msdb3、当安装完SQL Server2005数据库时,系统默认当前的超级管理员是( ) (选择一项)A、saB、masterC、administratorD、super4、在使用SQL Server2005数据库时,有时需要将本机的数据库移动到其他机器上,恢复成对应的数据库使用。

移动数据库分两步进行,应包括()和附加数据库(选择一项)A、分离数据库B、删除数据库C、新建数据库D、合并数据库5、在SQL Server2005中,附加数据库操作是指()(选择一项)A、把SQL Server 数据库文件保存为其他数据文件B、根据数据库物理文件中的信息,把数据库在SQL Server 2005中恢复C、把所有该数据库表的数据清空D、把数据库删除掉6、某单位由不同的部门组成,不同的部门每天都会生产一些报告、报表等数据,以为都采用纸张的形式来进行数据的保存和分类,随着业务的发展,这些数据越来越多,管理这些报告越来越费力,此时应考虑()(选择一项)A、由多个人来完成这些工作B、在不同的部门中,由专门的人员去管理这些数据C、采用数据库系统来管理这些数据D、把这些数据统一成一样的格式7、在SQL Server 2005中,对于数据库的定义正确的是()(选择一项)A、数据库是用来描述事物的符号记录B、数据库是位于用户与操作系统之间的一层数据管理软件C、数据库是按照数据结构来组织、存储和管理数据的创库D、数据库是指在计算机系统中引入数据库系统后的构成8、在SQL Server 2005中,对于数据库的基本概念描述错误的是()(选择一项)A、数据、数据库、数据库管理系统和数据库系统都是与数据库技术相关的概念B、数据库是计算机科学的重要分支,是信息系统的核心和基础C、数据库系统由数据库、数据库管理系统、应用系统、数据库管理员和用户组成D、数据库系统只由数据库和用户组成9、数据库管理技术发展至今,主要经历了3个阶段,它们的顺序是()(选择一项)A、人工管理阶段、数据库管理阶段、文件管理阶段B、人工管理阶段、文件管理阶段、数据库管理阶段C、数据库管理阶段、文件管理阶段、人工管理阶段D、文件管理阶段、人工管理阶段、数据库管理阶段10、下列对于数据库管理技术发展至今经历的阶段特点描述错误的是()(选择一项)A、人工管理阶段数据由人员自行携带,数据与程序并不能独立且不能长期保存数据B、文件管理阶段是指可以通过按文件访问的方式管理数据C、数据库管理阶段使得数据结构化,数据共享性好但独立性差D、数据库管理阶段出现的数据库管理系统实现了数据库的独立、使用和维护11、数据库系统根据数据存储的数据模型可分为()(选择一项)A、层次型数据库B、层次型数据库、网状型数据库C、层次型数据库、网状型数据库、关系型数据库D、层次型数据库、网状型数据库、关系型数据库、面向对象型数据库12、在SQL Server 2005中,最常用的数据存储模型是()(选择一项)A、层次型数据库B、网状型数据库C、关系型数据库D、面向对象型数据库13在SQL Server 2005中,对于数据库管理系统的特点描述不正确的是()(选择一项)A、安全性,数据不会丢失B、共享性,多个用户可以同时使用C、独立性,数据与应用程序之间相互分离D、完整性,数据保持一致13、在SQL Server 2005中,对于SQL全称描述正确的是()(选择一项)A、数据库语言B、结构化查询语言C、结构化语言D、数据库查询语言14、下列对SQL Server2008描述错误的是()(选择一项)A、SQL Server采用的是浏览器/服务器体系结构B、SQL Server2008是用于大规模联机事物处理、数据仓库和电子商务应用的数据库和数据分析平台C、它为使用者提供了强大的、界面友好的工具D、SQL Server2008降低了从移动设备到企业数据库系统的多平台上创建、部署、管理,使企业数据和分析应用程序的复杂性15、使用SQL Server2008,以下方式中()不能正确启动服务器(选择一项)A、在运行对话框中输入net stop mssqlserverB、在运行对话框中输入net start mssqlserverC、单击“开始“选择”程序“选择”Microsoft SQL Server 2008“选择“配置工具”选择“SQL Server配置管理器”D、单击“开始“选择”设置“选择”控制面板“选择“管理工具”选择“服务”选中SQL Server(MSSQLSERVER)服务16、SQL Server中自己建立的studentMIS数据库属于(选择一项)A用户数据库B、系统数据库C、数据库管理系统D、数据库模板17、下列关于系统数据库说法错误的是(选择一项)A、master数据库保存有放在SQL Server实体上的所有数据库B、tempdb数据库中存放的是临时对象C、msdb数据库包含了诸如系统登录、配置设置、已连接的Server等信息D、model数据库是一个用来在实体上创建新用户数据库的模板数据库第二章3、在SQL Server 2005中,数据完整性是指()。

常见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)。

常见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。

相关文档
最新文档