美文网首页
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