SQL经典面试50题

合集下载

sql基础面试题及答案

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经典⾯试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等。

sql50经典题

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题

测试面试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面试题大全

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面试题SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。

在面试中,SQL面试题经常被用来评估应聘者对SQL的理解和使用能力。

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

1. 请解释什么是SQL?SQL是一种用于管理和操作关系型数据库的标准化语言。

它包含了一系列的命令和功能,用于创建、查询、修改和删除数据库中的数据和结构。

2. 请解释什么是关系型数据库?关系型数据库是一种基于表格的数据库管理系统,它使用了表、行和列的结构来组织和存储数据。

表由行和列组成,每行代表一个记录,每列代表一个属性。

3. 请解释什么是主键?主键是一列或一组列,用来唯一地标识表中的每个记录。

它的值必须是唯一且不为空。

主键对于确保数据完整性和表之间的引用非常重要。

4. 请解释什么是外键?外键是用来建立表与表之间的关联的列。

外键的值必须是另一张表中的主键值,用于确保数据的一致性和引用完整性。

5. 请解释什么是索引?索引是一种数据结构,用于快速查找表中的记录。

它可以提高查询的性能,但会增加写操作的开销。

常见的索引类型包括主键索引、唯一索引和普通索引。

6. 请解释什么是事务?事务是一组数据库操作,它们被视为一个不可分割的工作单位。

事务具有四个特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),以确保数据库的数据一致性和完整性。

7. 请解释什么是子查询?子查询是嵌套在主查询中的查询语句。

它可以作为主查询的条件或提供数据集合。

子查询通常用于限制查询结果或获取相关数据。

8. 请解释什么是联结?联结是将两个或多个表的行组合在一起,形成一个新的集合。

联结通常通过在相关列上进行比较来实现,它是查询多个表的常见操作。

9. 请解释什么是触发器?触发器是与表相关的特殊类型的存储过程。

它在插入、更新或删除数据时自动触发,用于执行特定的操作或应用业务规则。

mysql-50道经典sql题

mysql-50道经典sql题

mysql-50道经典sql题English.Q1: Find all customers who have placed orders with a total value of over $1000.sql.SELECT customer_id, SUM(order_total) AS total_value.FROM orders.GROUP BY customer_id.HAVING total_value > 1000;Q2: Find all products that have been ordered more than 10 times.sql.SELECT product_id, COUNT() AS order_count.FROM order_items.GROUP BY product_id.HAVING order_count > 10;Q3: Find all employees who have worked on more than 5 projects.sql.SELECT employee_id, COUNT() AS project_count.FROM project_assignments.GROUP BY employee_id.HAVING project_count > 5;Q4: Find all orders that were shipped within 2 days of being placed.sql.SELECT order_id, DATEDIFF(ship_date, order_date) AS shipping_time.FROM orders.WHERE shipping_time <= 2;Q5: Find all customers who have placed at least one order in the last year.sql.SELECT customer_id.FROM orders.WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 1YEAR);Chinese.Q1: 找出所有总订单价值超过 1000 美元的客户。

sql 50题

sql 50题

sql 50题1. 查询所有员工的姓名和薪水。

```sqlSELECT name, salary FROM employees;```2. 查找薪水超过50000 的员工。

```sqlSELECT * FROM employees WHERE salary > 50000;```3. 按薪水升序排序员工。

```sqlSELECT * FROM employees ORDER BY salary ASC;```4. 统计每个部门的员工数量。

```sqlSELECT department, COUNT(*) FROM employees GROUP BY department;```5. 查找最高薪水的员工。

```sqlSELECT * FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);```6. 计算每个部门的平均薪水。

```sqlSELECT department, AVG(salary) FROM employees GROUP BY department;```7. 查找在'IT' 部门工作的员工。

```sqlSELECT * FROM employees WHERE department = 'IT';```8. 按照姓名的字母顺序对员工进行排序。

```sqlSELECT * FROM employees ORDER BY name ASC;```9. 查找在'IT' 部门工作且薪水在50000 到70000 之间的员工。

```sqlSELECT * FROM employees WHERE department = 'IT' AND salary BETWEEN 50000 AND 70000;```10. 计算所有员工的总薪水。

```sqlSELECT SUM(salary) FROM employees;```11. 查找没有分配部门的员工。

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面试题

经典SQL面试题

经典SQL面试题SQL面试题一、选择题1、假设在某个公司环境中,一个部门有多名职工,一名职工只能属于一个部门,则部门与职工之间的联系是( A )。

A、一对多B、一对一C、多对多D、不确定2、create database用来( A )。

A、创建数据库B、删除数据库C、创建表D、创建视图3、如果将某一列设置为表的主键,在表中此列的值(C )。

A、可以出现重复值B、允许为空值C、不允许为空值,也不能出现重复值D、不允许为空值,但允许列值重复4、对于表的外键,下列哪些描述正确( A )。

A、是表的非主键列,是另一个表的主键列B、主键和外键不能描述表之间的关系C、外键不能是表的索引D、外键允许为空值5、在查询时,如果要去掉查询结果中的重复项,需要使用( C )。

A、UNIQUEB、COUNTC、DISTINCTD、UNION6、SELECT语句中使用*表示( B )。

A、选择任何属性B、选择全部属性C、选择全部元组D、选择键码7、在SQL中,下列涉及空值操作不正确的_是( A )。

A、AGE IS NULLB、AGE IS NOT NULLC、AGE=NULLD、NOT(AGE IS NULL)8、在SELECT语句中,(A)子句可用于对查询到的记录进行分组。

A、GROUP BYB、ORDER BYC、WHERED、FROM9、Oracle数据库是( C )数据库。

A、层次模型B、网状模型C、关系模型D、面向对象模型二、查询题参照如下表,完成下面题目:Student coursescore teacher1、查询Student表中不姓“王”的同学记录select * from Student where SNAME not like ‘王_’;2、查询和“李军”同性别,并且同班的同学Snameselect SNAME from Student where SSEX=(select SSEX from student where sname='李军');3、找出学号为108学生所学课程的课程名与任课教师姓名select t.DEPART,t.TNAME from score a,course b,Student c where O=O and a.SNO=c.SNO and c.SNO=108;4、把小于80分的成绩全部改为80分。

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面试必会50题-训练数据

SQL面试必会50题-训练数据

SQL⾯试必会50题-训练数据根据知乎⾯试必会50题进⾏练习, 这是本次的数据集-- 建表-- 学⽣表CREATE DATABASE sql_test;USE sql_test;CREATE TABLE `Student`(`s_id` VARCHAR(20),`s_name` VARCHAR(20) NOT NULL DEFAULT '',`s_birth` VARCHAR(20) NOT NULL DEFAULT '',`s_sex` VARCHAR(10) NOT NULL DEFAULT '',PRIMARY KEY(`s_id`));-- 课程表CREATE TABLE `Course`(`c_id` VARCHAR(20),`c_name` VARCHAR(20) NOT NULL DEFAULT '',`t_id` VARCHAR(20) NOT NULL,PRIMARY KEY(`c_id`));-- 教师表CREATE TABLE `Teacher`(`t_id` VARCHAR(20),`t_name` VARCHAR(20) NOT NULL DEFAULT '',PRIMARY KEY(`t_id`));-- 成绩表CREATE TABLE `Score`(`s_id` VARCHAR(20),`c_id` VARCHAR(20),`s_score` INT(3),PRIMARY KEY(`s_id`,`c_id`));-- 插⼊学⽣表测试数据insert into Student values('01' , '赵雷' , '1990-01-01' , '男');insert into Student values('02' , '钱电' , '1990-12-21' , '男');insert into Student values('03' , '孙风' , '1990-05-20' , '男');insert into Student values('04' , '李云' , '1990-08-06' , '男');insert into Student values('05' , '周梅' , '1991-12-01' , '⼥');insert into Student values('06' , '吴兰' , '1992-03-01' , '⼥');insert into Student values('07' , '郑⽵' , '1989-07-01' , '⼥');insert into Student values('08' , '王菊' , '1990-01-20' , '⼥');-- 课程表测试数据insert into Course values('01' , '语⽂' , '02');insert into Course values('02' , '数学' , '01');insert into Course values('03' , '英语' , '03');-- 教师表测试数据insert into Teacher values('01' , '张三');insert into Teacher values('02' , '李四');insert into Teacher values('03' , '王五');-- 成绩表测试数据insert into Score values('01' , '01' , 80);insert into Score values('01' , '02' , 90);insert into Score values('01' , '03' , 99);insert into Score values('02' , '01' , 70);insert into Score values('02' , '02' , 60);insert into Score values('02' , '03' , 80);insert into Score values('03' , '01' , 80);insert into Score values('03' , '02' , 80);insert into Score values('03' , '03' , 80);insert into Score values('04' , '01' , 50);insert into Score values('04' , '02' , 30);insert into Score values('04' , '03' , 20);insert into Score values('05' , '01' , 76);insert into Score values('05' , '02' , 87);insert into Score values('06' , '01' , 31);insert into Score values('06' , '03' , 34);insert into Score values('07' , '02' , 89);insert into Score values('07' , '03' , 98);。

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 面试题,这些问题将测试应聘者对 SQL 的深入理解以及解决复杂问题的能力:
1. 假设你有一个名为 `employees` 的表,其中包含以下列:`id`, `name`,
`salary`, `department_id`。

请编写一个 SQL 查询,以获取每个部门的最高薪水的员工。

2. 假设你有一个名为 `orders` 的表,其中包含以下列:`order_id`,
`customer_id`, `order_date`。

请编写一个 SQL 查询,以获取在过去一年内下订单最多的客户。

3. 假设你有一个名为 `products` 的表,其中包含以下列:`product_id`,
`product_name`, `price`。

请编写一个 SQL 查询,以获取最昂贵的前五种
产品。

4. 假设你有一个名为 `users` 的表,其中包含以下列:`user_id`,
`username`, `email`。

请编写一个 SQL 查询,以获取不重复的电子邮件地
址数量。

5. 假设你有一个名为 `reviews` 的表,其中包含以下列:`review_id`,
`product_id`, `rating`。

请编写一个 SQL 查询,以获取平均评级最高的产品。

这些问题的难度较高,需要应聘者对 SQL 有深入的理解和实践经验。

回答这些问题需要综合考虑数据结构、SQL 函数和查询优化等方面。

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面试题50题

sql面试题50题

sql面试题50题准备面试是每一个求职者迈向成功的重要一步。

特别是对于想要从事数据库相关职位的求职者来说,掌握SQL面试题是至关重要的。

本文将为大家提供50道SQL面试题,帮助你在面试中更加从容自信地回答。

1. 什么是SQL?SQL(Structured Query Language)是一种用于管理和操作关系数据库的语言。

2. SQL语句的分类有哪些?SQL语句可以分为数据查询语句(SELECT)和数据操作语句(INSERT、UPDATE、DELETE)两类。

3. 什么是关系数据库?关系数据库是以表(表格)形式存储数据的数据库系统。

4. 什么是表?表是数据库中的一种结构,用于存储数据。

它由行和列组成,行表示记录,列表示字段。

5. 创建表的语法是什么?CREATE TABLE 表名 (字段名数据类型约束, ...);6. 如何删除表?DROP TABLE 表名;7. 如何向表中插入数据?INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);8. 如何更新表中的数据?UPDATE 表名 SET 字段 = 值 WHERE 条件;9. 如何删除表中的数据?DELETE FROM 表名 WHERE 条件;10. 如何查询表中的数据?SELECT 字段 FROM 表名 WHERE 条件;11. 如何按照字段进行排序?SELECT 字段 FROM 表名 ORDER BY 字段 ASC/DESC;12. 如何查询不重复的数据?SELECT DISTINCT 字段 FROM 表名;13. 如何使用通配符进行模糊查询?SELECT 字段 FROM 表名 WHERE 字段 LIKE '模式';14. 如何对查询结果进行分页?SELECT 字段 FROM 表名 LIMIT 起始行, 每页数量;15. 如何对查询结果进行统计?SELECT COUNT(字段) FROM 表名 WHERE 条件;16. 如何计算字段的总和、平均值等?SELECT SUM(字段), AVG(字段) FROM 表名 WHERE 条件;17. 如何对查询结果进行分组?SELECT 字段, 聚合函数 FROM 表名 GROUP BY 字段;18. 如何对分组结果进行过滤?SELECT 字段, 聚合函数 FROM 表名 GROUP BY 字段 HAVING条件;19. 如何进行表的连接查询?SELECT 字段 FROM 表1 INNER/LEFT/RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;20. 如何创建索引?CREATE INDEX 索引名 ON 表名 (字段);21. 什么是事务?事务是由一组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;```。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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人的课程才统计)。

相关文档
最新文档