MySQL增删改查

MySQL增删改查

添加insert

格式: insert into 表名 ([字段1],[字段2],[字段3]…) values (‘值1’,‘值2’,‘值3’…);

插入多条记录:

insert into `student`(`name`,`age`) values ('李四','27'),('王五','17'),('赵六','37');

插入单挑记录:

insert into `student` values ('1','张三','18','1');

如果没有填写字段名,则会一一对应着添加记录,values后面必须根据表设计的字段一一填写,否则会添加失败

如果有填写字段名,则会按照字段名来添加记录,如果其他字段是非空的且没有默认值和非自增的,则会添加失败;如果是自增的,可以不填,会自动增加

修改update

**格式:**update 表名 set 字段=修改的值 [where 字段=判定]

update `student` set `name`='张杰' where `id`=1;

修改多个值:

update `student` set `name`='李娜',`age`='18' where `id`=2;
where判断
=,>,<,!=等于,大于,小于,不等于
between在某个范围内
and两者为真才是真
or只要一者为真就是真

删除delete和truncate

**格式:**delete from 表名 [where 字段名=判断]

​ truncate [table] 表名

delete from `student` where `id`='1';
truncate `student`

两者都能删除一个表的记录

但是truncate是DDL语句,作用是表的操作,不能删除某一条记录,只能全部清空。

delete是DML语句,操作表内的记录,可以删除某一条记录,也可以全部清空。

区别:

truncate是全部清空,包括自增量,如果清空了,会重新从1开始自增;

delete也可以全部清空,但是自增量不会重置,不会重新从1开始自增,还是按照当前的自增量自增。

注意:

如果引擎是innodb,因为自增量是存储在内存当中,即使是使用delete清空表,当重启mysql服务时,自增量也会重置

引擎是myisam的话,因为是存储在文件中,不会重置自增量

查询select

**格式:**select 字段 [as] [别名] from 表名 [where] [判断]

select `name`,`age` from `student`;

字段别名:

select `name` as 姓名,`age` as 年龄 from `student`;

记录连接:concat()

select concat('姓名:',`name`) as 新名字 from `student`;

去重 distinct

select distinct `id`,`result` from `result`;

给result数据加1

select `id`,`result`+1 from `result`;
模糊查询

like 搭配 %(代表一个或多个字符),_(代表一个字符)

select * from `student` where `name` like '张%';

in(值1,值2,值3…)在这个范围内,只要等于其中一个值就是真。**注意:**值必须是确定的一个值,不能是用%,_这样的字符去匹配的

select * from `student` where `name` in ('张_','李%');--这种是错误的
select * from `student` where `name` in ('张三','李四')--这种是正确的

如果要查姓张的和姓李的,可以用orlike搭配

select * from `student` where `name` like '张%' or `name` like '李%';
联表查询
三种联表用法
inner join以两个表的交集为基准判断id是否相等,只有两个表的id相等才会查出
left join以左表为基准判断id是否相等,即使右表没有与左表相等的id,也会查出所有左表的记录
right join以右表为基准判断id是否相等,即使左表没有与右表相等的id,也会查出所有右表的记录

以学生表和成绩表为例

学生表有全部的学生记录,成绩表有一次考试的记录
在这里插入图片描述

在这里插入图片描述

此时学生表中的id在成绩表都有出现,而成绩表中id有一个1001在学生表中没有出现

如果用inner join、left join 查出的效果一样

select s.`id`,`name`,`result`,`grade_id` from `student` as s left join `result` as r on s.id=r.id;
select s.`id`,`name`,`result`,`grade_id` from `student` as s inner join `result` as r on s.id=r.id;

在这里插入图片描述

但是用right join查,会发现成绩表中id为1001的都会保留,但是因为学生表中没有与成绩表中的id相同,会出现null

select s.`id`,`name`,`result`,`grade_id` from `student` as s right join `result` as r on s.id=r.id;

在这里插入图片描述

是因为right join是以右表也就是成绩表为基准,右表的所有记录都会保留下来,如果没有匹配到学生表的id就会为null。

多个表联表查询
  1. 先查两个表联表
select s.`id`,`name`,`result`,`grade_id` from `student` as s inner join `result` as r on s.id=r.id;

在这里插入图片描述

  1. 再用查出来的表与另一个表联表再查
select s.`id`,`name`,`result`,`grade_name` from `student` as s inner join `result` as r on s.id=r.id right
 join `grade` as g on s.grade_id=g.id;

在这里插入图片描述

  1. 同一个表自连

category表

在这里插入图片描述

select p.`categoryName` as '父栏目' ,c.`categoryName` as '子栏目' from `category` as p inner join `category` as c on p.`categoryid`=c.`pid`;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值