零基础学 MySQL(基础版)

零基础学 MySQL(基础版)

1. 引出

思考一个问题:

淘宝网,京东、微信,抖音 都有各自的功能,那么当我们退出系统的时候,下次再访问时,为什么信息还存在?

2. 解决之道

2.1 解决之道—文件、数据库

  1. 为了解决上述问题,使用更加利于管理数据的东东-数据库,它能更有效的管理数据。

  2. 举一个生活化的案例说明:

    如果说 图书馆是保存书籍的,那么数据库就是保存数据的。

2.2 MySQL 数据库的安装和配置(安装演示)

详见我单独发的《MySQL-5.7.19版本安装详解》

2.3 使用命令行窗口连接MYSQL 数据库[示意图]

2.4 操作示意图

3. 图形化MySQL的管理软件

  1. 在我们实际开发中,会用到一些图形化MySQL的管理软件

  2. 其中用的比较多的是Navicat和SQLyog

  3. 这两个软件安装的方式就是傻瓜式安装,不做过多讲解

  4. 下载地址:

    1. Navicat地址:http://www.navicat.com.cn/products/

    2. SQLyog下载地址:https://sqlyog.en.softonic.com/

  5. 我这里就先用SQLyog操作了

  6. SQLyog安装完以后打开,新建一个本地的MySQL

  7. 然后电脑ip那里可以填写localhost或者127.0.0.1(电脑本机ip),密码可以填写上去也可以不填,其他都不用动,点连接就行

  8. 设置完以后,即可登录MySQL;注意:一定要保证MySQL 服务是运行的状态!

4. 数据库三层结构

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

5. 数据在数据库中的存储方式

6. SQL 语句分类

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

7. 创建数据库

  1. 基本语法:

说明:

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

练习:

  1. 练习:创建一个名称为sys_db01的数据库。[图形化和指令 演示)
  2. 创建一个使用utf8字符集的sys_db02数据库
  3. 创建一个使用utf8字符集,并带校对规则的sys_db03数据库
  4. 演示如下:
#演示创建数据库
#1. 练习:创建一个名称为sys_db01的数据库。[图形化和指令 演示)

#使用指令创建数据库
CREATE DATABASE sys_db01
#删除数据库
DROP DATABASE sys_db01

#2. 创建一个使用utf8字符集的sys_db02数据库

CREATE DATABASE sys_db02 CHARACTER SET utf8

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

CREATE DATABASE sys_db03 CHARACTER SET utf8 COLLATE utf8_bin
  1. 直接生成了3个数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IslQmR6l-1686661207668)(E:\Java study\Markdown\本地图片\演示创建数据库.png)]

  1. 这里稍微提一下校对规则
# 校对规则 utf8_bin 区分大小写	默认utf8_general_ci 不区分大小写

一、当我们在sys_db02数据库中创建一个表t1时,创建时啥都不设置的话,校验规则就是默认utf8_general_ci 不区分大小写

在表t1里面添加两个数据

现在我们进行查询

# 下面是一条查询的sql , selset 查询 * 表示所有字段 FROM 从哪个表查
# WHERE 从哪个字段 NAME = 'jack' 查询名字是 jack
SELECT * 
	FROM t1 
	WHERE NAME = 'jack'

查询结果如下

二、当我们在sys_db03数据库中创建一个表t1时,创建时啥都不设置的话,校验规则就是默认utf8_bin区分大小写

在表t1里面添加两个数据(与上面相同)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aHXgHlHw-1686661207670)(E:\Java study\Markdown\本地图片\t1的数据.png)]

现在我们进行查询

# 下面是一条查询的sql , selset 查询 * 表示所有字段 FROM 从哪个表查
# WHERE 从哪个字段 NAME = 'jack' 查询名字是 jack
SELECT * 
	FROM t1 
	WHERE NAME = 'jack'

查询结果如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZNqHwDO-1686661207671)(E:\Java study\Markdown\本地图片\sys_db03的t1的查询结果.png)]

8. 查看,删除数据库

  1. 基本语法

练习:

  1. 查看当前数据库服务器中的所有数据库
  2. 查看前面创建的sys_db01数据库的定义信息
  3. 删除前面创建的sys_db01数据库
  4. 演示如下
# 演示删除和查询数据库
#1. 查看当前数据库服务器中的所有数据库
SHOW DATABASES 
#2. 查看前面创建的hsp db01数据库的定义信息
SHOW CREATE DATABASE ‘sys_db01‘

#说明:在创建数据库,表的时候,为了规避关键字,可以使用反引号解决

#3. 删除前面创建的hsp db01数据库
DROP DATABASE sys_db01

查看当前数据库服务器中的所有数据库示意图

查看前面创建的hsp db01数据库的定义信息示意图

删除前面创建的hsp db01数据库示意图

9. 备份恢复数据库

  1. 备份数据库(注意:在DOS执行命令行

    mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sq

  2. 恢复数据库(注意: 进入Mysql命令行再执行)

    Source 文件名.sgl

练习:

  1. database03.sql 备份sys_db02 库中的数据,并恢复
  2. 先删除原先的数据库sys_db02
#删除数据库
DROP DATABASE sys_db02
  1. 第一个恢复方法:先进入到mysql命令行,然后再mysql命令行输入source f:\bak.sql (source 备份文件的地址+名字)
  2. 第二个恢复方法:直接打开刚刚备份的bak.sql , 然后将里面的内容全部复制到查询编辑器里面,然后执行就能恢复
#恢复数据库(注意:进入mysql命令行再执行)
source f:\\bak.sql

#第二个恢复方法,直接将bak.sql的内容放到查询编辑器中执行

10. 备份恢复数据库的表

  1. 备份数据库中的表格就是备份数据库的命令不要输-B,后面写上数据库+表名
mysqldump -u 用户名 -p密码 数据库 表12 表n > d:文件名sq
  1. 小练习:备份数据库sys_db03中的表t1
#直接在命令行输入mysqldump -U root -p sys_db03 t1 > f:\\table03.sql就备份好了

11. 创建表 (按课程大纲顺序)

  1. 基本语法

  1. 注意: sys_db02创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。

    例: 下面那个user表

    id 整形 [图形化,指令]

    name 字符串

    password 字符串

    birthday 日期

CREATE TABLE `user`(
	id INT,
	`name` VARCHAR(255),
	`password` VARCHAR(255),
	birthday DATE)
	CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

然后在sys_db02页面执行这行命令,就创建成功了

12. Mysql 常用数据类型(列类型)

12.1 简介

  1. Mysql 常用数据类型(也叫列类型)分为数值类型、文本类型、二进制类型和时间日期
  2. 数值类型又分为整型和小数类型:
    1. 整型有:
      1. tinyint [1个字节]
      2. smallint [2个字节]
      3. mediumint [3个字节]
      4. int [4个字节]
      5. bigint [8个字节]
    2. 小数类型有:
      1. float [单精度 4个字节]
      2. double [双精度 8个字节]
      3. decimal [M,D] [大小不确定,由 M D确定]
  3. 文本类型(也叫字符串类型):
    1. char (0~255)
    2. varchar (0~25535) [0~2^16-1]
    3. text [0~2^16-1]
    4. longtext [0~2^32-1]
  4. 二进制类型:
    1. blob [0~2^16-1]
    2. longblob [0~2^32-1]
  5. 日期类型:
    1. date [日期 存放 年月日]
    2. time [存放 时分秒]
    3. datetime [存放 年月日 时分秒 YYYY-MM-DD-HH:MM:ss]
    4. timestamp [时间戳]
    5. year [存放年]
  6. 以上就是Mysql 最常用数据类型(列类型)

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

说明

  1. 使用规范:在能够满足需求的情况下,尽量选择占用空间小的类型

  1. 应用实例:使用tinyint来演示一下范围
#演示整型
#使用tinyint来演示范围 有符号 -128~127  没有符号 0~255
#表的字符集、校验规则,存储引擎使用默认
# 1. 如果没有指定 unsigned ,则 TINYINT 就是有符号
# 2. 如果指定 unsigned , 则 TINYINT 就是无符号 0-255 
CREATE TABLE t3(
	id TINYINT);#有符号
CREATE TABLE t4(
	id TINYINT UNSIGNED);#无符号
	
INSERT INTO t3 VALUES(-128);#非常简单的添加语句

INSERT INTO t4 VALUES(0);#非常简单的添加语句

SELECT * FROM t3;
SELECT * FROM t4;

12.3 型如何定义一个无符号的整数

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

12.4 数值型(bit)的使用

  1. 基本使用

    mysql> create table t05 (num bit(8));

    mysql> insert into t05 (1, 3);

    mysql> insert into t05 values(2, 65);

  2. 细节说明

    • bit 字段显示时,按照 位 的方式去显示;
    • 查询的时候仍然可以用使用 添加的数值;
    • 如果一个值只有 0 ,1 可以考虑使用 bit(1) ,可以节约空间;
    • 位类型 bit(M) M指定位数,默认值是1,范围是1-64
    • 在实际开发中使用的不多
  3. 演示:

#演示 bit 类型使用
#说明
# 1. bit(m) m在 1-64
# 2. 添加数据范围
# 3. 显示按照bit
# 4. 查询时,仍然可以按照数值来查询
CREATE TABLE t05(num BIT(8));
INSERT INTO t05 VALUES(255);
SELECT * FROM t05;
SELECT * FROM t05 WHERE num = 1;

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

  1. FLOAT/DOUBLE [UNSIGNEDI

    1. Float 单精度精度,
    2. Double 双精度
  2. DECIMAL [M,D] [UNSIGNED]

    • 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。
    • 如果D是0,则值没有小数点或分数部分。M最大65。D最大是30。如果D被省略,默认是0。如果M被省略,默认是10。
    • 建议:如果希望小数的精度高,推荐使用decimal
  3. 演示decimal类型、float、double使用

#演示decimal类型、floatdouble使用

#创建表
CREATE TABLE t06(
	num1 FLOAT,
	num2 DOUBLE,
	num3 DECIMAL(30,20));
	
#添加数据
INSERT INTO t06 VALUES(88.151351516164161,
	88.151351516164161,88.151351516164161);

SELECT * FROM t06
  1. 可以看到表格显示float精度很低,decimal精度最高

  1. decimalye可以存放特别大的数,但是float和double不能存放特别大的数
#decimal可以存放很大的数
CREATE TABLE t07(
	num DECIMAL(65))
INSERT INTO t07 VALUES(151154111544152148154164616484165184);
SELECT * FROM t07;
  1. 所以,如果要存放特别大的数,或者精度特别高的数就用decimal;如果要求没那么高的话,一般用double就够用了。

12.6 字符串的基本使用

  1. CHAR(size)

    固定长度字符串 最大255 字符

  2. VARCHAR(size)

    0~65535可变长度字符串 最大65532字节 [utf8编码最大21844字符 1-3个字节用于记录大小]

  3. 应用案例 charVarchar.sql 文件

#演示字符串类型使用 char varchar
#注释的快捷键 shift+ctrl+c
#取消注释 shift+ctrl+r
-- 1. CHAR(size)
--    固定长度字符串 最大255 字符
-- 2. VARCHAR(size) 
--    0~65535可变长度字符串 最大65532字节 [utf8编码最大21844字符 1-3个字节用于记录大小]
-- 如果表的编码为 utf8  varchar(size)=(65535-3)/3 = 21844
-- 如果表的编码为 gbk  varchar(size)=(65535-3)/2 = 32766

CREATE TABLE t08(
	`NAME` CHAR(255));
	
CREATE TABLE t09(
	`name` VARCHAR(21844));
	
CREATE TABLE t10(
	`name` VARCHAR(32766) CHARSET gbk);

12.7 字符串使用细节

细节1 charVarcharDetail.sql

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

细节2

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

细节3

什么时候使用 char,什么时候使用varchar1.

  1. 如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等char(32)
  2. 如果一个字段的长度是不确定,我们使用varchar ,比如留言,文章
  3. 查询速度: char > varchar

细节4

  1. 在存放文本时,也可以使用Text 数据类型.可以将TEXT列视为VARCHAR列,注意 Text 不能有默认值.大小 0-2^16 字节
  2. 如果希望存放更多字符,可以选择MEDIUMTEXT 0-2^24 或者 LONGTEXT O~2^32
#细节1char(4)varchar(4) 这个4表示的是字符,而不是字节
CREATE TABLE t11(
	`name` CHAR(4));
INSERT INTO t11 VALUES('abcd');#如果是5个就存放失败
SELECT * FROM t11;

CREATE TABLE t12(
	`name` VARCHAR(4));
INSERT INTO t12 VALUES('大家好a')#如果是5个就存放失败
SELECT * FROM t12;

#细节4:
#如果varchar不够用,可以考虑mediumtext或者longtext
#如果想简单点,可以直接使用text
CREATE TABLE t13(content1 TEXT,content2 MEDIUMTEXT,content3 LONGTEXT);
INSERT INTO t13 VALUES('sys学java','sys学java加油','sys学java~~~');
SELECT * FROM t13;

12.8 日期类型的基本使用

CREATE TABLE birthday6(

​ t1 DATE, t2 DATETIME,

​ t3 TIMESTAMP NOT NULL DEFAULT

​ CURRENT TIMESTAMP ON UPDATE

​ CURRENT TIMESTAMP ); timestamp时间截

mysql> INSERT INTO birthday (t1,t2)

VALUES(‘2022-11-11’,‘2022-11-11 10:10:10’);

日期类型的细节说明

TimeStamp在Insert和update时,自动更新datetime.sql

#演示时间相关的类型
#创建一张表 , date ,datetime , timestamp
CREATE TABLE t14(
	birthday DATE,-- 生日
	job_time DATETIME,-- 记录年月日 时分秒 
	login_time TIMESTAMP 
	NOT NULL DEFAULT CURRENT_TIMESTAMP 
	ON UPDATE CURRENT_TIMESTAMP);-- 登陆时间,如果希望login_time列自动更新
	
SELECT * FROM t14;

INSERT INTO t14 (birthday,job_time) 
	VALUES('2023.6.1','2023.6.1 10:10:10');
-- 如果我们更新了 t14表的某条记录,login_time列会自动的以当前的时间进行更新

13. 创建表练习

创建一个员工表 emp (课堂练习),选用适当的数据类型 createtable.sql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2ccHj1x-1686661207672)(E:\Java study\Markdown\本地图片\创建表练习.png)]

代码如下:

#创建一个员工表 emp (课堂练习),选用适当的数据类型
-- 字段	属性
-- id	整形
-- name	字符型
-- sex	字符型
-- brithday	日期型(DATE)
-- entry date	日期型(DATE)
-- job	字符型
-- Salary	小数型
-- resume	文本型
CREATE TABLE `emp`(
	id INT,
	`name` VARCHAR(32),
	sex CHAR(1),
	birthday DATE,
	entry_date DATETIME,
	job VARCHAR(32),
	salary FLOAT,
	`resume` TEXT)
	CHARSET utf8 COLLATE utf8_bin ENGINE INNODB;
-- 添加一条记录
INSERT INTO `emp`
	VALUES(168,'张三','男','1993-11-26',
	'2023-7-11 8:00:00','java','15000','java');
	
-- 查询
SELECT * FROM `emp`;

效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6g5NI52C-1686661207673)(E:\Java study\Markdown\本地图片\创建表emp.png)]

14. 修改表

14.1 基本介绍

使用 ALTER TABLE 语句追加,修改,或删除列的语法:

修改表名: Rename table 表名 to 新表名

修改表字符集: alter table 表名 character set 字符集:

修改表列名:alter table user change column name username varchar(20);

14.2 应用实例

  1. 员工表emp的上增加一个image列,varchar类型(要求在resume后面)
  2. 修改job列,使其长度为60。
  3. 删除sex列。
  4. 表名改为employee。
  5. 修改表的字符集为utf8
  6. 列名name修改为user name
  7. 代码演示如下:
#修改表的操作练习
-- 1. 员工表emp的上增加一个image列,varchar类型(要求在resume后面)
ALTER TABLE emp  -- 修改表emp
	-- 增加 image列,varchar类型,不允许为空,后面加个空字符串
	ADD image VARCHAR(32) NOT NULL DEFAULT '' 
	AFTER RESUME -- 加在resume字段后面
DESC employee -- 显示表结构,可以查看表的所有列
-- 2. 修改job列,使其长度为60。
ALTER TABLE emp
	MODIFY job VARCHAR(60) NOT NULL DEFAULT''
-- 3. 删除sex列。
ALTER TABLE emp
	DROP sex
-- 4. 表名改为employee。
RENAME TABLE emp TO employee
-- 5. 修改表的字符集为utf8
ALTER TABLE employee CHARACTER SET utf8
-- 6. 列名name修改为user name
ALTER TABLE employee
	CHANGE `name` user_name VARCHAR(64) NOT NULL DEFAULT ''

15. 数据库CRUD语句(增删改查)

数据库C[create]R[read]U[update]D[delete]语句

  1. Insert语句 (添加数据)
  2. Update语句 (更新数据)
  3. Delete语句 (删除数据)
  4. Select语句 (找数据)

15.1 Insert 语句

  1. 使用 INSERT 语句向表中插入数据。insert.sql

练习1:

  1. 创建一张商品表goods (id int,goods_name varchar(10) ,price double );
  2. 添加2条记录
# 练习 insert 语句
-- 1. 创建一张商品表goods (id int,goods_name varchar(10) ,price double );
-- 2. 添加2条记录
CREATE TABLE goods(
	id INT,
	goods_name VARCHAR(10),
	price DOUBLE);
-- 添加数据
INSERT INTO `goods`(id,goods_name,price)
	VALUES(1,'小米手机',1999);
	
INSERT INTO `goods`(id,goods_name,price)
	VALUES(2,'苹果手机',9999);

-- 查阅
SELECT * FROM goods;

效果如下

练习2:

  1. 使用insert 语句向上面做的表employee 中插入 2 个员工的信息。

15.2 insert 细节说明

  1. 插入的数据应与字段的数据类型相同。

    – 比如 把 ‘abc’ 添加到 int 类型会错误

  2. 数据的长度应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中。

  3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。

  4. 字符和日期型数据应包含在单引号中。

  5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)

  6. insert into tab_name (列名…) values (),(),() 形式添加多条记录

  7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称

  8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错

    – 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null

    – 如果我们希望指定某个列的默认值,可以在创建表时指定

  9. 演示如下:

#说明 insert 语句的细节
CREATE TABLE goods2(
	id INT,
	goods_name VARCHAR(10),
	price DOUBLE NOT NULL DEFAULT 100);
-- 1. 插入的数据应与字段的数据类型相同。
	-- 比如 把 'abc' 添加到 int 类型会错误
INSERT INTO `goods2`(id,goods_name,price)
	VALUES('abc','小米手机',1999);-- 会直接报错
	
-- 2. 数据的长度应在列的规定范围内,例如:不能将一个长度为 80 的字符串加入到长度为 40 的列中。
INSERT INTO `goods2`(id,goods_name,price)
	VALUES(3,'锤子手机锤子手机锤子手机锤子手机',1999);-- goods_name的长度为10,超过范围
	
-- 3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。
INSERT INTO `goods2`(id,goods_name,price)
	VALUES('小米手机',1,1999);-- 位置不对应
	
-- 4. 字符和日期型数据应包含在单引号中。
INSERT INTO `goods2`(id,goods_name,price)
	VALUES(1,小米手机,1999);-- varchar 不用单引号会报错

-- 5. 列可以插入空值[前提是该字段允许为空],insert into table value(null) 
INSERT INTO `goods2`(id,goods_name,price)
	VALUES(NULL,'小米手机',1999);-- 在定义字段属性的时候后面没有写 not null就可以填空值

-- 6.  insert into tab_name (列名..)	values (),(),()	形式添加多条记录
INSERT INTO `goods2`(id,goods_name,price)
	VALUES(2,'榔头手机',2999),(3,'菠萝手机',2199);

-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
INSERT INTO `goods2`
	VALUES(4,'砖头手机',1999);

-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
	-- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null
	-- 如果我们希望指定某个列的默认值,可以在创建表时指定
INSERT INTO `goods2`(id,goods_name)
	VALUES(5,'椰子手机');
	
SELECT * FROM goods2;

表格如下:

15.3 update 语句

1. 基本语法

2. 基本使用

要求:在上面创建的employee表中修改表中的纪录

  1. 将所有员工薪水修改为5000元。
  2. 将姓名为 张三的员工薪水修改为3000元
  3. 将小明的薪水在原有基础上增加1000元
#演示update语句
-- 1. 将所有员工薪水修改为5000元。
-- [如果没有带where条件,会修改所有的记录,因此用的时候要小心]
UPDATE employee SET salary = 5000
-- 2. 将姓名为 张三的员工薪水修改为3000元
UPDATE employee 
	SET salary = 3000
	WHERE user_name = '张三';
-- 3. 将小明的薪水在原有基础上增加1000元
UPDATE employee 
    SET salary = salary + 1000
	WHERE user_name = '小明';
#查阅
SELECT * FROM employee;

修改后的表格如下:

3. 使用细节
  1. UPDATE语法可以用新值更新原有表行中的各列。
  2. SET子句指示要修改哪些列和要给予哪些值。
  3. WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行(记录),因此操作的时候一定小心。
  4. 如果需要修改多个字段,可以通过 set 字段1=值1,字段2=值2…
  5. 例如下面:
-- 4. 可以修改多个值
UPDATE employee 
	SET salary = salary + 1000,job = '法官'
	WHERE user_name = '小明';

15.4 delete 语句

1. 基本语法

2. 基本使用
  1. 删除表中名称为’小红’的记录。
  2. 删除表中所有记录。
#delete演示
-- 1. 删除表中名称为’小红’的记录。
DELETE FROM employee
	WHERE user_name = '小红';
-- 2. 删除表中所有记录。
DELETE FROM employee

SELECT * FROM employee;
3. 使用细节
  1. 如果不使用where子句,将删除表中所有数据
  2. Delete语句不能删除某一列的值 (可使用update 设为 null 或者’')
-- Delete语句不能删除某一列的值 (可使用update 设为 null 或者'')
UPDATE employee SET job = ''
	WHERE user_name = '小明';
  1. 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。drop table 表名
-- 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。drop table 表名
DROP TABLE employee;

15.5 select 语句

1. 基本语法

2. 注意事项 (创建测试表学生表 )
  1. Select 指定查询哪些列的数据。
  2. column指定列名。
  3. *号代表查询所有列
  4. From指定查询哪张表
  5. DISTINCT可选,指显示结果时,是否去掉重复数据
3. 基本使用
  1. 查询表中所有学生的信息。
  2. 查询表中所有学生的姓名和对应的英语成绩
  3. 过滤表中重复数据 distinct 。
  4. 要查询的记录,每个字段都相同,才会去重
-- select 语句【重点 难点】
CREATE TABLE student(
	id INT NOT NULL DEFAULT 1,
	`NAME` VARCHAR(20) NOT NULL DEFAULT '', 
	chinese FLOAT NOT NULL DEFAULT 0.0, 
	english FLOAT NOT NULL DEFAULT 0.0,
	math FLOAT NOT NULL DEFAULT 0.0);
	
INSERT INTO student(id,`name`,chinese,english,math)
	VALUES(1,'孙裕松',88,85,92),(2,'张飞',78,66,98),
	(3,'关羽',78,75,82),(4,'刘备',98,86,96),
	(5,'吕布',86,90,86),(6,'赵云',92,88,95);

-- 1. 查询表中所有学生的信息。
SELECT * FROM student;
-- 2. 查询表中所有学生的姓名和对应的英语成绩
SELECT `name`,english FROM student;
-- 3. 过滤表中重复数据 distinct 。
SELECT DISTINCT * FROM student
-- 4. 要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT chinese FROM student
4. 使用表达式对查询的列进行运算

5. 在select 语句中可使用 as 语句

6. 练习 select02.sql
  1. 统计每个学生的总分
  2. 在所有学生总分加10分的情况
  3. 使用别名表示学生分数。
-- select 语句【重点 难点】
-- 1. 统计每个学生的总分
SELECT `name`,(chinese+english+math) FROM student
-- 2. 在所有学生总分加10分的情况
SELECT `name` ,(chinese+english+math+10) FROM student
-- 3. 使用别名表示学生分数。
SELECT `name`,(chinese+english+math+10) AS total_score FROM student

效果如下:

7. 在where 子句中经常使用的运算符

8. 练习题:使用where 子句,进行过滤查询 select03.sql

练习题1:

  1. 查询姓名为赵云的学生成绩
  2. 查询英语成绩大于90分的同学
  3. 查询总分大于200分的所有同学

使用where子句:

  1. 查询math大于60 并且(and) id大于90的学生成绩
  2. 查询英语成绩大于语文成绩的同学
  3. 查询总分大于200分 并且 数学成绩小于语文成绩,的
  4. 姓孙的学生
-- select 语句【重点 难点】
-- 1. 查询姓名为赵云的学生成绩
SELECT * FROM student
	WHERE `name` = '赵云';
-- 2. 查询英语成绩大于90分的同学
SELECT * FROM student
	WHERE english > 90;
-- 3. 查询总分大于200分的所有同学
SELECT * FROM student
	WHERE (chinese+english+math)>200;

-- 使用where子句:
-- 1. 查询math大于60 并且(and) id大于5的学生成绩
SELECT * FROM student
	WHERE math > 90 AND id > 5;
-- 2. 查询英语成绩大于语文成绩的同学
SELECT * FROM student
	WHERE english > chinese;
-- 3. 查询总分大于200分 并且 数学成绩小于语文成绩,的姓刘的学生
--% 表示名字以 刘开头的就可以
SELECT * FROM student
	WHERE (chinese+english+math)>200 AND 
	math < chinese AND `name` LIKE '刘%'

练习题2:

  1. 查询英语分数在 80- 90之间的同学
  2. 查询数学分数为89,90,91的同学。
  3. 查询所有姓李的学生成绩。
  4. 查询数学分>80,语文分>80的同学
-- 练习题2-- 1. 查询英语分数在 80- 90之间的同学
SELECT * FROM student
	WHERE english >= 80 AND english <= 90;
SELECT * FROM student
	WHERE english BETWEEN 80 AND 90;
-- 2. 查询英语分数为89,90,91的同学。
SELECT * FROM student
	WHERE english = 89 OR english = 90 OR english = 91;
SELECT * FROM student
	WHERE english IN (89 , 90 , 91);
-- 3. 查询所有姓李的学生成绩。
SELECT * FROM student
	WHERE `name` LIKE '孙%';
-- 4. 查询数学分>80,语文分>80的同学
SELECT * FROM student
	WHERE math >80 AND chinese > 80;

练习题3:

  1. 查询语文分数在 70 - 80之间的同学
  2. 查询总分为189,190,191的同学
  3. 查询所有姓赵 或者 姓张的学生成绩
  4. 查询数学比语文多30分的同学
-- 练习题3-- 1. 查询语文分数在 70 - 80之间的同学
SELECT * FROM student
	WHERE chinese IN (70,80);
-- 2. 查询总分为189,190,191的同学
SELECT * FROM student
	WHERE (chinese+english+math) IN (189,190,191);

-- 3. 查询所有姓赵 或者 姓张的学生成绩
SELECT * FROM student
	WHERE `name` LIKE '赵%' OR `name` LIKE '张%';
-- 4. 查询数学比语文多30分的同学
SELECT * FROM student
	WHERE (math-chinese) >= 30;
9. 使用order by 子句排序查询结果
  1. 基本语法

  1. 基本介绍

    1. Order by 指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名。
    2. Asc 升序[默认]、Desc 降序
    3. ORDER BY 子句应位于SELECT语句的结尾
  2. 练习:

    1. 对数学成绩排序后输出[升序]
    2. 对总分按从高到低的顺序输出
    3. 对姓李的学生成绩排序输出(升序)
    -- 演示 order by使用
    -- 1. 对数学成绩排序后输出[升序]
    SELECT * FROM student
    	ORDER BY math;
    -- 2. 对总分按从高到低的顺序输出
    SELECT `name`,(chinese+english+math) AS total_score FROM student
    	ORDER BY total_score DESC;
    -- 3. 对姓张的学生成绩排序输出(升序)
    SELECT `name` ,(chinese + english + math) AS total_score FROM student
    	WHERE `name` LIKE '张%'
    	ORDER BY total_score ASC;
    

16. 函数

16.1 合计/统计函数

1. count
1. 基本语法

2. 情景案例
  1. 统计一个班级共有多少学生?
  2. 统计数学成绩大于90的学生有多少个?
  3. 统计总分大于250的人数有多少?
  4. count(*)和 count(列) 的区别
# 演示 mysql 的统计函数的使用
-- 1. 统计一个班级共有多少学生?
SELECT COUNT(*) FROM student;
-- 2. 统计数学成绩大于90的学生有多少个?
SELECT COUNT(*) FROM student
	WHERE math > 90;
-- 3. 统计总分大于250的人数有多少?
SELECT COUNT(*) FROM student
	WHERE (chinese + english + math) > 250;
-- 4. count(*)count() 的区别
-- count(*) 返回满足条件的记录的行数
-- count():统计满足条件的某列有多少个,但是会排出null

CREATE TABLE t15(
	id VARCHAR(10));
INSERT INTO t15 VALUES ('jack');
INSERT INTO t15 VALUES ('lucy');
INSERT INTO t15 VALUES ('john');
INSERT INTO t15 VALUES ('hebe');
INSERT INTO t15 VALUES (NULL);

SELECT * FROM t15;

SELECT COUNT(*) FROM t15;-- 5
SELECT COUNT(id) FROM t15;-- 4
2. sum
1. 基本语法

Sum函数返回满足where条件的行的和: 一般使用在数值列

2. 情景案例
  1. 统计一个班级数学总成绩?
  2. 统计一个班级语文、英语、数学各科的总成绩
  3. 统计一个班级语文、英语、数学的成绩总和
  4. 统计一个班级语文成绩平均分

注意:sum仅对数值起作用,没有意义

注意:对多列求和,“,”号不能少。

-- 演示 sum的使用
-- 1. 统计一个班级数学总成绩?
SELECT SUM(math) FROM student;
-- 2. 统计一个班级语文、英语、数学各科的总成绩
SELECT SUM(math) AS math_total,SUM(english) AS english_total,
	SUM(chinese) AS chinese_total FROM student;
-- 3. 统计一个班级语文、英语、数学的成绩总和
SELECT SUM(math + english + chinese) AS total_score FROM student;
-- 4. 统计一个班级语文成绩平均分
SELECT SUM(chinese)/COUNT(*) FROM student;
3. avg
1. 基本语法

AVG函数返回满足where条件的一列的平均值

2. 情景案例
  1. 求一个班级数学平均分?
  2. 求一个班级总分平均分
-- 演示avg的使用
-- 1. 求一个班级数学平均分?
SELECT AVG(math) FROM student;
-- 2. 求一个班级总分平均分
SELECT AVG(math + chinese + english) FROM student;
4. max/min
1. 基本语法

Max/min函数返回满足where条件的一列的最大/最小值

2. 情景案例
  1. 求班级最高分和最低分(数值范围在统计中特别有用)
  2. 求班级数学最高分和最低分
-- 演示 max/min 的使用
-- 1. 求班级最高分和最低分(数值范围在统计中特别有用)
SELECT 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dominator945

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

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

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

打赏作者

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

抵扣说明:

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

余额充值