mysql查询

目录

数据表介绍

--1.学生表Student(SId,Sname,Sage,Ssex)--SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

--2.课程表Course(CId,Cname,TId)--CId 课程编号,Cname 课程名称,TId 教师编号

--3.教师表Teacher(TId,Tname)--TId 教师编号,Tname 教师姓名

--4.成绩表SC(SId,CId,score)--SId 学生编号,CId 课程编号,score 分数

学生表 Student

create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));

insert into Student values('01' , '赵雷' , '1990-01-01' , '男');

insert into Student values('02' , '钱电' , '1990-12-21' , '男');

insert into Student values('03' , '孙风' , '1990-12-20' , '男');

insert into Student values('04' , '李云' , '1990-12-06' , '男');

insert into Student values('05' , '周梅' , '1991-12-01' , '女');

insert into Student values('06' , '吴兰' , '1992-01-01' , '女');

insert into Student values('07' , '郑竹' , '1989-01-01' , '女');

insert into Student values('09' , '张三' , '2017-12-20' , '女');

insert into Student values('10' , '李四' , '2017-12-25' , '女');

insert into Student values('11' , '李四' , '2012-06-06' , '女');

insert into Student values('12' , '赵六' , '2013-06-13' , '女');

insert into Student values('13' , '孙七' , '2014-06-01' , '女');

科目表 Course

create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));

insert into Course values('01' , '语文' , '02');

insert into Course values('02' , '数学' , '01');

insert into Course values('03' , '英语' , '03');

教师表 Teacher

create table Teacher(TId varchar(10),Tname varchar(10));

insert into Teacher values('01' , '张三');

insert into Teacher values('02' , '李四');

insert into Teacher values('03' , '王五');

成绩表 SC

create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));

insert into SC values('01' , '01' , 80);

insert into SC values('01' , '02' , 90);

insert into SC values('01' , '03' , 99);

insert into SC values('02' , '01' , 70);

insert into SC values('02' , '02' , 60);

insert into SC values('02' , '03' , 80);

insert into SC values('03' , '01' , 80);

insert into SC values('03' , '02' , 80);

insert into SC values('03' , '03' , 80);

insert into SC values('04' , '01' , 50);

insert into SC values('04' , '02' , 30);

insert into SC values('04' , '03' , 20);

insert into SC values('05' , '01' , 76);

insert into SC values('05' , '02' , 87);

insert into SC values('06' , '01' , 31);

insert into SC values('06' , '03' , 34);

insert into SC values('07' , '02' , 89);

insert into SC values('07' , '03' , 98);


  1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数

    1. 查询同时存在" 01 "课程和" 02 "课程的情况
mysql> select * from (select * from sc where CId=01) as t1 inner join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId;

+------+------+-------+------+------+-------+

| SId  | CId  | score | SId  | CId  | score |

+------+------+-------+------+------+-------+

| 01   | 01   |  80.0 | 01   | 02   |  90.0 |

| 02   | 01   |  70.0 | 02   | 02   |  60.0 |

| 03   | 01   |  80.0 | 03   | 02   |  80.0 |

| 04   | 01   |  50.0 | 04   | 02   |  30.0 |

| 05   | 01   |  76.0 | 05   | 02   |  87.0 |

+------+------+-------+------+------+-------+

5 rows in set (0.00 sec)
    1. 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
mysql> select * from (select * from sc where CId=01) as t1 left outer join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId;

+------+------+-------+------+------+-------+

| SId  | CId  | score | SId  | CId  | score |

+------+------+-------+------+------+-------+

| 01   | 01   |  80.0 | 01   | 02   |  90.0 |

| 02   | 01   |  70.0 | 02   | 02   |  60.0 |

| 03   | 01   |  80.0 | 03   | 02   |  80.0 |

| 04   | 01   |  50.0 | 04   | 02   |  30.0 |

| 05   | 01   |  76.0 | 05   | 02   |  87.0 |

| 06   | 01   |  31.0 | NULL | NULL |  NULL |

+------+------+-------+------+------+-------+

6 rows in set (0.00 sec)
    1. 查询不存在" 01 "课程但存在" 02 "课程的情况
mysql> select * from (select * from sc where CId=01) as t1 right outer join ( select * from sc where CId=02) as t2 on t1.SId=t2.SId where t1.CId is null;

+------+------+-------+------+------+-------+

| SId  | CId  | score | SId  | CId  | score |

+------+------+-------+------+------+-------+

| NULL | NULL |  NULL | 07   | 02   |  89.0 |

+------+------+-------+------+------+-------+

1 row in set (0.00 sec)

  1. 查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
mysql> select * from ( select SId,avg(score) from sc group by SId having avg(score)>=60) as t1 inner join (select Sname,SId from student) as t2 on t2.SId=t1.SId;

+------+------------+--------+-----+

| SId  | avg(score) | Sname  | SId |

+------+------------+--------+-----+

| 01   |   89.66667 | 赵雷   | 01  |

| 02   |   70.00000 | 钱电   | 02  |

| 03   |   80.00000 | 孙风   | 03  |

| 05   |   81.50000 | 周梅   | 05  |

| 07   |   93.50000 | 郑竹   | 07  |

+------+------------+--------+-----+

5 rows in set (0.00 sec)
  1. 查询在 SC 表存在成绩的学生信息
mysql> select * from student right outer join sc on student.SId=sc.SId;

+------+--------+---------------------+------+------+------+-------+

| SId  | Sname  | Sage                | Ssex | SId  | CId  | score |

+------+--------+---------------------+------+------+------+-------+

| 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 01   |  80.0 |

| 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 02   |  90.0 |

| 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 03   |  99.0 |

| 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 01   |  70.0 |

| 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 02   |  60.0 |

| 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 03   |  80.0 |

| 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 01   |  80.0 |

| 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 02   |  80.0 |

| 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 03   |  80.0 |

| 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 01   |  50.0 |

| 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 02   |  30.0 |

| 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 03   |  20.0 |

| 05   | 周梅   | 1991-12-01 00:00:00 | 女   | 05   | 01   |  76.0 |

| 05   | 周梅   | 1991-12-01 00:00:00 | 女   | 05   | 02   |  87.0 |

| 06   | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 01   |  31.0 |

| 06   | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 03   |  34.0 |

| 07   | 郑竹   | 1989-01-01 00:00:00 | 女   | 07   | 02   |  89.0 |

| 07   | 郑竹   | 1989-01-01 00:00:00 | 女   | 07   | 03   |  98.0 |

+------+--------+---------------------+------+------+------+-------+

18 rows in set (0.00 sec)

  1. 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
mysql> select * from (select SId,Sname from student) as t1 left outer join ( select SId,count(CId),sum(score) from sc group by SId) as t2 on t1.SId=t2.SId;

+-----+--------+------+------------+------------+

| SId | Sname  | SId  | count(CId) | sum(score) |

+-----+--------+------+------------+------------+

| 01  | 赵雷   | 01   |          3 |      269.0 |

| 02  | 钱电   | 02   |          3 |      210.0 |

| 03  | 孙风   | 03   |          3 |      240.0 |

| 04  | 李云   | 04   |          3 |      100.0 |

| 05  | 周梅   | 05   |          2 |      163.0 |

| 06  | 吴兰   | 06   |          2 |       65.0 |

| 07  | 郑竹   | 07   |          2 |      187.0 |

| 09  | 张三   | NULL |       NULL |       NULL |

| 10  | 李四   | NULL |       NULL |       NULL |

| 11  | 李四   | NULL |       NULL |       NULL |

| 12  | 赵六   | NULL |       NULL |       NULL |

| 13  | 孙七   | NULL |       NULL |       NULL |

+-----+--------+------+------------+------------+

12 rows in set (0.00 sec)

4.1 查有成绩的学生信息

mysql> select * from student right outer join sc on student.SId=sc.SId;

+------+--------+---------------------+------+------+------+-------+

| SId  | Sname  | Sage                | Ssex | SId  | CId  | score |

+------+--------+---------------------+------+------+------+-------+

| 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 01   |  80.0 |

| 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 02   |  90.0 |

| 01   | 赵雷   | 1990-01-01 00:00:00 | 男   | 01   | 03   |  99.0 |

| 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 01   |  70.0 |

| 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 02   |  60.0 |

| 02   | 钱电   | 1990-12-21 00:00:00 | 男   | 02   | 03   |  80.0 |

| 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 01   |  80.0 |

| 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 02   |  80.0 |

| 03   | 孙风   | 1990-12-20 00:00:00 | 男   | 03   | 03   |  80.0 |

| 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 01   |  50.0 |

| 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 02   |  30.0 |

| 04   | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 03   |  20.0 |

| 05   | 周梅   | 1991-12-01 00:00:00 | 女   | 05   | 01   |  76.0 |

| 05   | 周梅   | 1991-12-01 00:00:00 | 女   | 05   | 02   |  87.0 |

| 06   | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 01   |  31.0 |

| 06   | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 03   |  34.0 |

| 07   | 郑竹   | 1989-01-01 00:00:00 | 女   | 07   | 02   |  89.0 |

| 07   | 郑竹   | 1989-01-01 00:00:00 | 女   | 07   | 03   |  98.0 |

+------+--------+---------------------+------+------+------+-------+

18 rows in set (0.00 sec)
  1. 查询「李」姓老师的数量
mysql> select count(1) from teacher where Tname like "李%";

+----------+

| count(1) |

+----------+

|        1 |

+----------+

1 row in set (0.00 sec)

  1. 查询学过「张三」老师授课的同学的信息
mysql> select * from student where SId in (select SId from sc where CId=( select CId from course where TId=(select TId from teacher where Tname = "张三")));

+-----+--------+---------------------+------+

| SId | Sname  | Sage                | Ssex |

+-----+--------+---------------------+------+

| 01  | 赵雷   | 1990-01-01 00:00:00 | 男   |

| 02  | 钱电   | 1990-12-21 00:00:00 | 男   |

| 03  | 孙风   | 1990-12-20 00:00:00 | 男   |

| 04  | 李云   | 1990-12-06 00:00:00 | 男   |

| 05  | 周梅   | 1991-12-01 00:00:00 | 女   |

| 07  | 郑竹   | 1989-01-01 00:00:00 | 女   |

+-----+--------+---------------------+------+

6 rows in set (0.00 sec)
  1. 查询没有学全所有课程的同学的信息
mysql> select * from student where SId in (select SId from sc group by SId having count(CId) !=( select count(1) from course));
+-----+--------+---------------------+------+
| SId | Sname  | Sage                | Ssex |
+-----+--------+---------------------+------+
| 05  | 周梅   | 1991-12-01 00:00:00 | 女   |
| 06  | 吴兰   | 1992-01-01 00:00:00 | 女   |
| 07  | 郑竹   | 1989-01-01 00:00:00 | 女   |
+-----+--------+---------------------+------+
3 rows in set (0.01 sec)
  1. 查询至少有一门课与学号为" 01 "的同学所学相同的同学的信
mysql> select * from student where SId in (select SId from sc where CId in ( select CId from sc where SId=01) group by SId) limit 1,6;
+-----+--------+---------------------+------+
| SId | Sname  | Sage                | Ssex |
+-----+--------+---------------------+------+
| 02  | 钱电   | 1990-12-21 00:00:00 | 男   |
| 03  | 孙风   | 1990-12-20 00:00:00 | 男   |
| 04  | 李云   | 1990-12-06 00:00:00 | 男   |
| 05  | 周梅   | 1991-12-01 00:00:00 | 女   |
| 06  | 吴兰   | 1992-01-01 00:00:00 | 女   |
| 07  | 郑竹   | 1989-01-01 00:00:00 | 女   |
+-----+--------+---------------------+------+
6 rows in set (0.00 sec)
  1. 查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息
mysql> select * from student where SId in ( select SId from sc where CId in (select CId from sc where SId=01) group by SId having count(CId)=(select count(CId) from sc where SId=01));
+-----+--------+---------------------+------+
| SId | Sname  | Sage                | Ssex |
+-----+--------+---------------------+------+
| 01  | 赵雷   | 1990-01-01 00:00:00 | 男   |
| 02  | 钱电   | 1990-12-21 00:00:00 | 男   |
| 03  | 孙风   | 1990-12-20 00:00:00 | 男   |
| 04  | 李云   | 1990-12-06 00:00:00 | 男   |
+-----+--------+---------------------+------+
4 rows in set (0.00 sec)
  1. 查询没学过"张三"老师讲授的任一门课程的学生姓名
mysql> select * from student where SId=(select t1.SId from (select SId from sc group by SId) as t1 left outer join ( select SId from sc where CId = (select CId from course where TId in (select TId from teacher where Tname="张三"))) as t2 on t1.SId=t2.SId where t2.SId <=>null);
+-----+--------+---------------------+------+
| SId | Sname  | Sage                | Ssex |
+-----+--------+---------------------+------+
| 06  | 吴兰   | 1992-01-01 00:00:00 | 女   |
+-----+--------+---------------------+------+
1 row in set (0.00 sec)
  1. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
mysql> select * from (select SId from student) as t1 inner join (select SId,avg(score) from sc where score < 60 group by SId having count(CId)>=2) as t2 on t1.SId=t2.SId;

+-----+------+------------+

| SId | SId  | avg(score) |

+-----+------+------------+

| 04  | 04   |   33.33333 |

| 06  | 06   |   32.50000 |

+-----+------+------------+

2 rows in set (0.00 sec)

  1. 检索" 01 "课程分数小于 60,按分数降序排列的学生信息
mysql> select * from student inner join (select * from sc where CId=01 and score <60 order by score desc) as t2 on student.SId=t2.SId;

+-----+--------+---------------------+------+------+------+-------+

| SId | Sname  | Sage                | Ssex | SId  | CId  | score |

+-----+--------+---------------------+------+------+------+-------+

| 04  | 李云   | 1990-12-06 00:00:00 | 男   | 04   | 01   |  50.0 |

| 06  | 吴兰   | 1992-01-01 00:00:00 | 女   | 06   | 01   |  31.0 |

+-----+--------+---------------------+------+------+------+-------+

2 rows in set (0.00 sec)
  1. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
mysql> select * from (select SId,avg(score) from sc group by SId order by avg(score) desc) as t1 left outer join sc on sc.SId=t1.SId;

+------+------------+------+------+-------+

| SId  | avg(score) | SId  | CId  | score |

+------+------------+------+------+-------+

| 07   |   93.50000 | 07   | 02   |  89.0 |

| 07   |   93.50000 | 07   | 03   |  98.0 |

| 01   |   89.66667 | 01   | 01   |  80.0 |

| 01   |   89.66667 | 01   | 02   |  90.0 |

| 01   |   89.66667 | 01   | 03   |  99.0 |

| 05   |   81.50000 | 05   | 01   |  76.0 |

| 05   |   81.50000 | 05   | 02   |  87.0 |

| 03   |   80.00000 | 03   | 01   |  80.0 |

| 03   |   80.00000 | 03   | 02   |  80.0 |

| 03   |   80.00000 | 03   | 03   |  80.0 |

| 02   |   70.00000 | 02   | 01   |  70.0 |

| 02   |   70.00000 | 02   | 02   |  60.0 |

| 02   |   70.00000 | 02   | 03   |  80.0 |

| 04   |   33.33333 | 04   | 01   |  50.0 |

| 04   |   33.33333 | 04   | 02   |  30.0 |

| 04   |   33.33333 | 04   | 03   |  20.0 |

| 06   |   32.50000 | 06   | 01   |  31.0 |

| 06   |   32.50000 | 06   | 03   |  34.0 |

+------+------------+------+------+-------+

18 rows in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值