基本sql查询语句练习
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
问题:
1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select
a.S#
from
(
select
s#,score
from
SC
where
C#=
'001'
) a,(
select
s#,score
from
SC
where
C#=
'002'
) b
where
a.score>b.score
and
a.s#=b.s#;
2、查询平均成绩大于60分的同学的学号和平均成绩;
select
S#,
avg
(score)
from
sc
group
by
S#
having
avg
(score) >60;
3、查询所有同学的学号、姓名、选课数、总成绩;
select
Student.S#,Student.Sname,
count
(SC.C#),
sum
(score)
from
Student
left
Outer
join
SC
on
Student.S#=SC.S#
group
by
Student.S#,Sname
4、查询姓“李”的老师的个数;
select
count
(
distinct
(Tname))
from
Teacher
where
Tname
like
'李%'
;
5、查询没学过“叶平”老师课的同学的学号、姓名;
select
Student.S#,Student.Sname
from
Student
where
S#
not
in
(
select
distinct
( SC.S#)
from
SC,Course,Teacher
where
SC.C#=Course.C#
and
Teacher.T#=Course.T#
and
Teacher.Tname=
'叶平'
);
6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
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、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
select
S#,Sname
from
Student
where
S#
in
(
select
S#
from
SC ,Course ,Teacher
where
SC.C#=Course.C#
and
Teacher.T#=Course.T#
and
Teacher.Tname=
'叶平'
group
by
S#
having
count
(SC.C#)=(
select
count
(C#)
from
Course,Teacher
where
Teacher.T#=Course.T#
and
Tname=
'叶平'
));
8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
Select
S#,Sname
from
(
select
Student.S#,Student.Sname,score ,(
select
score
from
SC SC_2
where
SC_2.S#=Student.S#
and
SC_2.C#=
'002'
) score2
from
Student,SC
where
Student.S#=SC.S#
and
C#=
'001'
) S_2
where
score2 <score;
9、查询所有课程成绩小于60分的同学的学号、姓名;
select
S#,Sname
from
Student
where
S#
not
in
(
select
Student.S#
from
Student,SC
where
S.S#=SC.S#
and
score>60);
10、查询没有学全所有课的同学的学号、姓名;
select
Student.S#,Student.Sname
from
Student,SC
where
Student.S#=SC.S#
group
by
Student.S#,Student.Sname
having
count
(C#) <(
select
count
(C#)
from
Course);
11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;
select
S#,Sname
from
Student,SC
where
Student.S#=SC.S#
and
C#
in
select
C#
from
SC
where
S#=
'1001'
;
12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;
select
distinct
SC.S#,Sname
from
Student,SC
where
Student.S#=SC.S#
and
C#
in
(
select
C#
from
SC
where
S#=
'001'
);
13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
update
SC
set
score=(
select
avg
(SC_2.score)
from
SC SC_2
where
SC_2.C#=SC.C# )
from
Course,Teacher
where
Course.C#=SC.C#
and
Course.T#=Teacher.T#
and
Teacher.Tname=
'叶平'
);
14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;
select
S#
from
SC
where
C#
in
(
select
C#
from
SC
where
S#=
'1002'
)
group
by
S#
having
count
(*)=(
select
count
(*)
from
SC
where
S#=
'1002'
);
15、删除学习“叶平”老师课的SC表记录;
Delect SC
from
course ,Teacher
where
Course.C#=SC.C#
and
Course.T#= Teacher.T#
and
Tname=
'叶平'
;
16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、
号课的平均成绩;
Insert
SC
select
S#,
'002'
,(
Select
avg
(score)
from
SC
where
C#=
'002'
)
from
Student
where
S#
not
in
(
Select
S#
from
SC
where
C#=
'002'
);
17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分
SELECT
S#
as
学生ID
,(
SELECT
score
FROM
SC
WHERE
SC.S#=t.S#
AND
C#=
'004'
)
AS
数据库
,(
SELECT
score
FROM
SC
WHERE
SC.S#=t.S#
AND
C#=
'001'
)
AS
企业管理
,(
SELECT
score
FROM
SC
WHERE
SC.S#=t.S#
AND
C#=
'006'
)
AS
英语
,
COUNT
(*)
AS
有效课程数,
AVG
(t.score)
AS
平均成绩
FROM
SC
AS
t
GROUP
BY
S#
ORDER
BY
avg
(t.score)
18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
SELECT
L.C#
As
课程ID,L.score
AS
最高分,R.score
AS
最低分
FROM
SC L ,SC
AS
R
WHERE
L.C# = R.C#
and
L.score = (
SELECT
MAX
(IL.score)
FROM
SC
AS
IL,Student
AS
IM
WHERE
L.C# = IL.C#
and
IM.S#=IL.S#
GROUP
BY
IL.C#)
AND
R.Score = (
SELECT
MIN
(IR.score)
FROM
SC
AS
IR
WHERE
R.C# = IR.C#
GROUP
BY
IR.C#
);
19、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT
t.C#
AS
课程号,
max
(course.Cname)
AS
课程名,
isnull
(
AVG
(score),0)
AS
平均成绩
,100 *
SUM
(
CASE
WHEN
isnull
(score,0)>=60
THEN
1
ELSE
0
END
)/
COUNT
(*)
AS
及格百分数
FROM
SC T,Course
where
t.C#=course.C#
GROUP
BY
t.C#
ORDER
BY
100 *
SUM
(
CASE
WHEN
isnull
(score,0)>=60
THEN
1
ELSE
0
END
)/
COUNT
(*)
DESC
20、查询如下课程平均成绩和及格率的百分数(用
"1行"
显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)
SELECT
SUM
(
CASE
WHEN
C# =
'001'
THEN
score
ELSE
0
END
)/
SUM
(
CASE
C#
WHEN
'001'
THEN
1
ELSE
0
END
)
AS
企业管理平均分
,100 *
SUM
(
CASE
WHEN
C# =
'001'
AND
score >= 60
THEN
1
ELSE
0
END
)/
SUM
(
CASE
WHEN
C# =
'001'
THEN
1
ELSE
0
END
)
AS
企业管理及格百分数
,
SUM
(
CASE
WHEN
C# =
'002'
THEN
score
ELSE
0
END
)/
SUM
(
CASE
C#
WHEN
'002'
THEN
1
ELSE
0
END
)
AS
马克思平均分
,100 *
SUM
(
CASE
WHEN
C# =
'002'
AND
score >= 60
THEN
1
ELSE
0
END
)/
SUM
(
CASE
WHEN
C# =
'002'
THEN
1
ELSE
0
END
)
AS
马克思及格百分数
,
SUM
(
CASE
WHEN
C# =
'003'
THEN
score
ELSE
0
END
)/
SUM
(
CASE
C#
WHEN
'003'
THEN
1
ELSE
0
END
)
AS
UML平均分
,100 *
SUM
(
CASE
WHEN
C# =
'003'
AND
score >= 60
THEN
1
ELSE
0
END
)/
SUM
(
CASE
WHEN
C# =
'003'
THEN
1
ELSE
0
END
)
AS
UML及格百分数
,
SUM
(
CASE
WHEN
C# =
'004'
THEN
score
ELSE
0
END
)/
SUM
(
CASE
C#
WHEN
'004'
THEN
1
ELSE
0
END
)
AS
数据库平均分
,100 *
SUM
(
CASE
WHEN
C# =
'004'
AND
score >= 60
THEN
1
ELSE
0
END
)/
SUM
(
CASE
WHEN
C# =
'004'
THEN
1
ELSE
0
END
)
AS
数据库及格百分数
FROM
SC
基本sql查询语句练习的更多相关文章
- sql查询语句如何解析成分页查询?
我们公司主要mysql存储数据,因此也封装了比较好用mysql通用方法,然后,我们做大量接口,在处理分页查询接口,没有很好分查询方法.sql查询 语句如何解析成“分页查询”和“总统计”两条语句.可能, ...
- 15个初学者必看的基础SQL查询语句
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...
- SQL查询语句去除重复行
1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 select distinct * from table(表名) where (条件) 2.存在部分字段相同的纪录 ...
- WordPress 常用数据库SQL查询语句大全
在使用WordPress的过程中,我们少不了要对数据库进行修改操作,比如,更换域名.修改附件目录.批量修改文章内容等等.这个时候,使用SQL查询语句可以大大简化我们的工作量. 关于如何操作SQL查询语 ...
- (转)经典SQL查询语句大全
(转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 经典SQL查询语句大全
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
- oracle中sql查询语句的执行顺序
查询语句的处理过程主要包含3个阶段:编译.执行.提取数据(sql查询语句的处理主要是由用户进程和服务器进程完成的,其他进程辅助配合) 一.编译parse 在进行编译时服务器进程会将sql语句的正文放入 ...
- SQL查询语句分类
SQL查询语句有多种,下面总结下.首先先建三张表用于后面的实验 -- 学生表,记录学生信息 CREATE TABLE student( sno ), sname ), ssex ENUM('男','女 ...
- 浅谈SQL优化入门:1、SQL查询语句的执行顺序
1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...
随机推荐
- Windows 磁盘分区
在“我的电脑”右键,点击“管理”,打开计算机管理,然后如图操作
- 学习使用turtlebot2——调试Hokuyo激光雷达(型号UST-10LX)
目标 在ROS上调试使用Hokuyo激光雷达传感器 配置情况 电脑使用Ubuntu 14.04版本,ROS为 Indigo,激光雷达为Hokuyo(型号UST-10LX,网口型接口) 如果 ...
- tomcat的虚拟目录映射常用的几种方式
我们在项目部署的时候,可以采用多种方式,接下来我们将在实际中比较常用的几种方式总结如下. 1.可以直接将我们的项目丢到tomcat的webapps目录下,这样当tomcat重启的时候,我们就可以访 ...
- 巨蟒python全栈开发数据库攻略6:索引2&重要内容汇总
1.索引的添加和删除 2.正确命中索引举例,explain优化神奇的简单使用 3.联合索引 4.简述慢日志记录 5.用户创建和权限分配 6.mysqldump逻辑备份,浅谈主从复制和读写分离 7.浅谈 ...
- What is Grammar?
What is Grammar? And why grammar is your friend… Grammar(noun): the structure and system of a langua ...
- bash短路径显示
修改.bashrc文件vim 打开.bashrc文件,找到如下这行,有两个,都修改一下: PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' 将上面 ...
- 接口测试工具 — jmeter(数据库操作)
1.导入jdbc jar包 2.配置MySQL连接 3.执行sql语句
- django之contenttype
平时开发过程中,我们会经常遇到这么一个类似的场景,比如 不同的课程,有不同的价格策略 不同的课程可使用不同的优惠券(满减券,通用券,专用券) 不同的评论区,支持的评论 就拿 不同的课程,有不同的价格 ...
- MariaDB备份之XtraBackup
一.XtraBackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtrabd数据库进行热备的工具.特点: (1)备份过程快速.可靠: ...
- 在PC上调试微信手机页面的三种方法
场景 假设一个手机页面,开发者对其做了限制,导致只能在微信客户端中打开.而众所周知手机上非常不利于调试页面,所以需要能在电脑上打开并进行调试.这里针对常见的三种页面做一下分析,一一绕过其限制,(当然不 ...