经典SQL面试题总结

合集下载

sql常见的面试题

sql常见的面试题

sql常见的面试题1. 基本概念和语法a. 什么是SQL?它的作用是什么?b. SQL的分类有哪些?c. SQL中常见的数据类型有哪些?d. 什么是表?如何创建表?e. 如何插入数据到表中?f. 如何查询表中的数据?g. 如何更新和删除表中的数据?h. 什么是索引?如何创建和使用索引?2. 数据库查询a. 如何使用SELECT语句查询表中的数据?b. SELECT语句中常见的聚合函数有哪些?如何使用它们?c. 如何使用WHERE子句过滤查询结果?d. 如何使用ORDER BY子句对查询结果进行排序?e. 如何使用LIMIT子句限制查询结果的数量?f. 如何使用JOIN操作进行多表查询?3. 数据库修改和删除操作a. 如何使用INSERT语句插入新数据?b. 如何使用UPDATE语句更新数据?c. 如何使用DELETE语句删除数据?d. 如何使用ALTER TABLE语句修改表的结构?4. 数据库设计和优化a. 什么是数据库范式?常见的数据库范式有哪些?b. 什么是索引?如何选择合适的索引?c. 如何进行数据库性能优化?d. 什么是数据库事务?如何使用事务进行数据的一致性维护?5. 数据库安全和权限管理a. 如何创建用户并为其分配权限?b. 如何控制用户对数据库对象的访问权限?c. 如何保护数据库的安全性?6. 数据库备份和恢复a. 为什么需要数据库备份?b. 数据库备份的常见方法有哪些?c. 如何进行数据库的恢复操作?7. 高级SQL问题a. 如何使用子查询进行复杂的数据查询?b. 如何使用常用的SQL函数完成特定的数据操作?c. 如何使用触发器和存储过程实现自动化的数据处理任务?总结:在面试中,对SQL的基本概念、查询操作和修改操作的熟练掌握是很重要的。

此外,了解数据库设计、安全和性能优化等方面的知识也会给你在面试中加分。

希望本文给你提供了一些常见的SQL面试题及其解答,帮助你在面试中有所准备。

SQL面试经典50题

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语句面试题及答案

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解析

面试经典50题sql解析在数据库领域中,SQL是一种常用的查询语言,也是面试中经常被问到的重要知识点。

下面将解析面试中经典的50个SQL问题。

1. 什么是SQL?SQL(Structured Query Language)是一种用于管理关系型数据库的语言,用于查询、插入、更新和删除数据。

2. 什么是关系型数据库?关系型数据库是一种以表格形式存储数据的数据库,其中数据之间存在关系。

3. 什么是主键?主键是一列或一组列,用于唯一标识表中的每一行数据。

4. 什么是外键?外键是一列或一组列,用于建立表与表之间的关系。

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

6. 什么是事务?事务是一组数据库操作,要么全部执行成功,要么全部回滚。

7. 什么是ACID属性?ACID是指数据库事务应具备的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

8. 什么是视图?视图是一种虚拟表,由查询语句定义,可以简化复杂的查询操作。

9. 什么是触发器?触发器是一种特殊的存储过程,当满足特定条件时自动执行。

10. 什么是存储过程?存储过程是一组预编译的SQL语句,可以在数据库中存储和重复使用。

11. 什么是游标?游标是一种用于遍历查询结果集的数据库对象。

12. 什么是连接?连接是将两个或多个表中的数据关联起来的操作。

13. 什么是内连接?内连接是根据两个表之间的共同值将数据连接起来。

14. 什么是外连接?外连接是根据两个表之间的共同值将数据连接起来,并包括没有匹配的数据。

15. 什么是子查询?子查询是嵌套在其他查询语句中的查询语句。

16. 什么是联合查询?联合查询是将多个查询结果合并成一个结果集的操作。

17. 什么是交叉连接?交叉连接是将一个表的每一行与另一个表的每一行进行组合的操作。

18. 什么是聚合函数?聚合函数是对一组数据进行计算并返回单个值的函数,如SUM、AVG、COUNT等。

sql语句面试题及答案

sql语句面试题及答案

sql语句面试题及答案本文将为您提供一些常见的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. 在一个查询中,使用哪一个关键字能够除去重复列值?答案:使用distinct关键字2. 什么是快照?它的作用是什么?答案:快照Snapshot是一个文件系统在特定时间里的镜像,对于在线实时数据备份非常有用。

快照对于拥有不能停顿的应用或具有常翻开文件的文件系统的备份非常重要。

对于只能提供一个非常短的备份时间而言,快照能保证系统的完整性。

3. 解释存储过程和触发器答案:存储过程是一组Transact-SQL语句,在一次编译后可以执行屡次。

因为不必重新编译Transact-SQL语句,所以执行存储过程可以提高性能。

触发器是一种特殊类型的存储过程,不由用户直接调用。

创立触发器时会对其进展定义,以便在对特定表或列作特定类型的数据修改时执行。

4. SQL Server是否支持行级锁,有什么好处?答案:支持动态行级锁定SQL Server 2000动态地将查询所引用的每一个表的锁定粒度调整到适宜的级别。

当查询所引用的少数几行分散在一个大型表中时,优化数据并行访问的最正确方法是使用粒度锁,如行锁。

但是,如果查询引用的是一个表中的大多数行或所有行,优化数据并行访问的最正确方法可以是锁定整个表,以尽量减少锁定开销并尽快完成查询。

SQL Serve 2000通过为每个查询中的每个表选择适当的锁定级别,在总体上优化了数据并发访问。

对于一个查询,如果只引用一个大型表中的几行,那么数据库引擎可以使用行级锁定;如果引用一个大型表的几页中的多行,那么使用页级锁定;如果引用一个小型表中的所有行,那么使用表级锁定。

5. 数据库日志干什么用,数据库日志满的时候再查询数据库时会出现什么情况。

答案:每个数据库都有事务日志,用以记录所有事务和每个事务对数据库所做的修改。

6. 存储过程和函数的区别?答案:存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表7. 事务是什么?答案:事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:(1) 原子性事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

SQL常见面试题及答案整理

SQL常见面试题及答案整理

SQL常见⾯试题及答案整理本⽂转载⾃公众号:风控圈⼦,作者:研习社-winnie。

如有侵权,请联系我删除。

每天早上8点半⼀起实现⾃我增值1理论篇1、什么是SQL?SQL(结构化查询语⾔)是⼀种设计⽤于检索和操作数据的数据库。

它属于美国国家标准协会(ANSI)的⼀种标准,可⽤于执⾏Select(选择)、Update(更新)、Delete(删除)和Insert(插⼊)等数据任务。

2、数据库中的表和字段是什么?数据库是有序形式的⼀组信息,⽤于访问、存储和检索数据,表是在具有列和⾏的模型中设计的数据集合。

在表中,指定了列数称为字段,但未定义⾏数称为记录。

3、DBMS的类型是什么?DBMS是⼀个控制数据维护和使⽤的程序,它被认为是管理数据的⽂件管理器。

有四种类型的DBMS:关系DBMS分层DBMS⽹络DBMS⾯向对象的关系DBMS,最有⽤的DBMS是Relational DBMS。

它为数据提供了⼀个关系运算符。

4、SQL中的视图是什么?它包含来⾃⼀个或多个表的⾏和列,可以定义为虚拟表。

它消耗的内存较少。

句法:CREATE VIEW view_name ASSELECT column_name1, column_name2FROM table_nameWHERE CONDITION;5、什么是SQL中的Joins(连接)?Join⽤于从相关的⾏和列中检索数据。

它在两个或多个表之间⼯作,并且它从两个表返回⾄少⼀个匹配。

Joins类型是:Right Join (右连接)Left Join(左连接)Inner Join(内连接)Outer Join(外连接)Self-Join (⾃连接)Cross Join(交叉连接)·Full Join(全连接)6、SQL中的Constraints(约束)是什么?它可⽤于设置表中数据类型的限制。

在创建或更新表语句时,可以使⽤约束。

⼀些限制是:NOT NULLPRIMARY KEYFOREIGN KEYUNIQUECHECKDEFAULT7、SQL中有多少Key(键),它们如何⼯作?SQL中有不同类型的键:SuperKey(超级密钥)——⼀个或多个密钥的集合被定义为超级密钥,它⽤于唯⼀地标识表中的记录。

数据仓库经典sql面试题

数据仓库经典sql面试题

数据仓库经典sql面试题数据仓库经典 SQL 面试题通常涉及到数据查询、数据转换和数据分析等方面。

以下是一些经典的 SQL 面试题示例:1. 查询员工表中的所有员工信息。

sql.SELECT FROM employees;2. 查询销售额最高的产品名称和销售额。

sql.SELECT product_name, MAX(sales_amount) ASmax_sales_amount.FROM sales.GROUP BY product_name;3. 统计每个部门的平均工资和部门人数。

sql.SELECT department_id, AVG(salary) AS avg_salary, COUNT() AS employee_count.FROM employees.GROUP BY department_id;4. 查询每个月的销售总额。

sql.SELECT YEAR(order_date) AS sales_year,MONTH(order_date) AS sales_month, SUM(sales_amount) AS total_sales.FROM sales.GROUP BY YEAR(order_date), MONTH(order_date);5. 查找在 2020 年加入公司的员工数量。

sql.SELECT COUNT() AS new_employee_count.FROM employees.WHERE YEAR(hire_date) = 2020;这些是一些经典的数据仓库 SQL 面试题示例,涵盖了基本的数据查询、聚合函数、分组和条件过滤等内容。

希望这些示例能够帮助您更好地准备数据仓库 SQL 面试。

sql面试题50题

sql面试题50题

sql面试题50题1. 查询表中所有数据:SELECT * FROM 表名;2. 查询表中某列的不重复数据:SELECT DISTINCT 列名 FROM 表名;3. 查询表中满足条件的数据:SELECT * FROM 表名 WHERE 条件;4. 查询表中前n条数据:SELECT * FROM 表名 LIMIT n;5. 查询表中按某列排序的数据:SELECT * FROM 表名 ORDER BY 列名;6. 查询表中某列的最大值和最小值:SELECT MAX(列名), MIN(列名) FROM 表名;7. 查询表中某列的求和值:SELECT SUM(列名) FROM 表名;8. 查询表中某列的平均值:SELECT AVG(列名) FROM 表名;9. 查询表中某列的记录数:SELECT COUNT(列名) FROM 表名;10. 查询表中满足条件的记录数:SELECT COUNT(*) FROM 表名 WHERE 条件;11. 查询表中满足条件的前n条数据:SELECT * FROM 表名 WHERE 条件 LIMIT n;12. 查询表中的数据并按某列分组:SELECT 列名 FROM 表名 GROUP BY 列名;13. 查询表中满足条件的数据并按某列分组:SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 列名;14. 查询表中满足条件的数据并计算某列的和:SELECT 列名, SUM(列名) FROM 表名 WHERE 条件 GROUP BY 列名;15. 查询表中数据满足多个条件的情况:SELECT * FROM 表名 WHERE 条件1 AND 条件2;16. 查询表中数据满足任意一个条件的情况:SELECT * FROM 表名 WHERE 条件1 OR 条件2;17. 查询表中数据满足某个范围的情况:SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;18. 查询表中数据满足某个模式的情况:SELECT * FROM 表名 WHERE 列名 LIKE '模式';19. 查询表中数据满足某个模式的情况(不区分大小写):SELECT * FROM 表名 WHERE 列名 ILIKE '模式';20. 查询表中数据满足某个条件并按某列排序:SELECT * FROM 表名 WHERE 条件 ORDER BY 列名;21. 查询表中数据满足某个条件并按某列降序排序:SELECT * FROM 表名 WHERE 条件 ORDER BY 列名 DESC;22. 查询表中数据满足某个条件并限制结果集:SELECT * FROM 表名 WHERE 条件 LIMIT n;23. 查询表中数据满足某个条件并选择特定的列:SELECT 列名1, 列名2 FROM 表名 WHERE 条件;24. 查询表中数据满足某个条件并将结果分页显示:SELECT * FROM 表名 WHERE 条件 LIMIT 每页数量 OFFSET (页数-1) * 每页数量;25. 查询表中数据满足某个条件并按某列分组,并对某列进行排序:SELECT 列名1, SUM(列名2) FROM 表名 WHERE 条件 GROUP BY 列名1 ORDER BY 列名2;26. 查询表中数据满足某个条件,并按某列分组,并对某列进行排序,并限制结果集:SELECT 列名1, SUM(列名2) FROM 表名 WHERE 条件 GROUP BY 列名1 ORDER BY 列名2 LIMIT n;27. 查询表中数据满足某个条件,并根据某列分组,计算某列的平均值并按某列排序:SELECT 列名1, AVG(列名2) FROM 表名 WHERE 条件 GROUP BY 列名1 ORDER BY 列名2;28. 连接两个表并查询满足条件的数据:SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件;29. 连接两个表并查询满足条件的数据,并根据某列排序:SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件 ORDER BY 表1.列名;30. 连接两个表并查询满足条件的数据,并限制结果集:SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件 LIMIT n;31. 连接两个表并查询满足条件的数据,并选择特定的列:SELECT 表1.列名1, 表2.列名2 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件;32. 连接两个表并查询满足条件的数据,并将结果分页显示:SELECT 表1.列名, 表2.列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名 WHERE 条件 LIMIT 每页数量 OFFSET (页数-1) * 每页数量;33. 对表中的数据进行插入操作:INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2);34. 对表中的数据进行更新操作:UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2 WHERE 条件;35. 对表中的数据进行删除操作:DELETE FROM 表名 WHERE 条件;36. 创建表:CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,...);37. 修改表结构:ALTER TABLE 表名 ADD 列名数据类型;38. 删除表:DROP TABLE 表名;39. 添加索引:CREATE INDEX 索引名 ON 表名 (列名);40. 删除索引:DROP INDEX 索引名;41. 统计表中每个值的出现次数:SELECT 列名, COUNT(列名) FROM 表名 GROUP BY 列名;42. 查询表中某列存在的不重复值:SELECT 列名 FROM 表名 WHERE 列名 IS NOT NULL GROUP BY 列名;43. 查询表中某列不存在的值:SELECT 列名 FROM 表名 WHERE 列名 IS NULL;44. 查询表中数据满足某个条件并进行分组,并统计每组的数量:SELECT 列名, COUNT(*) FROM 表名 WHERE 条件 GROUP BY 列名;45. 查询表中数据满足某个条件并进行分组,并统计每组中某列的最大值:SELECT 列名, MAX(列名2) FROM 表名 WHERE 条件 GROUP BY 列名;46. 查询表中数据满足某个条件并进行分组,并统计每组中某列的最小值:SELECT 列名, MIN(列名2) FROM 表名 WHERE 条件 GROUP BY 列名;47. 查询表中数据满足某个条件并进行分组,并统计每组中某列的平均值:SELECT 列名, AVG(列名2) FROM 表名 WHERE 条件 GROUP BY 列名;48. 查询表中数据满足某个条件并进行分组,并统计每组中某列的求和值:SELECT 列名, SUM(列名2) FROM 表名 WHERE 条件 GROUP BY 列名;49. 查询表中多个列的不重复组合:SELECT DISTINCT 列名1, 列名2, ... FROM 表名;50. 查询表中某列满足条件的前n个不重复值:SELECT DISTINCT 列名 FROM 表名 WHERE 条件 LIMIT n;这些SQL面试题可以帮助你在面试中更好地掌握SQL语言的使用。

SQL经典面试50题

SQL经典面试50题

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 # 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 > and #=#;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 #,,count#),sum(score)105.106.from Student left Outer join SC on #=# 107.108.group by #,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 #,127.128.from Student129.130.where S# not in (select distinct( #) fromSC,Course,Teacher where #=#and #=# ='叶平');131.132.133.134.135.6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;136.137.select #, fromStudent,SC where #=# #='001'and exists( Select * from SC as SC_2 where #=# and #='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 #=# #=# and = '叶平'group by S# having count#)=(select count(C#) fromCourse,Teacher #=# and Tname='叶平'));149.150.151.152.153.8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;154.155.Select S#,Sname from (select #,,score ,(select score from SC SC_2 wh ere #=#and #='002') score2156.157.from Student,SC where #=# andC#='001') S_2 where score2 <score; 158.159.160.9、查询所有课程成绩小于60分的同学的学号、姓名;161.162.select S#,Sname163.164.from Student165.166.where S# not in (select # fromStudent,SC where #=# andscore>60);168.169.170.171.10、查询没有学全所有课的同学的学号、姓名;172.173.select #,174.175.from Student,SC176.#=# group by #, 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 #=# and C# in select C# from SC where S#='1001';187.188.189.190.191.12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;192.193.select distinct #,Sname194.195.from Student,SC196.197.where #=# and C# in(select C# from SC where S#='001');198.199.200.201.202.13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;203.204.update SC set score=(select avg205.206.from SC SC_2207.208.where #=# ) fromCourse,Teacher where #=# #=# and ='叶平');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#='10 02');218.219.220.221.222.15、删除学习“叶平”老师课的SC表记录;223.224.DelectSC225.226.from course ,Teacher227.228.where #=# and #=# 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 #=#AND C#='004') AS 数据库251.252.,(SELECT score FROM SC WHERE #=#AND C#='001') AS 企业管理253.254.,(SELECT score FROM SC WHERE #=#AND C#='006') AS 英语255.256.,COUNT(*) AS 有效课程数, AVG AS 平均成绩257.258.FROM SC AS t259.260.GROUP BY S#261.262.ORDER BY avg263.264.265.266.267.18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分268.269.SELECT # As 课程ID, AS 最高分, AS 最低分270.271.FROM SC L ,SC AS R272.273.WHERE # = # and274.275.= (SELECT MAX276.277.FROM SC ASIL,Student AS IM 278.279.WHERE # =# and #=#280.281.GROUP #)282.283.AND284.285.= (SELECT MIN286.287.FROM SC ASIR288.289.WHERE # =#290.291.GROUP BY #292.293.);294.295.296.297.298.19、按各科平均成绩从低到高和及格率的百分数从高到低顺序299.300.SELECT # AS 课程号,maxAS 课程名,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 #=#307.308.GROUP BY #309.310.ORDER BY 100* SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) 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# WHE N '001' 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 马克思及格百分数329.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)/SUM(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#) AS 教师ID,MAX AS 教师姓名,# AS 课程ID,MAX AS 课程名称,AVG(Score) AS 平均成绩345.FROM SC AS T,Course AS C ,Teacher AS Z346.where #=# and #=#347.GROUP BY #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.# As 学生学号,358.AS 学生姓名,359.AS 企业管理,360.AS 马克思,361.AS UML,362.AS 数据库,363.ISNULL,0) + ISNULL,0) + ISNULL,0) + ISNULL,0) as 总分364.FROM Student,SC LEFT JOIN SC AS T1365.ON # = # AND # = '001'366.LEFT JOIN SC AS T2367.ON # = # AND # = '002'368.LEFT JOIN SC AS T3369.ON # = # AND # = '003'370.LEFT JOIN SC AS T4371.ON # = # AND # = '004'372.WHERE #=# and373.ISNULL,0) + ISNULL,0) + ISNULL,0) + ISNULL,0)374.NOT IN375.(SELECT376.DISTINCT377.TOP 15 WITH TIES378.ISNULL,0) + ISNULL,0) + ISNULL,0) + ISNULL,0) 379.FROM sc380.LEFT JOIN sc AS T1381.ON # = # AND # = 'k1'382.LEFT JOIN sc AS T2383.ON # = # AND # = 'k2'384.LEFT JOIN sc AS T3385.ON # = # AND # = 'k3'386.LEFT JOIN sc AS T4387.ON # = # AND # = 'k4'388.ORDER BY ISNULL,0) + ISNULL,0) + ISNULL,0) + ISNULL,0) DESC);389.390.391.23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]392.SELECT # as 课程ID, Cname as 课程名称393.,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 E ND) 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 #=#399.GROUP BY #,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 # as 学生ID,# as 课程ID,Score as 分数417.FROM SC t1418.WHERE score IN (SELECT TOP 3 score419.FROM SC420.WHERE #= C#421.ORDER BY score DESC422.)423.ORDER BY #;424.425.26、查询每门课程被选修的学生数426.select c#,count(S#) from sc group by C#;427.428.27、查询出只选修了一门课程的全部学生的学号和姓名429.select #,,count(C#) AS 选课数430.from SC ,Student431.where #=# group by # , 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 age 445.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,# ,avg(score)453.from Student,SC454.where #=# group by #,Sname having avg(score)>85;455.456.34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数457.Select Sname,isnull(score,0)458.from Student,SC,Course459.where #=# and #=# and ='数据库'and score <60;460.461.35、查询所有学生的选课情况;462.SELECT #,#,Sname,Cname463.FROM SC,Student,Course464.where #=# and #=# ;465.466.36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;467.SELECT distinct #,,#,468.FROM student,Sc469.WHERE >=70 AND #=#;470.471.37、查询不及格的课程,并按课程号从大到小排列472.select c# from sc where scor e <60 order by C# ;473.474.38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;475.select #, from SC,Student where #=# and Score>80 and C#='003';476.477.39、求选了课程的学生人数478.select count(*) from sc;479.40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩480.select ,score481.from Student,SC,Course C,Teacher482.where #=# and #=# and #=# and ='叶平' and =(select max(score)from SC where C#=# );483.484.41、查询各个课程及相应的选修人数485.select count(*) from sc group by C#;486.487.42、查询不同课程成绩相同的学生的学号、课程号、学生成绩488.select distinct #, from SC A ,SC B where = and # <># ; 489.490.43、查询每门功成绩最好的前两名491.SELECT # as 学生ID,# as 课程ID,Score as 分数492.FROM SC t1493.WHERE score IN (SELECT TOP 2 score494.FROM SC495.WHERE #= C#496.ORDER BY score DESC497.)498.ORDER BY #;499.500.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优化和索引常见的⾯试题(⾯试总结)1.什么是索引索引指数据库的⽬录,⽐如:字典上⾯的字母⽬录 (适⽤于⼤数据量)2.建⽴索引的优缺点优点:查询速度快缺点:增删改慢,因为数据库要同步去维护索引⽂件,所以速度慢3.索引有哪些普通主键唯⼀组合4. 索引检索为什么快索引结构:B+Tree5.⼀般你们会在什么情况下加索引(1)主键⾃动建⽴唯⼀索引(2)频繁作为查询条件的字段应该创建索引(3)查询中与其他表关联的字段,外键关系建⽴索引(4)单键/组合索引的选择问题,组合索引的性价⽐更⾼(5)查询中排序的字段,排序字段若通过索引去访问将⼤⼤提⾼排序速度(6)查询中统计或者分组字段。

(7)过滤条件好的字段选择⼀段选择加索引6.怎么知道索引⽤没⽤上通过explain查询sql执⾏计划,主要看key使⽤的是哪个索引7.⽤过组合索引吗,是有序的吗⽤过,有序8.什么情况下会使索引失效?(1)like(2)like “%123%,前⾯不能+%(3)使⽤关键字in,or,null,!=9. sql优化您们是怎么做的?⼀.⾸先开启数据库慢查询⽇志,定位到查询效率⽐较低的sql , 找出对应的sql语句并进⾏分析1.表设计是否规范,是否符合三范式的标准(1)第⼀范式:保证原⼦性(不可拆分)(2)第⼆范式:每张表都有主键(3)第三范式(每⼀列都有主键相关)2.查看数据表中是否存在⼤量的冗余字段,字段数据类型是否合理3.尽可能的使⽤varchar代替char 建表数据类型,能⽤数值的绝对不⽤字符存储4.尽量避免null值,使⽤默认值替代空值,数值型可以使⽤0,字符型可以使⽤空字符串⼆.查看sql语句是否规范(1)避免使⽤关键字:or,in,not in,!=,<>,避免使⽤select *(2)尽量避免⼦查询,⼤部分⼦查询都可以连接查询(3)⽤到or的地⽅可以使⽤union去代替实现(4)⽤到in的地⽅可以使⽤exists去代替三.分析sql的索引是否可以⽤上(1) explain查询sql的执⾏计划,重点关注的⼏个列就是,type是不是全表扫描(2)看⼀下索引是否能够⽤的上,主要看key使⽤的是哪个索引(3)看⼀下rows扫描⾏数是不是很⼤。

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。

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是一种用于存储、操作和检索数据的编程语言,主要用于关系数据库管理系统(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注入的方法包括:- 使用参数化查询。

mysql sql语句面试经典50题

mysql sql语句面试经典50题

mysql sql语句面试经典50题1. 查询所有列的数据:```sqlSELECT * FROM table_name;```2. 条件查询:```sqlSELECT * FROM table_name WHERE condition;```3. 排序查询:```sqlSELECT * FROM table_name ORDER BY column_name ASC/DESC;```4. 去重查询:```sqlSELECT DISTINCT column_name FROM table_name;```5. 统计行数:```sqlSELECT COUNT(*) FROM table_name;```6. 条件统计:```sqlSELECT COUNT(*) FROM table_name WHERE condition;```7. 分组统计:```sqlSELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;```8. 连接查询-内连接:```sqlSELECT * FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;```9. 连接查询-左连接:```sqlSELECT * FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;```10. 连接查询-右连接:```sqlSELECT * FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;```11. 子查询:```sqlSELECT column_name FROM table_name WHERE column_name = (SELECT column_name FROM another_table WHERE condition);```12. 更新数据:```sqlUPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;```13. 插入数据:```sqlINSERT INTO table_name (column1, column2) VALUES (value1, value2);```14. 删除数据:```sqlDELETE FROM table_name WHERE condition;```15. 模糊查询:```sqlSELECT * FROM table_name WHERE column_name LIKE 'pattern';```16. 使用通配符的模糊查询:```sqlSELECT * FROM table_name WHERE column_name LIKE '%pattern%';```17. 使用正则表达式的模糊查询:```sqlSELECT * FROM table_name WHERE column_name REGEXP 'pattern';```18. 限制结果集的行数:```sqlSELECT * FROM table_name LIMIT 10;```19. 跳过前N行:```sqlSELECT * FROM table_name LIMIT offset, count;```20. 计算平均值:```sqlSELECT AVG(column_name) FROM table_name;```21. 计算总和:```sqlSELECT SUM(column_name) FROM table_name;```22. 计算最大值和最小值:```sqlSELECT MAX(column_name), MIN(column_name) FROM table_name;```23. 使用CASE语句进行条件查询:```sqlSELECT column_name, CASE WHEN condition THEN 'value1' ELSE 'value2' END FROM table_name;```24. 使用GROUP BY和HAVING进行分组过滤:```sqlSELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1;```25. 多表更新:```sqlUPDATE table1 SET column1 = value1 WHERE column_name IN (SELECT column_name FROM table2 WHERE condition);```26. 多表删除:```sqlDELETE FROM table1 WHERE column_name IN (SELECT column_name FROM table2 WHERE condition);```27. 创建表:```sqlCREATE TABLE table_name (column1 datatype,column2 datatype,...);```28. 修改表结构-添加列:```sqlALTER TABLE table_name ADD column_name datatype;```29. 修改表结构-修改列数据类型:```sqlALTER TABLE table_name MODIFY column_name new_datatype;```30. 修改表结构-删除列:```sqlALTER TABLE table_name DROP COLUMN column_name;```31. 创建索引:```sqlCREATE INDEX index_name ON table_name (column_name);```32. 删除索引:```sqlDROP INDEX index_name ON table_name;```33. 使用LIMIT和OFFSET进行分页查询:```sqlSELECT * FROM table_name LIMIT page_size OFFSET (page_number - 1) * page_size;```34. 使用IFNULL处理空值:```sqlSELECT column1, IFNULL(column2, 'default_value') FROM table_name;```35. 使用COALESCE处理空值:```sqlSELECT column1, COALESCE(column2, 'default_value') FROM table_name;```36. 计算日期差:```sqlSELECT DATEDIFF(date1, date2) FROM table_name;```37. 获取当前日期和时间:```sqlSELECT NOW();```38. 获取唯一标识符:```sqlSELECT UUID();```39. 使用INNER JOIN和GROUP BY计算每个组的总数:```sqlSELECT table1.column_name, COUNT(*) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name GROUP BY table1.column_name;```40. 使用CASE语句进行多条件查询:```sqlSELECT column_name, CASE WHEN condition1 THEN 'value1' WHEN condition2 THEN 'value2' ELSE 'value3' END FROM table_name;```41. 使用CONCAT连接字符串:```sqlSELECT CONCAT(column1, ' ', column2) AS concatenated_string FROM table_name;```42. 使用TRIM去除字符串两端的空格:```sqlSELECT TRIM(column_name) FROM table_name;```43. 使用LEFT和RIGHT截取字符串:```sqlSELECT LEFT(column_name, length) FROM table_name;SELECT RIGHT(column_name, length) FROM table_name;```44. 使用IN进行多值匹配:```sqlSELECT * FROM table_name WHERE column_name IN (value1, value2, value3);```45. 使用BETWEEN进行范围查询:```sqlSELECT * FROM table_name WHERE column_name BETWEEN value1 AND value2;```46. 使用COUNT和GROUP BY查找重复值:```sqlSELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1;```47. 使用DATE_FORMAT格式化日期:```sqlSELECT DATE_FORMAT(column_name, '%Y-%m-%d') FROM table_name;```48. 使用SUM和GROUP BY进行累计求和:```sqlSELECT column_name, SUM(column_name) OVER (ORDER BY column_name) AS running_total FROM table_name;```49. 使用CONVERT进行数据类型转换:```sqlSELECT column_name, CONVERT(column_name, new_datatype) FROM table_name;```50. 使用UPDATE和LIMIT进行分页更新:```sqlUPDATE table_name SET column1 = value1 LIMIT page_size OFFSET (page_number -1) * page_size;```。

sql注入面试题目(3篇)

sql注入面试题目(3篇)

第1篇一、题目背景随着互联网技术的飞速发展,网络安全问题日益突出。

其中,SQL注入攻击作为一种常见的网络攻击手段,严重威胁着数据库的安全。

本题目旨在通过一系列的SQL 注入相关问题,考察应聘者对SQL注入的理解、防范措施以及实际操作的技能。

二、题目内容第一部分:理论理解1. 什么是SQL注入?请简述SQL注入的定义,并举例说明。

2. SQL注入的原理是什么?分析SQL注入的原理,并解释其如何利用。

3. SQL注入的常见类型有哪些?列举并简要说明SQL注入的常见类型,如:联合查询注入、错误信息注入、时间盲注等。

4. 如何防范SQL注入攻击?提出至少三种防范SQL注入的方法,并简要说明其原理。

5. 什么是预编译语句(Prepared Statements)?解释预编译语句的概念,并说明其如何防止SQL注入。

6. 什么是参数化查询(Parameterized Queries)?介绍参数化查询的概念,并解释其如何提高安全性。

7. 什么是输入验证?解释输入验证的作用,并举例说明其在防范SQL注入中的应用。

8. 什么是数据库防火墙?介绍数据库防火墙的概念,并说明其如何保护数据库。

第二部分:实战演练1. 编写一个简单的登录页面,并实现SQL注入攻击。

要求:使用HTML和PHP编写一个简单的登录页面,并使用SQL语句验证用户名和密码。

在用户名和密码输入框中,允许用户输入SQL语句,并实现SQL注入攻击。

2. 使用预编译语句改写上述登录页面,防止SQL注入攻击。

要求:使用预编译语句改写上述登录页面,确保用户输入的数据不会影响SQL语句的结构,从而防止SQL注入攻击。

3. 编写一个简单的留言板程序,并实现SQL注入攻击。

要求:使用HTML、CSS和PHP编写一个简单的留言板程序,允许用户提交留言。

在留言内容输入框中,允许用户输入SQL语句,并实现SQL注入攻击。

4. 使用参数化查询改写上述留言板程序,防止SQL注入攻击。

软件测试面试题 sql

软件测试面试题 sql

软件测试面试题 sql一、简介SQL(Structured Query Language)是一种用于管理关系型数据库系统的编程语言。

在软件测试中,SQL常被用于数据库测试,它可以用于创建、查询、更新和删除数据库中的数据。

二、常见面试题目以下是一些常见的SQL面试题目,供测试人员在准备面试时参考。

1. 查询表中所有数据可以使用SELECT语句来查询表中的所有数据。

例如,假设有一个名为"users"的表,包含"username"和"email"两个列,查询表中所有数据的SQL语句如下:SELECT * FROM users;2. 查询特定条件的数据可以使用WHERE子句来查询符合特定条件的数据。

例如,查询"users"表中用户名为"John"的数据的SQL语句如下:SELECT * FROM users WHERE username = 'John';3. 查询数据并按照某一列排序可以使用ORDER BY子句来将查询结果按照某一列的值进行排序。

例如,查询"users"表中所有数据,并按照用户名的字母顺序升序排列的SQL语句如下:SELECT * FROM users ORDER BY username ASC;4. 查询数据并统计满足条件的记录数可以使用COUNT函数来统计满足特定条件的记录数。

例如,查询"users"表中用户名为"John"的记录数的SQL语句如下:SELECT COUNT(*) FROM users WHERE username = 'John';5. 更新数据可以使用UPDATE语句来更新表中的数据。

例如,将"users"表中用户名为"John"的记录的邮箱更新为"****************"的SQL语句如下:UPDATEusersSETemail='****************'WHEREusername= 'John';6. 删除数据可以使用DELETE语句来删除表中的数据。

oracle sql语句面试题

oracle sql语句面试题

oracle sql语句面试题在准备Oracle SQL面试时,对一些常见的SQL语句问题有所了解是非常重要的。

在面试过程中,考官可能会针对SQL的各个方面提问,包括查询、过滤、连接、排序等等。

下面是一些常见的Oracle SQL语句面试题,希望能帮您在面试中有所准备。

1. 简单查询1.1 请列出查找一个表中所有的行和列的SQL语句。

1.2 如何查找一个表中特定列的数据?1.3 如何查找满足一定条件的行?1.4 如何使用排序来对结果集排序?2. 连接查询2.1 如何进行简单的内连接查询?2.2 如何进行左连接和右连接查询?2.3 如何进行自连接查询?3. 分组和聚合函数3.1 如何使用GROUP BY子句进行列分组?3.2 如何使用聚合函数对分组结果进行计算?3.3 请列出一些常见的聚合函数有哪些?4. 子查询4.1 什么是子查询?如何使用子查询?4.2 如何在FROM子句中使用子查询?4.3 如何在WHERE子句中使用子查询?5. 表操作5.1 如何创建一个新表?5.2 如何向表中插入数据?5.3 如何更新表中的数据?5.4 如何删除表中的数据?6. 视图6.1 什么是视图?如何创建视图?6.2 如何在视图中使用聚合函数?6.3 如何在视图中更新数据?7. 索引7.1 什么是索引?如何创建索引?7.2 如何使用索引来加速查询?8. 事务控制8.1 什么是事务?如何控制事务?8.2 如何使用COMMIT和ROLLBACK控制事务?9. 数据库安全性9.1 如何创建和管理用户?9.2 如何为用户授予角色和权限?9.3 如何查看用户的权限?通过准备以上问题的答案,您将能够在Oracle SQL面试中更加自信。

请记住,除了对问题的准确回答外,还要注重语法的正确性和代码的整洁。

在面试中展示您的专业知识和技能将有助于提升您的竞争力。

祝您面试顺利!。

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

表Student(S#,Sname,Sage,Ssex) 学生表CREATE TABLE student (sid varchar(10) NOT NULL,sName varchar(20) DEFAULT NULL,sAge datetime DEFAULT '1980-10-12 23:12:36', sSex varchar(10) DEFAULT NULL,PRIMARY KEY (sid)) ENGINE=InnoDB DEFAULT CHARSET=utf8;Course(C#,Cname,T#) 课程表CREATE TABLE course (cid varchar(10) NOT NULL,cName varchar(10) DEFAULT NULL,tid int(20) DEFAULT NULL,PRIMARY KEY (cid)) ENGINE=InnoDB DEFAULT CHARSET=utf8;SC(S#,C#,score) 成绩表CREATE TABLE sc (sid varchar(10) DEFAULT NULL,cid varchar(10) DEFAULT NULL,score int(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;Teacher(T#,Tname) 教师表CREATE TABLE teacher (tid int(10) DEFAULT NULL,tName varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;数据:(MySQL)insert into teacher(tid,tName) values (1,'李老师'),(2,'何以琛'),(3,'叶平');insert into student(sid,sName,sAge,sSex) values ('1001','张三丰','1980-10-12 23:12:36','男'),('1002','张无极','1995-10-12 23:12:36','男'),('1003','李奎','1992-10-12 23:12:36','女'),('1004','李元宝','1980-10-12 23:12:36','女'),('1005','李世明','1981-10-12 23:12:36','男'),('1006','赵六','1986-10-12 23:12:36','男'),('1007','田七','1981-10-12 23:12:36','女'); insert into sc(sid,cid,score) values ('1','001',80),('1','002',60),('1','003',75),('2','001',85),('2','002',70),('3','004',100), ('3','001',90),('3','002',55),('4','002',65),('4','003',60);insert into course(cid,cName,tid) values ('001','企业管理',3),('002','马克思',3),('003','UML',2),('004','数据库',1),('005 ','英语',1);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#=Cou rse.T# and Teacher.Tname='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Te acher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T #=Course.T# and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名; Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Stu dent.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 Teache r.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表中插入一些记录,这些记录要求符合以下条件:没有上过编号“00 3”课程的同学学号、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' THE N 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' THE N 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 U ML平均分,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THE N 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' THE N 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(S core) 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 having count(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 Sname having 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、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列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#,Sname having 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 where 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=(sel ect 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 where A.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人的课程才统计)。

相关文档
最新文档