【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 ...
随机推荐
- 小程序map组件默认层级最高,并且不能设置的解决方案
map组件默认在最上面,若要设置像ofo那样的按钮有两个方法,一是用控件设置,控件就是controls属性,控件只能显示图片,不能显示文字之类的.二是用cover-view组件,这个组件就是悬浮在一些 ...
- outlook2016用Exchange轻松绑定腾讯企业邮箱
系统版本:Win10 X64 1709 英文版 邮箱:Outlook2016 背景知识: 1.发送邮件均使用SMTP协议(SMTP 全称“Simple Mail Transfer Protocol”, ...
- string和int的相互转换方法
string转为int string str = "100000"; stringstream ss; ss << str; int i; ss >> i; ...
- Sysinternals Utilities
https://docs.microsoft.com/zh-cn/sysinternals/ Sysinternals 之前为Winternals公司提供的免费工具,Winternals原本是一间主力 ...
- n皇后问题——关于斜线的编号
题目大意:在n*n的棋盘中,放置n个皇后(同一行.同一列.同一斜线,只有一个皇后) 这道题是一道非常经典的dfs模板题,同一行.同一列的判断不是很难,但同一斜线有一定的难度,下面给出关于斜线编号的解决 ...
- Vue系列之 => 命名视图实现经典布局
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- poj3155 最大密度子图
求最大密度子图 记得在最后一次寻找的时候记得将进入的边放大那么一点点,这样有利于当每条边都满流的情况下会选择点 #include <iostream> #include <algor ...
- sitecore 数字化营销-path funnel
路径分析器是一个应用程序,允许您查看联系人在浏览网站时所采用的各种路径.您可以查看联系人在转换目标并与广告系列互动时所采用的路径,让您深入了解哪些路径为每次转化提供最佳参与价值,以及哪些路径效率较低且 ...
- shell中wait命令详解
wait命令介绍 wait [作业指示或进程号] 1.等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出状态状态.如果没有制定参数,则等待所有子进程的退出,其退出状态为0. 2.如果是s ...
- springboot使用hibernate validator校验
一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗长 每次要 ...