MySQL数据的增删改查

小练习

1.
在数据库
exercise
中创建课程表
stu_course
,包含字段课程编号
(number)
,类型为整数,长度为
11
,是主键,自增长,非空、课程名称
(name)
,类型为字符串,长度为
20
,非空、学分
(score)
,类型
为浮点数,小数点后面保留
2
位有效数字, 长度为
5
,非空

CREATE DATABASE IF NOT EXISTS
exercise
DEFAULT CHARACTER SET
UTF8
COLLATE

UFT8_GENERAL_CI;

USE
exercise;

CREATE TABLE IF NOT EXISTS
stu_course
(

`number`
INT
(
11
)
AUTO_INCREMENT NOT
NULL
PRIMARY KEY COMMENT

课程编号

,

name
VARCHAR
(
20
)
NOT
NULL
COMMENT

课程名称

,

score
FLOAT
(
5
,
2
)
NOT
NULL
COMMENT

学分

)
ENGINE
=
InnoDB
CHARSET
=
UFT8
COMMENT
=

课程表

;

2.
将课程表重命名为
course

ALTER TABLE
stu_score
RENAME AS
course;

3.
在课程表中添加字段学时
(time)
,类型为整数,长度为
3
,非空

ALTER TABLE
course
ADD
`time`
INT
(
3
)
NOT
NULL
COMMENT

学时

;

4.
修改课程表学分类型为浮点数,小数点后面保留
1
位有效数字,长度为
3
,非空

ALTER TABLE
course
MODIFY
score
FLOAT
(
3
,
1
)
NOT
NULL
COMMENT

学分

;

5.
删除课程表

DROP TABLE IF EXISTS
course;

6.
删除数据库
exercise

DROP DATABASE IF EXISTS
exercise;

章节内容

        DML–插入语句
重点

        DML–修改语句
重点

        DML–删除语句
重点

        DQL — 查询语句
重点

        聚合函数
重点

        分组查询
重点

        查询排序
重点

        分页查询
重点

章节目标

        掌握DML–
插入语句

        掌握DML–
修改语句

        掌握DML–
删除语句

        掌握DQL–
查询语句

        掌握聚合函数的使用

        掌握分组查询

        掌握查询排序

        掌握分页查询

第一节 DML语句

1. 什么是DML

DML
全称为
Data Manipulation Language
,表示数据操作语言。主要体现于对表数据的增删改操作。因此
DML
仅包括
INSERT

UPDATE

DELEETE
语句。

2. INSERT语句


需要注意,
VALUES
后的字段值必须与表名后的字段名一一对应

INSERT INTO
表名
(
字段名
1,
字段名
2, …,
字段名
n
)
VALUES
(
字段值
1,
字段值
2, …,
字段值

n
)
;


需要注意,
VALUES
后的字段值必须与创建表时的字段顺序保持一一对应

INSERT INTO
表名
VALUES
(
字段值
1,
字段值
2, …,
字段值
n
)
;


一次性插入多条数据

INSERT INTO
表名
(
字段名
1,
字段名
2, …,
字段名
n
)
VALUES
(
字段值
1,
字段值
2, …,
字段值

n
)
,
(
字段值
1,
字段值
2, …,
字段值
n
)
, … ,
(
字段值
1,
字段值
2, …,
字段值
n
)
;

INSERT INTO
表名
VALUES
(
字段值
1,
字段值
2, …,
字段值
n
)
,
(
字段值
1,
字段值
2, …,
字段值

n
)
, …,
(
字段值
1,
字段值
2, …,
字段值
n
)
;

示例

向课程表中插入数据

INSERT INTO
course
(
`number`
, name, score,
`time`
)
VALUES
(
1
,
‘Java
基础

,
4
,
40
)
;

INSERT INTO
course
VALUES
(
2
,

数据库

,
3
,
20
)
;

INSERT INTO
course
(
`number`
, score, name,
`time`
)
VALUES
(
3
,
5
,
‘Jsp’
,
40
)
;

INSERT INTO
course
(
`number`
, name, score,
`time`
)
VALUES
(
4
,
‘Spring’
,
4
,
5
)
,
(
5
,

‘Spring Mvc’
,
2
,
5
)
;

INSERT INTO
course
VALUES
(
6
,
‘SSM’
,
2
,
3
)
,
(
7
,
‘Spring Boot’
,
2
,
2
)
;

3. UPDATE语句

UPDATE
表名
SET
字段名
1
=
字段值
1
[
,
字段名
2
=
字段值
2, …,
字段名
n
=
字段值
n
] [
WHERE
修改条件
]

3.1 WHERE条件子句


Java
中,条件的表示通常都是使用关系运算符来表示,在
SQL
语句中也是一样,使用
>, =, <=, !=
来表示。不同的是,除此之外,
SQL
中还可以使用
SQL
专用的关键字来表示条件。这些将在后面的
DQL

句中详细讲解。


Java
中,条件之间的衔接通常都是使用逻辑运算符来表示,在
SQL
语句中也是一样,但通常使用
AND来表示逻辑与
(&&)
,使用
OR
来表示逻辑或
(||)

示例

WHERE
time
>
20
&&
time
<
40
;

WHERE
time
>
20
and
time
<
40
;

3.2 UPDATE语句

示例

将数据库的学分更改为
4
,学时更改为
15

UPDATE
course
SET
score
=
4
,
`time`
=
15
WHERE
name
=

数据库

;

4. DELETE语句

DELETE FROM
表名
[
WHERE
删除条件
]
;

示例

删除课程表中课程编号为
1
的数据

DELETE FROM
course
WHERE
`number`
=
1
;

5. TRUNCATE语句


清空表中数据

TRUNCATE
[
TABLE
]
表名
;

示例

清空课程表数据

TRUNCATE
course;

6. DELETE与TRUNCATE区别

        1.DELETE语句根据条件删除表中数据,而
TRUNCATE
语句则是将表中数据全部清空;如果
DELETE

句要删除表中所有数据,那么在效率上要低于
TRUNCATE
语句。

        2.如果表中有自增长列,TRUNCATE
语句会重置自增长的计数器,但
DELETE
语句不会。

        3.TRUNCATE语句执行后,数据无法恢复,而
DELETE
语句执行后,可以使用事务回滚进行恢复。

第二节 DQL语句

1. 什么是DQL

DQL
全称是
Data Query Language
,表示数据查询语言。体现在数据的查询操作上,因此,
DQL
仅包括
SELECT
语句。

2. SELECT语句

SELECT ALL
/DISTINCT
* |
字段名
1
AS
别名
1
[
,
字段名
1
AS
别名
1, …,
字段名
n
AS
别名
n
]

FROM
表名
WHERE
查询条件

解释说明

ALL
表示查询所有满足条件的记录,可以省略;
DISTINCT
表示去掉查询结果中重复的记录

AS
可以给数据列、数据表取一个别名

示例:
从课程表中查询课程编号小于
5
的课程名称

SELECT
name
FROM
course
WHERE
`number`
<
5
;

从课程表中查询课程名称为
“Java
基础

的学分和学时

SELECT
score,
`time`
FROM
course
WHERE
name
=
‘Java
基础

;

3. 比较操作符

MySQL数据的增删改查

示例:
从课程表查询课程名为
NULL
的课程信息

SELECT
*
FROM
course
WHERE
name
IS
NULL
;

示例:
从课程表查询课程名不为
NULL
的课程信息

SELECT
*
FROM
course
WHERE
name
IS NOT
NULL
;

示例:
从课程表查询学分在
2~4
之间的课程信息

SELECT
*
FROM
course
WHERE
score
BETWEEN
2
AND
4
;

示例:
从课程表查询课程名包含
“V”
的课程信息

SELECT
*
FROM
course
WHERE
name
LIKE
‘%v%’
;

示例:
从课程表查询课程名以
“J”
开头的课程信息

SELECT
*
FROM
course
WHERE
name
LIKE
‘J%’
;

示例:
从课程表查询课程名以
“p”
结尾的课程信息

SELECT
*
FROM
course
WHERE
name
LIKE
‘%p’
;

示例:
从课程表查询课程编号为
1,3,5
的课程信息

SELECT
*
FROM
course
WHERE
`number`
IN
(
1
,
3
,
5
)
;

4. 分组

数据表准备:新建学生表
student
,包含字段学号(
no
),类型为长整数,长度为
20
,是主键,自增长,非空;姓名(
name
),类型为字符串,长度为
20
,非空;性别(
sex
),类型为字符串,长度为
2
,默认值为



;年龄(
age
),类型为整数,长度为
3
,默认值为
0
;成绩(
score
),类型为浮点
数,长度为
5
,小数点后面保留
2
位有效数字

DROP TABLE IF EXISTS
student;

CREATE TABLE
student
(

no
BIGINT
(
20
)
AUTO_INCREMENT NOT
NULL
PRIMARY KEY COMMENT

学号,主键

,

name
VARCHAR
(
20
)
NOT
NULL
COMMENT

姓名

,

sex
VARCHAR
(
2
)
DEFAULT



COMMENT

性别

,

age
INT
(
3
)
DEFAULT
0
COMMENT

年龄

,

score
DOUBLE
(
5
,
2
)
COMMENT

成绩

)
ENGINE
=
InnoDB
CHARSET
=
UTF8
COMMENT
=

学生表

;

插入测试数据:

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

张三

,



,
20
,

59
)
;

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

李四

,



,
19
,

62
)
;

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

王五

,

其他

,

21
,
62
)
;

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

龙华

,



,
22
,

75
)
;

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

金凤

,



,
18
,

80
)
;

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

张华

,

其他

,

27
,
88
)
;

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

李刚

,



,
30
,

88
)
;

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

潘玉明

,



,

28
,
81
)
;

INSERT INTO
student
(
no
, name, sex, age, score
)
VALUES
(
DEFAULT
,

凤飞飞

,

其他

,

32
,
90
)
;

4.1 分组查询

SELECT ALL
/DISTINCT
* |
字段名
1
AS
别名
1
[
,
字段名
1
AS
别名
1, …,
字段名
n
AS
别名
n
]

FROM
表名
WHERE
查询条件
GROUP BY
字段名
1
,字段名
2,…,
字段名
n

分组查询所得的结果只是该组中的第一条数据。

示例:
从学生表查询成绩在
80
分以上的学生信息并按性别分组

SELECT
*
FROM
student
WHERE
score
>
80
GROUP BY
sex;

示例:
从学生表查询成绩在
60~80
之间的学生信息并按性别和年龄分组

SELECT
*
FROM
student
WHERE
score
BETWEEN
60
AND
80
GROUP BY
sex, age;

4.2 聚合函数

        COUNT() :
统计满足条件的数据总条数

示例:
从学生表查询成绩在
80
分以上的学生人数

SELECT COUNT
(
*
)
total
FROM
student
WHERE
score
>
80
;

        SUM():
只能用于数值类型的字段或者表达式,计算该满足条件的字段值的总和

示例:
从学生表查询不及格的学生人数和总成绩

SELECT COUNT
(
*
)
totalCount,
SUM
(
score
)
totalScore
FROM
student
WHERE

score
<
60
;

        AVG():
只能用于数值类型的字段或者表达式,计算该满足条件的字段值的平均值

示例:
从学生表查询男生、女生、其他类型的学生的平均成绩

SELECT
sex,
AVG
(
score
)
avgScore
FROM
student
GROUP BY
sex;

        MAX():
只能用于数值类型的字段或者表达式,计算该满足条件的字段值的最大值

示例:
从学生表查询学生的最大年龄

SELECT MAX
(
age
)
FROM
student;

        MIN():
只能用于数值类型的字段或者表达式,计算该满足条件的字段值的最小值

示例:
从学生表查询学生的最低分

SELECT MIN
(
score
)
FROM
student;

4.3 分组查询结果筛选

SELECT ALL
/DISTINCT
* |
字段名
1
AS
别名
1
[
,
字段名
1
AS
别名
1, …,
字段名
n
AS
别名
n
]

FROM
表名
WHERE
查询条件
GROUP BY
字段名
1
,字段名
2,…,
字段名
n
HAVING
筛选条件

分组后如果还需要满足其他条件,则需要使用
HAVING
子句来完成。

示例:
从学生表查询年龄在
20~30
之间的学生信息并按性别分组,找出组内平均分在
74
分以上的组

SELECT
*
FROM
student
WHERE
age
BETWEEN
20
AND
30
GROUP BY
sex
HAVING

avg
(
score
)
>
74
;

5. 排序

SELECT ALL
/DISTINCT
* |
字段名
1
AS
别名
1
[
,
字段名
1
AS
别名
1, …,
字段名
n
AS
别名
n
]

FROM
表名
WHERE
查询条件
ORDER BY
字段名
1
ASC
|
DESC
,字段名
2
ASC
|
DESC
,…,
字段名
n
ASC
|
DESC

ORDER BY
必须位于
WHERE
条件之后。

示例:
从学生表查询年龄在
18~30
岁之间的学生信息并按成绩从高到低排列,如果成绩相同,则按年龄从小到大排列

SELECT
*
FROM
student
WHERE
age
BETWEEN
18
AND
30
ORDER BY
score
DESC
, age
ASC
;

6. 分页

SELECT ALL
/DISTINCT
* |
字段名
1
AS
别名
1
[
,
字段名
1
AS
别名
1, …,
字段名
n
AS
别名
n
]

FROM
表名
WHERE
查询条件
LIMIT
偏移量
,
查询条数

LIMIT
的第一个参数表示偏移量,也就是跳过的行数。

LIMIT
的第二个参数表示查询返回的最大行数,可能没有给定的数量那么多行。

示例:
从学生表分页查询成绩及格的学生信息,每页显示
3
条,查询第
2
页学生信息

SELECT
*
FROM
student
WHERE
score
>=
60
LIMIT
3
,
3
;

注意:

如果一个查询中包含分组、排序和分页,那么它们之间必须按照
分组
->
排序
->
分页
的先后顺序列。

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/bb080ee33a.html