SQL查询语法30例
学好SQL查询:无他,概手熟耳。
1. 基础表:
学生表:
老师表:
课程表:
成绩表:
2. 题目:
1、查询名字中含有"华"字的学生信息
select * from 学生 where sname like '%华%'
2、查询并统计同龄学生人数
select sage,count(sid) from 学生 group by sage
3、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
select cid,avg(Cscore) from 成绩 group by cid order by avg(Cscore),cid desc
4、按平均成绩从高到低显示所有学生的平均成绩
select sid,avg(Cscore) from 成绩 group by sid order by avg(Cscore) desc
5、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分
select sc.cid 课程ID, c.cname 课程名, max(sc.Cscore) 最高分,min(sc.Cscore) 最低分,avg(sc.Cscore) 平均分 from 成绩 sc left join 课程 c on sc.cid=c.cid
group by sc.cid
6、按各科平均成绩从低到高顺序排序
select cid, avg(Cscore) from 成绩 group by cid order by avg(Cscore) desc
7、查询学生的总成绩并进行排名
select sid 学号,sum(Cscore) 总分 from 成绩 group by sid order by sum(Cscore) desc
8、检索至少选修两门课程的学生学号
select sid from 成绩 group by sid having count(cid) > 1
9、查询每门课程被选修的学生数
select cid,count(cid) from 成绩 group by cid
10、查询不及格的课程,并按课程号从大到小排列
select * from 成绩 group by cid having cscore < 60 order by cid desc
11、查询出只选修了一门课程的全部学生的学号和姓名
select sid,sname from 学生 where sid in(
select sid from 成绩 group by sid having count(sid) = 1
)
12、查询课程编号为"01"且课程成绩在60分以上的学生的学号和姓名;
select sid,sname from 学生 where sid in(
select sid from 成绩 where
cid = 'c01'
and Cscore>=60
)
13、查询“01”课程比“02”课程成绩高的所有学生的学号;
select sc1.sid from 成绩 sc1, 成绩 sc2 where
sc1.sid = sc2.sid
and sc1.cid = 'c01'
and sc2.cid = 'c02'
and sc1.cscore > sc2.Cscore
14、查询平均成绩大于60分的同学的学号和平均成绩;
select sid, avg(Cscore) from 成绩 group by sid having avg(Cscore) > 60
15、查询姓“李”的老师的个数;
select count(1) from 教师 where Tname like '李%'
16、查询没学过“何倩文”老师课的同学的学号、姓名;
select sid, sname from 学生 where sid not in(
select sid from 成绩 where cid =(
select cid from 课程 where Cteacher = '何倩文'
)
)
17、查询学过编号“01”并且也学过编号“02”课程的同学的学号、姓名;
select sid, sname from 学生 where sid in(
select sc1.sid from 成绩 sc1 where sid in(
select sc2.sid from 成绩 sc2 where cid = 'c01'
)
and cid = 'c02'
)
或
select sid,sname from 学生 where sid in(
select sc1.sid from 成绩 sc1,成绩 sc2 where
sc1.sid=sc2.sid
and sc1.cid = 'c01'
and sc2.cid = 'c02'
)
18、查询没学过"李征辉"老师讲授的任一门课程的学生姓名
select sid,sname from 学生 where sid not in(
select distinct(sid) from 成绩 where cid in (
select cid from 课程 where Cteacher = '李征辉'
)
)
19、查询所有同学的学号、姓名、选课数、总成绩
select sc.sid, s.sname, count(sc.cid), sum(Cscore) from 成绩 sc
left join 学生 s on sc.sid = s.sid
group by sc.sid
20、查询学过“张三”老师所教的课的同学的学号、姓名;
select sid, sname from 学生 where sid in(
select distinct(sc.sid) from 成绩 sc
left join 课程 c on sc.cid=c.cid where c.Cteacher = '李征辉'
) order by sid
21、查询课程编号“01”的成绩比课程编号“02”课程低的所有同学的学号、姓名;
select sid, sname from 学生 where sid in(
select sc1.sid from 成绩 sc1, 成绩 sc2 where
sc1.sid = sc2.sid
and sc1.cid = 'c01'
and sc2.cid = 'c02'
and sc1.Cscore < sc2.Cscore
)
22、查询所有课程成绩小于60分的同学的学号、姓名;
select sid, sname from 学生 where sid not in(
select distinct(sid) from 成绩 where cscore >= 60
) and sid in(
select sid from 成绩 group by sid having count(sid) != 0
)
或
select sid, sname from 学生 where sid not in(
select s.sid from 学生 s
left join 成绩 sc on s.sid=sc.sid where Cscore > 60 or Cscore is null
)
或
select sid, sname from 学生 where sid in(
select sc.sid from 成绩 sc group by sid having max(sc.Cscore)<60
)
23、查询没有学全所有课的同学的学号、姓名;
select s.sid, s.sname from 学生 s
left join 成绩 sc on s.sid=sc.sid
group by s.sid having count(s.sid) != (
select count(1) from 课程
)
24、查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名;
select sid, sname from 学生 where sid in(
select distinct(sid) from 成绩 where cid in (
select cid from 成绩 where sid = 's01'
) and sid != 's01'
)
或
select distinct(s.sid),sname from 学生 s
left join 成绩 sc on s.sid = sc.sid where sc.cid in(
select cid from 成绩 where sid = 's01'
)and s.sid != 's01'
25、查询和"01"号的同学学习的课程完全相同的其他同学的学号和姓名
select s.sid from 学生 s left join 成绩 sc on s.sid = sc.sid where sc.cid in(
select cid from 成绩 where sid = 's01'
) group by s.sid
having count(s.sid) =
(select count(cid) from 成绩 where sid='s01')
and s.sid != 's01'
26、把“成绩”表中“高磊”老师教的课的成绩都更改为此课程的平均成绩;
update 成绩 set Cscore = (
select avg(sc.Cscore) from 课程 c
left join 成绩 sc on c.cid = sc.cid where Cteacher = '高磊'
) where cid in (
select cid from 课程 where Cteacher = '高磊'
)
27、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
select s.sid, s.sname, avg(sc.Cscore) from 学生 s
left join 成绩 sc on s.sid = sc.sid where s.sid in(
select sid from 成绩 sc where Cscore < 60 group by sid having count(sid) > 2
)
28、检索"01"课程分数小于60,按分数降序排列的学生信息
select * from 学生 s left join 成绩 sc on s.sid=sc.sid where
sc.Cscore < 60
and sc.cid = 'c01'
order by sc.Cscore desc
29、查询不同老师所教不同课程平均分从高到低显示
select c.Cteacher,c.Cname, avg(sc.Cscore) from 成绩 sc
left join 课程 c on sc.cid=c.cid
group by sc.cid
order by avg(sc.Cscore) desc
30、查询选修“李征辉”老师所授课程的学生中,成绩最高的学生姓名及其成绩
select s.sname, max(sc.Cscore) from 学生 s
left join 成绩 sc on s.sid=sc.sid where sc.cid in (
select cid from 课程 where Cteacher = '李征辉'
)
SQL查询语法30例的更多相关文章
- MySQL进阶8 分页查询(limit) - 【SQL查询语法执行顺序及大致结构】- 子查询的3个经典案例
#进阶8 分页查询 /* 应用场景: 当要显示的数据,一页显示不全,需要分页提交sql请求 语法: select 查询列表 #7 from 表1 #执行顺序:#1 [join type join 表2 ...
- sql 查询最近30分钟或者自定义时间数据
) FROM dual; 30分钟或者自定义
- ThinkPHP 数据库操作(三) : 查询方法、查询语法、链式操作
查询方法 条件查询方法 where 方法 可以使用 where 方法进行 AND 条件查询: Db::table('think_user') ->where('name','like','%th ...
- Mysql常用30种SQL查询语句优化方法
出处:http://www.antscode.com/article/12deee70111da0c4.html 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使 ...
- MySQL 常用30种SQL查询语句优化方法
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- 提高SQL查询效率的30种方法
转载:提高SQL查询效率的30种方法 内容摘录如下: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中 ...
- SQL查询今天、昨天、7天内、30天【转】
SQL查询今天.昨天.7天内.30天 今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:sele ...
- MySQL 基本语法(1.表字段操作,2表记录管理 3.运算符管理4.SQL查询 5.约束6.索引
.表字段的操作 .语法:alter table 表名 执行动作; .添加字段(add) .添加到末尾 alter table 表名 add 字段名 数据类型; .添加到第一列 alter table ...
- SQL DATEDIFF语法及时间函数 Sql 查询当天、本周、本月记录
SQL DATEDIFF语法及时间函数 Sql 查询当天.本周.本月记录 转:http://blog.csdn.net/Json1204/article/details/7863801?locatio ...
随机推荐
- Spring Cloud第九篇 | 分布式服务跟踪Sleuth
本文是Spring Cloud专栏的第九篇文章,了解前八篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...
- .NET Core环境变量和用户秘钥实现开发中的数据安全
目录 一.注入 IConfiguration 二.从配置文件 appsettings.json 中获取环境变量 三.从项目中获取环境变量 四.用户秘钥设置环境变量 前言:有很多人将秘钥,数据库连接字符 ...
- Caffe源码-SyncedMemory类
SyncedMemory类简介 最近在阅读caffe源码,代码来自BVLC/caffe,基本是参照网络上比较推荐的 Blob-->Layer-->Net-->Solver 的顺序来分 ...
- Stm32使用串口空闲中断,基于队列来接收不定长、不定时数据
串口持续地接收不定长.不定时的数据,把每一帧数据缓存下来且灵活地利用内存空间,下面提供一种方式供参考.原理是利用串口空闲中断和DMA,每当对方发来一帧完整的数据后,串口接收开始空闲,触发中断,在中断处 ...
- 我如何通过K8S开发认证(CKAD)考试
题记:笔者最近经过3个多月的空余时间准备,终于通过了K8S开发认证(CKAD)的考试,在这里简单给大家分享一下经验. 一,先科普下CKAD 众所周知,Kubernetes在容器编排器大战中脱颖而出后, ...
- java之java.io.File的相关方法
java.io.File的使用. IO原理及流的分类. 文件流:FileInputStream.FileOutputStream.FileReader.FileWriter 缓存流:BufferedI ...
- 数据库性能提升利器—Mycat数据切分
一.前言 数据库是每个系统都不可缺少的东西,里面记录了系统各种数据资料.但是如今的数据膨胀的时代,数据库性能不能满足我们的需要了.所以我们要对数据库进行强化,就用到了Mycat. 二.何为数 ...
- 《Netty Zookeeper Redis 高并发实战》 图书简介
<Netty Zookeeper Redis 高并发实战> 图书简介 本书为 高并发社群 -- 疯狂创客圈 倾力编著, 高度剖析底层原理,深度解读面试难题 疯狂创客圈 Java 高并发[ ...
- P1983 车站分级 思维+拓扑排序
很久以前的一道暑假集训的题,忘了补. 感觉就是思维建图,加拓扑排序. 未停靠的火车站,必然比停靠的火车站等级低,就可以以此来建边,此处注意用vis来维护一下,一个起点和终点只建立一条边,因为不这样的话 ...
- MySql数据库之数据库基础命令
继续上篇博客所说到的,使用命令玩转MySql数据库. 在连接数据库时,我们需要确定数据库所在的服务器IP,用户名以及密码.当然,我们一般练习都会使用本地数据库,那么本地数据库的连接命令如下: mysq ...