【数据库】MySQL单表查询

练习三 单表查询

一、表结构修改

1.在练习二的所建立的数据库中增加Teacher表,结构如下:

字段名称

数据类型

长度

精度

小数位数

是否允许Null值

说明

Tno

Char

3

0

0

教师号,主码

Tname

Varchar

8

0

0

教师名

Tsex

Char

2

0

0

性别,取值:男或女

Tbirthday

Date

8

0

0

出生日期

Tdept

Char

16

0

0

所在系

 

这里我发现我没给字段`Tno`加主码

这里加上:

 

而且显示表格的时候会明确标出主键Tno

 

2.在练习二的所建立的数据库中增加Teaching表,表结构如下:

Teaching表(授课表)的表结构

字段名称

数据类型

长度

精度

小数位数

是否允许Null值

说明

Cno

Char

5

0

0

课程号,外码

Tno

Char

3

0

0

教师号,外码

Cterm

Tinyint

1

0

0

1-8之间

 

这里我发现我没给`Cno`和`Tno`加外码:

 

这里我给Cno和Tno添加外码:

 

当我第一次向teaching表中的Cno添加外码的时候,发现外码的名字cn重复的,我尽力去寻找,原来在这个数据库中的sc表中的Cno字段也向主表course中的Cno添加了外键,而且外键的名字也叫cn,所以这里说的外键名cn重复就只需要将cn改个名字即可

 

 

对于Tno的外键也是如此:

 

但是这道题目的意思貌似是得在创建表格的时候加入主键和外键,因此------把这两张新建的表格drop了QAQ

 

当我想要删除表teacher的时候会报错,原因就是teacher是teaching表中Tno字段的外键束缚的主表,因此我们要先删除从表teaching,(删除表之后,表里的外键自然就会被删除了),接下来我们删除teacher表才能成功

下面就是本题的本意:在创建表的时候就创建好主键和外键:

 

 

 

在创建表格的时候添加外键

 

3.向上述两表中输入如下数据记录

Cno

Tno

Cterm

C01

101

2

C02

102

1

C03

201

3

C04

202

4

教师表Teacher                         授课表Teaching

Tno

Tname

Tsex

Tbirthday

Tdept

101

李新

1977-01-12

CS

102

钱军

1978-06-04

CS

201

王小华

1979-12-23

IS

202

张小青

1978-08-25

IS

往teacher表里添加数据:

 

往teaching表里添加数据:

 

 

自此完成了表格的创建:

 

二、完成下面查询(将代码写在下面空白处)

1.查询所有男生信息。

 

2.查询年龄大于20岁的女生学号和姓名。

 

注意使用year()函数获取Sbrithday字段的年

3.查询所有教师的Tname、Tdept。

 

4.查询“电子商务”专业的学生姓名、性别和出生日期。

 

5.查询成绩低于90分的学生学号及课号,并按成绩降序排列。

 

参数 ASC表示按照升序排序,DESC表示按照降序排序;默认情况下,按照ASC方式排序。通常情况下,ORDER BY子句位于整个SELECT语句的末尾。

6.查询Student表中所有的系名。

 

如何解决?----可以在Sdept字段前加distinct

 

7.查询“C01”课程的开课学期。

 

8.查询成绩在80分至90之间的学生学号及课号。

 

9.统计有学生选修的课程门数。

 

但是查询一个sc表:

 

数据有重复,可以使用distinct

 

10.查询成绩为77,88或99的记录

 

根据我们上表的查看sc表里没有这三条记录

11.计算“C01”课程的平均成绩。

 

12.输出有成绩的学生学号。

 

13.查询所有姓“刘”的学生信息。

 

%用于匹配任意长度的字符串。例如,字符串“a%”匹配以字符a开始任意长度的字符串%a匹配以字符a结束任意长度的字符串%a%匹配包含字符a1的任意长度的字符串

14.统计输出各系学生的人数。按系分组

 

15.查询选修了“C03”课程的学生的学号及其成绩,查询结果按分数的降序排列。

 

16.查询各个课程号及相应的选课人数,并为选课人数取别名为“人数”。

 

但是我发现字段人数没有显示出来

 

17.统计每门课程的选课人数和最高分,并为选课人数和最高分分别取别名为“人数”、“最高分”。

 

18.统计每个学生的选课门数和考试总成绩,并为选课门数和总成绩分别取别名为“门数”、“总成绩”,并按选课门数降序排列。

 

  1. 思考题

1.聚集函数能否直接使用在:SELECT子句、HAVING子句、WHERE子句、GROUP BY子句中?

可以

2.关键字ALL和DISTINCT有什么不同的含义?

ALL修饰的字段可以出现重复的值(并且默认为ALL)

DISTINCT修饰的字段不会出现重复的值(如果需要,需要加上DSITINCT)

3.SELECT语句中的通配符有几种?含义分别是什么?

%通配符:%用于匹配任意长度的字符串。例如,字符串“a%”匹配以字符a开始任意长度的字符串%a匹配以字符a结束任意长度的字符串%a%匹配包含字符a1的任意长度的字符串

_通配符:下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符。例如,字符串“ab_”匹配以字符串“ab”开始长度为3的字符串,如abc、abp等等;字符串“a__d”匹配在字符“a”和“d”之间包含两个字符的字符串,如"abcd"、"atud"等等。

  1. 利用BETWEEN…AND运算符表示数据的范围能否与其他方法表示?怎样表示?

例如where age between 15 and 18就可以 where age>=15 and age<=18

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明璐花生牛奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值