玩转Mysql增删改查

目录

一: Mysql增删改查之插入记录

1.插入基本语法一

2.插入基本语法二

二: Mysql增删改查之查询记录

1.创建一个money表

2.基础查询

3.指定字段查询

4.查询单个字段不重复记录distinct

5.条件查询 where

6.where后可接的条件

7.结构集排序

8.多字段排序

9.结果集限制

10.限制结果集并排序

11.结果集区间选择 limit 偏移量,数量

12. 统计类函数使用

13.分组 group by

14.在分组基础上进行统计

15.结果再过滤having

16.整体使用SQL

三: Mysql多表联合查询

四: Mysql增删改查之更新记录

五: Mysql增删改查之删除记录


一: Mysql增删改查之插入记录

1.插入基本语法一

类别详细解示
基本语法insert into 表 values(值1,值2,值n);
示例INSERT INTO user values(2,'php中文网','男')
示例说明向user表中插入值id为2,姓名为李文凯,性别为男

2.插入基本语法二

类别详细解示
基本语法insert into 表(字段1,字段2,字段n) values(值1,值2,值n);
示例INSERT INTO user(id,username,sex) values(213,'小沈阳',1);
示例说明向user表中插入id为213,username为小沈阳,性别为1

3.基本语法1和基本语法2的区别是:

1).基本语法1的插入语句,表中有多少个字段就必须要插入多少个值;一个不能多,一个也不能少;若有默认值,不想传,可以写上null

2).基本语法2中,除非有必填字段必须要写入值外;如果有默认值的不想写可以忽略不写;mysql会自动补填默认值

3).基本语法2中,以user(id,username,sex)字段顺序为值的顺序

4.eg: 假设有一张表为user表,我们对字段、字段说明、类型和字段选填和必须状态进行说明,表结构如下:

字段idusernameemailpasswordsex
中文说明编号用户名邮箱密码性别
类型说明intvarchar(50)varchar(60)varchar(32)tinyint
默认值说明自增必填选填字段,默认值为123@php.cn

1).按照基本语法一写上表中的插入语句:

INSERT INTO user values(null,'php中文网','pig@php.cn',null ,1);

注意

  • 可以不指定字段名称,但是 values 后面的顺序应该和表字段的排序一致
  • 有默认值的字段可以不写,则为默认值。
  • 如果有默认值或者可空字段不想传入具体值,可写入null
  • 数据格式必须要与表规定的数据格式一致

2).按照基本语法二写上表中的插入语句:

INSERT INTO user(username,sex) values('php中文网',1);

注意

  • ID为自增的自段可以不用传入值,每插入一次这个字段的值会自动向上加1
  • 有默认值和可为空的字段可不传;
  • 以表user(username,sex)的插入顺序为准;
  • 基本语法二为更常用的用法;

5.基本语法变形:一次插入多条记录;

INSERT INTO user(username,password,sex)
 values('黄晓明', 'abcdef', 1),
 ( 'angelababy', 'bcdeef', 0),
 ( '陈赫', '123456', 1),
 ('王宝强', '987654', 1);

二: Mysql增删改查之查询记录

1.创建一个money表

CREATE TABLE money (
     id INT NOT NULL AUTO_INCREMENT ,
     username VARCHAR(50) NOT NULL ,
     balance FLOAT NOT NULL , 
     province VARCHAR(20) NOT NULL , 
     age TINYINT UNSIGNED NOT NULL , 
     sex TINYINT NOT NULL , 
     PRIMARY KEY (id)
     ) ENGINE = InnoDB CHARACTER SET utf8;

2.基础查询

类别详细解示
基本语法select * from 表;
示例select * from money;
示例说明查询money表中所有字段中的所有结果

注:”*” 是一种正则表达式的写法,表示匹配所有;

3.指定字段查询

类别详细解示
基本语法select 字段 from 表;
示例select id,username, balance from money;
示例说明查询money表中id,username, balance字段中的所有结果

4.查询单个字段不重复记录distinct

类别详细解示
基本语法select distinct 字段 from 表;
示例select distinct age deptno from money;
示例说明查询money表中年龄唯一的所有结果

5.条件查询 where

类别详细解示
基本语法select  字段 from 表 where where条件;
示例select * from money where age = 29;
示例说明查询money表中年龄为29的所有结果

6.where后可接的条件

1).比较运算符结果集中将符合条件的记录列出来;

符号说明
>大于
<小于
>=大于等于
<=小于等于
!=不等于
=等于

2).逻辑运算符

多个条件还可以使用 or 、 and 等逻辑运算符进行多条件联合查询

符号说明
or或者
and并且

 

3).eg:

类型详细内容
示例

select * from money where id <10 and province='湖北';

说明查询所有字段 要求id小于10 并且province='湖北'

7.结构集排序

类别详细解示
基本语法select 字段 from 表 order  by 字段 排序关键词
示例select id,username, balance from money order by balance desc;
示例说明查询money表中的id,username,balance字段,按照余额进行降序排序

排序用到的关键词:

关键词说明
asc升序排列,从小到大(默认)
desc降序排列,从大到小

在 select 出来之后的结果集中排序使用 order by ,其中 desc 和 asc 是排序顺序中的关键字。desc 表示按照字段进行降序排列,asc 表示升序排列,如果不写关键字默认升序排列。

eg:

select id,username, balance from money order by balance desc;

8.多字段排序

order by 后面可以跟多个不同的字段排序,并且排序字段的不同结果集的顺序也不同,如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序

类别详细解示
基本语法select 字段 from 表 order  by 字段1 排序关键词,... ...字段n desc|asc;
示例select id,username, balance from money order by balance desc,age asc;
示例说明查询money表中的id,username,balance字段,按照余额进行降序排序,若余额全都一样,则再使用age进行升序排序

* 注:如果第一个字段已经将结果给排好。第二个字段排序字段不生效。本例中,第二个字段无效。*

9.结果集限制

   对于查询或者排序后的结果集,如果希望只显示一部分而不是全部,使用 limit 关键字结果集数量限制。

类别详细解示
基本语法select 字段 from 表  limit 数量;
示例select id,username, balance from money limit 5;
示例说明显示前五个用户

10.限制结果集并排序

类别详细解示
基本语法select 字段 from 表 order by 字段 关键词 limit 数量
示例select id,username, balance from money order by balance desc limit 5;
示例说明按照钱来排序,显示前五个最有钱的用户

11.结果集区间选择 limit 偏移量,数量

假设我从第0条开始取了3条记录。又想再从第3条开始取3条记录。再想从第6条开始取4条记录怎么办?

这时候就需要使用到结果集区间选择。

类别详细解示
基本语法select 字段 from 表  limit 偏移量,数量
示例select id,username, balance from  money limit 0,3;
示例说明从第一条开始取三条记录

从第三条开始再取三条呢?

 select id,username, balance from  money limit 3,3;

12. 统计类函数使用

函数说明
sum求和
count统计总数
max最大值
min最小值
avg平均值

注:当然你知道其他的mysql函数也可以使用。不过,在实际工作中,大公司的很多大中型项上很少使用,他们都有专门的计数服务器。因为,mysql的计算量本身很大,为了减少压力通常我们将实际的计算任务交给业务服务器或其他服务器来完成。

1).  count

类别详细解示
基本语法select 函数(字段) from 表
示例select count(id) from money
示例说明查询money表的id总数

2).  as 给字段取别名使用as关键字。

select count(id) as zongshu from money;

3).查询平均金额

select avg(balance) from money;

4).查询总金额

 select sum(balance) from money;

5).查询最大金额

select max(balance) from money;

6).查询最小金额

 select min(balance) from money;

13.分组 group by

     我们拿金额表里面的省份进行分组数据,分组数据后你会发现。有相同的省份会去掉。即,一个省份为一个组。

类别详细解示
基本语法select * from 表 group by 字段
示例select * from money group by province;
示例说明按照地区进行分组

1).统计分组(分类)各总数:

select deptno, count(1) from emp group by deptno;

2).统计省份数量后再进行分组显示

select count(province),province  from money group by province;

14.在分组基础上进行统计

    它的主要功能是对于分组的数据进行统计后,再进行一次总数统计。

类别详细解示
基本语法select * from 表 group by 字段 with rollup
示例select count(province),province  from money group by province with rollup;
示例说明对分组的数再次进行统计

15.结果再过滤having

     having 是筛选组 而where是筛选记录。

类别详细解示
基本语法select * from 表 group by 字段 having 条件
示例select count(province) as result ,province  from money group by province having result >2;
示例说明对地区分组并统计总数,将分组结果中大于2的分组地区显示出来

16.整体使用SQL

1).整体的SQL语句配合使用的语法结构如下:

SELECT 
     [字段1 [as 别名1],[函数(字段2) ,]......字段n] 
 FROM 表名
 [WHERE where条件]
 [GROUP BY 字段]
 [HAVING where_contition]
 [order 条件]
 [limit 条件]

注:上面的语句中可以[] 代表可选。

2).最终的语法总结如下:

关键词说明
select选择的列
from
where查询的条件
group by分组属性  having 分组过滤的条件
order by排序属性
limit起始记录位置,取记录的条数

我们进行一次整体的给合使用,查询money表字段:id,username,balance,province 要求id>1 余额大于50,使用地区进行分组。我们使用用户id进行降序,要求只准显示3条。

 select id,username,balance,province from money
 where id > 1 and balance > 50 group by province
 order by id desc limit 3;

三: Mysql多表联合查询

1.业务中需要多表联合在一起查询才能有结果,而多表联合查询的本质是:表连接。

2.表连接,当需要查询多个表中的字段时,就可以使用表连接来实现。表联接分为内连接和外连接。

3.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。

4.外连接:会选出其他不匹配的记录,分为外左联结和外右联结。

5.内联接语法一:

类别详细解示
基本语法select 表1.字段 [as 别名],表n.字段  from 表1 [别名],表n where 条件;
示例select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user,order_goods  where user.uid = order_goods.uid;
示例说明查询商品表中哪些用户购买过商品,并将用户信息显示出来

下例中from 表使用到了表别名,由于表名太长,每次写的时候容易写错。我们可以在表后直接跟上一个简写英文字符串。在前面拼接字段时,直接使用简写字符串.字段即可。

select u.uid ,u.username as username,o.oid,o.uid,
o.name as shopname from user u,order_goods o  
where u.uid = o.uid;

6.内联接语法二:

类别详细解示
基本语法select 表1.字段 [as 别名],表n.字段  from 表1 INNER JOIN 表n on  条件;
示例select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user inner join order_goods  on  user.uid = order_goods.uid;
示例说明查询商品表中哪些用户购买过商品,并将用户信息显示出来

       结果与语法1中一致;

7.左外连接

说明详解
基本语法select 表1.字段 [as 别名],表n.字段  from 表1 LEFT JOIN 表n on  条件;
示例select *  from user left join order_goods  on  user.uid = order_goods.uid;
示例说明以左边为主,查询哪些用户未购买过商品,并将用户信息显示出来

外连接又分为左连接和右链接,具体定义如下。

左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录

8.右外连接

右连接:包含所有的右边表中的记录甚至是右边表中没有和它匹配的记录

类别详细解示
基本语法select 表1.字段 [as 别名],表n.字段  from 表1 right JOIN 表n on  条件;
示例select *  from user right join order_goods  on  user.uid = order_goods.uid;
示例说明查询商品表中哪些用户购买过商品,并将用户信息显示出来

9.子查询

当我们查询的时候,需要的条件是另外一个select语句的结果,这时就需要使用子查询。用于子查询的关键字包括in、not in、=、!=、exists、not exists等。

类别详细解示
基本语法select 字段  from 表 where 字段 in(条件)
示例1select *  from user where uid in (1,3,4);
示例1说明按照id 查询指定用户
示例2select *  from user where uid in (select uid from order_goods);
示例2说明将购买过商品的用户信息显示出来

10.记录联合

使用 union 和 union all 关键字,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示。两者主要的区别是把结果直接合并在一起,而 union 是将 union all 后的结果进行一次distinct,去除重复记录后的结果。

类别详细解示
基本语法select语句1 union[all] select语句2
示例select *  from user where uid in (1,3,4);
示例说明将商品表中的用户信息和用户表中的用户信息的结果组合在一起
 select uid from user union select uid from order_goods;

四: Mysql增删改查之更新记录

1.更新记录就是修改内容,使用 update 语句进行记录更新

类别详细解示
基本语法update 表名 set 字段1=值1,字段2=值2,字段n=值n where 条件
示例update money set  balance=balance-500 where userid = 15;
示例说明修改money表,将balance余额减500。要求userid为15

2.修改多个字段

 update money set  balance=balance-500,username='李文凯' where userid = 15;

3.同时对两个表进行更新

类别详细解示
基本语法update 表1,表2 set 字段1=值1,字段2=值2,字段n=值n where 条件
示例update money m,user u m.balance=m.balance*u.age where m.userid=u.id;
示例说明修改money,将money表的别名设置为m;user表的别名设置为u;将m表的余额改为m表的balance*用户表的age。执行条件是:m.userid = u.id

【切记】:更新时一定要记住加上where条件,不然会更新掉整个表的记录。

五: Mysql增删改查之删除记录

1.使用 delete 删除记录

类别详细解示
基本语法DELETE FROM 表 [where 条件];
示例DELETE FROM user where id > 10;
示例说明删除掉用户表中id大于10的所有用户

2.清空表记录

  delete和truncate是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。

   如果一个表中有自增字段,使用truncate table 这个自增字段将起始值恢复成1.

类别说明
基本语法TRUNCATE TABLE 表名;
示例TRUNCATE TABLE user;
示例说明清空表的数据,并且让自增的id从1开始自增

【切记】

  1. 删除时一定要记住加上where条件,不然会清空掉整个表的记录。
  2. 删除重要数据前一定要备份、备份、备份。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值