当前位置: 代码迷 >> 综合 >> MySQL:CRUD(增删查改)
  详细解决方案

MySQL:CRUD(增删查改)

热度:76   发布时间:2023-11-29 19:51:11.0

目录

注释说明

一,新增(Create)

1.基本语法:

2.单行输入

3.多行数据+指定列插入

二,查询(Retrieve)

1.基本语法: 

2.全列查询 

3. 指定列查询

4.查询字段为表达式

5.别名

6.去重

7.排序

 8.条件查询(where)

9.分页查询

三,修改(update)

四,删除(delete)


注释说明

在mysql中,-- 注释内容 可以来进行注释

一,新增(Create)

1.基本语法:

INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...

案例:先创建一个学生表

-- 创建一张学生表
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT,
sn INT comment '学号',
name VARCHAR(20) comment '姓名',
qq_mail VARCHAR(20) comment 'QQ邮箱'
);

2.单行输入

-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
INSERT INTO student VALUES (100, 10000, '唐三藏', NULL);
INSERT INTO student VALUES (101, 10001, '孙悟空', '11111');

3.多行数据+指定列插入

-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO student (id, sn, name) VALUES
(102, 20001, '曹孟德'),
(103, 20002, '孙仲谋');

二,查询(Retrieve)

1.基本语法: 

SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

案例:先创建一个考试时间表,并插入数据

-- 创建考试成绩表
DROP TABLE IF EXISTS exam_result;
CREATE TABLE exam_result (
id INT,
name VARCHAR(20),
chinese DECIMAL(3,1),
math DECIMAL(3,1),
english DECIMAL(3,1)
);
-- 插入测试数据
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98.5, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);

2.全列查询 

基本语法:

-- 通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;
-- 2. 可能会影响到索引的使用
select * from table_name;

3. 指定列查询

基本语法:

-- 指定列的顺序不需要按定义表的顺序来
SELECT id, name, english FROM exam_result;

4.查询字段为表达式

基本语法:

-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;

5.别名

解释:为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称

基本语法:

SELECT column [AS] alias_name [...] FROM table_name;

案例:

6.去重

基本语法:

select distinct [查询字段] from table_name where [过滤条件];

我们发现98分重复了

案例:对98进行去重

7.排序

基本语法:

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
  1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
  2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面 
  • -- 查询同学姓名和 qq_mail,按 qq_mail 排序显示(默认升序)
  • -- 查询同学姓名和 qq_mail,按 qq_mail 排序显示(降序)

使用表达式及别名排序


可以对多个字段进行排序,排序优先级随书写顺序(这个顺序大致可以理解为先根据第一条排序语句排序,排完之后如果有相同的时候,再根据第二个排序语句排序)

 8.条件查询(where)

比较运算符

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
BETWEEN a0 AND
a1
范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL 是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字
  • 查询语文成绩>80的同学
  • 查询语文成绩在70到90之间的同学
  • 查询id在(1,3,9)的同学的成绩
  • 查询语文成绩为空的同学
  •  模糊匹配姓孙的同学

 逻辑运算符

运算符 说明
AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)

1. WHERE条件可以使用表达式,但不能使用别名。
2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

  • -- 查询语文成绩大于80分,且英语成绩大于80分的同学

9.分页查询

基本语法:

-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

三,修改(update)

基本语法:

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:给张三的语文成绩修改为60

将孙悟空同学的数学成绩更改为90

将总成绩倒数前三的 3 位同学的数学成绩加上 10 分

四,删除(delete)

基本语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:删除名字为张三的同学

  相关解决方案