小白总结mysql四(增删改查)
增加数据
语法:'insert into 表名([字段名1,字段名2,字段名3]) values ('值1'),('值2'),('值3'.......)
假设有一个表叫做user,里面有 id,name,password,roles四个字段(字段名即列名)
--插入单条信息,此方法的值是按照字段的顺序来插入的(默认值是对应字段名的)
insert into `user` values ('1','小明','123456','department');
--插入多条信息
insert into `user` values ('2','小红','654321','department'),('3','小爱','666666','employee');
--填字段进命令
insert into `user` (`id`,`name`,`password`,`roles`)values ('1','小明','123456','department');
/*
总结:
1. 字段和字段之间使用英文逗号隔开
2. 字段是可以省略的,但是后面的值必须一一对应,
3. 可以同时插入多条数据,values后面的值,需要用英文逗号隔开
*/
修改数据
语法:update 修改的表名字 set 字段名= 新的值 where 条件;
update user set `name`='小爱'--改变所有的name都为小爱
update user set `name`='小名' where id =1;--改变id为1的name
update user set `name`='小爱',`password`='123456' where id =1 --改变id为1的多个属性
操作符 | 含义 |
---|---|
= | 等于 |
<>或!= | 不等于 |
> | 大于 |
< | 小于 |
between…and | 在某个范围之内 |
and | 与 |
or | 或 |
总结:
1.字段名是数据的列,尽量带上``反引号;
2.条件,筛选的条件,没有指定,则全部修改
3.`新的值`可以是具体的一个值,也可以是一个变量
例如:birthday=' current_time' 这是个变量
删除数据
delete命令:
语法:delete from 表名 where 条件
删除数据,避免这样写
delete from 表名;
删除指定的数据
delete from 表名 where 条件
truncate命令:
语法:truncate 表名
作用:完全清空一个数据库表,表的结构和索引都不会改变
truncate 表名;
truncate和delete的区别:
- 相同点:都能删除数据,但是不会删除表结构
- 不同点:1.truncate 重新设置自增列,计算器为零,不会影响事务。
delete比如删除数据的id自增到了5,删除后,再重新增加数据,是从第6开始的
truncate无论id是自增到哪里了,删除后,都是从1开始的。。
查询数据
--查询全部用户的信息
select * from user;
--查询规定字段的信息
select 字段名,字段名 from user;
也可以 select 字段名,字段名+数值 from user; (多用在加分的用途上 )
--别名
select id as 用户id, username as 用户名字 from user
--连接词函数(concat)
select concat('用户名:', username) as 新的名字 from user;
--去重查询(重复显示的数据去掉,重复的只显示一条 )
select distinct username from user;
--查询版本号
select version
--用来计算
select 10*3-1
--用来查询自增的步长
SELECT @@AUTO_INCREMENT_INCREMENT
--用于where条件的区间查询
select 字段名 from 表名 where between .... and .....
--用与where的逻辑判断的查询
select * from 表名 where 字段名>= ? and 字段名<= ?
select * from 表名 where 字段名>= ? && 字段名<= ? 与的逻辑判断
select * from 表名 where 字段名>= ? or 字段名<= ?
select * from 表名 where 字段名>= ? || 字段名<= ? 或的逻辑判断
select * from 表名 where 字段名!=?
select * from 表名 where not 字段名=? 非的逻辑判断
**起别名是让用户更加方便地清除某列数据,起别名的时候,字段名 as 别名,表名 as 别名**
模糊查询(like,in)
%%%%% like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符)
select 字段名 from 表名 like _小;
select 字段名 from 表名 like 小_;
select 字段名 from 表名 like _小_;
select 字段名 from 表名 like %小%;
select 字段名 from 表名 like 小%;
select 字段名 from 表名 like %小_;
%%%%% in 操作符允许我们在 WHERE 子句中规定多个值。
select 字段名 from 表名 where 条件 in (条件的值1,条件的值2......)。
select * from 表名 where phone(字段名) is not null --查询phone字段不为空的所有
select * from 表名 where phone(字段名) is null --查询phone字段为空的所有
联表查询
/*
1.分析需求
2.确定查询方法
3.确定交叉点
*/
常用的三种联表方法
操作 | 意义 |
---|---|
inner join | 如果表中至少有一个匹配的条件,就会返回行 |
left join | 会从左表返回所有的值,则右表中没有匹配 |
right join | 会从右表返回所有的值,则左表中没有匹配 |
/*
inner join
*/
select s.studentNo,studentName,SubjectNo,StudentResult
from student as s
inner join result as r
on s.studentNo=r.studentNo
----
/*
left join
*/
select s.studentNo,studentName,SubjectNo,StudentResult
from student as s
left join result as r
on s.studentNo=r.studentNo
----
/*
left join
*/
select s.studentNo,studentName,SubjectNo,StudentResult
from student as s
right join result as r
on s.studentNo=r.studentNo
/*
自我总结:
1.student表的位置就是左表 ,result表就是右表
2.上面三种写法与表格的联系起来就会很明白了
*/
on 与 where 的区别:
on是先筛选后关联的,where是先关联再筛选。。