MySQL基础中级进阶

对于测试人员来说使用MySQL中高级部分就是多表的查询,平时日常工作中最多用到的还是单表的查询、修改、删除和添加数据。

接下来介绍下多表查询。

多表查询的分类

  1、内链接查询:隐式内连查询、显示内连查询

  2、外链接查询:左外连接、右外连接

  3、子查询(又叫嵌套查询)

  4、union查询(一般SQL注入测试时会经常用到)

如下这张图形象的显示了内链接、左链接和右链接:

一、内链接查询

  隐式内链接查询

-- 查询员工表的名称,性别。部门表的名称
SELECT 
	t1.name, -- 员工表的姓名
	t1.gender,-- 员工表的性别
	t2.name -- 部门表的名称
FROM
	emp t1,
	dept t2
WHERE 
	t1.`dept_id` = t2.`id`;

  显示内链接查询

SELECT 
  emp.name,emp.gender,dept.name FROM
  emp JOIN dept ON emp.`dept_id` = dept.`id`
where
  emp_no = 1001;

二、外链接查询

  左链接查询

-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
SELECT 	t1.*,t2.`name` 
FROM emp t1 LEFT JOIN dept t2 
ON t1.`dept_id` = t2.`id`;

左链接查询:左表(emp)的记录将会全部显示出来,而右表(dept)只会显示符合搜索条件的记录,右表记录不足的地方显示为Null

  右链接查询

--查询部门信息及所有员工
SELECT * 
FROM dept t2 RIGHT JOIN emp t1 
ON t1.`dept_id` = t2.`id`;

右链接查询:右表(emp)的记录将会全部显示出来,而左表(dept)只会显示符合搜索条件的记录,左表记录不足的地方显示为Null

三、子查询(嵌套查询)

-- 子查询法:查询工资最高的员工信息
SELECT * 
FROM emp 
WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);


--内链接查询法:查询工资最高的员工信息
SELECT *
from emp,dept
WHERE emp.dept_id = dept.id AND emp.salary > 30000

  子查询不同情况:

  1. 子查询的结果是单行单列的:
* 子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =
-- 查询员工工资小于平均工资的人
SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);


  2. 子查询的结果是多行单列的:
* 子查询可以作为条件,使用运算符in来判断
-- 查询'财务部'和'市场部'所有的员工信息
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部');

  3. 子查询的结果是多行多列的:
* 子查询可以作为一张虚拟表参与查询
-- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息
SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2
WHERE t1.id = t2.dept_id;

四、union查询

union查询一般测试人员用的比较少,web安全测试人员用的是比较多的。

union查询可以连接其他表组合查询把重复的数据去重后展示。

web安全测试人员用的多的就是采用数字占位符的形式,如select 1,2,3,4,5,6,7,8,9

一张图可以见识下union查询的厉害,如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值