一、创建数据库
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(分数)最大记录,结果如下: