MySQL表的增删查改(基本篇)

上一篇:数据库入门基础
MySQL表的增删查改!!!
简单建库建表请见盖盖的上一篇博客!
自己建库建表动手运行⬇

基本操作

一、新增(CREATE)

单行数据 + 全列插入
插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致

INSERT INTO students VALUES (001, 10000, '孙悟空', '111');
INSERT INTO students VALUES (002, 10001, '唐僧', NULL);

多行数据 + 指定列插入
插入的三条记录,value_list 数量必须和指定列数量及顺序一致

INSERT INTO students (sn, name)
VALUES 
(103, "贾宝玉"),
(104, "林黛玉"),
(105, "王熙凤");

因为其他列为说明,都为null。

二、查询(Retrieve)

全列查询

SELECT * FROM exam_result;

但是通常情况下不建议使用全列查询,因为:
·1. 查询的列越多,意味着需要传输的数据量越大;
·2. 可能会影响到索引的使用。

指定列查询
指定列的顺序不需要按定义表的顺序来

SELECT name, 英语 FROM exam_result;
 

查询字段为表达式

SELECT name, 英语, 10 FROM exam_result;
SELECT name, 英语, 英语 + 10 FROM exam_result;
SELECT name, 英语, 英语 + 语文 + 数学 FROM exam_result;

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

SELECT name, 英语 + 语文 + 数学 AS 总分 FROM exam_result;
SELECT name, 英语 + 语文 + 数学 总分 FROM exam_result;

这两种的运行结果是一样的,只是将“英语 + 语文 + 数学”换成了“总分”。

去重DISTINCT
如果数据中有重复的数据需要删除,就可以去重

SELECT DISTINCT 数学 FROM exam_result;

排序:ORDER BY

ASC 为升序(从小到大)
DESC 为降序(从大到小)
默认为 ASC

SELECT * FROM exam_result ORDER BY (语文 + 数学 + 英语);
SELECT * FROM exam_result ORDER BY (语文 + 数学 + 英语) DESC;

注意:
·1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
·2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

使用表达式及别名排序

//查询同学及总分,由高到低
SELECT name, 语文 + 英语 + 数学 FROM exam_result ORDER BY 语文 + 英语 + 数学 DESC;
SELECT name, 语文 + 英语 + 数学 total FROM exam_result ORDER BY total DESC;

可以对多个字段进行排序,排序优先级随书写顺序

//查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示 
SELECT name, 数学, 英语, 语文 FROM exam_result ORDER BY 数学 DESC, 英语, 语文;

条件查询:WHERE

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

基本查询:

SELECT * FROM exam_result WHERE 语文 < 90;
//查询语文成绩 ( < 90 )
SELECT name, 语文, 英语 FROM exam_result WHERE chinese > english;
//查询语文成绩好于英语成绩的同学 
SELECT name, 语文 + 数学 + 英语 总分 FROM exam_result WHERE 语文 + 数学 + 英语 < 200;
//查询总分在 200 分以下的同学

AND与OR:

//查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT * FROM exam_result WHERE 语文 > 80 and 英语 > 80; //查询语文成绩大于80分,或英语成绩大于80分的同学 
SELECT * FROM exam_result WHERE 语文 > 80 or 英语 > 80; //观察AND 和 OR 的优先级: 
SELECT * FROM exam_result WHERE 语文 > 80 or 数学 >70 and 英语 > 70; SELECT * FROM exam_result WHERE (语文 > 80 or 数学 >70) and 英语 > 70;

范围查询:

BETWEEN … AND …

//查询语文成绩在 [80, 90] 分的同学及语文成绩 
SELECT name, 语文 FROM exam_result WHERE 语文 BETWEEN 80 AND 90;
//使用 AND 也可以实现 
SELECT name, 语文 FROM exam_result WHERE 语文 >= 80 AND 语文 <= 90;

IN

//查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩 
SELECT name, 数学 FROM exam_result WHERE 数学 IN (58, 59, 98, 99);
//使用 OR 也可以实现 
SELECT name, 数学 FROM exam_result WHERE 数学 = 58 OR 数学 = 59 OR 数学 = 98 OR 数学 = 99;

模糊查询:LIKE

//% 匹配任意多个(包括 0 个)字符 
SELECT name FROM exam_result WHERE name LIKE '孙%';
//匹配到孙悟空、孙权

//_ 匹配严格的一个任意字符 
SELECT name FROM exam_result WHERE name LIKE '孙_';
//匹配到孙权

NULL 的查询:IS [NOT] NULL

//查询 qq_mail 已知的同学姓名 
SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL; 
//查询 qq_mail 未知的同学姓名 
SELECT name, qq_mail FROM student WHERE qq_mail IS NULL;

分页查询:LIMIT
语法:

//起始下标为 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)

//将孙悟空同学的数学成绩变更为 80 分 
UPDATE exam_result SET math = 80 WHERE name = '孙悟空'; 
//将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分 
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
//将总成绩倒数前三的 3 位同学的数学成绩加上 30 分 
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3; 
//将所有同学的语文成绩更新为原来的 2 倍 
UPDATE exam_result SET chinese = chinese * 2;

四、删除(Delete)

//删除孙悟空同学的考试成绩 
DELETE FROM exam_result WHERE name = '孙悟空'; 
//删除整张表数据
DELETE FROM for_delete;

下一篇:MySQL表的增删查改(提高篇)
在这里插入图片描述

发布了43 篇原创文章 · 获赞 41 · 访问量 1782

猜你喜欢

转载自blog.csdn.net/weixin_45662626/article/details/103428937
今日推荐