SQL实战:子查询的应用实例
2017-02-28 17:17
288 查看
本实例设计到的SQL语法包括:
创建成绩表:
插入数据:
问题1: 用一条SQL 语句,查询出每门课都大于80分的学生姓名.
答:
问题2: 删除除id不同, 其他都相同的冗余信息。
答:
因为MySQL语法规定,在同一语句中,不能先SELECT出同一表中的某些值,再UPDATE这个表(You can NOT specify target TABLE ‘score’ FOR UPDATE IN FROM clause。),因此需要写两个子查询。
用NOT IN或NOT EXISTS都可以达到目的,MIN或MAX函数确定保留冗余数据中最小或最大的那一条数据。
select , delete, distict, not exists, not in, group by, having, min, max
创建成绩表:
CREATE TABLE score( id INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(100) NOT NULL, course VARCHAR(40) NOT NULL, score INT, PRIMARY KEY ( id ) );
插入数据:
INSERT INTO score (NAME,course,score) VALUES ('张三','语文','81'), ('张三','数学','75'), ('李四','语文','56'), ('李四','数学','76'), ('李四','数学','76'), ('王五','语文','89'), ('王五','语文','89'), ('马六','数学','99') ;
问题1: 用一条SQL 语句,查询出每门课都大于80分的学生姓名.
答:
1. SELECT DISTINCT NAME FROM score s WHERE NOT EXISTS (SELECT 1 FROM score si WHERE si.score<80 AND si.name=s.name); 2. SELECT DISTINCT NAME FROM score WHERE NAME NOT IN (SELECT DISTINCT NAME FROM score WHERE score<=80); 3. SELECT NAME FROM score GROUP BY NAME HAVING MIN(score)>80;
问题2: 删除除id不同, 其他都相同的冗余信息。
答:
因为MySQL语法规定,在同一语句中,不能先SELECT出同一表中的某些值,再UPDATE这个表(You can NOT specify target TABLE ‘score’ FOR UPDATE IN FROM clause。),因此需要写两个子查询。
用NOT IN或NOT EXISTS都可以达到目的,MIN或MAX函数确定保留冗余数据中最小或最大的那一条数据。
1. DELETE FROM score WHERE id NOT IN ( SELECT id FROM (SELECT MIN(si.id) FROM score si GROUP BY si.name,si.course,si.score) ss ) ; 2. DELETE s FROM score s WHERE NOT EXISTS ( SELECT idi FROM (SELECT MAX(si.id) idi FROM score si GROUP BY si.name,si.course,si.score) ss WHERE s.id=ss.idi ) ;
相关文章推荐
- SQL 综合应用(1.创建临时表,为后续查询所用) 实例_(学生,课程表,选修表)
- spring多数据源的处理 mybatis实现跨库查询 实现Myibatis动态sql跨数据库的处理 Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样
- SQL查询朋友关系圈应用实例
- scala实战之SparkSQL应用实例(单表count和groupby多来源表join等)
- 元函数在SQL查询中应用实例分析【续上篇】
- SQL开发应用实例存储过程——日期格式化处理
- SQL查询连接实例(二)
- javascript实例--循环判断查询表单,构建SQL语句
- SQL语句实现跨Sql server数据库操作实例 - 查询远程SQL,本地SQL数据库与远程SQL的数据传递
- SQL应用--查询最大版本值
- XQuery查询语言及应用实例分析
- .Net+SQL Server企业应用性能优化笔记3——SQL查询语句
- XQuery查询语言及应用实例分析
- SQL Server 应用开发 --- SQL SERVER 2000 数据查询综合实例
- sql 异类查询应用[excel]
- SQLServer2005 XML在T-SQL查询中的典型应用
- SQL查询连接实例
- SQL语句学习手册实例版(本人整理,用来查询)
- 实战 Eclipse ,Jigloo, PostgreSQL,JDBC 开发数据库查询应用系统起步(转)
- 应用sql查询excel