美文网首页
MySQL的分页查询和联合查询以及DML

MySQL的分页查询和联合查询以及DML

作者: 程序员汪汪 | 来源:发表于2021-03-25 21:35 被阅读0次

    分页查询

    应用场景

    当要显示的数据,一页显示不全,需要分页提交sql请求

    语法

    select 查询列表
        from 表
        [join type] join 表2
        on 连接条件
        where 筛选条件
        group by 分组字段
        having 分组后的筛选
        order by 排序的字段
        limit [offset,]size;
    

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

    分页公式

    (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. 有奖金的员工信息,并且工资较高的前10名显示出来

      SELECT 
          * 
      FROM
          employees 
      WHERE commission_pct IS NOT NULL 
      ORDER BY salary DESC 
      LIMIT 10;
      

    联合查询

    合并、联合,将多次查询结果合并成一个结果

    语法

    查询语句1
    union [all]
    查询语句2
    union [all]
    ...
    

    意义

    1. 将一条比较复杂的查询语句拆分成多条语句
    2. 适用于查询多个表的时候,查询的列基本是一致

    特点

    1. 要求多条查询语句的查询列数是一致的!
    2. 要求多条查询语句的查询的每一列的类型和顺序最好一致
    3. UNION关键字默认去重,如果使用UNION ALL可以包含重复项

    案例

    1. 查询部门编号>90或邮箱包含a的员工信息

      SELECT * FROM employees WHERE email LIKE '%a%' OR department_id>90;
      
      SELECT * FROM employees  WHERE email LIKE '%a%'
      UNION
      SELECT * FROM employees  WHERE department_id>90;
      

    DML(数据操纵语言)

    DML(Data Manipulation Language - 数据操纵语言) 可以在下列条件下执行:

    • 向表中插入数据
    • 修改现存数据
    • 删除现存数据

    事务是由完成若干项工作的DML语句组成的

    运行以下脚本创建表my_employees

    USE myemployees;
    CREATE TABLE my_employees(
        Id INT(10),
        First_name VARCHAR(10),
        Last_name VARCHAR(10),
        Userid VARCHAR(10),
        Salary DOUBLE(10,2)
    );
    
    CREATE TABLE users(
        id INT,
        userid VARCHAR(10),
        department_id INT
    );
    

    显示表my_employees的结构

    DESC my_employees;
    

    INSERT

    方式一

    语法

    insert into 表名(字段名,...) values(值,...);
    

    特点:

    1. 要求值的类型和字段的类型要一致或兼容

    2. 字段的个数和顺序不一定与原始表中的字段个数和顺序一致

      但必须保证值和字段一一对应

    3. 假如表中有可以为null的字段,注意可以通过以下两种方式插入null值

      ① 字段和值都省略

      ② 字段写上,值使用null

    4. 字段和值的个数必须一致

    5. 字段名可以省略,默认所有列

    方式二

    语法

    insert into 表名 set 字段=值,字段=值,...;
    

    两种方式的区别:

    1. 方式一支持一次插入多行,语法如下:

      insert into 表名[(字段名,..)] values(值,..),(值,...),...;
      
    2. 方式一支持子查询,语法如下:

      insert into 表名
      查询语句;
      

    向表中插入数据

    向my_employees表中插入下列数据

    ID FIRST_NAME LAST_NAME USERID SALARY
    1 patel Ralph Rpatel 895
    2 Dancs Betty Bdancs 860
    3 Biri Ben Bbiri 1100
    4 Newman Chad Cnewman 750
    5 Ropeburn Audrey Aropebur 155
    INSERT INTO my_employees
    VALUES
        ( 1, 'patel', 'Ralph', 'Rpatel', 895 ),
        ( 2, 'Dancs', 'Betty', 'Bdancs', 860 ),
        ( 3, 'Biri', 'Ben', 'Bbiri', 1100 ),
        ( 4, 'Newman', 'Chad', 'Cnewman', 750 ),
        ( 5, 'Ropeburn', 'Audrey', 'Aropebur', 1550 );
    

    或者

    # 先删除表数据
    DELETE FROM my_employees;
    # 再插入
    INSERT INTO my_employees
    SELECT 1,'patel','Ralph','Rpatel',895 UNION
    SELECT 2,'Dancs','Betty','Bdancs',860 UNION
    SELECT 3,'Biri','Ben','Bbiri',1100 UNION
    SELECT 4,'Newman','Chad','Cnewman',750 UNION
    SELECT 5,'Ropeburn','Audrey','Aropebur',1550;
    

    向users表中插入数据

    INSERT INTO users
    VALUES
        ( 1, 'Rpatel', 10 ),
        ( 2, 'Bdancs', 10 ),
        ( 3, 'Bbiri', 20 );
    

    UPDATE

    修改单表的记录

    语法:

    update 表名 set 字段=值,字段=值 [where 筛选条件];
    
    1. 将3号员工的last_name修改为“drelxer”

      UPDATE my_employees SET last_name='drelxer' WHERE id = 3;
      
    2. 将所有工资少于900的员工的工资修改为1000

      UPDATE my_employees SET salary=1000 WHERE salary<900;
      

    修改多表的记录

    语法:

    update 表1 别名 
    left|right|inner join 表2 别名 
    on 连接条件  
    set 字段=值,字段=值 
    [where 筛选条件];
    

    DELETE

    删除单表的记录

    语法:

    delete from 表名 [where 筛选条件][limit 条目数]
    

    级联删除

    语法:

    delete 别名1,别名2 from 表1 别名 
    inner|left|right join 表2 别名 
    on 连接条件
     [where 筛选条件]
    
    1. 将userid 为Bbiri的user表和my_employees表的记录全部删除

      DELETE u,e 
      FROM
          users u
          JOIN my_employees e 
      ON u.`userid` = e.`Userid` 
      WHERE
          u.`userid` = 'Bbiri';
      
    2. 删除所有数据

      DELETE FROM my_employees;
      DELETE FROM users;
      

    TRUNCATE

    清空表

    语法

    truncate table 表名;
    

    DELETE和TRUNCATE的区别

    1. TRUNCATE删除后,如果再插入,标识列从1开始。DELETE删除后,如果再插入,标识列从断点开始
    2. DELETE可以添加筛选条件,TRUNCATE不可以添加筛选条件
    3. TRUNCATE效率较高
    4. TRUNCATE没有返回值,DELETE可以返回受影响的行数
    5. TRUNCATE不可以回滚,DELETE可以回滚

    相关文章

      网友评论

          本文标题:MySQL的分页查询和联合查询以及DML

          本文链接:https://www.haomeiwen.com/subject/nvarhltx.html