一、CRUD
注释:在SQL中可以使用“--空格+描述”来表示注释说明
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写
二、新增(Create)
已有的表结构和表数据:
(1)语法
INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...
(2)单行数据+全列插入
语法:insert into 表名 values(要插入的数据, ...)
注意:插入的数据顺序要和表结构相同,不然插入会失败
代码展示:
insert into books values('数学', '张三', 6.66, '数学类'); insert into books values('英语', '李四', 8.88, NULL);
结果如下:
(3)多行数据+指定列插入
语法:insert into 表名 (指定的列名, ...) values(指定列名数据)
代码展示
insert into books (name, price, sort) values('语文', 5.55, '语文类'), ('物理', 7.77, '物理类');
结果如下:
三、查询(Retrieve)
(1)语法
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
(2)全列查询
注意:select查询操作的全都是临时表,不会改变原本的数据
语法:select * from 表名
代码展示:
select * from books;
结果如下:
注意:通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;(要处理的信息太多,服务器可能会堵塞,大量的硬盘IO和网络IO就可能把硬盘或者网卡的宽带给吃满,一旦宽带吃满了,此时服务器就无法正常响应其他的客户端的请求了,在其他的客户端视野中,就会认为服务器挂了)
-- 2. 可能会影响到索引的使用
(3)指定列查询
语法:select 指定的列名,... from 表名
代码展示:
select name, author, price from books;
结果如下:
注意:指定列查询可以不按这个表的列顺序查询,如图
(4)查询字段为表达式
1、表达式不包含字段:
语法:select 表达式, ... from books
代码演示:
select name, price, 10 from books;
结果如下
因为没有10,所以会创建一个字段10,下面都放10
2、表达式包含一个字段
语法:select 含有一个字段的表达式, ... froms 表名
代码演示:
select name, author, price + 10 from books;
结果如下:
表结构如下:
3、表达式包含多个字段
语法:select 含有多个字段的表达式,... from 表名
整型数据代码演示:
select name, chinese + math + english from report;
结果如下:
不是整型数据代码演示:
select price, name + author + sort from books;
结果如下:
可以看到,表达式包含多行字段,有只要有NULL都为NULL,字符串相加等于0的现象
(5)别名
语法:select 列名,... as 别名 from report
注意(as可以不加,但是加上更好,容易区分)
代码演示:
select id, chinese + math + english as 总分 from report;
结果如下:
(6)去重:DISTINCT
现有的表:
语法:select distinct 列名,... from 表名
代码展示:
select distinct math from exam_result;
结果如下:
(7)排序:ORDER BY
1、语法:
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
2、升序
语法:select * (或者其他列名也可以) from 表名 order by 列名
代码展示:
select * from exam_result order by math;
结果如下:
3、降序
语法:select * (或者其他列名也可以) from 表名 order by 列名 desc
代码展示:
select * from exam_result order by math desc;
结果如下:
4、使用表达式及别名排序
语法:select 列名, 表达式 from 表名 order by 表达式;
代码展示:
select name, math + chinese + english as total from exam_result order by math + chinese + english;
结果如下:
注意:
这里order by后面可以使用别名
5、可以对多个优先级进行排序,排序优先级随书写顺序
语法:select 要查询的列 exam_result order by 列名,列名...;
代码演示:
select * from exam_result order by math, english;
结果如下:
(8)条件查询:WHERE
注意:where条件可以用表达式,但不可以用别名