行业知识
MySQL表的增删改查(基础)
2026-11-02 03:47:48
来源:互联网转载
���录
1. CRUD
2. 新增(Create)
2.1 单行数据 + 全列插入
2.2 多行数据 + 指定列插入
3. 查询(Retrieve)
3.1 全列查询
3.2 指定列查询
3.3 查询字段为表达式
3.4 别名
3.5 去重:DISTINCT
3.6 排序:ORDER BY
3.7 条件查询:WHERE
3.8 分页查询:LIMIT
4. 修改(Update)
5. 删除(Delete)
1. CRUD
- 注释:在SQL中可以使用“--空格+描述”来表示注释说明
- CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写
2. 新增(Create)
这里的新增是向表中插入数据
语法:
INSERT INTO 表名 [(列名,列名,......)] VALUES(属性值,属性值,......); [ ]中内容是为了指定列进行插入,是可省略的,如果省略,则value_list(指VALUES( ))中要写出表中全部列的属性值,顺序也要一样。举例:
-- 创建一张学生表 DROP TABLE IF EXISTS student; CREATE TABLE student ( id INT , sn INT comment ' 学号 ' , name VARCHAR ( 20 ) comment ' 姓名 ' , qq_mail VARCHAR ( 20 ) comment 'QQ 邮箱 ' ); 使用 comment 增加字段说明2.1 单行数据 + 全列插入
-- 插入两条记录, value_list 数量必须和定义表的列的数量及顺序一致 INSERT INTO student VALUES ( 100 , 10000 , ' 唐三藏 ' , NULL ); INSERT INTO student VALUES ( 101 , 10001 , ' 孙悟空 ' , '11111' );2.2 多行数据 + 指定列插入
-- 插入两条记录, value_list 数量必须和指定列数量及顺序一致 INSERT INTO student (id, sn, name) VALUES ( 102 , 20001 , ' 曹孟德 ' ), ( 103 , 20002 , ' 孙仲谋 ' );3. 查询(Retrieve)
语法:
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 );3.1 全列查询
-- 通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大; -- 2. 可能会影响到索引的使用。 SELECT * FROM 表名;3.2 指定列查询
-- 指定列的顺序不需要按定义表的列的顺序
SELECT id, name, english FROM exam_result;
3.3 查询字段为表达式
-- 表达式不包含字段 SELECT id, name, 10 FROM exam_result; -- 表达式包含一个字段 SELECT id, name, english + 10 FROM exam_result; -- 表达式包含多个字段 SELECT id, name, chinese + math + english FROM exam_result;3.4 别名
为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称 ,语法:
SELECT 列名 [AS] 别名 [...] FROM 表名;
-- 结果集中,表头的列名 = 别名 SELECT id, name, chinese + math + english 总分 FROM exam_result ;3.5 去重:DISTINCT
使用DISTINCT关键字对某列数据进行去重:
-- id为3,重复了
-- 去重后
3.6 排序:ORDER BY
语法:
-- ASC 为升序(从小到大) -- DESC 为降序(从大到小) -- 默认为 ASC SELECT ... FROM table_name [ WHERE ...] ORDER BY column [ ASC | DESC ], [...]; 1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序 2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
-- 查询同学姓名和 qq_mail ,按 qq_mail 排序显示 SELECT name, qq_mail FROM student ORDER BY qq_mail; SELECT name, qq_mail FROM student ORDER BY qq_mail DESC ;3. 使用表达式及别名排序
-- 查询同学及总分,由高到低 SELECT name, chinese + english + math FROM exam_result ORDER BY chinese + english + math DESC ; SELECT name, chinese + english + math as total FROM exam_result ORDER BY total DESC ;4. 可以对多个字段进行排序,排序优先级随书写顺序
-- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示 SELECT name, math, english, chinese FROM exam_result ORDER BY math DESC , english, chinese;这个查询的意思为,按数学降序排列,在数学成绩相同情况下,再按英语升序排列,在英语成绩相同情况下,再按语文升序排列。
3.7 条件查询:WHERE
比较运算符:
运算符 说明 >, >=, 80 or english > 80 ; -- 观察 AND 和 OR 的优先级: SELECT * FROM exam_result WHERE chinese > 80 or math> 70 and english > 70 ; SELECT * FROM exam_result WHERE (chinese > 80 or math> 70 ) and english > 70 ; - 范围查询
1、BETWEEN ... AND ...
-- 查询语文成绩在 [80, 90] 分的同学及语文成绩 SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90 ; -- 使用 AND 也可以实现 SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese
- 范围查询
上一篇:服务器怎么取出硬盘托盘?