MySQL 多表查询

使用的代码

create database ckgl character set=utf8;

use ckgl;

create table warehouses(wnum char(3) primary key,area smallint null,city char(12));
insert into warehouses values('01',300,'北京');
insert into warehouses values('02',500,'天津');
insert into warehouses values('03',200,'上海');
insert into warehouses values('04',300,'北京');
insert into warehouses values('05',600,'上海');

create table employees(employee_id char(4) primary key,wnum char(2),salary smallint,name char(10));
insert into employees values('z1','01',3000,'King');
insert into employees values('z2','01',3500,'Abel');
insert into employees values('z3','01',5000,'Peter');
insert into employees values('z4','02',4000,'小宁');
insert into employees values('z5','02',2000,'Loction');
insert into employees values('z6','03',3000,'UUU');
insert into employees values('z7','03',6000,'小米');

create table departments(onum char(5) primary key, employee_id char(3), location_id char(3),amount int);
insert into departments values('d1','z1','s1',8000);
insert into departments values('d2','z2','s2',6500);
insert into departments values('d3','z2','s3',10000);
insert into departments values('d4','z3','s3',5000);
insert into departments values('d5','z4','s4',20000);
insert into departments values('d6','z5','s5',9000);
insert into departments values('d7','z5','s6',5500);
insert into departments values('d8','z6','s7',8800);

create table locations(location_id char(4) primary key,sname char(14),city char(12));
insert into locations values('s1','晨星公司','北京');
insert into locations values('s2','华大公司','天津');
insert into locations values('s3','芯片生产厂','北京');
insert into locations values('s4','全能公司','重庆');
insert into locations values('s7','万达公司','重庆');
insert into locations values('s5','索尼公司','北京');
insert into locations values('s6','字节公司','上沙');

# 查询员工为 ’UUU‘ 的人在哪里工作

select * from employees where name ='UUU';

select * from departments where employee_id = 'z6';

select * from locations where location_id = 's7';


# 多表查询实现
# 笛卡儿积(交叉连接)连接

select employees.employee_id,departments.location_id from employees,departments
# 缺少了多表连接的条件
where employees.employee_id = departments.employee_id;
# 关联查询

# 给表取别名  在 select 或 where 中使用表名的活,则必须使用表的表名  而不能在使用表的原名

select emp.employee_id,dept.location_id
from employees emp,departments dept where emp.employee_id = dept.employee_id;


# 查询员工的  employ_id,name, city

select e.employee_id,name,city from employees e,departments d,locations l
where e.employee_id = d.employee_id and d.employee_id = l.location_id


#  多表查询的分类 :
#1 (非)等值连接
#2 (非)自连接
#3 (非)内连接

#1 (非)等值连接
select e.employee_id,name,city from employees e,departments d,locations l
# where e.employee_id >= d.employee_id and d.employee_id >= l.location_id;
where e.employee_id = d.employee_id;
# and d.employee_id = l.location_id;

#2 (非)自连接

#3 (非)内连接

#     外连接的分类     左外连接   右外连接   满外连接(full join)

select employees.employee_id,departments.location_id from employees
left join departments on employees.employee_id = departments.employee_id
join locations l on departments.location_id = l.location_id;

select employees.employee_id,departments.location_id from employees
right join departments on employees.employee_id = departments.employee_id
join locations l on departments.location_id = l.location_id;

select employees.employee_id,departments.location_id from employees,departments
where employees.employee_id = departments.employee_id;

# 内连接  join...on....
select employees.employee_id,departments.location_id from employees join departments
on employees.employee_id = departments.employee_id
join locations l on departments.location_id = l.location_id;

UNION  操作符
# UNION ALL  操作符

# 7种 join 的实现

# select e.employee_id,d.employee_id from employees e join departments d on e.employee_id = d.employee_id;
#
# select e.employee_id,d.employee_id from employees e left join departments d on e.employee_id = d.employee_id;
#
# select e.employee_id,d.employee_id from employees e right join departments d on e.employee_id = d.employee_id;
#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值