文章目录
一、新增(Create)
语法:
insert into 表名 values()
注意:
()里面的字段的个数和类型要匹配
案例:创建一个表如下结构,再进行操作
1.1 单行数据 + 全列插入
insert into student values(209000836,‘孙悟空’,5896325,‘容园一号263’,2);
效果展示:
1.2 多行数据 + 指定列插入
插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO student (id,name,class_id) VALUES
(102, ‘曹孟德’,1),
(103, ‘孙仲谋’,2);
效果如下:
扩展1:
扩展2:
注意:
具体如何配置,参考以下步骤:
二、查询(Retrieve)
语法:
SELECT
[DISTINCT] {* | {column [, column] …}
[FROM table_name]
[WHERE …]
[ORDER BY column [ASC | DESC], …]
LIMIT …
案例:创建考试成绩表并插入数据,如下
2.1 全列查询
–通常情况下不建议使用 * 进行全列查询
– 1. 查询的列越多,意味着需要传输的数据量越大;
– 2. 可能会影响到索引的使用。(索引待后面课程讲解)
SELECT * FROM exam_result;
效果如下:
注意:
1.全列查找是一个危险操作,生产环境保存的数据量非常大,使用全列查找时,当读取硬盘时会把硬盘IO吃满,返回响应时,网卡的宽带也会被吃满。
2.查找结果是一个临时表对原始数据没有影响,不会保存在硬盘中,而是在内存中临时保存,当进行输出时就被释放了。
2.2 指定列查询
指定列的顺序不需要按定义表的顺序来
SELECT id, name, english FROM exam_result;
2.3 查询字段为表达式
表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
– 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;
效果如下:
注意:
当指定查询字段为表达式时,临时表的结果数据类型不一定和原始数据类型一致,临时表的数据类型会自动适应。
2.4 别名
为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称,语法:
SELECT column [AS] alias_name […] FROM table_name;
结果集中,表头的列名=别名
SELECT id, name, chinese + math + english as 总分 FROM exam_result;
2.5 去重:DISTINCT
SELECT DISTINCT math FROM exam_result;
注意:
多列去重时,每个列的值必须都要相同!! 否则就会如下一样达不到去重效果.
2.6 排序:ORDER BY
语法:
ASC 为升序(从小到大)
– DESC 为降序(从大到小)
– 默认为 ASC
SELECT … FROM table_name [WHERE …]
ORDER BY column [ASC|DESC], […];
- 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
- 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;
- 使用表达式及别名排序
查询同学及总分,由高到低
SELECT name, chinese + english + math FROM exam_result
ORDER BY chinese + english + math DESC;
SELECT name, chinese + english + math total FROM exam_result
ORDER BY total DESC;
- 可以对多个字段进行排序,排序优先级随书写顺序
查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
SELECT name, math, english, chinese FROM exam_result
ORDER BY math DESC, english, chinese;
注意:
1.多列排序时,如果第一个列结果相同,相同结果之间再通过第二个列排序,后面依次
2.如果指定一个列排序,那么相同结果之间的顺序是不可预期的
3.多列排序时,如果第一列已经排好序,就不必再排后面的列了
2.7 条件查询:WHERE
比较运算符:
逻辑运算符:
注:
- WHERE条件可以使用表达式,但不能使用别名。
- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
2.8 分页查询: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)
语法:
UPDATE table_name SET column = expr [, column = expr …]
[WHERE …] [ORDER BY …] [LIMIT …]
案例:
– 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3;
注意:
Update会修改数据库服务器上的原始数据,危险操作,要仔细!!
四、删除(Delete)
语法:
DELETE FROM table_name [WHERE …] [ORDER BY …] [LIMIT …]
注意:
不加where条件的话就是删除整个表的数据!!
五、总结
1、新增
单行插入
insert into 表(字段1, …, 字段N) values (value1, …, value N);
– 多行插入
insert into 表(字段1, …, 字段N) values
(value1, …),
(value2, …),
(value3, …);
2、查询
– 全列查询
select * from 表
– 指定列查询
select 字段1,字段2… from 表
– 查询表达式字段
select 字段1+100,字段2+字段3 from 表
– 别名
select 字段1 别名1, 字段2 别名2 from 表
– 去重DISTINCT
select distinct 字段 from 表
– 排序ORDER BY
select * from 表 order by 排序字段
– 条件查询WHERE:
– (1)比较运算符 (2)BETWEEN … AND … (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR
(8)NOT
select * from 表 where 条件
3、修改
update 表 set 字段1=value1, 字段2=value2… where 条件
4、删除
delete from 表 where 条件