更加复杂的查询

前面我们已经学习了如何使用命令行查询、筛选、排序数据库,也了解了如何通过命令行来了解一个数据库,接下来我们来学习跨表查询、组合查询、子查询等更加复杂的查询。

跨表查询JOIN

在数据库实战中,我们发现salaries数据表只有员工的编号和工资,没有员工的姓名,员工的姓名在employees数据表中,我们想知道一个员工的完整信息应该怎么处理呢?这个时候就需要用到跨表查询了。

我们先来了解employees数据表和salaries数据表有哪些字段

employees数据表有一个员工的emp_no员工编号、birth_date员工生日、first_name员工的名,last_name员工的姓,gender员工的性别,hire_date员工离职时间。

salaries数据表有员工的emp_no编号、salary工资、from_date工资起始时间、to_date工资结束时间。

我们想跨表显示前20条工资数据的emp_no编号、姓、名以及工资,可以

不同的 SQL JOIN

在我们继续讲解实例之前,我们先列出您可以使用的不同的 SQL JOIN 类型:

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

MySQL数据库的性能

我们想查询工资最高的20条数据,且数据包含员工的编号、姓、名、以及工资

我们会发现当我们执行这段SQL命令的时候,MySQL就会变得非常卡啦,因为除了要跨表,还要对284万条工资数据进行排序,MySQL会花上数十秒的时间来处理这条命令。

 

本节任务

  1. 跨表查询