Sql语句经典难题

合集下载

sql 五十题

sql 五十题

sql 五十题以下是一些SQL练习题,共50题:1. 什么是SQL?2. 什么是关系型数据库?3. 什么是主键?4. 什么是外键?5. 什么是索引?6. 什么是查询?7. 什么是插入操作?8. 什么是更新操作?9. 什么是删除操作?10. 什么是聚合函数?11. 什么是分组操作?12. 什么是排序操作?13. 什么是联接操作?14. 什么是子查询?15. 什么是视图?16. 什么是存储过程?17. 什么是触发器?18. 如何使用WHERE子句进行过滤?19. 如何使用ORDER BY子句进行排序?20. 如何使用GROUP BY子句进行分组?21. 如何使用HAVING子句进行分组过滤?22. 如何使用JOIN操作联接表?23. 如何使用聚合函数SUM、AVG、MIN、MAX?24. 如何使用聚合函数COUNT、COUNT()和COUNT(列名)的区别?25. 如何使用子查询嵌套查询?26. 如何创建视图并查询视图数据?27. 如何创建存储过程并调用存储过程?28. 如何创建触发器并触发触发器?29. 如何使用INSERT INTO语句插入数据?30. 如何使用UPDATE语句更新数据?31. 如何使用DELETE语句删除数据?32. 如何使用TRUNCATE TABLE语句清空表数据?33. 如何使用UNION操作符合并多个查询结果?34. 如何使用UNION ALL操作符合并多个查询结果(包括重复行)?35. 如何使用IN操作符筛选符合条件的多个值?36. 如何使用LIKE操作符进行模糊查询?37. 如何使用NOT操作符进行否定筛选?38. 如何使用BETWEEN操作符筛选范围值?39. 如何使用EXISTS操作符检查子查询结果是否存在?40. 如何使用NOT EXISTS操作符检查子查询结果是否存在(否定筛选)?41. 如何使用CASE语句进行条件判断和值转换?42. 如何使用DISTINCT关键字去除查询结果的重复行?43. 如何使用LIMIT关键字限制查询结果的行数?44. 如何使用JOIN操作连接多个表并筛选数据?45. 如何使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的区别和用法?46. 如何使用视图提高查询效率和维护数据安全性?47. 如何使用存储过程存储复杂的业务逻辑和重复使用的查询语句?48. 如何使用触发器自动执行特定事件或数据修改操作?49. 如何优化SQL查询性能,提高数据库的响应速度?50. 如何安全地管理和维护数据库,确保数据的完整性和可靠性?。

sql语句面试题及答案

sql语句面试题及答案

sql语句面试题及答案一、基本查询1. 简单查询请问如何查询一个表中的所有记录?答:可以使用SELECT * FROM table_name; 命令来查询表中的所有记录。

2. 条件查询如果我只想查询特定条件下的记录,例如查询年龄大于30的员工信息,应该怎么做?答:可以使用WHERE子句来进行条件查询,语句如下:SELECT * FROM employees WHERE age > 30;3. 限制查询结果在查询时,如果只想获取前5条记录,应该如何操作?答:可以使用LIMIT关键字来限制查询结果的数量,语句如下:SELECT * FROM table_name LIMIT 5;二、聚合查询1. 计数如何计算某个表中的记录数?答:可以使用COUNT()函数来计算表中的记录数,语句如下:SELECT COUNT(*) FROM table_name;2. 求和如果需要计算某列的总和,例如计算销售总额,应该怎么做?答:可以使用SUM()函数来计算某列的总和,语句如下:SELECT SUM(sales_amount) FROM sales_table;3. 平均值如何求某列的平均值,比如平均工资?答:可以使用AVG()函数来计算某列的平均值,语句如下:SELECT AVG(salary) FROM employees;三、分组查询1. 分组统计请问如何按照某个字段进行分组,并计算每个分组的记录数?答:可以使用GROUP BY子句来进行分组统计,语句如下:SELECT department, COUNT(*) FROM employees GROUP BY department;2. 多列分组如果需要按照多个字段进行分组,应该如何操作?答:可以在GROUP BY子句中列出所有需要分组的字段,语句如下:SELECT department, job_title, COUNT(*) FROM employees GROUP BY department, job_title;3. 分组聚合运算在分组查询中,如何对每个分组执行聚合运算,例如计算每个部门的最高工资?答:可以使用GROUP BY子句结合聚合函数来进行分组聚合运算,语句如下:SELECT department, MAX(salary) AS max_salary FROM employees GROUP BY department;四、连接查询1. 内连接如何查询两个表中有关联的记录?答:可以使用INNER JOIN来查询两个表中有关联的记录,语句如下:SELECT * FROM table1 INNER JOIN table2 ON mon_field = mon_field;2. 左连接如果需要查询左表的所有记录,以及右表中与之关联的记录,没有关联的则显示NULL,应该怎么做?答:可以使用LEFT JOIN来实现,语句如下:SELECT * FROM table1 LEFT JOIN table2 ON mon_field = mon_field;3. 右连接请问如何查询右表的所有记录,以及左表中与之关联的记录?答:可以使用RIGHT JOIN来实现,语句如下:SELECT * FROM table1 RIGHT JOIN table2 ON mon_field = mon_field;五、子查询1. 非相关子查询在查询时,如果需要在WHERE子句中使用一个SELECT语句作为条件,应该怎么做?答:可以使用非相关子查询来实现,语句如下:SELECT * FROM table1 WHERE column_name IN (SELECT column_name FROM table2);2. 相关子查询如果子查询需要引用外部查询的列,应该怎么做?答:可以使用相关子查询,在子查询中使用外部查询的列,语句如下:SELECT * FROM table1 WHERE column_name = (SELECT column_name FROM table2 WHERE related_column = table1.related_column);六、更新和删除操作1. 更新数据请问如何使用SQL语句来更新表中的记录?答:可以使用UPDATE语句来更新表中的记录,语句如下:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;2. 删除数据如果需要删除表中的某些记录,应该如何操作?答:可以使用DELETE语句来删除记录,语句如下:DELETE FROM table_name WHERE condition;七、排序和索引1. 排序查询结果如何对查询结果进行排序?答:可以使用ORDER BY子句对查询结果进行排序,语句如下:SELECT * FROM table_name ORDER BY column_name ASC/DESC;2. 创建索引为了提高查询效率,如何为表中的列创建索引?答:可以使用CREATE INDEX语句来创建索引,语句如下:CREATE INDEX index_name ON table_name (column_name);通过以上问题的探讨,我们了解了SQL语句在面试中常见的问题及答案。

sql,经典数据库题型附答案

sql,经典数据库题型附答案

sql,经典数据库题型附答案1.某电视购物公司采用面向对象技术实现商品销售计算机系统,基本需求如下:(1)公司提供多种类商品,每种商品通过委托订单来进行征订。

(2)公司下属多个分公司,每个分公司负责本地区委托订单的收录,打印收款凭证单。

(3)公司负责分类、统计各分公司送来的委托单,进行分类统计。

要求:按照上述模型建立对象模型。

(11分)2.有两个表表一AA种类T 库存总量SA 997B 1234表二BB种类T 出库数量SA 105A 213B 116B 211B 303用一条SQL语句求出A,B各剩下多少?答:select distinct AA.T kind ,AA.S-(select sum(BB.S) sumnum from BB group by T having AA.T=BB.T) stock from AA,BB where AA.T=BB.T3.一个订单表Orders中有包含日期字段,OrderDate,同一天的订单可能有多笔记录,把所有有订单的日期查出来,并按日期显示当日共有多少笔订单。

答:SELECT OrderDateCOUNT(*)FROM Orders4.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

答:select(case when A > B then A else B end) as E,(case when B > C then B else C end) as FfromtestTb5.有如下数据:2005-05-09 胜2005-05-09 胜2005-05-09 负2005-05-09 负2005-05-10 胜2005-05-10 负2005-05-10 负如果要生成如下结果,该如何写SQL语句?胜负2005-05-09 2 22005-05-10 1 2reate table #tmp(rqvarchar(10),shengfunchar(1))insert into #tmp values('2005-05-09','胜')insert into #tmp values('2005-05-09','胜')insert into #tmp values('2005-05-09','负')insert into #tmp values('2005-05-09','负')insert into #tmp values('2005-05-10','胜')insert into #tmp values('2005-05-10','负')insert into #tmp values('2005-05-10','负')select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq6.有三个表Tables,定义如下:TableA:code value01 3.302 2.3TableB:code value02 4.303 6.3TableC:code name01 xxx102 xxx203 xxx3要求:设计一个SQL查询语句,得到下列结果:result:code name value01 xxx1 3.302 xxx2 2.302 xxx2 4.303 xxx3 6.3答::select * from a union (select * from b union select * from c)7.请指出下面哪种实现方法的执行效率高,为什么(1)for(i=0;i<n;i++)< p="">{if(condition)DoSomething();elseDoSomething();}(2)if(conditon){for(i=0;i<n;i++)< p="">DoSomething();}else{for(i=0;i<n;i++)< p="">DoSomething();}答:理由:2效率高,1中把逻辑判断放在循环以内,打断了循环的流水线作业,编译器不能对循环做优化处理,降低了效率(理由:循环的时候没有中断,循环次数有差别,1每次循环都要判断。

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经典问题归类

sql经典问题归类1. 数据库连接问题:- 如何创建数据库连接?- 如何关闭数据库连接?- 如何测试数据库连接是否成功?2. 数据库查询问题:- 如何查询数据库中的数据?- 如何使用条件查询?- 如何使用排序查询?- 如何使用分组查询?- 如何使用聚合函数?3. 数据库插入、更新和删除问题:- 如何插入新的数据?- 如何更新已有的数据?- 如何删除数据?4. 数据库事务问题:- 什么是数据库事务?- 如何开始和提交事务?- 如何回滚事务?- 为什么要使用数据库事务?5. 数据库索引问题:- 什么是数据库索引?- 如何创建索引?- 如何使用索引进行查询优化?- 如何删除索引?6. 数据库表和字段设计问题:- 如何创建新的数据库表?- 如何添加新的字段?- 如何删除字段?- 如何修改字段的属性?7. 数据库备份和恢复问题:- 如何备份数据库?- 如何恢复数据库?- 如何导出数据库中的数据?- 如何导入数据到数据库?8. 数据库性能优化问题:- 如何优化数据库查询性能?- 如何优化数据库插入和更新操作?- 如何优化数据库表和字段设计?- 如何监测数据库性能?9. 数据库中的约束问题:- 什么是数据库约束?- 如何添加和删除约束?- 如何使用约束进行数据验证?- 常见的数据库约束有哪些?10. 数据库安全问题:- 如何对数据库进行授权和认证?- 如何限制用户访问权限?- 如何保护数据库中的敏感数据?- 如何防止数据库攻击和入侵?这些是一些常见的SQL经典问题,涵盖了许多关键的SQL操作和概念。

在实际应用中,可能还会遇到其他问题,但掌握了这些问题的解决方案,可以帮助你更好地理解和使用SQL数据库。

sql语句经典题

sql语句经典题

sql语句经典题SQL语句经典题指的是一些经典的SQL语句题目,通常用于测试和评估数据库开发和管理人员对SQL语法的掌握程度和应用能力。

这些题目通常涵盖了数据库的基本操作、查询、插入、更新、删除等方面的知识点,具有一定的难度和实用性。

以下是一些示例的SQL语句经典题:1.假设有一个名为"Employees"的表,其中包含"EmployeeID"、"FirstName"、"LastName"、"Department"和"Salary"等列,要求查询所有部门的平均工资。

2.假设有两个表"Employees"和"Departments",其中"Employees"表包含员工的个人信息,而"Departments"表包含部门的信息。

要求将这两个表通过"DepartmentID"连接起来,查询每个部门的员工数量。

3.假设有一个名为"Products"的表,其中包含"ProductID"、"ProductName"、"Category"和"Price"等列,要求按照价格升序和类别分组查询出每个类别下的最低价格。

总结来说,SQL语句经典题是指一些具有代表性、实用性和难度系数的SQL语句题目,用于测试和评估数据库开发和管理人员对SQL语法的掌握程度和应用能力。

这些题目通常涵盖了数据库的基本操作、查询、插入、更新、删除等方面的知识点,并且具有一定的难度和复杂性。

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 语句经典题目

sql 语句经典题目

sql 语句经典题目SQL(Structured Query Language)是用于管理关系数据库的标准编程语言。

以下是一些经典的 SQL 题目,可以帮助你提高 SQL 技能:1. 学生成绩查询假设有一个学生数据库,包括学生、课程和成绩等信息。

学生表为`students`,包含列 `id`, `name`, 和 `age`。

课程表为 `courses`,包含列`id`, `name`。

成绩表为 `scores`,包含列 `student_id`, `course_id`, 和`score`。

查询每个学生的姓名、年龄和所有课程的成绩。

2. 员工工资查询假设有一个员工数据库,包括员工、部门和工资等信息。

员工表为`employees`,包含列 `id`, `name`, 和 `department_id`。

部门表为`departments`,包含列 `id`, `name`。

工资表为 `salaries`,包含列`employee_id`, `salary`。

查询每个员工的姓名、所属部门和工资。

3. 商品销售统计假设有一个商品销售数据库,包括商品、销售和购买者等信息。

商品表为 `products`,包含列 `id`, `name`, 和 `price`。

销售表为 `sales`,包含列 `product_id`, `seller_id`, 和 `buyer_id`。

查询每种商品的名称、单价和销售数量,并按销售数量降序排列。

4. 电影评分查询假设有一个电影数据库,包括电影、导演和评分等信息。

电影表为`movies`,包含列 `id`, `title`, 和 `director_id`。

导演表为 `directors`,包含列 `id`, `name`。

评分表为 `ratings`,包含列 `movie_id`, 和 `rating`。

查询每个导演所执导的电影的评分,并计算每个导演的平均评分。

5. 博客文章分类假设有一个博客文章数据库,包括文章、类别和作者等信息。

sql经典50题建表语句

sql经典50题建表语句

sql经典50题建表语句1、题目:创建一个名为"employees"的表,包含"id"、"name"和"salary"三个字段。

sql:CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50),salary DECIMAL(10, 2));2、题目:创建一个名为"orders"的表,包含"order_id"、"customer_id"和"order_date"三个字段。

sql:CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE);3、题目:创建一个名为"products"的表,包含"product_id"、"product_name"和"price"三个字段。

sql:CREATE TABLE products (product_id INT PRIMARY KEY,product_name VARCHAR(50),price DECIMAL(10, 2));4、题目:创建一个名为"customers"的表,包含"customer_id"、"first_name"、"last_name"和"email"四个字段。

sql:CREATE TABLE customers (customer_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),email VARCHAR(100));5、题目:创建一个名为"addresses"的表,包含"address_id"、"street"、"city"和"state"四个字段。

一些高难度的SQL面试题

一些高难度的SQL面试题

1.根据如下表的查询结果,那么以下语句的结果是(知识点:not in/not exists null)以下的null代表真的null.SQL> select * from usertable;USERID USERNAME———–—————-1 user12 null3 user34 null5 user56 user6SQL> select * from usergrade;USERID USERNAME GRADE———- —————- ———-1 user1 902 null 807 user7 808 user8 90执行语句:select count(*) from usergrade where username not in (select username from usertable); select count(*) from usergrade g where not exists(select null from usertable t where erid=erid and ername=ername);结果为:语句1( 0 ) 语句2 ( 3 )A: 0 B:1 C:2 D:3 E:NULL2. 在以下的表的显示结果中,以下语句的执行结果是(知识点:in/exists rownum)SQL> select * from usertable;USERID USERNAME———–—————-1 user12 user23 user34 user45 user5SQL> select * from usergrade;USERNAME GRADE—————- ———-user9 90user8 80user7 80user2 90user1 100user1 80执行语句Select count(*) from usertable t1 where username in(select username from usergrade t2 where rownum <=1);Select count(*) from usertable t1 where exists(select ‘x’ from usergrade t2 where ername=ername and rownum <=1);以上语句的执行结果是:( ) ( )A: 0 B: 1 C: 2 D: 3根据以下的在不同会话与时间点的操作,判断结果是多少,其中时间T1<……原始表记录为;select * from emp;EMPNO DEPTNO SALARY—–————100 1 55101 1 50select * from dept;DEPTNO SUM_OF_SALARY——————-1 1052可以看到,现在因为还没有部门2的员工,所以总薪水为null,现在,有两个不同的用户(会话)在不同的时间点(按照特定的时间顺序)执行了一系列的操作,那么在其中或最后的结果为:time session 1 session2———–——————————- ———————————–T1 insert into empvalues(102,2,60)T2 update emp set deptno =2where empno=100T3 update dept set sum_of_salary =(select sum(salary) from empwhere emp.deptno=dept.deptno)where dept.deptno in(1,2);T4 update dept set sum_of_salary =(select sum(salary) from empwhere emp.deptno=dept.deptno)where dept.deptno in(1,2);T5 commit;T6 select sum(salary) from emp group by deptno;问题一:这里会话2的查询结果为:T7 commit;=======到这里为此,所有事务都已完成,所以以下查询与会话已没有关系========T8 select sum(salary) from emp group by deptno;问题二:这里查询结果为T9 select * from dept;问题三:这里查询的结果为问题一的结果( ) 问题二的结果是( ) 问题三的结果是( )A: B:—————- —————-1 50 1 502 60 2 55C: D:—————- —————-1 50 1 1152 115 2 50E: F:—————- —————-1 105 1 1102 60 2 55有表一的查询结果如下,该表为学生成绩表(知识点:关联更新)select id,grade from student_gradeID GRADE——–———–1 502 403 704 805 306 90表二为补考成绩表select id,grade from student_makeupID GRADE——–———–1 602 805 60现在有一个dba通过如下语句把补考成绩更新到成绩表中,并提交:update student_grade s set s.grade =(select t.grade from student_makeup twhere s.id=t.id);commit;请问之后查询:select GRADE from student_grade where id = 3;结果为:A: 0 B: 70 C: null D: 以上都不对根据以下的在不同会话与时间点的操作,判断结果是多少,其中时间T1<……session1 session2 ————————————–—————————————-T1 select count(*) from t;–显示结果(1000)条T2 delete from t where rownum <=100;T3 begindelete from t where rownum <=100; commit;end;/T4 truncate table t;T5 select count(*) from t;–这里显示的结果是多少A: 1000 B: 900 C: 800 D: 0。

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笔试I经典44题及答案解析~

SQL笔试I经典44题及答案解析~

SQL笔试I经典44题及答案解析~今天这篇文章,是关于44道经典SQL测试题:01建表语句createtableStudent(sidvarchar(10),snamevarchar(10),s agedatetime,ssexnvarchar(10));insertintoStudentvalues('01','赵雷','1990-01-01','男');insertintoStudentvalues('02','钱电','1990-12-21','男');insertintoStudentvalues('03','孙风','1990-05-20','男');insertintoStudentvalues('04','李云','1990-08-06','男');insertintoStudentvalues('05','周梅','1991-12-01','女');insertintoStudentvalues('06','吴兰','1992-03-01','女');insertintoStudentvalues('07','郑竹','1989-07-01','女');insertintoStudentvalues('08','王菊','1990-01-20','女');createtableCourse(cidvarchar(10),cnamevarchar(10),ti dvarchar(10));insertintoCoursevalues('01','语文','02');insertintoCoursevalues('02','数学','01');insertintoCoursevalues('03','英语','03');createtableTeacher(tidvarchar(10),tnamevarchar(10));insertintoTeachervalues('01','张三'); insertintoTeachervalues('02','李四'); insertintoTeachervalues('03','王五');createtableSC(sidvarchar(10),cidvarchar(10),scoredeci mal(18,1));insertintoSCvalues('01','01',80); insertintoSCvalues('01','02',90); insertintoSCvalues('01','03',99); insertintoSCvalues('02','01',70); insertintoSCvalues('02','02',60); insertintoSCvalues('02','03',80); insertintoSCvalues('03','01',80); insertintoSCvalues('03','02',80); insertintoSCvalues('03','03',80); insertintoSCvalues('04','01',50); insertintoSCvalues('04','02',30); insertintoSCvalues('04','03',20);insertintoSCvalues('05','01',76);insertintoSCvalues('05','02',87);insertintoSCvalues('06','01',31);insertintoSCvalues('06','03',34);insertintoSCvalues('07','02',89);insertintoSCvalues('07','03',98);02表结构预览--学生表Student(SId,Sname,Sage,Ssex)--SId学生编号,Sname学生姓名,Sage出生年月,Ssex学生性别--课程表Course(CId,Cname,TId)--CId课程编号,Cname课程名称,TId教师编号--教师表Teacher(TId,Tname)--TId教师编号,Tname教师姓名--成绩表SC(SId,CId,score)--SId学生编号,CId课程编号,score分数1.查询“01”课程比“02”课程成绩高的所有学生的学号;selectdistinctt1.sidassidfrom(select*fromscwherecid='01')t1leftjoin(select*fromscwherecid='02')t2ont1.sid=t2.sidwheret1.score>t2.score2.查询平均成绩大于60分的同学的学号和平均成绩;selectsid,avg(score)fromscgroupbysidhavingavg(score)>603.查询所有同学的学号、姓名、选课数、总成绩selectstudent.sidassid,sname,count(distinctcid)course_cnt,sum(score)astotal_scorefromstudentleftjoinsconstudent.sid=sc.sidgroupbysid,sname4.查询姓“李”的老师的个数;selectcount(distincttid)asteacher_cnt fromteacherwheretnamelike'李%'5.查询没学过“张三”老师课的同学的学号、姓名;selectsid,snamefromstudentwheresidnotin(selectsc.sidfromteacherleftjoincourseonteacher.tid=course.tidleftjoinsconcourse.cid=sc.cidwhereteacher.tname='张三')6.查询学过“01”并且也学过编号“02”课程的同学的学号、姓名;selectt.sidassid,snamefrom(selectsid,count(if(cid='01',score,null))ascount1,count(if(cid='02',score,null))ascount2fromscgroupbysidhavingcount(if(cid='01',score,null))>0andcount(if(cid ='02',score,null))>0)tleftjoinstudentont.sid=student.sid7.查询学过“张三”老师所教的课的同学的学号、姓名;selectstudent.sid,snamefrom(selectdistinctcidfromcourseleftjointeacheroncourse.tid=teacher.tidwhereteacher.tname='张三')courseleftjoinsconcourse.cid=sc.cidleftjoinstudentonsc.sid=student.sidgroupbystudent.sid,sname8.查询课程编号“01”的成绩比课程编号“02”课程低的所有同学的学号、姓名;selectt1.sid,snamefrom(selectdistinctt1.sidassidfrom。

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试题精选及答案

SQL试题精选及答案

SQL试题精选及答案1. 请写出SQL中创建新表的语句。

答案:CREATE TABLE 表名 (列1 类型, 列2 类型, ...);2. 如何在SQL中查询特定列的数据?答案:SELECT 列名 FROM 表名 WHERE 条件;3. 请解释SQL中的JOIN操作。

答案:JOIN操作用于将两个或多个表中的行组合起来,基于一个共同的列。

4. 写出SQL中更新表中数据的语句。

答案:UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2 WHERE 条件;5. 如何在SQL中删除表中的数据?答案:DELETE FROM 表名 WHERE 条件;6. 请描述SQL中的GROUP BY子句的作用。

答案:GROUP BY子句用于将取回的记录分组,可以与聚合函数一起使用,如COUNT、SUM等。

7. SQL中如何使用子查询?答案:子查询是嵌套在另一个查询中的查询,可以出现在SELECT、INSERT、UPDATE或DELETE语句中。

8. 请写出SQL中创建索引的语句。

答案:CREATE INDEX 索引名 ON 表名 (列名);9. 如何在SQL中使用事务?答案:可以使用BEGIN TRANSACTION开始事务,然后执行一系列操作,最后使用COMMIT提交事务或ROLLBACK回滚事务。

10. 请解释SQL中的主键和外键。

答案:主键是表中用来唯一标识每行数据的列或列组合,而外键是一个表中的列或列组合,它在另一个表中作为主键。

11. SQL中如何进行数据排序?答案:使用ORDER BY子句,如SELECT * FROM 表名 ORDER BY 列名ASC 或 DESC。

12. 如何在SQL中使用聚合函数?答案:聚合函数如SUM、COUNT、AVG等,可以与GROUP BY子句一起使用,对数据进行汇总。

13. 请写出SQL中插入数据的语句。

答案:INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);14. 请解释SQL中的视图。

leetcodesql题经典70

leetcodesql题经典70

LeetCode是一个上线编程学习评台,提供了大量的编程题目,其中包括了SQL相关的题目。

SQL是结构化查询语言的简称,是一种专门用来与数据库交互的语言,对于数据分析师、数据工程师、后端开发工程师等职业来说,掌握SQL是十分重要的。

在LeetCode上,SQL题目的难度从简单到困难不等,包括了分类汇总、数据分析、查询、连接等方面的题目,通过这些题目的练习,可以帮助我们更加熟练地掌握SQL的应用。

在LeetCode中,经典的SQL题目有很多,但是其中有一些题目是非常常见且经典的,下面就来介绍一下LeetCode上经典的70道SQL 题目。

1. 问题一在一个表中查找最大的N个数```sqlselect distinct Salaryfrom Employeeorder by Salary desclimit N;```2. 问题二查找重复的电流信箱```sqlselect Em本人lfrom Persongroup by Em本人lhaving count(Em本人l) > 1;```3. 问题三查找员工工资超过其经理的员工```sqlselect as Employeefrom Employee as e1, Employee as e2where e1.ManagerId = e2.Id and e1.Salary > e2.Salary; ```4. 问题四从不订购的客户```sqlselect as Customersfrom Customers as cleft join Orders as oon c.Id = o.CustomerIdwhere o.Id is null;```5. 问题五超过5名学生的课```sqlselect classfrom coursesgroup by classhaving count(distinct student) >= 5; ```6. 问题六求第N高薪水```sqlselect distinct Salaryfrom Employeeorder by Salary desclimit N-1,1;```7. 问题七大的国家```sqlselect name, population, areafrom Worldwhere area > 3000000 or population > 25000000;```8. 问题八组合两个表```sqlselect Person.FirstName, stName, Address.City, Address.Statefrom Personleft join Address on Person.PersonId = Address.PersonId; ```9. 问题九超过经理收入的员工```sqlselect as Employeefrom Employee as e1, Employee as e2where e1.ManagerId = e2.Id and e1.Salary > e2.Salary; ```10. 问题十等级排名```sqlselect Score,dense_rank() over(order by Score desc) as 'Rank'from Scores;```11. 问题十一部门工资最高的员工```sqlselect as Department, as Employee, e.Salary from Employee as ejoin Department as d on e.DepartmentId = d.Idwhere (e.DepartmentId, e.Salary) in (select DepartmentId, max(Salary) from Employee group by DepartmentId);```12. 问题十二交换工资```sqlupdate salaryset sex =(casewhen sex = 'm' then 'f'else 'm'end);```13. 问题十三部门工资前三高的员工```sqlselect as Department, as Employee, e.Salary from Employee as ejoin Department as d on e.DepartmentId = d.Idwhere (e.DepartmentId, e.Salary) in(select DepartmentId, Salaryfrom(select DepartmentId, Salary, dense_rank() over (partition by DepartmentId order by Salary desc) as rfrom Employee) as twhere r <= 3);```14. 问题十四上升温度```sqlselect a.Id as Idfrom Weather as a, Weather as bwhere a.Temperature > b.Temperature andto_days(a.RecordDate) - to_days(b.Recorddate) = 1; ```15. 问题十五第二高的薪水```sqlSELECT(SELECT DISTINCTSalaryFROMEmployeeORDER BY Salary DESCLIMIT 1 OFFSET 1) AS SecondHighestSalary; ```......依此类推,LeetCode上SQL题目非常丰富,覆盖了基本的SQL语法和常见的应用场景。

leetcodesql题经典70

leetcodesql题经典70

leetcodesql题经典70LeetCode SQL题:经典70在本篇文章中,我们将探讨LeetCode上的SQL题目,特别关注经典的70道题目。

通过详细的分析和解答,我们将帮助您更好地理解和掌握SQL语言的应用。

以下是该题目列表和相应的解答。

1. 题目:查找两个表的交集题目描述:给定两个表,Employee和Department,编写一个SQL查询来查找在这两个表中都存在的员工姓名。

表Employee的列有:Id, Name, Salary, DepartmentId表Department的列有:Id, Name解答:```SELECT FROM EmployeeINNER JOIN Department ON Employee.DepartmentId = Department.Id;```2. 题目:查找部门的最高平均工资题目描述:给定一个表,Employee,含有员工的信息(Id, Name, Salary, DepartmentId),编写一个SQL查询来查找每个部门的平均工资,并只返回最高的那些部门。

表Employee的列有:Id, Name, Salary, DepartmentId解答:```SELECT DepartmentId, AVG(Salary) AS AverageSalaryFROM EmployeeGROUP BY DepartmentIdHAVING AVG(Salary) = (SELECT MAX(AverageSalary) FROM(SELECT DepartmentId, AVG(Salary) AS AverageSalaryFROM EmployeeGROUP BY DepartmentId) AS T);```3. 题目:查找连续出现的数字题目描述:给定一个表,Logs,它包含了一个数字的列Id。

写一个SQL查询来查找所有重复出现数字的Id。

力扣困难的sql题目

力扣困难的sql题目

力扣困难的sql题目力扣(LeetCode)上有很多困难的 SQL 题目,以下是其中一些:1. 第 126 题:营业额最高的前 n 家店面(Easy)题目描述:给定一个包含 n 个商业店面信息的数组,每个商业店面有 id、business_name 和 revenue 三列。

编写一个SQL 查询语句,找出这些商业店面中,营业额最高的前n 家店面。

要求:返回的查询结果应该包含商业店面的 id、business_name 和 revenue 三列。

示例:输入:```sql表格:stores+-+++id business_name revenue +-+++1 Store A 100002 Store B 150003 Store C 200004 Store D 250005 Store E 30000+-+++n = 3```输出:```sql+-+++id business_name revenue +-+++5 Store E 300004 Store D 250003 Store C 20000+-+++```解题思路:可以使用 ORDER BY 子句对 revenue 进行降序排序,然后使用LIMIT 子句取出前 n 个记录。

2. 第 189 题:最高的建筑物(Medium)题目描述:给定一个包含n 个建筑物信息的数组,每个建筑物有id、building_name、floor 等列。

编写一个 SQL 查询语句,找出这些建筑物中楼层最高的那一个。

如果存在多个楼层最高的建筑物,则返回任意一个。

要求:返回的查询结果应该包含建筑物的 id、building_name 和 floor 三列。

示例:输入:表格:buildings+-+++id building_name floor+-+++1 Building A 102 Building B 53 Building C 15+-+++输出:+-+++id building_name floor +-+++3 Building C 15+-+++。

比较有难度的SQL笔试

比较有难度的SQL笔试

Student(SID, Sname, Sage, Ssex) 学生表Course(CID, Cname, TID) 课程表SC(SID, CID, score) 成绩表Teacher(TID, Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.SID from (select Sid,score from SC where CID='001') a,(select Sid,scorefrom SC where CID='002') bwhere a.score>b.score and a.Sid=b.Sid;2、查询平均成绩大于60分的同学的学号和平均成绩;select SID,avg(score)from scgroup by SID having avg(score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;select Student.SID,Student.Sname,count(SC.CID),sum(score)from Student left Outer join SC on Student.SID=SC.SIDgroup by Student.SID,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;select Student.SID,Student.Snamefrom Studentwhere SID not in (select distinct(SC.SID) from SC,Course,Teacherwhere SC.CID=Course.CID and Teacher.TID=Course.TID and Teacher.Tname='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.SID,Student.Snamefrom Student,SCwhere Student.SID=SC.SID and SC.CID='001'and exists(Select * from SC as SC_2 where SC_2.SID=SC.SID and SC_2.CID='002');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select SID,Snamefrom Studentwhere SID in (select SID from SC ,Course ,Teacherwhere SC.CID=Course.CID and Teacher.TID=Course.TID and Teacher.Tname='叶平'group by SID having count(SC.CID)=(select count(CID) from Course,Teacherwhere Teacher.TID=Course.TID and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select SID,Sname from (select Student.SID,Student.Sname,score ,(select score from SC SC_2 whereSC_2.SID=Student.SID and SC_2.CID='002') score2from Student,SC where Student.SID=SC.SID and CID='001') S_2 where score2 <score;9、查询所有课程成绩小于60分的同学的学号、姓名;select SID,Snamefrom Studentwhere SID not in (select Student.SID from Student,SC where S.SID=SC.SID and score>60);10、查询没有学全所有课的同学的学号、姓名;select Student.SID,Student.Snamefrom Student,SCwhere Student.SID=SC.SID group by Student.SID,Student.Sname having count(CID) <(select count(CID) from Course);11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select SID,Sname from Student,SC where Student.SID=SC.SID and CID in select CID from SC where SID='1001';12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct SC.SID,Snamefrom Student,SCwhere Student.SID=SC.SID and CID in (select CID from SC where SID='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.CID=SC.CID ) from Course,Teacher where Course.CID=SC.CID and Course.TID=Teacher.TID and Teacher.Tname='叶平');14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select SID from SC where CID in (select CID from SC where SID='1002')group by SID having count(*)=(select count(*) from SC where SID='1002');15、删除学习“叶平”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.CID=SC.CID and Course.TID= Teacher.TID and Tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;Insert SC select SID,'002',(Select avg(score)from SC where CID='002') from Student where SID not in (Select SID from SC where CID='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT SID as 学生ID,(SELECT score FROM SC WHERE SC.SID=t.SID AND CID='004') AS 数据库,(SELECT score FROM SC WHERE SC.SID=t.SID AND CID='001') AS 企业管理,(SELECT score FROM SC WHERE SC.SID=t.SID AND CID='006') AS 英语,COUNT(*) AS 有效课程数, A VG(t.score) AS 平均成绩FROM SC AS tGROUP BY SIDORDER BY avg(t.score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT L.CID As 课程ID,L.score AS 最高分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.CID = R.CID andL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.CID = IL.CID and IM.SID=IL.SIDGROUP BY IL.CID)ANDR.Score = (SELECT MIN(IR.score)FROM SC AS IRWHERE R.CID = IR.CIDGROUP BY IR.CID);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.CID AS 课程号,max(ame)AS 课程名,isnull(A VG(score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM SC T,Coursewhere t.CID=course.CIDGROUP BY t.CIDORDER 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 CID ='001' THEN score ELSE 0 END)/SUM(CASE CID WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN CID = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN CID = '002' THEN score ELSE 0 END)/SUM(CASE CID WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN CID = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN CID = '003' THEN score ELSE 0 END)/SUM(CASE CID WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN CID = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID = '003' THEN 1 ELSE 0 END) AS UML及格百分数,SUM(CASE WHEN CID = '004' THEN score ELSE 0 END)/SUM(CASE CID WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN CID = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN CID= '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM SC21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.TID) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.CID AS 课程ID,MAX(ame) AS 课程名称,A VG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere T.CID=C.CID and C.TID=Z.TIDGROUP BY C.CIDORDER BY A VG(Score) DESC22、查询如下课程成绩第3 名到第6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3SC.SID 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.SID = T1.SID AND T1.CID = '001'LEFT JOIN SC AS T2ON SC.SID = T2.SID AND T2.CID = '002'LEFT JOIN SC AS T3ON SC.SID = T3.SID AND T3.CID = '003'LEFT JOIN SC AS T4ON SC.SID = T4.SID AND T4.CID = '004'WHERE student.SID=SC.SID 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.SID = T1.SID AND T1.CID = 'k1'LEFT JOIN sc AS T2ON sc.SID = T2.SID AND T2.CID = 'k2'LEFT JOIN sc AS T3ON sc.SID = T3.SID AND T3.CID = 'k3'LEFT JOIN sc AS T4ON sc.SID = T4.SID AND T4.CID = 'k4'ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT SC.CID 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.CID=Course.CIDGROUP BY SC.CID,Cname;24、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT SID,A VG(score) AS 平均成绩FROM SCGROUP BY SID) AS T1WHERE 平均成绩> T2.平均成绩) as 名次,SID as 学生学号,平均成绩FROM (SELECT SID,A VG(score) 平均成绩FROM SCGROUP BY SID) AS T2ORDER BY 平均成绩desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.SID as 学生ID,t1.CID as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 3 scoreFROM SCWHERE t1.CID= CIDORDER BY score DESC)ORDER BY t1.CID;26、查询每门课程被选修的学生数select Cid,count(SID) from sc group by CID;27、查询出只选修了一门课程的全部学生的学号和姓名select SC.SID,Student.Sname,count(CID) AS 选课数from SC ,Studentwhere SC.SID=Student.SID group by SC.SID ,Student.Sname having count(CID)=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 CID,Avg(score) from SC group by CID order by Avg(score),CID DESC ;33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select Sname,SC.SID ,avg(score)from Student,SCwhere Student.SID=SC.SID group by SC.SID,Sname having avg(score)>85;34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.SID=Student.SID and SC.CID=Course.CID and ame='数据库'and score <60;35、查询所有学生的选课情况;SELECT SC.SID,SC.CID,Sname,CnameFROM SC,Student,Coursewhere SC.SID=Student.SID and SC.CID=Course.CID ;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;SELECT distinct student.SID,student.Sname,SC.CID,SC.scoreFROM student,ScWHERE SC.score>=70 AND SC.SID=student.SID;37、查询不及格的课程,并按课程号从大到小排列select Cid from sc where scor e <60 order by CID ;38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;select SC.SID,Student.Sname from SC,Student where SC.SID=Student.SID and Score>80 and CID='003';39、求选了课程的学生人数select count(*) from sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩select Student.Sname,scorefrom Student,SC,CourseC,Teacherwhere Student.SID=SC.SID and SC.CID=C.CID and C.TID=Teacher.TID and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where CID=C.CID );41、查询各个课程及相应的选修人数select count(*) from sc group by CID;42、查询不同课程成绩相同的学生的学号、课程号、学生成绩select distinct A.SID,B.score from SC A ,SC B where A.Score=B.Score and A.CID <>B.CID ;43、查询每门功成绩最好的前两名SELECT t1.SID as 学生ID,t1.CID as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 scoreFROM SCWHERE t1.CID= CIDORDER BY score DESC)ORDER BY t1.CID;44、统计每门课程的学生选修人数(超过10人的课程才统计)。

sql语句题目

sql语句题目

sql语句题目嘿,朋友们!咱今儿就来聊聊 SQL 语句这档子事儿。

你知道吗,SQL 语句就像是一把神奇的钥匙,能打开数据库那扇神秘的大门!比如说,当你想要从一个庞大的数据库中找出特定的信息,就像是在一堆宝藏中寻找那颗最闪亮的宝石,SQL 语句就能帮你精准定位。

“哎呀,那 SQL 语句很难学吧?”有人可能会这么问。

嘿,这可不一定哦!就像学骑自行车,一开始可能会摇摇晃晃,但只要多练习,很快就能驾驭自如啦。

想象一下,你是一个数据侦探,SQL 语句就是你的破案工具。

你面对满是数据的“犯罪现场”,通过巧妙运用 SQL 语句,一点一点挖掘出真相。

比如你要找某个时间段内的交易记录,那可不就像在茫茫人海中找到特定的那个人一样刺激嘛!“那具体怎么用 SQL 语句呢?”别急呀!SELECT 语句就像是你的眼睛,让你看清你想要的数据;FROM 语句告诉你从哪个表开始找;WHERE 语句则像是一个筛选器,帮你过滤掉不需要的东西。

这不就跟你挑衣服一样嘛,先看有哪些衣服,然后根据自己的喜好和需求来挑选。

再来说说 JOIN 操作,这就像是把不同的拼图块拼在一起,形成一幅完整的画面。

有时候,数据分散在不同的表中,通过 JOIN 就能把它们关联起来,得到更全面的信息。

我自己在学习 SQL 语句的过程中,那也是充满了乐趣和挑战呀!有时候会为了写出一个复杂的查询语句而绞尽脑汁,但当看到结果完美呈现的时候,那种成就感简直爆棚!总之,SQL 语句绝对不是什么洪水猛兽,只要你用心去学,就一定能掌握它。

它能为你打开数据世界的大门,让你在数据的海洋中畅游无阻。

所以,别再犹豫啦,赶紧去和 SQL 语句来一场奇妙的邂逅吧!我的观点就是,SQL 语句很重要,值得我们花费时间和精力去学习和掌握它。

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

1.找出工资最高的员工。

2.部门中工资最高的人的名单
3.求部门的平均工资的等级
4.不用组函数求工资最高的人的信息。

5.部门工资平均的等级。

6.找出那些人不是经理
7.找出员工和他的领导
8.部门平均工资最高的部门的编号。

9.部门平均工资最高的部门的名称
10.比员工最高工资还高的经理
--select * from emp where sal =(select max(sal) from emp)
--select * from emp where sal in( select deptno,max(sal) from emp group by deptno)
/*
select * from emp e join
(select deptno,max(sal) maxsal from emp group by deptno)t
on (e.deptno=t.deptno and e.sal=t.maxsal)
*/
/*
select t.deptno ,s.grade from salgrade s join
(select deptno,avg(sal) avgsal from emp group by deptno) t
on ( t.avgsal between s.losal and s.hisal )
*/
select deptno,avg(grade) from
(
select e.deptno ,s.grade from emp e
join salgrade s on (e.sal between s.losal and s.hisal)
)
group by deptno
*/
--select * from emp where empno not in (select mgr from emp where mgr is not null)
--select w.ename , m.ename from emp w join emp m on (w.mgr=m.empno)
/*
select dname from dept where deptno=(
select deptno from (select deptno,avg(sal) avgsal from emp group by deptno) where avgsal=
(
/*
select max(avgsal) from
(
select deptno,avg(sal) avgsal from emp group by deptno
)
)
---select max(avg(sal)) from emp group by deptno
)
select * from (
select * from emp where empno in (select mgr from emp)
) where sal >(
select max(sal) from
select * from emp where empno not in (select mgr from emp where mgr is not null)
)
)
*/
select * from emp where sal not in
(
select e.sal from emp e join
emp e1
on(e.sal<e1.sal)
)。

相关文档
最新文档