第五天MYSQL

database

分页查询、联合查询、DML(修改、删除、插入语句)

2020 5/9

 

十九、分页查询

应用场景:当要显示的数据,一页显示不全,需要分页提交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 "%鹿%";

 

 

 

二十一、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删除可以回滚

以上是 第五天MYSQL 的全部内容, 来源链接: utcz.com/z/533527.html

回到顶部