SQL经典面试50题
sql基础面试题及答案

sql基础面试题及答案1. 什么是SQL?SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准化语言。
它允许用户从数据库中检索、插入、更新和删除数据,同时还可以定义和管理数据库结构。
2. SQL的分类有哪些?SQL可以分为以下几个方面:- 数据查询语言(Data Query Language,DQL):用于从数据库中检索数据的语言。
常见的DQL命令包括SELECT。
- 数据操纵语言(Data Manipulation Language,DML):用于对数据库中的数据进行操作的语言。
常见的DML命令包括INSERT、UPDATE和DELETE。
- 数据定义语言(Data Definition Language,DDL):用于创建和修改数据库结构的语言。
常见的DDL命令包括CREATE、ALTER和DROP。
- 数据控制语言(Data Control Language,DCL):用于授权和撤销用户对数据库的访问权限的语言。
常见的DCL命令包括GRANT和REVOKE。
3. SELECT语句的基本语法是什么?SELECT语句用于从数据库中检索数据,其基本语法如下:```sqlSELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;```其中,列名指定所需的数据列,表名指定要检索数据的表,WHERE语句用于指定要返回的数据行的条件。
4. 如何在SELECT语句中使用通配符?通配符在SELECT语句中用于匹配不完整或不确定的数据,常见的通配符有两种:- 百分号(%):表示匹配任意数量的字符。
- 下划线(_):表示匹配单个字符。
例如,可以使用以下语句检索以字母“A”开头的所有姓氏:```sqlSELECT * FROM employees WHERE last_name LIKE 'A%';```5. 什么是SQL注入攻击,如何预防?SQL注入攻击是一种利用未正确过滤用户输入数据的漏洞,通过在用户提供的输入中插入恶意SQL代码来执行恶意操作的攻击。
SQL面试经典50题

SQL⾯试经典50题SQL经典⾯试50题精讲SQL语句的执⾏顺序:创建school数据库create database school;use school;创建四张表create table student(s_id varchar(10),s_name varchar(20),s_age date,s_sex varchar(10));create table course(c_id varchar(10),c_name varchar(20),t_id varchar(10));create table teacher (t_id varchar(10),t_name varchar(20));create table score (s_id varchar(10),c_id varchar(10),score varchar(10));往表⾥插值insert into student (s_id, s_name, s_age, s_sex) values ('01' , '赵雷' , '1990-01-01' , '男'), ('02' , '钱电' , '1990-12-21' , '男'), ('03' , '孙风' , '1990-05-20' , '男'), ('04' , '李云' , '1990-08-06' , '男'), ('05' , '周梅' , '1991-12-01' , '⼥'), ('06' , '吴兰' , '1992-03-01' , '⼥'), ('07' , '郑⽵' , '1989-07-01' , '⼥'), ('08' , '王菊' , '1990-01-20' , '⼥');insert into course (c_id, c_name, t_id)values ('01' , '语⽂' , '02'),('02' , '数学' , '01'),('03' , '英语' , '03');insert into teacher (t_id, t_name)values ('01' , '张三'),('02' , '李四'),('03' , '王五');insert into score (s_id, c_id, score)values ('01' , '01' , 80),('01' , '02' , 90),('01' , '03' , 99),('02' , '01' , 70),('02' , '02' , 60),('02' , '03' , 80),('03' , '01' , 80),('03' , '02' , 80),('03' , '03' , 80),('04' , '01' , 50),('04' , '02' , 30),('04' , '03' , 20),('05' , '01' , 76),('05' , '02' , 87),('06' , '01' , 31),('06' , '03' , 34),('07' , '02' , 89),('07' , '03' , 98);看下建好的四张表四张表创建⼀张总总表create table total(select a.s_id as s_id,a.s_name as s_name,a.s_age as s_age,a.s_sex as s_sex,b.c_id as c_id,b.score as score,c.t_id as t_id,d.t_name as t_name from student aleft joinscore b on a.s_id=b.s_idleft joincourse c on b.c_id=c.c_idleft jointeacher d on c.t_id=d.t_id);select * from total;学⽣课程成绩查询总表total1、查询"01"课程⽐"02"课程成绩⾼的学⽣的信息及课程分数select a.s_id as s_id,score1,score2 from(select s_id, score as score1 from score where c_id='01') ainner join(select s_id, score as score2 from score where c_id='02') bon a.s_id=b.s_idwhere score1>score2;2、查询"01"课程⽐"02"课程成绩低的学⽣的信息及课程分数select a.s_id as s_id,score1,score2 from(select s_id, score as score1 from score where c_id='01') ainner join(select s_id, score as score2 from score where c_id='02') bon a.s_id=b.s_idwhere score13、查询平均成绩⼤于等于60分的同学的学⽣编号和学⽣姓名和平均成绩select student.s_id as s_id,student.s_name as s_name,b.avg_score as avg_score from student right join(select s_id,avg(score) as avg_score from scoregroup by s_id having avg_score>60) bon student.s_id=b.s_id;4、查询平均成绩⼩于60分的同学的学⽣编号和学⽣姓名和平均成绩select student.s_id as s_id,student.s_name as s_name,b.avg_score as avg_score from student right join(select s_id,avg(score) as avg_score from scoregroup by s_id having avg_score<60) bon student.s_id=b.s_id;5、查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩select s_id, s_name, count(c_id) as c_num, sum(score) as total_score from totalgroup by s_id ;6、查询"李"姓⽼师的数量select count(t_name) from teacherwhere t_name like '李%';7、查询学过"张三"⽼师授课的同学的信息select distinct s_id,s_name,s_age,s_sexfrom totalwhere t_name='张三';8、查询没学过"张三"⽼师授课的同学的信息select * from studentwhere s_id not in(select distinct s_idfrom totalwhere t_name='张三');9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息select * from studentwhere s_id in(select s_id from score where c_id='01')and s_id in(select s_id from score where c_id='02');10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息select * from studentwhere s_id in(select s_id from score where c_id='01')and s_id not in(select s_id from score where c_id='02');11、查询没有学全所有课程的同学的信息select s_id, s_name, s_age, s_sex from totalgroup by s_id having count(c_id) <3 ;12、查询⾄少有⼀门课与学号为"01"的同学所学相同的同学的信息思路:先找出‘01’同学学过的c_id,再找出学过任⼀门的s_id,再根据s_id在student找学⽣信息。
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等。
sql50经典题

sql50经典题SQL(Structured Query Language)是用于管理关系数据库的标准编程语言。
以下是一些经典的 SQL 题目,可以帮助你提高 SQL 编程技能:1. 选择题:* 什么是 SQL?* SQL 中哪些关键字可以用于选择所有行?* SQL 中哪些关键字可以用于过滤数据?2. 查询题:* 请编写一个 SQL 查询,从 `employees` 表中选取所有员工的姓名和工资。
* 请编写一个 SQL 查询,从 `orders` 表中选取所有订单的编号、客户姓名和订单日期。
3. 插入题:* 请编写一个 SQL 插入语句,将一条新员工记录插入到 `employees` 表中。
* 请编写一个 SQL 插入语句,将一条新订单记录插入到 `orders` 表中。
4. 更新题:* 请编写一个 SQL 更新语句,将 `employees` 表中某个员工的工资增加 10%。
* 请编写一个 SQL 更新语句,将 `orders` 表中某个订单的状态更新为"Shipped"。
5. 删除题:* 请编写一个 SQL 删除语句,从 `employees` 表中删除某个员工的记录。
* 请编写一个 SQL 删除语句,从 `orders` 表中删除某个订单的记录。
6. 排序和聚合题:* 请编写一个 SQL 查询,按工资从高到低排列 `employees` 表中的员工记录。
* 请编写一个 SQL 查询,计算 `employees` 表中的平均工资。
7. 联接题:* 请编写一个 SQL 查询,联接 `orders` 表和 `customers` 表,选取所有订单的编号、客户姓名和订单日期。
* 请编写一个 SQL 查询,联接 `orders` 表和 `employees` 表,选取所有订单的编号、员工姓名和订单日期。
8. 子查询和内连接题:* 请编写一个 SQL 子查询,找出平均工资最高的员工姓名。
测试面试sql题

1. 编写一个SQL查询,列出所有员工的姓名和工资,按照工资降序排列。
解析:需要从员工表中查询姓名和工资字段,然后按照工资降序排列。
```sqlSELECT name, salaryFROM employeesORDER BY salary DESC;```2. 编写一个SQL查询,找出每个部门的平均工资。
解析:需要从员工表中分组查询每个部门的工资总和和员工数量,然后计算平均工资。
```sqlSELECT department, AVG(salary) as average_salaryFROM employeesGROUP BY department;```3. 编写一个SQL查询,找出每个部门工资最高的员工。
解析:需要从员工表中分组查询每个部门的最高工资,并返回对应的员工姓名和部门。
```sqlSELECT , e1.department, e1.salaryFROM employees e1JOIN (SELECT department, MAX(salary) as max_salaryFROM employeesGROUP BY department) e2 ON e1.department = e2.department AND e1.salary = e2.max_salary;```4. 编写一个SQL查询,找出至少有一个员工的部门。
解析:需要从员工表中查询部门字段,然后使用DISTINCT关键字去除重复的部门。
```sqlSELECT DISTINCT departmentFROM employees;```5. 编写一个SQL查询,找出没有员工的部门。
解析:需要从员工表中查询部门字段,然后使用LEFT JOIN连接部门表,筛选出没有员工的部门。
```sqlSELECT as department_nameFROM departments dLEFT JOIN employees e ON d.id = e.department_idWHERE e.id IS NULL;```。
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)>802.学生表如下:自动编号学号姓名课程编号课程名称分数1 2005001 张三 0001 数学 692 2005002 李四 0001 数学 893 2005001 张三 0001 数学 69删除除了自动编号不同, 其他都相同的学生冗余信息A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by 学号, 姓名, 课程编号, 课程名称, 分数)3.一个叫team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?答:select , from team a, team bwhere < 4.请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。
请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。
AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。
数据库名:JcyAudit ,数据集:Select * from TestDB答:select a.*from TestDB a,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) bwhere a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur********************************************************************* ***************5.面试题:怎么把这样一个表儿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.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********************************************************************* **********6.说明:复制表( 只复制结构, 源表名:a 新表名:b)SQL: select * into b from a where 1<>1 (where1=1,拷贝表结构和数据内容)ORACLE:create table bAsSelect * from a where 1=2[<>(不等于)(SQL Server Compact)比较两个表达式。
sql面试题

sql面试题SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。
在面试中,SQL面试题经常被用来评估应聘者对SQL的理解和使用能力。
以下是一些常见的SQL面试题及其答案,供参考。
1. 请解释什么是SQL?SQL是一种用于管理和操作关系型数据库的标准化语言。
它包含了一系列的命令和功能,用于创建、查询、修改和删除数据库中的数据和结构。
2. 请解释什么是关系型数据库?关系型数据库是一种基于表格的数据库管理系统,它使用了表、行和列的结构来组织和存储数据。
表由行和列组成,每行代表一个记录,每列代表一个属性。
3. 请解释什么是主键?主键是一列或一组列,用来唯一地标识表中的每个记录。
它的值必须是唯一且不为空。
主键对于确保数据完整性和表之间的引用非常重要。
4. 请解释什么是外键?外键是用来建立表与表之间的关联的列。
外键的值必须是另一张表中的主键值,用于确保数据的一致性和引用完整性。
5. 请解释什么是索引?索引是一种数据结构,用于快速查找表中的记录。
它可以提高查询的性能,但会增加写操作的开销。
常见的索引类型包括主键索引、唯一索引和普通索引。
6. 请解释什么是事务?事务是一组数据库操作,它们被视为一个不可分割的工作单位。
事务具有四个特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),以确保数据库的数据一致性和完整性。
7. 请解释什么是子查询?子查询是嵌套在主查询中的查询语句。
它可以作为主查询的条件或提供数据集合。
子查询通常用于限制查询结果或获取相关数据。
8. 请解释什么是联结?联结是将两个或多个表的行组合在一起,形成一个新的集合。
联结通常通过在相关列上进行比较来实现,它是查询多个表的常见操作。
9. 请解释什么是触发器?触发器是与表相关的特殊类型的存储过程。
它在插入、更新或删除数据时自动触发,用于执行特定的操作或应用业务规则。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.一般面试时考SQL,主要就是考你“统计分析”这一块,下面我们来看面试官经常采用的手段。
2.3.4.由4张简单的不能再简单的表,演变出50道SQL5.6.7.哈哈哈哈,够这个面试官面个15,20个人,不带重复的了,而且每个SQL你真的不动动脑子还写不出呢,你别不服气,下面开始。
8.9.表结构:10.11.12.13.表Student14.15.(S#,Sname,Sage,Ssex) 学生表16.17.18.S# student_no19.20.Sage student_age21.22.Ssex student_sex23.24.25.26.表Course27.28.(C#,Cname,T#) 课程表29.30.31.C# course_no32.ame course_name34.35.T# teacher_no36.37.38.39.40.41.42.表SC(学生与课程的分数mapping 表)43.44.(S#,C#,score) 成绩表45.46.47.S# student_no48.C# course_no49.score 分数啦50.51.52.53.54.55.56.表Teacher57.58.(T#,Tname) 教师表59.60.61.T# teacher_no62.Tname teacher_name63.64.65.66.67.68.69.50道问题开始70.71.72.73.74.75.76.1、查询“001”课程比“002”课程成绩高的所有学生的学号;77.78.79. select a.S# from (select s#,score from SC where C#='001') a,(select s#,score80.81. from SC where C#='002')82.83.84.85.86. where a.score>b.score and a.s#=b.s#;87.88.89.90.91.2、查询平均成绩大于60分的同学的学号和平均成绩;92.93. select S#,avg(score)94.95. from sc96.97. group by S# having avg(score) >60;98.99.100.101.102.3、查询所有同学的学号、姓名、选课数、总成绩;103.104. select Student.S#,Student.Sname,count(SC.C#),sum(score) 105.106. from Student left Outer join SC on Student.S#=SC.S# 107.108. group by Student.S#,Sname109.110.111.112.113.4、查询姓“李”的老师的个数;114.115. select count(distinct(Tname))116.117. from Teacher118.119. where Tname like '李%';120.121.122.123.124.5、查询没学过“叶平”老师课的同学的学号、姓名;125.126. select Student.S#,Student.Sname127.128. from Student129.130. where S# not in (select distinct( SC.S#) fromSC,Course,Teacher where SC.C#=Course.C#and Teacher.T#=Course.T# andTeacher.Tname='叶平');131.132.133.134.135.6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;136.137. select Student.S#,Student.Sname fromStudent,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');138.139.140.141.142.7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;143.144. select S#,Sname145.146. from Student147.148. where S# in (select S# from SC,Course ,Teacher where SC.C#=Course.C# andT eacher.T#=Course.T# and Teacher.Tname='叶平'group by S# having count(SC.C#)=(select count(C#) fromCourse,Teacher whereT eacher.T#=Course.T# and Tname='叶平'));149.150.151.152.153.8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;154.155. Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S#and SC_2.C#='002') score2156.157. from Student,SC where Student.S#=SC.S# andC#='001') S_2 where score2 <sco re;158.159.160.9、查询所有课程成绩小于60分的同学的学号、姓名;161.162. select S#,Sname163.164. from Student165.166. where S# not in (select Student.S# fromStudent,SC where S.S#=SC.S# andsco re>60);167.168.169.170.171.10、查询没有学全所有课的同学的学号、姓名;172.173. select Student.S#,Student.Sname174.175. from Student,SC176. whereStudent.S#=SC.S# group by Student.S#,Student.Sname having count(C #) <(select count(C#) from Course);177.178.179.180.181.182.183.11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;184.185.186. select S#,Sname from Student,SC whereStudent.S#=SC.S# and C# in select C# from SC where S#='1001';187.188.189.190.191.12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;192.193. select distinct SC.S#,Sname194.195. from Student,SC196.197. where Student.S#=SC.S# and C# in(select C# from SC where S#='001'); 198.199.200.201.202.13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;203.204. update SC set score=(select avg(SC_2.score)205.206. from SC SC_2207.208. where SC_2.C#=SC.C# ) fromCourse,Teacher where Course.C#=SC.C# andCourse.T#=Teacher.T# and Teacher.Tname='叶平');209.210.211.212.213.14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;214.215. select S# from SC where C# in(select C# from SC where S#='1002') 216.217. group by S# having count(*)=(select count(*) from SC where S#='1002'); 218.219.220.221.222.15、删除学习“叶平”老师课的SC表记录;223.224. DelectSC225.226. from course ,Teacher227.228. where Course.C#=SC.C# and Course.T#=Teacher.T# and Tname='叶平'; 229.230.231.232.233.16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学234.235.号、2号课的平均成绩;236.237. Insert SC select S#,'002',(Select avg(score)238.239. from SC where C#='002') from Student where S# notin (Select S# from SC where C#='002');240.241.242.243.244.17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按245.246.如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分247.248. SELECT S# as 学生ID249.250. ,(SELECT score FROM SC WHERE SC.S#=t.S#AND C#='004') AS 数据库251.252. ,(SELECT score FROM SC WHERE SC.S#=t.S#AND C#='001') AS 企业管理253.254. ,(SELECT score FROM SC WHERE SC.S#=t.S#AND C#='006') AS 英语255.256. ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩257.258. FROM SC AS t259.260. GROUP BY S#261.262. ORDER BY avg(t.score)263.264.265.266.267.18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分268.269. SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分270.271. FROM SC L ,SC AS R272.273. WHERE L.C# = R.C# and274.275. L.score = (SELECT MAX(IL.score)276.277. FROM SC ASIL,Student AS IM278.279. WHERE L.C# =IL.C# and IM.S#=IL.S#280.281. GROUP BYIL.C#)282.283. AND284.285. R.Score= (SELECT MIN(IR.score)286.287. FROM SC ASIR288.289. WHERE R.C# =IR.C#290.291. GROUP BY IR.C#293. );294.295.296.297.298.19、按各科平均成绩从低到高和及格率的百分数从高到低顺序299.300. SELECT t.C# AS 课程号,max(ame)AS 课程名,isnull(AVG(score),0) AS 平均成绩301.302. ,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT( *) AS 及格百分数303.304. FROM SC T,Course305.306. where t.C#=course.C#307.308. GROUP BY t.C#309.310. ORDER BY 100* SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COU NT(*) DESC311.312.313.20、查询如下课程平均成绩和及格率的百分数(用"1行"显示):314.315.316.企业管理(001),马克思(002),OO&UML (003),数据库(004)317.318.319.320.321.322. SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '00 1' THEN 1 ELSE 0 END) AS 企业管理平均分323.324. ,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 企业管理及格百分数325.326. ,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN ' 002' THEN 1 ELSE 0 END) AS 马克思平均分327.328. ,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 马克思及格百分数330. ,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN ' 003' THEN 1 ELSE 0 END) AS UML平均分331.332. ,100* SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/S UM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数333.334. ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN ' 004' THEN 1 ELSE 0 END) AS 数据库平均分335.336. ,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 数据库及格百分数337. FROM SC338.339.340.341.342.343.21、查询不同老师所教不同课程平均分从高到低显示344. SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩345. FROM SC AS T,Course AS C ,Teacher AS Z346. where T.C#=C.C# and C.T#=Z.T#347. GROUP BY C.C#348. ORDER BY AVG(Score) DESC349.350.351.22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:352.353.企业管理(001),马克思(002),UML (003),数据库(004)354.355.[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩356. SELECT DISTINCT top 3357. SC.S# As 学生学号,358. Student.Sname AS 学生姓名 ,359. T1.score AS 企业管理,360. T2.score AS 马克思,361. T3.score AS UML,362. T4.score AS 数据库,363. ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL (T4.score,0) as 总分364. FROM Student,SC LEFT JOIN SC AS T1365. ON SC.S# = T1.S# AND T1.C# = '001'366. LEFT JOIN SC AS T2367. ON SC.S# = T2.S# AND T2.C# = '002'368. LEFT JOIN SC AS T3369. ON SC.S# = T3.S# AND T3.C# = '003'370. LEFT JOIN SC AS T4371. ON SC.S# = T4.S# AND T4.C# = '004'372. WHERE student.S#=SC.S# and373. ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL (T4.score,0)374. NOT IN375. (SELECT376. DISTINCT377. TOP 15 WITH TIES378. ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)379. FROM sc380. LEFT JOIN sc AS T1381. ON sc.S# = T1.S# AND T1.C# = 'k1'382. LEFT JOIN sc AS T2383. ON sc.S# = T2.S# AND T2.C# = 'k2'384. LEFT JOIN sc AS T3385. ON sc.S# = T3.S# AND T3.C# = 'k3'386. LEFT JOIN sc AS T4387. ON sc.S# = T4.S# AND T4.C# = 'k4'388. ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);389.390.391.23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]392. SELECT SC.C# as 课程ID, Cname as 课程名称393. ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]394. ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]395. ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]396. ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]397. FROM SC,Course398. where SC.C#=Course.C#399. GROUP BY SC.C#,Cname;400.401.24、查询学生平均成绩及其名次402. SELECT 1+(SELECT COUNT( distinct 平均成绩)403. FROM (SELECT S#,AVG(score) AS 平均成绩404. FROM SC405. GROUP BY S#406. ) AS T1407. WHERE 平均成绩 > T2.平均成绩) as 名次,408. S# as 学生学号,平均成绩409. FROM (SELECT S#,AVG(score) 平均成绩410. FROM SC411. GROUP BY S#412. ) AS T2413. ORDER BY 平均成绩 desc;414.415.25、查询各科成绩前三名的记录:(不考虑成绩并列情况)416. SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数417. FROM SC t1418. WHERE score IN (SELECT TOP 3 score419. FROM SC420. WHERE t1.C#= C#421. ORDER BY score DESC422. )423. ORDER BY t1.C#;424.425.26、查询每门课程被选修的学生数426. select c#,count(S#) from sc group by C#;427.428.27、查询出只选修了一门课程的全部学生的学号和姓名429. select SC.S#,Student.Sname,count(C#) AS 选课数430. from SC ,Student431. where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1; 432.433.28、查询男生、女生人数434. Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男';435. Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女';436.437.29、查询姓“张”的学生名单438. SELECT Sname FROM Student WHERE Sname like '张%';439.440.30、查询同名同性学生名单,并统计同名人数441. select Sname,count(*) from Student group by Sname having count(*)>1; 442.443.31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)444. select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age445. from student446. where CONVERT(char(11),DATEPART(year,Sage))='1981';447.448.32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列449. Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ; 450.451.33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩452. select Sname,SC.S# ,avg(score)453. from Student,SC454. where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85; 455.456.34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数457. Select Sname,isnull(score,0)458. from Student,SC,Course459. where SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <60;460.461.35、查询所有学生的选课情况;462. SELECT SC.S#,SC.C#,Sname,Cname463. FROM SC,Student,Course464. where SC.S#=Student.S# and SC.C#=Course.C# ;465.466.36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;467. SELECT distinct student.S#,student.Sname,SC.C#,SC.score468. FROM student,Sc469. WHERE SC.score>=70 AND SC.S#=student.S#;470.471.37、查询不及格的课程,并按课程号从大到小排列472. select c# from sc where scor e <60 order by C# ;473.474.38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;475. select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and S core>80 and C#='003';476.477.39、求选了课程的学生人数478. select count(*) from sc;479.40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩480. select Student.Sname,score481. from Student,SC,Course C,Teacher482. where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.T name='叶平' and SC.score=(select max(score)from SC where C#=C.C# ); 483.484.41、查询各个课程及相应的选修人数485. select count(*) from sc group by C#;486.487.42、查询不同课程成绩相同的学生的学号、课程号、学生成绩488. select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score andA.C# <>B.C# ;489.490.43、查询每门功成绩最好的前两名491. SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数492. FROM SC t1493. WHERE score IN (SELECT TOP 2 score494. FROM SC495. WHERE t1.C#= C#496. ORDER BY score DESC497. )498. ORDER BY t1.C#;499.500.44、统计每门课程的学生选修人数(超过10人的课程才统计)。