上一篇:数据库入门基础
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表的增删查改(提高篇)