博客列表 >数据库CURD常用操作-select查询-预处理

数据库CURD常用操作-select查询-预处理

葡萄枝子
葡萄枝子原创
2021年02月25日 00:36:42849浏览

数据库CURD常用操作-select查询-预处理

  1. 熟练操作CURD中常用操作;
  2. 对于常用的select查询,必须全部达到背诵级别,特别是关联操作,一定要理解原理并上机实战;
  3. 明白预处理原理,并举例

1. 熟练操作CURD中常用操作;

  1. -- 王二和麻子
  2. insert staffs (name, gender, salary, email, birthday) values
  3. ('王二', 'male', 4000, 'aa@bb.cc', '1999-12-30'),
  4. ('麻子', 'female', 6000, 'bb@aa.cc', '2000-01-01');
  5. -- 麻子
  6. delete from staffs where name = '麻子';
  7. -- 王二为王五
  8. update staffs set name = '王五' where name = '王二';
  9. -- 王五
  10. select name, gender, salary, email, birthday from staffs where name = '王五';

增删改查

2. 对于常用的select查询,必须全部达到背诵级别,特别是关联操作,一定要理解原理并上机实战;

  1. -- 1. 条件查询
  2. -- 查询工资 salary > 4000 salary < 10000 且性别为男的记录
  3. select id, name, salary from staffs where salary > 4000 and salary < 10000 and gender = 'male';
  4. -- 2. 分组查询
  5. -- 按性别分组查询,别名 num 统计数量
  6. select gender, count(*) as num from staffs group by gender;

分组查询

  1. -- 3. 排序查询
  2. -- 按工资降序排列
  3. select id, name, salary from staffs order by salary desc;
  4. -- 4. 分页查询
  5. -- 每页显示2条记录,查询第3页,偏移量是 offset = 2 * (3 - 1) = 4
  6. select id, name, salary from staffs limit 2 offset 4;
  7. select id, name, salary from staffs limit 4, 2;
  8. -- 5. 子查询
  9. -- 查询工资最大值的记录
  10. select id, name, salary from staffs where salary = (select max(salary) from staffs);
  11. -- 6. 区间查询
  12. -- 查询工资 salary 4000 ~ 10000 的记录,包含边界
  13. select id, name, salary from staffs where salary between 4000 and 10000;
  14. -- 7. 集合查询
  15. -- 查询工资在 4000 5000 中的记录
  16. select id, name, salary from staffs where salary in (4000, 5000);
  17. -- 8. 模糊查询
  18. -- 搜索工资包含三个零 "000" 的记录
  19. select id, name, salary from staffs where salary like '%000%';
  20. -- 查询名字以"五"结尾的记录
  21. select id, name, salary from staffs where name like '%五';
  22. -- 查询名字第2字符以"五"开始的记录
  23. select id, name, salary from staffs where name like '_五%';

模糊查询

  1. -- 9. 空值查询
  2. -- 工资非空查询
  3. select id, name, salary from staffs where salary is not null;
  4. -- 10. 分组过滤查询
  5. -- 按性别分组查询,别名 num 统计数量,过滤条件为男性的记录
  6. select gender, count(*) as num from staffs group by gender having gender = 'male';

分组过滤查询

  1. -- 11. 关联查询
  2. -- 创建一个 test 表存储用户 id 字段为 uid
  3. create table test (
  4. id int unsigned auto_increment not null primary key,
  5. uid int unsigned not null
  6. );
  7. -- staffs 表中的 id 导入到 test 表中的 uid 字段中
  8. insert test (uid) select id from staffs;
  9. -- 关联查询
  10. select name, salary, uid from staffs, test where staffs.id = test.uid;
  11. -- 使用别名
  12. select name, salary, uid from staffs as s, test as t where s.id = t.uid;
  13. select s.name, s.salary, t.uid from staffs as s, test as t where s.id = t.uid;
  14. -- 11.1 内连接
  15. select name, salary, uid from staffs inner join test on staffs.id = test.uid where staffs.id = 1;
  16. -- 内连接省略 inner 使用别名
  17. select name, salary, uid from staffs as s join test as t on s.id = t.uid where s.id = 1;

内连接

  1. -- 11.2 外连接
  2. -- 11.2.1 左外连接:左主表,右从表
  3. select name, salary from staffs as s left join test as t on s.id = t.uid where s.id = 1;
  4. -- 11.2.2 右外连接:右主表,左从表
  5. select name, salary from staffs as s right join test as t on s.id = t.uid where s.id = 1;

右外连接

3. 明白预处理原理,并举例

  • 防止 sql 注入
  • sql 语句中数据,在执行阶段再与字段绑定
  1. -- 准备预处理sql语句
  2. prepare stmt from 'select name, salary from staffs where salary > ? limit ?';
  3. -- 数据绑定到预处理语句中的占位符 ?
  4. set @salary = 4000, @num = 2;
  5. -- 执行sql语句
  6. execute stmt using @salary, @num;

预处理

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议