随着软件市场的发展,软件测试业务逻辑复杂度的提示,作为软件测试人员,数据库也成为比如的内容之一。比如:
基于功能方面,比如页面开发,对于BS架构的软件来说,在测试过程中会出现一些诸如session过期、数值校验、参数传递错误等现象,这样,你可以知道通常的数据库异常是什么原因导致的。
基于性能方面:当软件的性能测试遇到大h量数据加载时,需要考虑这个性能瓶颈是否由数据库造成。此刻需要做数据库的优化。
基于安全测试:做渗透测试需要SQL注入的场景。
对于MySQL基础的单表增删改查的学习,相对来说比较简单,但是多表查询对于很多初学者来说,是个重难点。一方面,90%以上的企业的面试笔试题里都是多表查询,如下图。此外,学会了数据库也是我们升职加薪的利器之一,同时,也能让我们占据市场核心竞争力。
接下来, 针对Mysql数据库的多表查询进行详细讲解。
以下不同查询方法的案例表, 产品表和产品分类表,如下:
一、子查询:
定义:子查询是一条select语句结果作为另一条select语法的一部分(查询条件、查询结果、表等)。或是将select语句的结果作为一张独立的表进行查询。
语法:
1. select 字段… from 表1 where 条件 = 表2结果;
2. select字段… from 表1,表2结果 where 主表.主键=从表.从键;
案例:
1. 查询化妆品产品的商品和分类信息
写法一:将分类表的查询结果作为产品表的查询条件:SELECT p.pid,p.pname,p.price,p.flag FROM product p WHERE p.cetegory_id=(SELECT c.cid FROM cetegory c WHERE c.cname='化妆品');
写法二:将分类表的查询结果作为表: SELECT p.pid,p.pname,p.price,p.flag,c.cname FROM product p,(SELECT * FROM cetegory WHERE cname='化妆品')c WHERE p.cetegory_id=c.cid;
得到的结果:
注:如果想要本章内容涉及的视频资源,可以扫描文末二维码领取课程案例。
二、内连接
概念:将两张表或多张表共有的部分查询出来,关键是inner join... on, 其中,有隐式内连接和显示内连接。
隐式内连接:不显示关键字inner join
显示内连接:显示关键字inner join
语法:
隐式内连接:select * from 主表,从表where 主表.主键=从表.外键
显示内连接:select * from 主表 inner join 从表 on 主表.主键=从表.外键
案例:
查询产品表、分类表对应的详细信息:
SELECT * FROM cetegory c,product p WHERE c.cid=p.cetegory_id; #隐式
SELECT* FROM cetegory cLEFT OUTER JOINproduct pONc.cid=p.cetegory_id; #显示
查询结果:
三、外连接:
定义: 全连接分为:左外连接:左外连接是以左表为准,左表的数据必须每条都有。右外连接:右外连接时以右表为准,右表的数据必须每条有。
语法:
左外:select * from 主表 left outer join 从表 on 主表.主键=从表.从键
右外: select * from 主表 right outer join从表 on 主表,主键= 从表.从键
案例:
左外:SELECT* FROM cetegory c LEFT OUTER JOINproduct pONc.cid=p.cetegory_id;
右外:SELECT* FROM cetegory cRIGHT OUTER JOINproduct pONc.cid=p.cetegory_id;
查询结果:
四、全连接
定义: 显示左右表中全部数据全连接查询,是在内连接的基础上增加左右两边没有显示的数据。注意: MySQL并不支持全连接full JOIN 关键字,但是MySQL提供了UNION关键字,使用UNION 可以间接实现full JOIN功能。
案例:
SELECT * FROM product p LEFT JOIN cetegory c ON p.cetegory_id = c.cid
UNION
SELECT * FROM product a RIGHT JOIN cetegory b ON a.cetegory_id = b.cid
查询结果: