分页查询
应用场景
当要显示的数据,一页显示不全,需要分页提交sql请求
语法
select 查询列表
from 表
[join type] join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段
limit [offset,]size;
offset 要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
分页公式
(page - 1) * size, size
案例
-
查询前五条员工信息
SELECT * FROM employees LIMIT 0, 5; # 或者 SELECT * FROM employees LIMIT 5;
-
查询第11条~第25条员工信息
SELECT * FROM employees LIMIT 10, 15;
-
有奖金的员工信息,并且工资较高的前10名显示出来
SELECT * FROM employees WHERE commission_pct IS NOT NULL ORDER BY salary DESC LIMIT 10;
联合查询
合并、联合,将多次查询结果合并成一个结果
语法
查询语句1
union [all]
查询语句2
union [all]
...
意义
- 将一条比较复杂的查询语句拆分成多条语句
- 适用于查询多个表的时候,查询的列基本是一致
特点
- 要求多条查询语句的查询列数是一致的!
- 要求多条查询语句的查询的每一列的类型和顺序最好一致
- UNION关键字默认去重,如果使用UNION ALL可以包含重复项
案例
-
查询部门编号>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(值,...);
特点:
-
要求值的类型和字段的类型要一致或兼容
-
字段的个数和顺序不一定与原始表中的字段个数和顺序一致
但必须保证值和字段一一对应
-
假如表中有可以为null的字段,注意可以通过以下两种方式插入null值
① 字段和值都省略
② 字段写上,值使用null
-
字段和值的个数必须一致
-
字段名可以省略,默认所有列
方式二
语法
insert into 表名 set 字段=值,字段=值,...;
两种方式的区别:
-
方式一支持一次插入多行,语法如下:
insert into 表名[(字段名,..)] values(值,..),(值,...),...;
-
方式一支持子查询,语法如下:
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 筛选条件];
-
将3号员工的last_name修改为“drelxer”
UPDATE my_employees SET last_name='drelxer' WHERE id = 3;
-
将所有工资少于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 筛选条件]
-
将userid 为Bbiri的user表和my_employees表的记录全部删除
DELETE u,e FROM users u JOIN my_employees e ON u.`userid` = e.`Userid` WHERE u.`userid` = 'Bbiri';
-
删除所有数据
DELETE FROM my_employees; DELETE FROM users;
TRUNCATE
清空表
语法
truncate table 表名;
DELETE和TRUNCATE的区别
- TRUNCATE删除后,如果再插入,标识列从1开始。DELETE删除后,如果再插入,标识列从断点开始
- DELETE可以添加筛选条件,TRUNCATE不可以添加筛选条件
- TRUNCATE效率较高
- TRUNCATE没有返回值,DELETE可以返回受影响的行数
- TRUNCATE不可以回滚,DELETE可以回滚
网友评论