MySQL数据库(内连接)练习题

一、创建数据库

1、打开cmd窗口,执行命令:

mysql -u root -p

按回车键,再输入密码即可登录MySQL环境

2、执行如下命令,创建数据库,数据库名称叫:test(不分大小写)

CREATE DATABASE test character set gbk;

3、执行如下命令,使用创建好的test数据库

use test;

4、进入MySQL的安装目录下的data目录,此时会看到一个创建好的test数据库

5、连接Navicat,也可以查看到创建好的Test数据库

二、创建数据表

1、创建学生表

(1)输入如下命令,创建一个students学生表

CREATE TABLE students(
id INT NOT NULL PRIMARY KEY,
name CHAR(20) NOT NULL,
score INT,
class INT);

(2)连接Navicat,查看创建好的students学生表

(3)往创建好的students学生表中插入数据

INSERT INTO students VALUES
(1,'张三',80,1),
(2,'李四',70,2),
(3,'王五',90,1),
(4,'赵七',60,2);

(4)连接Navicat,查看往students学生表插入数据后的记录

2、创建学科表

(1)输入如下命令,创建一个class学科表

CREATE TABLE class(
id INT NOT NULL PRIMARY KEY,
name CHAR(20) NOT NULL
);

(2)连接Navicat,查看创建好的class学科表

(3)往创建好的class学科表中插入数据

INSERT INTO class VALUES
(1,'语文'),
(2,'数学');

(4)连接Navicat,查看往class学科表插入数据后的记录

三、练习题

查询出每个学科分数最高的学生

(1)输入如下命令,执行查询结果

SELECT C.name AS class,S.name,S.score
FROM students AS S 
	JOIN class AS C
	ON S.class = C.id
WHERE score IN(
	SELECT MAX(score)
	FROM students
	GROUP BY class);

(2)连接Navicat,执行查询语句,查看查询后的结果

四、解析

SELECT C.name AS class,S.name,S.score

—>这里的AS是重命名的意思。也就是用大写字母C来作为class学科表,大写字母S来表示students学生表。
C.name就是表示class学科表里面的name列
S.name就是表示students学生表里面的name列
S.score就是表示students数据表里面的score列

 

FROM students AS S     

           JOIN class AS C

           ON S.class = C.id

—>这里用到了内连接的语法知识:使用的关键字 inner join,其中inner可以省略。

语法:显示内连接: select * from A inner join B on 条件;

这句话意思就是用JOIN来连接students学生表和class课程表,其中用大写字母S代表students学生表,用大写字母C代表class学科表。

—>这里的ON后面跟的是内连接查询的条件,此处的条件是:students学生表里面的class字段值等于class学科表里面的id字段值。

 

WHERE score IN(

—>这里是查询的条件,条件是:score

 

             SELECT MAX(score)

             FROM  students

—>这里的MAX()是一个数据库函数,是用来找出一个记录集中的最大值记录。这里再次使用了SELECT,表示这里是一个嵌套查询,也就是从students学生表里面查询出score(分数)最大的记录。

 

GROUP BY class);
—>这里的GROUP BY表示分组查询和显示,分组的条件是:class。查出来这个最大记录后,利用GROUP BY分组方法,根据class这个记录来分组显示。

● 如果不加GROUP BY class);这句话,这里不会根据任何条件分组展示,会显示出所有score(分数)最大记录,结果如下:

 

● 如果加了GROUP BY class);这句话,这里会展示出每个部门score(分数)最大记录,结果如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沧海黎明

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

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

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

打赏作者

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

抵扣说明:

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

余额充值