MySQL基础中级进阶

Posted 韩小北(韩凯)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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`;	

  

二、外链接查询

  左链接查询

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

  右链接查询

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

  

三、子查询(嵌套查询)

-- 子查询法:查询工资最高的员工信息
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查询的厉害,如下

 

以上是关于MySQL基础中级进阶的主要内容,如果未能解决你的问题,请参考以下文章

干货丨 进阶中级Java程序员知识点汇总

一文详解:中信银行java笔试题库

一文详解:中信银行java笔试题库

一文详解:中信银行java笔试题库

Java开发社招面试总结!kafka简介及使用

JavaEE安卓Web前端微信小程序等接近四百篇基于代码实战的技术文章