欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MYSQL分页查询,联合查询

程序员文章站 2022-04-14 13:57:14
2020 5/9 十九、分页查询 应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求 语法:(执行顺序已标出) SELECT 查询列表 ⑦每执行一步都会生成一个虚拟的结果集 FROM 表名 ① [join type join 表2 ② on 连接条件 ③ where 筛选条件 ④ gro ......

十九、分页查询

应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求

语法:(执行顺序已标出)

 

       select 查询列表                      ⑦每执行一步都会生成一个虚拟的结果集

       from  表名                               ①

       [join type join 表2                       ②

on 连接条件                               ③

where 筛选条件                         ④

group by 分组字段                     ⑤

having 分组后的筛选条件          ⑥

order by 排序的字端]                 ⑧

limit offet,size;                            ⑨

(offset->要显示条目的索引(起始索引从0开始),size->显示的条数)

 

特点:

①      limit语句放在查询语句的最后面

②      若不加offset(索引),则默认起始索引为0

③     公式:要显示的页数pags,每页的条数size

 select 查询列表 from 表名 limit (page-1)*size,size;

 

#案例1:查询前五条员工信息

 

select * from employees limit 0,5;

select * from employees limit 5;

 

#案例2:查询第11条-第25条

select * from employees limit 10,15;

 

 

#案例3:查询有奖金的员工信息,并且工资较高的前十名显示出来

select

       *

from

       employees

where

       commission_pct is not null

order by

       salary desc

limit 0,

 10;

 

 

二十、联合查询

关键字:union(联合、合并)->将多条查询结果合并成一个结果

语法:

查询语句1

union

查询语句2

union

……

 

应用场景:要查询的结果来自于多个表,且多个表中没有直接的连接关系,但查询的信息一致时

特点:

①     要求多条语句查询的查询列数是一致的!

②     要求多条查询语句的查询的每一列的类型和顺序最好一致

③     union关键字默认是带去重的,如果使用union all可以包含重复项

 

#查询:查询部门编号大于90或邮箱中包含a的员工信息

 

select * from employees where department_id>90 or email like '%a%';

-------------------------------------------------------------

select * from employees where department_id >90

union

select * from employees where email like '%a%';

以上两种放式等价!!!

 

#查询女神表中姓名中有‘周’字的女神名以及男朋友id和男朋友表中名字有‘鹿’的男生的姓名与id

select name,boyfriend_id from beauty where name like '%周%'

union

select boyname,id from boys where boyname like '%鹿%';

 MYSQL分页查询,联合查询

 

 

二十一、dml语言(数据操纵语言)

分类:

插入:insert

修改:update

删除:delete

 

#插入语句

语法:(方式一》经典插入)

insert into from 表名(列名、列名…)  values(值1、值2…);

 

#1.插入的值类型要与列的类型一致或兼容(可以隐式的转换)

insert into beauty(id,name,borndate,phone,photo,boyfriend_id)

values(13,'菜菜','2000-12-28','000000',null,0);(插入一条)

 

insert into beauty(id,name,borndate,phone,photo,boyfriend_id)

values(16,'菜菜','2000-12-28','000000',null,0),(14,'mis詹','2001-5-17','000000',null,0)

,(15,'梦玲','2000-7-24','000000',null,0);(插入多条)

 

#2.可以为null的列如何插入(不可以为null的列必须插入字段)

#方式一:直接写为null

#方式二:在表名后要修改的列名直接不写

insert into beauty(id,name,phone,boyfriend_id)

values(17,'汪汪','000000',0);

#列的顺序可以颠倒,但在给值时需要一一对应

#插入时,列数和值得个数必须一一对应

#列名可以省略,默认为所有列,而且列的顺序与表中列的顺序一致

insert into beauty

values(18,'菜菜','2000-12-28','000000',null,0);

 

语法:(方式二)

insert into 表名

set 列名=值,列名=值…

 

insert into beauty

set id=19,name='hdjk',phone='909090';

插入的两种方式pk

  1. 方式一支持多行插入,而方式二不支持
  2. 方式一支持多行子查询,而方式二不支持

如下(子查询)

insert into beauty(id,name,phone)

select 20,'qqqq','688944';

 

insert into beauty(id,name,phone)

select 34,boyname,'688944'

from boys

where id =3;

 

#修改语句

1.修改单表的记录

语法:(执行顺序已标出)

update 表名                                 ①

set 列名=新值,列名=新值,…        ③

where 筛选条件;                        ②

 

 

案例:#修改beauty表中姓唐的女神的电话为0000000

update beauty

set phone = '0000000'

where name like '周%';

 

2.修改多表的记录

语法:(sql92)

update 表1   别名, 表2,别名                                        ①

set 列名=新值,列名=新值,…                                           ③

where 连接条件 and筛选条件;                                     ②

语法:(sql99)

update 表1   别名

inner|left|right join 表2 别名

on 连接条件                                    

set 列名=新值,列名=新值…              

where筛选条件;     

                       

(sql99与语法下的)

#案例1:修改张无忌的女朋友的手机号为114[内连接]

update beauty b

inner join boys bo

on b.boyfriend_id = bo.id

set b.phone = '114'

where bo.boyname='张无忌';

 

#案例2:修改没有男朋友的女神的男朋友编号都为2号

 

update beauty b

left join boys bo

on b.boyfriend_id = bo.id

set b.boyfriend_id=2

where bo.id is null;

 

#删除语句

方式一:delete

1.单表的删除

语法:delete from 表名 where 筛选条件

 

2.多表的删除

(sql92)

语法:delete 表1别名,表2别名#想删除哪个表的信息就写那个表,都想删除就都写

         from 表1 别名,表2  别名

         where 连接条件 and 筛选条件;

(sql99)

语法:

delete 表1别名,表2别名    #想删除哪个表的信息就写那个表,都想删除就都写

from 表1 别名

inner|left|right join 表2  别名 on 连接条件

where筛选条件;

 

(sql99与语法下的)

#删除张无忌的女朋友的信息

delete b

from beauty b

inner join boys bo

on b.boyfriend_id = bo.id

where bo.boyname = '张无忌';

 

#删除黄晓明的信息以及他女朋友的信息

delete b,bo

from beauty b

inner join boys bo

on b.boyfriend_id = bo.id

where bo.boyname = '黄晓明';

 

方式二:truncate

语法:

truncate table 表名;(不支持链家筛选条件)

truncate table boys;(直接清空)

 

两种删除方式pk

  1. delete可以加筛选条件,truncate不能加
  2. truncate删除,效率高一丢丢
  3. 假如要删除的表中有自增长列,

如果用delete删除后,在插入数据,自增长列的值从断点开始,

而truncate删除后,在插入数据,自增长列值从1开始

  1. truncate删除后没有返回值,而delete有(即是否显示表中有几行收到影响,若是truncate,则都是0)
  2. truncate删除不能回滚,而delete删除可以回滚
转自:https://www.cnblogs.com/jane315/p/12853503.html