先从简单的开始:
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
标签:语句,10,00,name,练习,查询,2022,Mysql,userBehavior From: https://blog.51cto.com/gugu/6111137