目录
增,删,改,查的扩充
增
1. 多个值一起插
insert into t1(name,age) values('alex',11),('alex',12);
2.直接把表A的内容插入表B
insert into t2(name,age) select name,age from t1;
删
使用where进行约束时除了等于还可以用如下的符号约束
delete from t1 where id = 1;
delete from t1 where id > 1;
delete from t1 where id < 1;
delete from t1 where id <= 1;
delete from t1 where id >= 1;
delete from t1 where id != 1;
delete from t1 where id <> 1; -- 同样可以用这种方式表示不等于
此外,“or"也可以用来进行约束
delete from t1 where id = 1 or id = 2;
改
可以将数据库的多项数值在同一条指令进行修改
update tb12 set name = "alex",age = 19;
查
1. where and or 和上面类似,这里也可以使用
select name from t1 where age = 12 or age = 13;
2. 在查询的时候,可以把数据表的列名替换成别的名字显示
select name as cname from t1 where age = 12 or age = 13;
3. 同样可以使用in和between and 查询
select name from t1 where id in(1,2,3);
select name from t1 where id not in (1,45);
select name from t1 where id between 3 and 23;
-- 可以用in实现对项目的嵌套查询
select name from t1 where id in (select id from t2);-- 只能写一列
4. 使用 distinct删去重复的项
假设有表内容如下
正常查询结果
使用
select distinct teacher_id from course
结果如下
其他
通配符 用来查找项目中部分包含查询内容的项
select name from t1 where id like '%12%'; -- 表示前后任意位置,范围更宽泛
select name from t1 where id like '12_'; -- 表示后面一位,范围更窄
分页(limit offset区别)可以使用limit和offset使数据分页显示
select * from t1 limit 1;
select * from t1 limit m,n;
-- 其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条
select * from t1 limit m offset n;
-- 这里n是指记录开始的index,从0开始,表示第一条记录
m是指从第n+1条开始,取m条 和limit刚好相反
这里参考于:
MySQL中limit的用法 - 动力节点 (bjpowernode.com)http://www.bjpowernode.com/tutorial_mysql/423.html
排序 使用desc 和 asc 让数据从大到小、从小到大排列
select * from t1 order by id desc; -- 从大到小
select * from t1 order by id asc; -- 从小到大
也可以和limit 混用
select * from t1 order by id desc limit 10;
还可以根据多个列顺序排列
select * from t1 order by id desc,age asc; -- 先按照id排序,重复的话再按照age排列
分组(max min count sum avg的使用)
引入:假设这里有一个表t1:
里面记录了各个人的名字和年龄,现在我们想知道11岁的有几个人
可以进行如下操作:
select count(id),age from tb11 group by age;
得到的结果如下
这样,我们可以知道11岁的有两个人
此外,还可以通过如下操作从其他方式获取信息
select max(id),age from tb11 group by age; -- 显示各个年龄ID的最大值
select min(id),age from tb11 group by age; -- 显示各个年龄ID的最小值
select sum(id),age from tb11 group by age; -- 显示各个年龄ID的和
select avg(id),age from tb11 group by age; -- 显示各个年龄ID的均值
以上操作同样可以一并完成
select count(id),max(id), age from tb11 group by age;
***我们可以对如上操作后得到的表进行查找,但是由于使用了max()等聚合函数,查找时where是不能使用的,必须替换成having
select count(id),max(id), age from tb11 group by age having count(id) > 2;
连表操作
在查询表的时候可以把两个表左右链接更清楚地展示信息
继续举我们3.5中的例子
MySQL学习笔记3.5https://mp.youkuaiyun.com/mp_blog/creation/editor/123235115虽然我们建立了外键,但是除了我们自己别人是不能直接看到外键的
但是展示表的时候,如果我们使用join指令
select * from t5 left join t3 on t5.uid = t3.id left join t4 on t5.hostid = t4.id;
就可以把t3和t4的内容和t5贴合在一起展示,如图:
应用之前的where语句可以达到同样的效果:
select * from t5,t3 where t5.uid = t3.id;
除了left join,还有right join可供使用
select * from t3 right join t5 on t3.id = t5.uid;
结果如下 (注意和left join 相反)
只需记忆left join即可