一、MySQL 安装和配置

1.1 MySQL 版本推荐

mysql 5.5 mysql 5.6 mysql 5.7(稳定) mysql 8 更高版本
推荐安装 mysql 5.7

1.2 安装及配置

下载链接:https://cloud.189.cn/web/share?code=F3iE3yUFz6je(访问码:1qpp)
MySQL5.7.19安装.docx

1.3 使用命令行窗口连接MYSQL 数据库

  1. mysql -h 主机名 -P 端口 -u 用户名 -p密码
  2. 登录前,保证服务启动
  3. -p密码 中间不要有空格
  4. -p 后面如果没有写密码,回车后会要求输入密码
  5. 如果没有写 -h主机,默认就是本机
  6. 如果没有写 -P端口,默认就是3306
  7. 在实际工作中,3306 一般修改

启动 mysql 数据库的常见方式:【Dos命令】

  1. 服务方式启动(界面)
  2. net start mysql //启动 mysql服务
  3. net stop mysql //关闭 mysql服务

1.4 Navicat 安装

下载链接:https://cloud.189.cn/web/share?code=fYRfqmZ7NJNz(访问码:yv8x)
Navicat 激活教程
Navicat安装.docx

1.5 SQLyog 安装和使用

SQLyog安装配置.docx

二、初识数据库

2.1 数据库三层结构

  1. 所谓安装Mysq|数据库,就是在主机安装一 个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(database manage system)
  2. 一个数据库中可以创建多个表,以保存数据(信息)。
  3. 数据库管理系统(DBMS)、数据库和表的关系如图所示

image.png

2.2 数据在数据库中的存储形式

image.png

2.3 SQL 语句分类

  • DDL:数据定义语句【create 表,库…】
  • DML:数据操作语句【增加 insert,修改 update,删除 delete】
  • DQL:数据查询语句【select】
  • DCL:数据控制语句【管理数据库:比如用户权限 grant revoke】

三、创建数据库

3.1 相关指令

image.png

  1. CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,默认utf8
  2. COLLATE:指定数据库字符集的校对规则(常用的是 utf8_bin [区分大小写]、utf8_general_ci [不区分大小写] 注意默认是 utf8_general_ci)

3.2 案例演示

  1. 创建一个名称为 hsp_db01 的数据库
  2. 创建一个使用 utf8 字符集的 hsp_db02 数据库
  3. 创建一个使用 utf8 字符集,并带校对规则的 hsp_db03 数据库 ```sql

    演示数据库的操作

    创建一个名称为 hsp_db01 的数据库。[图形化和指令 演示]

使用指令创建数据库

CREATE DATABASE hsp_db01;

删除数据库指令

DROP DATABASE hsp_db01

创建一个使用 utf8 字符集的 hsp_db02 数据库

CREATE DATABASE hsp_db02 CHARACTER SET utf8

创建一个使用 utf8 字符集,并带校对规则的 hsp_db03 数据库

CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin

校对规则 utf8_bin 区分大小 默认 utf8_general_ci 不区分大小写

下面是一条查询的 sql , select 查询 * 表示所有字段 FROM 从哪个表

WHERE 从哪个字段 NAME = ‘tom’ 查询名字是 tom

SELECT * FROM t1 WHERE NAME = ‘tom’

  1. <a name="kOJ9m"></a>
  2. ### 四、查看、删除数据库
  3. <a name="WiN7q"></a>
  4. #### 4.1 相关指令
  5. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12677686/1633766484736-3c34135e-26c8-4039-9a3d-17ed85ee21f4.png#clientId=u6e416791-a4b7-4&from=paste&height=148&id=ue4017371&margin=%5Bobject%20Object%5D&name=image.png&originHeight=178&originWidth=540&originalType=binary&ratio=1&size=116671&status=done&style=none&taskId=u611661c7-586f-4026-bebd-b1f3044a8c2&width=450)
  6. <a name="M54Kl"></a>
  7. #### 4.2 案例演示
  8. 1. 查看当前数据库服务器中的所有数据库
  9. 1. 查看前面创建的 hsp_db01 数据库的定义信息
  10. 1. 删除前面创建的 hsp_db01 数据库
  11. ```sql
  12. #演示删除和查询数据库
  13. #查看当前数据库服务器中的所有数据库
  14. SHOW DATABASES
  15. #查看前面创建的 hsp_db01 数据库的定义信息
  16. SHOW CREATE DATABASE `hsp_db01`
  17. #老师说明 在创建数据库,表的时候,为了规避关键字,可以使用反引号解决
  18. #删除前面创建的 hsp_db01 数据库
  19. DROP DATABASE hsp_db01

五、备份、恢复数据库

5.1 相关指令

  • 备份数据库:(注意:在 Dos 执行)命令行
    mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > d:\文件名.sql
  • 恢复数据库:(注意:进入MySQL命令行再执行)
    source 文件名.sql
  • 备份恢复数据库的表
    mysqldump -u 用户名 -p密码 数据库 表1 表2 表n > d:\文件名.sql

5.2 案例演示

  1. #练习 : database03.sql 备份 hsp_db02 和 hsp_db03 库中的数据,并恢复
  2. #备份, 要在 Dos 下执行 mysqldump 指令其实在 mysql 安装目录\bin
  3. #这个备份的文件,就是对应的 sql 语句
  4. mysqldump -u root -p -B hsp_db02 hsp_db03 > d:\\bak.sql
  5. DROP DATABASE ecshop;
  6. #恢复数据库(注意:进入 Mysql 命令行再执行)
  7. source d:\\bak.sql
  8. #第二个恢复方法, 直接将 bak.sql 的内容放到查询编辑器中,执行

5.3 小练习:安装 Ecshop 数据库

  1. 这是一个ecshop 的数据库,包括ecshop所有的表,请导入到 mysq|数据库中[备份]

进入到mysql命令行: source ecshop备份文件路径

  1. 再将ecshop整个数据库备份到你的 d:\lecshop.sql 到dos下: mysqldump -u root p -B ecshop > d:lecshop.sql
  2. 将mysql的ecshop数据库删除, 并通过备份的 d:\lecshop.sql 恢复

ecshop.sql

六、创建表

6.1 相关指令

image.png

6.2 案例演示

  1. #指令创建表
  2. #注意:hsp_db02 创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。例:user表 (快速入门案例 create_tab01.sql )
  3. #id 整形 [图形化,指令]
  4. #name 字符串
  5. #password 字符串
  6. #birthday 日期
  7. CREATE TABLE `user` (
  8. id INT,
  9. `name` VARCHAR(255),
  10. `password` VARCHAR(255),
  11. `birthday` DATE)
  12. CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

七、MySQL 常用数据类型(列类型)

image.png

7.1 数值型(整数)的基本使用

说明,使用规范:在能够满足要求的情况下,尽量选择占用空间小的
image.png

  1. #演示整型的是一个
  2. #老韩使用 tinyint 来演示范围 有符号 -128 ~ 127 如果没有符号 0-255
  3. #说明: 表的字符集,校验规则, 存储引擎,老师使用默认
  4. #1. 如果没有指定 unsinged , 则 TINYINT 就是有符号
  5. #2. 如果指定 unsinged , 则 TINYINT 就是无符号 0-255
  6. CREATE TABLE t3 (
  7. id TINYINT);
  8. CREATE TABLE t4 (
  9. id TINYINT UNSIGNED);
  10. INSERT INTO t3 VALUES(127); #这是非常简单的添加语句
  11. SELECT * FROM t3
  12. INSERT INTO t4 VALUES(255);
  13. SELECT * FROM t4;

说明:

  • create table t10 (id tinyint ); //默认是有符号的
  • create table t11 (id tinyint unsigned ); //无符号的

7.2 数值型(bit)的使用

  1. 基本使用

mysql> create table t05 (num bit(8));
mysql> insert into t05 (1, 3);
mysql> insert into t05 values(2, 65);

  1. 细节说明 bit.sql
  • bit字段显示时,按照位的方式显示.
  • 查询的时候仍然可以用使用添加的数值
  • 如果一个值只有0, 1可以考虑使用bit(1) ,可以节约空间
  • 位类型。M指定位数,默认值1,范围1-64
  • 使用不多.
    1. #演示 bit 类型使用
    2. #说明
    3. #1. bit(m) m 在 1-64
    4. #2. 添加数据 范围 按照你给的位数来确定,比如 m = 8 表示一个字节 0~255
    5. #3. 显示按照 bit
    6. #4. 查询时,仍然可以按照数来查询
    7. CREATE TABLE t05 (num BIT(8));
    8. INSERT INTO t05 VALUES(255);
    9. SELECT * FROM t05;
    10. SELECT * FROM t05 WHERE num = 1;

7.3 数值型(小数)的基本使用

  1. FLOAT/DOUBLE [UNSIGNED]

Float单精度精度,Double 双精度

  1. DECIMAL[M,D] [UNSIGNED]
  • 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。
  • 如果D是0,则值没有小数点或分数部分。M最大65。 D最大是30。如果D被省略,默认是0。如果M被省略,默认是10。
  • 建议:如果希望小数的精度高,推荐使用decimal ```sql

    演示 decimal 类型、float、double 使用

创建表

CREATE TABLE t06 ( num1 FLOAT, num2 DOUBLE, num3 DECIMAL(30,20));

添加数据

INSERT INTO t06 VALUES(88.12345678912345, 88.12345678912345,88.12345678912345); SELECT * FROM t06;

decimal 可以存放很大的数

CREATE TABLE t07 ( num DECIMAL(65)); INSERT INTO t07 VALUES(8999999933338388388383838838383009338388383838383838383); SELECT FROM t07; CREATE TABLE t08( num BIGINT UNSIGNED) INSERT INTO t08 VALUES(8999999933338388388383838838383009338388383838383838383); SELECT FROM t08;

  1. <a name="j35C2"></a>
  2. #### 7.4 字符串的基本使用
  3. CHAR(size)<br />固定长度字符串最大255字符<br />VARCHAR(size) 0~ 65535<br />可变长度字符串最大65532字节[ utf8编码最大21844字符1-3个字节用于记录大小]
  4. ```sql
  5. #演示字符串类型使用 char varchar
  6. #注释的快捷键 shift+ctrl+c , 注销注释 shift+ctrl+r
  7. -- CHAR(size)
  8. -- 固定长度字符串 最大 255 字符
  9. -- VARCHAR(size) 0~65535 字节
  10. -- 可变长度字符串 最大 65532 字节 【utf8 编码最大 21844 字符 1-3 个字节用于记录大小】
  11. -- 如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844
  12. -- 如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766
  13. CREATE TABLE t09 (
  14. `name` CHAR(255));
  15. CREATE TABLE t10 (
  16. `name` VARCHAR(32766)) CHARSET gbk;
  17. DROP TABLE t10;

7.5 字符串使用细节

  1. 细节 1

char(4):这个 4 表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算.
varchar(4):这个 4 表示字符数,不管是字母还是中文都以定义好的表的编码来存放数据,不管是中文还是英文字母,都是最多存放4个,是按照字符来存放的.

  1. 细节 2

char(4) 是定长,就是说,即使你插入’aa’,也会占用分配的4个字符
varchar(4) 是变长,就是说,如果你插入了 ‘aa’,实际占用空间大小并不是 4 个字符,而是按照实际占用空间
来分配(说明:varchar 本身还需要占用 1 - 3 个字节来记录存放内容长度)

  1. 细节 3
    什么时候使用 char,什么时候使用 varchar
    1. 如果数据是定长,推荐使用 char,比如 md5的密码,邮编,手机号,身份证号码等
    2. 如果一个字段的长度是不确定,我们使用 varchar,比如留言,文章

查询速度:char > varchar

  1. 细节4

在存放文本时,也可以使用 Text 数据类型,可以将 TEXT 列视为 VARCHAR 列,注意 Text 不能有默认值,大小 0 - 2^16 字节,如果希望存放更多字符,可以选择:MEDIUMTEXT 0 - 2^24 或者 LONGTEXT 0 - 2^32

  1. #演示字符串类型的使用细节
  2. #char(4) 和 varchar(4) 这个 4 表示的是字符,而不是字节, 不区分字符是汉字还是字母
  3. CREATE TABLE t11(
  4. `name` CHAR(4));
  5. INSERT INTO t11 VALUES('韩顺平好');
  6. SELECT * FROM t11;
  7. CREATE TABLE t12(
  8. `name` VARCHAR(4));
  9. INSERT INTO t12 VALUES('韩顺平好');
  10. INSERT INTO t12 VALUES('ab 北京');
  11. SELECT * FROM t12;
  12. #如果 varchar 不够用,可以考试使用 mediumtext 或者 longtext,
  13. #如果想简单点,可以使用直接使用 text
  14. CREATE TABLE t13( content TEXT, content2 MEDIUMTEXT , content3 LONGTEXT);
  15. INSERT INTO t13 VALUES('韩顺平教育', '韩顺平教育 100', '韩顺平教育 1000~~');
  16. SELECT * FROM t13;

7.6 日期类型的基本使用

CREATE TABLE birthday6
( t1 DATE, t2 DATETIME,
t3 TIMESTAMP NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP ) ;
timestamp:时间戳
mysq|> INSERT INTO birthday (t1,t2)
VALUES(‘2022-11-11;’2022-11-11 10:10:10’);

  1. #演示时间相关的类型
  2. #创建一张表, date , datetime , timestamp
  3. CREATE TABLE t14 (
  4. birthday DATE , -- 生日
  5. job_time DATETIME, -- 记录年月日 时分秒
  6. login_time TIMESTAMP
  7. NOT NULL DEFAULT CURRENT_TIMESTAMP
  8. ON UPDATE CURRENT_TIMESTAMP); -- 登录时间, 如果希望 login_time 列自动更新, 需要配置
  9. SELECT * FROM t14;
  10. INSERT INTO t14(birthday, job_time)
  11. VALUES('2022-11-11','2022-11-11 10:10:10');
  12. -- 如果我们更新 t14 表的某条记录,login_time 列会自动的以当前时间进行更新

7.7 日期类型的细节说明

TimeStamp 在 Insert 和 update 时,自动更新

八、修改表

8.1 基本介绍

使用 ALTER TABLE 语句追加,修改,或删除列的语法
添加列 ALTER TABLE tablename
ADD (column datatype [DEFAULT expr]
[, column datatype]…) AFTER column;
修改列 ALTER TABLE tablename
MODIFY (column datatype [DEFAULT expr]
[, column datatype]…);
删除列 ALTER TABLE tablename
DROP (column);
修改列名 ALTER TABLE tablename
CHANGE (column) (column datatype [DEFAULT expr]);

查看表的结构: desc 表名; — 可以查看表的列
修改表名:Rename table 表名 to 新表名
修改表字符集:alter table 表名 character set 字符集;

8.2 案例演示

  • 员工表 emp 上增加一个 image 列, varchar类型(要求在resume后面)。
  • 修改 job 列,使其长度为60。
  • 删除 sex 列。
  • 表名改为 employee。
  • 修改表的字符集为utf8
  • 列名 name 修改为 username
    _alter table table_name change column_name changed_name varchar(20);
  1. #修改表的操作练习
  2. -- 员工表 emp 的上增加一个 image 列,varchar 类型(要求在 resume 后面)。
  3. ALTER TABLE emp
  4. ADD image VARCHAR(32) NOT NULL DEFAULT ''
  5. AFTER RESUME
  6. DESC employee -- 显示表结构,可以查看表的所有列
  7. -- 修改 job 列,使其长度为 60
  8. ALTER TABLE emp
  9. MODIFY job VARCHAR(60) NOT NULL DEFAULT ''
  10. -- 删除 sex 列。
  11. ALTER TABLE emp
  12. DROP sex
  13. -- 表名改为 employee
  14. RENAME TABLE emp TO employee
  15. -- 修改表的字符集为 utf8
  16. ALTER TABLE employee CHARACTER SET utf8
  17. -- 列名 name 修改为 user_name
  18. ALTER TABLE employee

九、数据库CRUD语句

9.1 Insert 语句

  1. 基本语法

image.png
快速入门案例:

  1. 创建一张商品表 goods (id int,goods_name varchar(10),price double);
  2. 添加2条记录 ```sql

    练习 insert 语句

    — 创建一张商品表 goods (id int , goods_name varchar(10), price double ); — 添加 2 条记录 CREATE TABLE goods ( id INT , goods_name VARCHAR(10), — 长度 10 price DOUBLE NOT NULL DEFAULT 100 ); — 添加数据 INSERT INTO goods (id, goods_name, price) VALUES(10, ‘华为手机’, 2000); INSERT INTO goods (id, goods_name, price) VALUES(20, ‘苹果手机’, 3000); SELECT * FROM goods;

CREATE TABLE goods2 ( id INT , goods_name VARCHAR(10), — 长度 10 price DOUBLE NOT NULL DEFAULT 100 );

  1. 2. **细节说明**
  2. - 插入的数据应与字段的数据类型相同<br />比如 'abc' 添加到 int 类型会错误
  3. - 数据的长度应在列的规定范围内,例如:不能将一个长度为80的字符串长度加入到长度为40的列中
  4. - values 中列出的数据位置必须与被加入的列的排列位置相对应
  5. - 字符和日期型数据应包含在单引号中
  6. - 列可以插入空值【前提是该字段允许为空】insert into tale value(null)
  7. - insert into tab_name(列名...) values (),(),() 形式添加多条记录
  8. - 如果是给表中的所有字段添加数据,可以不写前面的字段名称
  9. - 默认值的使用,当不给某个字段值时,如果有默认值就会添加,否则报错
  10. ```sql
  11. #说明 insert 语句的细节
  12. -- 1.插入的数据应与字段的数据类型相同。
  13. -- 比如 把 'abc' 添加到 int 类型会错误
  14. INSERT INTO `goods` (id, goods_name, price)
  15. VALUES('韩顺平', '小米手机', 2000);
  16. -- 2. 数据的长度应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中。
  17. INSERT INTO `goods` (id, goods_name, price)
  18. VALUES(40, 'vovo 手机 vovo 手机 vovo 手机 vovo 手机 vovo 手机', 3000);
  19. -- 3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。
  20. INSERT INTO `goods` (id, goods_name, price) -- 不对
  21. VALUES('vovo 手机',40, 2000);
  22. -- 4. 字符和日期型数据应包含在单引号中。
  23. INSERT INTO `goods` (id, goods_name, price)
  24. VALUES(40, vovo 手机, 3000); -- 错误的 vovo 手机 应该 'vovo 手机'
  25. -- 5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)
  26. INSERT INTO `goods` (id, goods_name, price)
  27. VALUES(40, 'vovo 手机', NULL);
  28. -- 6. insert into tab_name (列名..) values (),(),() 形式添加多条记录
  29. INSERT INTO `goods` (id, goods_name, price)
  30. VALUES(50, '三星手机', 2300),(60, '海尔手机', 1800);
  31. -- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
  32. INSERT INTO `goods`
  33. VALUES(70, 'IBM 手机', 5000);
  34. -- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
  35. -- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null
  36. -- 如果我们希望指定某个列的默认值,可以在创建表时指定
  37. INSERT INTO `goods` (id, goods_name)
  38. VALUES(80, '格力手机');
  39. SELECT * FROM goods;
  40. INSERT INTO `goods2` (id, goods_name)
  41. VALUES(10, '顺平手机');
  42. SELECT * FROM goods2;

9.2 Update 语句

  1. 基本语法

image.png

  1. 案例演示 ```sql — 演示 update 语句 — 要求: 在上面创建的 employee 表中修改表中的纪录 — 1. 将所有员工薪水修改为 5000 元。[如果没有带 where 条件,会修改所有的记录,因此要小心] UPDATE employee SET salary = 5000 — 2. 将姓名为 小妖怪 的员工薪水修改为 3000 元。 UPDATE employee SET salary = 3000 WHERE user_name = ‘小妖怪’ — 3. 将 老妖怪 的薪水在原有基础上增加 1000 元 INSERT INTO employee VALUES(200, ‘老妖怪’, ‘1990-11-11’, ‘2000-11-11 10:10:10’, ‘捶背的’, 5000, ‘给大王捶背’, ‘d:\a.jpg’); UPDATE employee SET salary = salary + 1000 WHERE user_name = ‘老妖怪’

— 可以修改多个列的值 UPDATE employee SET salary = salary + 1000 , job = ‘出主意的’ WHERE user_name = ‘老妖怪’ SELECT * FROM employee;

  1. 3. **使用细节**
  2. - UPDATE 语法可以用新值更新原有表行中的各列
  3. - SET 子句指示要修改哪些列和要给与那些值
  4. - WHERE 子句指定应更新哪些行。如果没有 WHERE 子句,则更新所有的行(记录),因此要小心使用
  5. - 如果需要修改多个字段,可以通过 set 字段1=值1, 字段2=值2...
  6. <a name="szuji"></a>
  7. #### 9.3 Delete 语句
  8. 1. 基本语法
  9. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12677686/1633932337952-ba164dfc-7102-4709-9550-f64bc534e003.png#clientId=u2c9c6edd-091e-4&from=paste&height=57&id=u6da597e2&margin=%5Bobject%20Object%5D&name=image.png&originHeight=61&originWidth=533&originalType=binary&ratio=1&size=36808&status=done&style=shadow&taskId=u48f0c50a-72b2-497d-9a4c-da1315e6efe&width=500)
  10. 2. 案例演示
  11. ```sql
  12. -- delete 语句演示
  13. -- 删除表中名称为’老妖怪’的记录。
  14. DELETE FROM employee
  15. WHERE user_name = '老妖怪';
  16. -- 删除表中所有记录, 老师提醒,一定要小心
  17. DELETE FROM employee;
  18. -- Delete 语句不能删除某一列的值(可使用 update 设为 null 或者 '')
  19. UPDATE employee SET job = '' WHERE user_name = '老妖怪';
  20. SELECT * FROM employee
  21. -- 要删除这个表
  22. DROP TABLE employee;
  1. 使用细节
  • 如果不使用where子句,将删除表中所有数据。
  • Delete语句不能删除某一列的值(可使用update设为null或者’’)
  • 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。drop table表名;

9.4 Select 语句 【重要!】

  1. 基本语法

image.png

  1. 注意事项
  • Select 指定查询哪些列的数据。
  • colum 指定列名。
    • 号代表查询所有列。
  • From 指定查询哪张表。
  • DISTINCT 可选,指显示结果时,是否去掉重复数据
    1. -- select 语句【重点 难点】
    2. CREATE TABLE student(
    3. id INT NOT NULL DEFAULT 1,
    4. NAME VARCHAR(20) NOT NULL DEFAULT '',
    5. chinese FLOAT NOT NULL DEFAULT 0.0,
    6. english FLOAT NOT NULL DEFAULT 0.0,
    7. math FLOAT NOT NULL DEFAULT 0.0
    8. );
    9. INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'韩顺平',89,78,90);
    10. INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'张飞',67,98,56);
    11. INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'宋江',87,78,77);
    12. INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'关羽',88,98,90);
    13. INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'赵云',82,84,67);
    14. INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'欧阳锋',55,85,45);
    15. INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
    16. INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,'韩信',45,65,99);
    17. SELECT * FROM student;
    18. -- 查询表中所有学生的信息。
    19. SELECT * FROM student;
    20. -- 查询表中所有学生的姓名和对应的英语成绩。
    21. SELECT `name`,english FROM student;
    22. -- 过滤表中重复数据 distinct
    23. SELECT DISTINCT english FROM student;
    24. -- 要查询的记录,每个字段都相同,才会去重
    25. SELECT DISTINCT `name`, english FROM student;
  1. 查询符合指定列条件的数据

image.png

  1. 在 select 语句中可使用 as 语句
    image.png

    1. -- select 语句的使用
    2. -- 统计每个学生的总分
    3. SELECT `name`, (chinese+english+math) FROM student;
    4. -- 在所有学生总分加 10 分的情况
    5. SELECT `name`, (chinese + english + math + 10) FROM student;
    6. -- 使用别名表示学生分数。
    7. SELECT `name` AS '名字', (chinese + english + math + 10) AS total_score
    8. FROM student;
    9. -- 求某一列的和
    10. SELECT SUM(math) FROM student;
  2. 在 where 子句中经常使用的运算符

image.png

  1. -- select 语句
  2. -- 查询姓名为赵云的学生成绩
  3. SELECT * FROM student
  4. WHERE `name` = '赵云';
  5. -- 查询英语成绩大于 90 分的同学
  6. SELECT * FROM student
  7. WHERE english > 90;
  8. -- 查询总分大于 200 分的所有同学
  9. SELECT * FROM student
  10. WHERE (chinese + english + math) > 200;
  11. -- 查询 math 大于 60 并且(and) id 大于 4 的学生成绩
  12. SELECT * FROM student
  13. WHERE math >60 AND id > 4;
  14. -- 查询英语成绩大于语文成绩的同学
  15. SELECT * FROM student
  16. WHERE english > chinese;
  17. -- 查询总分大于 200 并且 数学成绩小于语文成绩,的姓赵的学生.
  18. -- 赵% 表示 名字以韩开头的就可以
  19. SELECT * FROM student
  20. WHERE (chinese + english + math) > 200 AND
  21. math < chinese AND `name` LIKE '赵%';
  22. -- 查询英语分数在 8090 之间的同学。
  23. SELECT * FROM student
  24. WHERE english >= 80 AND english <= 90;
  25. SELECT * FROM student
  26. WHERE english BETWEEN 80 AND 90; -- between .. and .. 闭区间
  27. -- 查询数学分数为 89,90,91 的同学。
  28. SELECT * FROM student
  29. WHERE math = 89 OR math = 90 OR math = 91;
  30. SELECT * FROM student
  31. WHERE math IN (89, 90, 91);
  32. -- 查询所有姓李的学生成绩。
  33. SELECT * FROM student
  34. WHERE `name` LIKE '韩%';
  35. -- 查询数学分>80,语文分>80 的同学
  1. 使用order by 子句排序查询结果

image.png

  • Order by 指定排序的列,排序的列既可以是表中的列名,也可以是 select 语句后指定的列名。
  • Asc 升序[默认]、Desc 降序
  • ORDER BY 子句应位于 SELECT 语句的结尾。
    1. -- 演示 order by 使用
    2. -- 对数学成绩排序后输出【升序】。
    3. SELECT * FROM student
    4. ORDER BY math;
    5. -- 对总分按从高到低的顺序输出 [降序] -- 使用别名排序
    6. SELECT `name` , (chinese + english + math) AS total_score FROM student
    7. ORDER BY total_score DESC;
    8. -- 对姓韩的学生成绩[总分]排序输出(升序) where + order by
    9. SELECT `name`, (chinese + english + math) AS total_score FROM student
    10. WHERE `name` LIKE '韩%'
    11. ORDER BY total_score;

学习参考(致谢):

  1. B站 @程序员鱼皮 Java学习一条龙
  2. B站 @韩顺平 零基础30天学会Java