• 第五天MYSQL


    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删除可以回滚
  • 相关阅读:
    ⛅剑指 Offer 11. 旋转数组的最小数字
    ✨Shell脚本实现Base64 加密解密
    Linux配置Nginx
    378. Kth Smallest Element in a Sorted Matrix
    875. Koko Eating Bananas
    278. First Bad Version
    704. Binary Search
    69. Sqrt(x)
    LeetCode 110 判断平衡二叉树
    LeetCode 43 字符串相乘
  • 原文地址:https://www.cnblogs.com/jane315/p/12853503.html
Copyright © 2020-2023  润新知