Mysql基本语句练习

时间:2021-09-12 00:49:35


先从简单的开始:

userBehavior:用户行为

record:记录

增加:

向用户行为表添加一条数据

insert into userBehavior
(id,name,record,createTime,updateTime)
values
(1,"gugu","打开了文档","2022-08-03 17:30:00","2022-08-03 17:30:00"),
(2,"longer","打开了文档","2022-08-03 17:30:00","2022-08-03 17:30:00"),
(3,"gys","修改了文档","2022-08-03 17:30:00","2022-08-03 17:30:00");

删除:

删除用户行为表所有名称为“gugu”的数据

delete from userBehavior where name = "gugu";

删除用户行为表所有名称以字母"gu"开头的数据

delete from userBehavior where name like "gu%";

删除用户行为表所有名称以字母"gu"结尾的数据

delete from userBehavior where name like "%gu";

删除用户行为表中名称包含字母"u"的数据

delete from userBehavior where name like "%u%";

where条件语句中,like表示模糊查询,一般表示为 某个字段  like  "%关键字%"  %表示匹配任意字符,%在前面,表示前面可以是任意字符,%在后面,表示匹配后面是任意字符,%在两头,表示只要包含关键字就满足条件

修改:

将名称为gugu的用户行为记录改为,关闭了文档

update userBehavior set record = "关闭了文档", updateTime = "2022-08-03 18:00:00" where name = "gugu";

条件查询:

简单查询

查询所有数据

select * from userBehavior;


只查询指定的字段

查询出所有数据,并且只展示出name字段

select name from userBehavior

查询用户名为longer的数据

select * from userBehavior where name = "longer"

and查询(”与“查询)

查询用户名为gugu并且record 为“关闭了文档“的数据

select * from userBehavior where name = "gugu" and record = "关闭了文档"

or查询(”或“查询)

查询用户名为gugu或者longer的数据

select * from userBehavior where name = "longer" or name = "gugu"

in查询(就是满足in括号里面 的任意一个值,都可以匹配到)

查询用户名为gugu或者longer的数据

select * from userBehavior where name in ("longer","gugu");

beetween...and...查询

查询创建时间在2022-07-10 10:00:00 到 2022-08-10 10:00:00之间的数据

select * from userBehavior where createTime between 2022-07-10 10:00:00  and 2022-08-10 10:00:00

大于小于查询

beetween...and...就相当于createTime>=2022-07-10 10:00:00 and createTime < 2022-08-10 10:00:00

查询创建时间在2022-07-10 10:00:00 到 2022-08-10 10:00:00之间的数据

select * from userBehavior where createTime>=2022-07-10 10:00:00 and createTime < 2022-08-10 10:00:00

查询创建时间为2022-07-10 10:00:00 到 当前时间的数据

select * from userBehavior where createTime>=2022-07-10 10:00:00

分页

查询用户行为表中,第一页的数据。(每页显示十条数据)

显示第一页的数据其实就是显示前面十条数据,因为数据库里面,条数是从0开始数的,如果要查询前面十条数据,就是 取出第0条数据到第9条数据。(0,1,2,3,4,5,6,7,8,9)

如果要查询第二页的数据,就是 取出第10条数据到19条数据。(10,11,12,13,14,15,16,17,18,19)

如果要查询第三页的数据,就是 取出第20条数据到29条数据。(20,21,22,23,24,25,26,27,28,29)

分页的关键字是limit 0,10

其中0表示从第0条数据开始取,10表示,取出十条数据。

第一页的数据就是

select * from userBehavior  limit 0,10;

第二页的数据就是

select * from userBehavior  limit 10,10;

第三页的数据就是

select * from userBehavior  limit 20,10;

第n页的数据就是  

select * from userBehavior  limit (n-1)*pageSize,pageSize

排序

排序分为升序排序和降序排序。升序排序就是指从小到大,降序排序就是从大到小。

升序的关键字 ASC    降序的关键字 DESC

排序的关键字为  order by

排序语法  order by 某个字段名  ASC或者DESC

如果要按照创建时间倒序查询用户行为表,则

select  * from userBehavior order by createTime desc

关键字不区分大小写。

如果按照创建时间倒序分页查询用户行为表的第3页,每页显示20条数据,则

select * from userBehavior  order by createTime desc limit  (3-1)*20,20;

关联查询

内联

如果现在有两张表,这两张表,一张是存储的用户行为数据,另一张表是存的用户个人信息。有时候我们就需要同时查出用户的个人信息和用户行为。这时候我们就需要使用关联查询。首先我们来说说内联查询。

用户行为表userBehavior

id,name,record,createTime,updateTime
1,"gugu","打开了文档","2022-08-03 17:30:00","2022-08-03 17:30:00"
2,"longer","打开了文档","2022-08-03 17:30:00","2022-08-03 17:30:00"
3,"gys","修改了文档","2022-08-03 17:30:00","2022-08-03 17:30:00"
4,"buzhidao","关闭了文档","2022-08-03 17:30:00","2022-08-03 17:30:00"

用户个人信息表

id,name,gender,age,mobile
1,gugu,男,22,17602322222
2,longer,女,19,15685212565
3,sd,未知,6,12544545412

这时候我们查询出 name  record  createTime  gender  age mobile字段,就需要两张表,进行关联查询。因为需要的字段在两张表中

首先,我们不指定查询的字段,我们只是将两张表的数据查出来。inner join 也就是内联的标志就是用逗号将多个表隔开就可以了。

select * from userBehavior  as  a , userInfo as b on a.name = b.name

上面这句话的意思就是:

我要查询userBehavior表和userInfo表。并且,我给userBehavior命名了一个别名为a,相当于起个昵称,这个是非常必要的。然后给userInfo起了一个别名叫b,这时候相当于别人喊a的时候,其实就是在喊userBehavior。

on关键字表示,两张表是靠什么连接起来的,这里因为我们两张表中都有name字段,所以我们通过两张表的name字段进行关联。所以  a.name = b.name 就相当于 userBehavior.name = userInfo.name,但是我们不能用表的真名,只能用别名,所以我用删除线划掉了。当给表起了别名后,后面的所有操作都以别名为准。

内联查询的作用就是,连接后的结果是两张表能关联上的数据才会查出来。根据上面的数据。最后查询的结果就是:

1,"gugu","打开了文档","2022-08-03 17:30:00","2022-08-03 17:30:00" 1,gugu,男,22,17602322222

2,"longer","打开了文档","2022-08-03 17:30:00","2022-08-03 17:30:00" 2,longer,女,19,15685212565

为什么只有两条数据呢?因为userBehavior表中,名字为gys和buzhidao的,在userInfo表中没有记录,这条数据就关连不起来,所以就查不到。同理,userInfo表中名字为sd的人,在userBehavior表中也没有,所以查不出来。也就是只有满足了on中a.name=b.name的数据才会被查出来。

因为我们用的select * 所以会将所有的字段都查出来,这时候我们怎么才能只查询出name  record  createTime  gender  age mobile 这几个字段呢?

select a.name , a.record , a.createTime , b.gender , b.age, b.mobile from userBehavior  as  a , userInfo as b on a.name = b.name

上面查询指定字段的时候,都加了个a.或者b. 这里是因为我们对表命了别名,a.name就表示查询userBehavior表中的name字段,b.gender就表示查询userInfo中的gender字段。

这时候如果我们需要查出两张表中age为19的数据怎么写呢?

select a.name , a.record , a.createTime , b.gender , b.age, b.mobile from userBehavior  as  a , userInfo as b on a.name = b.name where b.age = 19

这时候的where条件中,字段名前也要带上表的别名,代表你是指定哪个表的哪个字段。因为我们b表才有age字段,所以使用 where b.age = 19