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;    

 

 1 三张表链接查询编号为1001的生日,姓名,部门编号和名称
 2 select 
 3     birth_date,first_name,last_name,de.deppt_no,dept_name
 4 from
 5     employees em inner join dept_emp de 
 6                 on de.emp_no = em.emp_no
 7                     inner join departments ds 
 8                         on ds.dept_no = de.dept_no
 9 where
10     de.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查询的厉害,如下

 

posted @ 2020-07-05 16:09  韩凯1202  阅读(211)  评论(0编辑  收藏  举报