【Sql】经典sql语句
参考网页:https://www.cnblogs.com/qixuejia/p/3637735.html
1./**查询课程1比课程2,成绩高的学生学号
1.分析这些元素都在一个表里,但是上下两条记录,是无法比较的,所以需要将他们自连接,到一个表
2.课程1为一张表,课程2为一张表,将他们按学号相同拼起来,就可以进行比较了。
**/
select a.s# from
(select s#,score from sc where c# =1)a ,
(select s#,score from sc where c#=2)b
where a.s#=b.s# and a.score>b.score;
/**用left join会将所有记录查询出来,如果右表的记录不存在,则置为null
**/
select a.s#, a.score,b.score from
(select s#,score from sc where c# =1)a left join
(select s#,score from sc where c#=2)b
on a.s#=b.s# and a.score>b.score
where b.score is not null;
2./**查询平均成绩大于60分的学生学号,平均成绩
1.这在一个表里即可以查询到
2.按学号分组,查询平均成绩即可
**/
select s#,AVG(score)as avg
from sc
group by s#
having AVG(score)>60;
3./**查询全校学生的学号,姓名,选课数,总成绩
1.group by 里的内容,必须出现在select后,而聚合函数里的内容,不需要出现在group by后
2.聚合函数的列名为空,可以用as赋予一个别名
**/
select sc.s#,student.sname,COUNT(sc.c#) as 课程数,SUM(score) as 总成绩
from sc,student
where sc.s#=student.s#
group by sc.s#,sname;
4./**查询姓周的老师的个数
**/
select COUNT(*) from teacher
where tname like '周%';
5./**查询没有学过叶平老师的课的同学的学号,姓名
1.分析字段涉及到4个表
2.主要的逻辑在sc表,将course表,teacher表用他们相同的字段,拼起来
3.当teacher=叶平老师时,即代表改行的学生是学过叶平老师的课的
4.再将学号进行去重,得到学过叶平老师课的学号
5.学生表里的学号,不在上面的记录里,则表示没有学过叶平老师的课
**/
select s#,sname from student
where s# not in
(select distinct sc.s# from sc,teacher,course
where sc.c# = course.c# and course.t#=teacher.t# and tname = '叶平')
6./**查询学过课程1,也学过课程2的学生学号,姓名
1.查询出学过课程1的所有学号
2.查询出学过课程2的所有学号
3.如果学号同时在这两个结果集了,则说明既学过1,也学过2
**/
select s#,sname
from student
where s# in
(select s# from sc where c#=1)and
s# in
(select s# from sc where c#=2);select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# and SC.C#='001'
and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');
7./**查询出所有学过叶平老师的课程的同学的学号,姓名
1.查询出叶平老师教过的课程数
2.查询出学过叶平老师的课的同学学号
3.按学号分组,得到数量
4.如果两者的值一样,则说明该同学学过叶平老师所教的所有课程
**/
select s#,sname from student
where s# in(
select sc.S# from SC ,Course ,Teacher
where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平'
group by sc.s#
having COUNT(*)=
(select COUNT(*)from
course,teacher
where course.t#=teacher.t# and teacher.tname='叶平')
);
8./**查询出所有成绩小于60分的同学的学号,姓名
**/
select s#,sname from student
where s# not in
(select s# from school.dbo.sc where score>=80);
9./**查询没有学全所有课程的
**/
select s# from sc
group by s#
having count(*)<
(select count(*)from course);
10./**查询至少有一门课程与学号1的同学所学的相同的学号和姓名
**/
select distinct student.s# ,sname
from student,sc where
student.s# = sc.s# and
c# in(
select c# from sc
where s#=1
)
【Sql】经典sql语句的更多相关文章
- oracle 常用sql 经典sql函数使用 sql语法
各种树操作, 用来查询表中带有子父节点的信息 Oracle 树操作(select-start with-connect by-prior) select m.org_id from sm_organ ...
- 经典SQL语句大全以及50个常用的sql语句
经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...
- olcal数据库经典SQL语句大全
基于olacle自带的表 第一篇 -----1.列出至少有一个员工的所有部门. oracle 一些经典sql第一篇 --------1.列出至少有一个员工的所有部门.--------- SQL> ...
- 经典sql语句
经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...
- 一条语句简单解决“每个Y的最新X”的SQL经典问题
"每个Y的最新X"是一个经典的SQL问题,工作中经常碰到.当然不是"按Y分组求最新的X值"那么简单,要求最新X的那条记录或主键ID.用一条SQL语句可以简单的解 ...
- [转] - 经典SQL语句大全
经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...
- (转)经典SQL查询语句大全
(转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...
- SQL Server-基础-经典SQL语句
经典SQL语句 基础 .说明:创建数据库 CREATE DATABASE database-name .说明:删除数据库 drop database dbname .说明:备份sql server - ...
- 经典SQL语句--很全面
经典SQL语句--很全面 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql ...
- SQL之经典SQL语句大全
经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...
随机推荐
- linux系统644、755、777权限详解
在linux系统中644.755.777三种权限是非常重要的一些权限了,下面我来详细的介绍644.755.777三种权限的使用,希望对各位有帮助. 常用的linux文件权限:444 r--r--r-- ...
- iPhoneX快速适配,简单到你想哭。
研究了5个小时的iPhoneX适配. 从catalog,storyboard,safearea等一系列文章中发现.如果我们想完全撑满全屏.那直接建一个storyboard就好了.但撑满全屏后,流海就是 ...
- Eclipse安装fatjar(不用自己下载fatjar包)
.安装Eclipse-jee-luna-SR2-win32-x86_64版本的插件支持 方法如下: Help -> Install New Software... -> Work with ...
- 记mysql中时间相关的一个奇怪问题
发现mysql中类型为时间的字段,在查询时显示的时间是什么是依赖于客户端的,不同的客户端查同一个时间,可能在客户端显示的时间是不一样的.至于这个在哪里配置,以及服务端如何依据这个配置为客户端返回结果, ...
- Delphi7使用一段时间后抽风提示注册
今天在单位用电脑接自己的移动硬盘,一打开资源管理器就卡死,删除硬盘总是提示用程序在使用,反复试了几次,老样子.很是窝火.干脆直接关机电脑,桌面上还有开着的Delphi编译器,重新开机!开机后一打开编译 ...
- 时间序列预测——Tensorflow.Keras.LSTM
1.测试数据下载 https://datamarket.com/data/set/22w6/portland-oregon-average-monthly-bus-ridership-100-janu ...
- vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题
vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题 今天下载了一个开源项目一直运行不了,折腾了半天才找到问题所在,config ...
- 连接redis错误:ERR Client sent AUTH, but no password is set
问题原因:没有设置redis的密码 解决:命令行进入Redis的文件夹: D:\Redis-x64-3.2.100>redis-cli.exe 查看是否设置了密码: 127.0.0.1:6379 ...
- hisi 生产固件生成
生产需求,需要16M bin 文件 给 spi flash烧写 一般有三种方式 1.把文件都导入flash,拆了flash 用烧录器读取,比较可靠! 2.编译时候合并,需要在空余地方填充0xFF拼成1 ...
- 一道简单树形dp
题意:给定一棵树,从中选出一些节点,使得不成父子关系的节点对数最多.问这个最大值是多少. 思路:首先既然是给定一颗树,先要选择合适的数据结构,来保存这颗树.由于这颗树只关心根节点在哪里,所以只需要用一 ...