表的新增操作
MySQL表一次新增可以插入一行记录,也可以同时插入多行记录,在插入行的同时,我们可以指定插入行包括的列。
1.单行插入
--全列插入+单行插入
insert into table_name values (列1, 列2, ……, 列N);
--指定列插入+单行插入
insert into table_name(列1 ……) values (对应列1 ……);
- 当table_name(表名)后不跟列表时,默认为全列插入,此时插入的行记录内容必须包含所有列,即在数目、类型上和表的所有列一一对应
- 当table_name后跟列表时,为指定列插入,此时插入的行记录不一定要包含表的全部列,而是和table_name后的列表一一对应
--例1:
insert into student values (12013, "大傻春", "男", "信息工程系");
--例2:
insert into student(id, name) values (12014, "王富贵");
2.多行插入
指定列规则和单行插入相同,不过可以同时插入多个行记录
--全列插入+多行插入
insert into table_name values (例1, 列2, …… 列N),
(例1, 列2, …… 列N),
(例1, 列2, …… 列N),
……
(例1, 列2, …… 列N);
--指定列插入+多行插入
insert into table_name(例1, ……) values (例1, ……),
(例1, ……),
(例1, ……),
……
(例1, ……);
--例1:
insert into student values
(12013, "大傻春", "男", "信息工程系"),
(12014, "王富贵", "男", "会计系");
--例2:
insert into student(id, name) values
(12013, "大傻春"),
(12014, "王富贵");
表的查询操作
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
1.全列查询
全列查询是MySQL表查询中最简单的操作,用以显示表中的所有记录,但这其实是一个相当危险的操作,对于大型表来说庞大的数据量会占用相当大的带宽,可能会导致卡死等问题。
select * from table_name;
2.指定列查询
指定列查询相对安全的多,同时指定列的循序不需要按照定义表的循序来
select 列1, 列2, …… from table_name;
select 列7, 列1, …… from table_name;
--例:
select name, id from student;
3.为指定列起别名
在指定列查询的列列表部分,我们可以在指定列的同时为当前列起一个别名并代替原列名显示在查询结果上,值得注意的是别名在语句中没有实际属性,也就是说别名不能代表原列,在需要对指定列进行操作时还要使用原列名。
select 列1, 列2 as 别名2, …… from table_name;
4.查询结果去重
有时候我们想要查询出来的结果不重复出现,尤其是数据量大的时候,这时候就可以在select后面跟一个distinct关键字对查询结果进行去重。
select distinct * from table_name;
select distinct 列1, 列2 …… from table_name;
5.排序查询
对查询结果进行排序可以使用关键字order by关键字。
SELECT ... FROM table_name [WHERE ...] ORDER BY 基准列名 [ASC|DESC], [...];
--[WHERE ……] 条件查询部分,若有,order by子句在其后
--asc 顺序查询,默认情况,可省略
--desc 逆序查询
--基准列 排序依据
6.条件查询
查询满足一定条件的行记录,使用 where+表达式,WHERE条件可以使用表达式,但不能使用别名
基本条件查询
SELECT ... FROM table_name WHERE 表达式 [ORDER BY 基准列名 [ASC|DESC], [...]];
//表达式 查询满足该表达式的行记录
多条件查询 and || or
同时对多个条件判断可以使用and和or连接表达式
AND :多个条件为真,结果才为真,表示“和”
OR:多个条件,只要有一个为真,结果就为真,表示“或”
AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
--例1:
select …… from table_name where 表达式1 and 表达式2 [order by];
--例2:
select …… from table_name where 表达式1 or 表达式2 [order by];
--例3:
select …… from table_name where (表达式1 and 表达式2) or 表达式3 [order by];
select * from test where (id = 1 and val > 1) or id + val < 10 order by val;
范围查询
区间查询:
--查询一定区间可以使用BETWEEN AND 关键字指定列的范围,也可以使用and和两个表达式约束区间
select * from table_name where 列名 between 左区间 and 右区间 [order by];
select * from table_name where 列名>=左区间 and 列名<=右区间 [order by];
select * from test where id between 1 and 2 ;
值域查询
--使用查询在若干元素值域内的记录,使用IN关键字
select * from table_name where 列名 in(值1, 值2, ……) [order by];
模糊查询
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM table_name WHERE 列名 LIKE '?%';
-- _ 匹配严格的一个任意字符
SELECT name FROM table_name WHERE 列名 LIKE '?__';
‘%’、‘_’可以在字符串的任何位置,代表相应的匹配关系
例:“徐%”匹配第一个字符是徐的记录
“_徐%”匹配第二个字为徐的记录
“_徐_张%”匹配第二个字为徐,第四个字符为张的记录
查空
-- 查询某列不为空的行记录
SELECT * FROM table_name WHERE 列名 IS NOT NULL;
-- 查询某列为空的行记录
SELECT * FROM student WHERE 列名 IS NULL;
分页查询
--列名省略时默认为主键,无主键默认第一列
--一个数,默认从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 table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
注:满足限定条件的行记录都是修改的范围
表的删除操作
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
删除满足限定条件的行记录