Day3_MySQL核心知识——多表查询

一.准备工作

打开Navicat,新建一个名为employee的表以及一个名为department的表,表的字段如下,为后面的查询作准备,建完表后,自行给其中添加数据。
employee的表
在这里插入图片描述
department的表
在这里插入图片描述

二.储备知识

如果多表连接并且没有指定连接条件,那么将会产生很多没用的数据,导致查询效率降低,因此多表连接必须指定连接条件

三.多表查询的语法知识

3.1多个表都有的列名,在使用时必须指定使用的是哪张表的列名

例子: 查询一条员工信息,在查询该员工对应的部门名称

SELECT employee_id, last_name, salary, department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id;

3.2给表取别名

例子: 查询一条员工信息,在查询该员工对应的部门名称

SELECT employee_id, last_name, salary, department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id;

3.3三表查询最少需要2个连接条件

例子: 查询一条员工信息

SELECT employee_id, last_name, e.department_id, department_name, d.location_id, city
FROM employees e, departments d, locations l
WHERE e.department_id = d.department_id and d.location_id = l.location_id;

3.4自连接和非自连接

例子: 查询一条员工id,员工姓名,经理id,经理姓名(一张表当作两张使用,第一张用来查询员工信息,第二张查询经理信息)

SELECT worker.employee_id, worker.last_name, worker.manager_id, worker.last_name
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id;

3.5内连接

所有的sql语法都是sql92的语法
sql99的语法:select … from 表名1 join 表名2 on 连接条件1 join 表名3 on 连接条件2

内连接: 多表查询时,只显示符合条件的数据,不符合的数据被过滤掉
例子: 查询一条员工id,员工姓名,经理id,经理姓名(一张表当作两张使用,第一张用来查询员工信息,第二张查询经理信息)

SELECT emp1.employee_id, emp1.last_name, emp1.manager_id, emp2.last_name
FROM employees emp1 
join employees emp2
on emp1.manager_id = emp2.employee_id;

3.6外连接

外连接: 多表查询时,有时希望不符合的数据也被显示出来。外连接分为左外连接右外连接
左外连接: 显示左表不符合条件的数据
右外连接: 显示右表不符合条件的数据

例子: 查询员工姓名,部门编号,部门名称,如果员工没有部门也查询出来

SELECT  last_name, e.department_id, department_name
FROM employees e
LEFT OUTER JOIN departments d
on e.department_id = d.department_id;

3.7去掉重复的记录

例子: 查询部门id,并去掉重复的

SELECT  DISTINCT department_id FROM employees;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值