测牛学堂:软件测试之sql必须要掌握的sql高级查询知识点汇总

106 阅读3分钟

测试再学习一点mysql的高级查询,就足够我们使用了。

更深入的研究不是这个阶段需要掌握的,如果感兴趣的话,可以在工作之余自己再深入了解。

我们这次只介绍一些高级查询中相对基础和用的比较多的查询方法。

多表查询

多表查询不常用,因为效率很低。所以我们了解有这种用法,看到有人用的话,就要提出是否可以优化的建议。

如果想要进行多表查询,那么表与表之间必须有一定的关联性(外键),否则多表查询无意义。

多表查询的时候一定要带where用外键去关联,否则会产生冗余数据(笛卡尔积现象)

select * from company,department where company.id = company_fid

连接查询

连接查询和多表查询的使用场景是相同的,但是连接查询的性能要高于多表查询。

连接查询分为内查询和外查询

内连接

关键字:inner join ... on ...

on相当于内连接的条件关键字,和表查询的where一样的意义。

select * from department inner join  company on companys.id = company_fid

外连接

分类:左连接和右连接(左外连接、右外连接)

关键字:left(right)join ... on ...

说明左连接应用比较多,实际上左连右连,取的结果是一样的,所以我们选择其一即可。一般情况下,左连接的使用场景比较多,因为从左到右符合我们的开发和书写sql的习惯。

select * from department left join company on company.id = company_fid

左连接left join时,会以左表为基准,即会显示出左表所有的数据,右连接正好相反

下面我们再来介绍一个最后的最常用的查询方法,子查询

子查询

所谓的子查询,就是是嵌入在其他sql语句中的select语句,也称为嵌套查询。

MySQL会从最内层的查询开始,层层向外执行。

子查询可以分为三类

1 单行单列:子查询返回的结果集是一个具体值

需求:查询北京分公司的所有部门负责人。

字段介绍:

department_leader 部门领导人

department 部门表

company_fid 公司外键

company 公司表

company_name 公司名

select department_leader from department where company_fid = (select id from company where company_name = '北京分公司')

可以看到括号里的,就是子查询语句。

2单列多行:子查询返回的结果集是值的纵向列表(集合)

需求:查询除了销售部的所有员工姓名及年龄

字段介绍:

user_name 员工姓名

user_age 员工年龄

staff 员工表

staff_fid 员工表对应部门表的外键

department 部门表

department_name 部门名称

select user_name,user_age from staff where staff_fid in (select id from department where department_name != '销售部')

3)多列多行:子查询返回的结果集是一个临时表

注意多列单行的情况,也是临时表,也就是只要是多列(多个字段)那么就可以看作成临时表

需求:查询所有员工信息,并显示员工对应的部门名称

字段介绍:

staff 员工表

department_name 部门名称

department 部门表

select * from staff left join (select id,department_name from department ) as cmd on  staff.departmment_id = cmd.id

注意,其实这个查询没有必要用到子查询,但是我们为了示例演示使用。子查询的结果等于返回的一个表,所以我们再利用左连接去查对应的结果。