MySQL练习《单表操作2》

题目数据:
drop database if exists 学生课程系统;
create database 学生课程系统;

use 学生课程系统;

create table Student
(Sno int primary key,
Sname nchar(10) ,
Ssex nchar(2),
Sage int,
Sdept nvarchar(30));

create table Course
(Cno int primary key,
Cname nvarchar(30),
Cpno int,
Ccredit int);

create table SC
(Sno int,
Cno int,
Grade int,
primary key(Sno,Cno));

insert into Student values
(201215121,‘李勇’,‘男’,20,‘CS’),
(201215122,‘刘晨’,‘女’,19,‘CS’),
(201215123,‘王敏’,‘女’,18,‘MA’),
(201215124,‘张立’,‘男’,19,‘IS’),
(201215125,‘刘婷’,‘女’,21,‘MA’),
(201215126,‘李悦’,‘女’,19,‘CS’),
(201215127,‘寒梅’,‘女’,18,‘IS’),
(201215128,‘夏雨’,‘女’,19,‘MA’),
(201215129,‘童琳’,‘女’,21,‘MA’);

insert into Course values
(1,‘数据库’,5,4),
(2,‘数学’,NULL,2),
(3,‘信息系统’,1,4),
(4,‘操作系统’,6,3),
(5,‘数据结构’,7,4),
(6,‘数据处理’,NULL,2),
(7,‘PASCAL’,6,4);

insert into SC values
(201215121,1,92),
(201215121,2,85),
(201215121,3,88),
(201215122,2,90),
(201215122,3,80),
(201215124,1,55);

1.检索年龄大于18的男学生的学号和姓名。

select Sno,Sname from student where Sage > 18 and Ssex=‘男’;

2.检索姓名以"李"打头的所有学生的姓名和年龄。

select Sname,Sage from student where Sname like ‘李%’;

3.把选课成绩不及格的成绩全改为空值。

update sc set Grade=null where grade<60;

4.查询每门课程的学生平均成绩(显示课程号和平均成绩,不使用别名)。

select cno,avg(grade) from sc
group by cno;

5.查询CS和MA系(Sdept)的学生姓名和性别(条件判断时CS在前,MA在后)

select Sname,Ssex from student
where Sdept=‘CS’ or Sdept=‘MA’;

6.查询年龄介于17岁(包含17)到19岁(包含19)之间的学生信息。

select * from student
where sage between 17 and 19;

7.在成绩表中检索成绩为空值的学生学号和成绩。

select sno,grade from sc
where Grade is null;

8.查询课程名称中第二个字不是‘据’的课程号、课程名,学分。

select Cno,Cname,Ccredit from course
where Cname not like ‘_据%’;

9.查询‘cs’系年龄大于18岁的女同学学号,姓名(按题目给出的信息顺序进行条件判断)。

select sno,sname from student
where Sdept=‘CS’ and Sage>18 and Ssex=‘女’;

10.随机生成一个0到1000之间的随机整数(包括0和1000)。

select floor(rand()*1001);

11.统计参与选修课程的学生人数。

select count(distinct sno) from sc;

统计女同学的每一年龄组(多于1人)有多少人?要求查询结果按人数升序排列,人数相同的按年龄降序排列。

select sage,count()
from student
where ssex=‘女’
group by sage
having count(
)>1
order by count(*),sage desc;

13.统计既不属于‘cs’系,也不属于‘MA’系的学生信息(判断条件时’cs’在前,'ma’在后)。

select * from student
where Sdept!=‘CS’ and Sdept!=‘MA’;

14.查询每个学生的学号,出生年份及所在系(使用别名)

select sno 学号,year(now())-Sage 出生年份,Sdept 所在系 from student;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL多表查询是指在查询中同时涉及到多个表的操作。多表查询可以更加方便地获取到需要的数据,提供了更加灵活的查询方式。 在进行多表查询之前,我们首先需要对多个表之间的关系进行了解和分析。常见的多表查询方式包括联接查询、子查询以及多级嵌套查询等。 联接查询是最常见且常用的多表查询方式之一。通过联接查询,我们可以根据两个或多个表之间的关联字段,将它们连接在一起进行查询。 例如,我们有两个表A和B,它们通过一个共同的字段关联起来。我们可以使用联接查询语句如下: SELECT A.field1, B.field2 FROM A INNER JOIN B ON A.common_field = B.common_field; 在这个查询中,我们使用了INNER JOIN关键字将表A和表B连接起来,其中common_field是两个表之间的关联字段。通过这个联接查询,我们可以同时获取到表A和表B中的相关信息。 除了联接查询之外,我们还可以使用子查询和多级嵌套查询进行多表查询。 子查询是指在查询语句中嵌套了另一个查询语句。通过子查询,我们可以在一个查询中引用另一个查询的结果作为条件进行查询。 多级嵌套查询是指在一个查询语句中嵌套了多个子查询。通过多级嵌套查询,我们可以按照一定的顺序和逻辑进行复杂的查询操作。 综上所述,MySQL多表查询是一种可以同时涉及多个表进行查询操作。通过联接查询、子查询和多级嵌套查询等方式,我们可以更加灵活地获取到需要的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值