参考网页: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语句的更多相关文章

  1. oracle 常用sql 经典sql函数使用 sql语法

    各种树操作, 用来查询表中带有子父节点的信息 Oracle 树操作(select-start with-connect by-prior) select m.org_id from sm_organ ...

  2. 经典SQL语句大全以及50个常用的sql语句

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  3. olcal数据库经典SQL语句大全

    基于olacle自带的表 第一篇 -----1.列出至少有一个员工的所有部门. oracle 一些经典sql第一篇 --------1.列出至少有一个员工的所有部门.---------  SQL> ...

  4. 经典sql语句

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  5. 一条语句简单解决“每个Y的最新X”的SQL经典问题

    "每个Y的最新X"是一个经典的SQL问题,工作中经常碰到.当然不是"按Y分组求最新的X值"那么简单,要求最新X的那条记录或主键ID.用一条SQL语句可以简单的解 ...

  6. [转] - 经典SQL语句大全

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  7. (转)经典SQL查询语句大全

    (转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...

  8. SQL Server-基础-经典SQL语句

    经典SQL语句 基础 .说明:创建数据库 CREATE DATABASE database-name .说明:删除数据库 drop database dbname .说明:备份sql server - ...

  9. 经典SQL语句--很全面

    经典SQL语句--很全面   一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql ...

  10. SQL之经典SQL语句大全

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

随机推荐

  1. workman项目设置开机自启动

    https://blog.csdn.net/xxq929604980/article/details/78558317 http://man.linuxde.net/chkconfig 1.脚本编写 ...

  2. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请求参数 ...

  3. Python基础(七) python自带的三个装饰器

    说到装饰器,就不得不说python自带的三个装饰器: 1.@property   将某函数,做为属性使用 @property 修饰,就是将方法,变成一个属性来使用. class A(): @prope ...

  4. 安装archlinux的linux命令记录

    磁盘的分区:cfdisk 格式化分区:mkfs.ext4,mkswap,swapon 查看所有分区:lsblk /dev/sda 先挂载 / 分区:mount /dev/sda1 /mnt archl ...

  5. MTCNN试用

    检测工作想借用MTCNN里的48-net,源码来自CongWeilin Git 下下来就能跑,真是良心 进入pepare_data准备好数据以后进入48-net,目录下有一个pythonLayer.p ...

  6. IP通信基础学习第二周

    此周的课程学习应该算是我对此科目真正学校生涯的开始吧,尽管我对该科目仍感到很陌生. 课程一开头,老师就给我们简单的介绍了网络的定义.发展及其分类,重点讲了网络拓扑结构及其在局域网上具体的分层情况.该部 ...

  7. Docker Macvlan 介绍 or 工作原理

    Docker Macvlan Network Macvlan Network:属于Docker的网络驱动. Macvlan Network:Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识 ...

  8. 剑指offer(39)平衡二叉树

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题目分析 第一种方法: 正常思路,应该会获得节点的左子树和右子树的高度,然后比较高度差是否小于1. 可是这样有一个问题,就是节点重复遍历了,影 ...

  9. gitlab 迁移

    http://www.cnblogs.com/crysmile/p/9505527.html

  10. 剑指offer 01:二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...