sql的连结查询
环境准备
1 -- 创建部门表
2 CREATE TABLE dept (
3 id INT PRIMARY KEY AUTO_INCREMENT,
4 NAME VARCHAR(20)
5 );
6
7 INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');
8
9 -- 创建员工表
10 CREATE TABLE emp (
11 id INT PRIMARY KEY AUTO_INCREMENT,
12 NAME VARCHAR(10),
13 gender CHAR(1), -- 性别
14 salary DOUBLE, -- 工资
15 join_date DATE, -- 入职日期
16 dept_id INT
17 );
18
19 INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',7200,'2013-02-24',1);
20 INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('猪八戒','男',3600,'2010-12-02',2);
21 INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2);
22 INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3);
23 INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1);
一.内连接查询
1.1
select [字段,字段,字段][*] from 表1,表2 where 连接条件 --(外键的值等于主键的值)
select * from emp,dept where emp.dept_id = dept.id;
select emp.id,emp.name,emp.gender,emp.salary,emp.join_date,dept.name from emp,dept where emp.dept_id = dept.id;
-- 取别名---开发中一般使用取别名的方式
select e.id,e.name,e.gender,e.salary,e.join_date,d.name from emp e,dept d where e.dept_id = d.id;
select [字段,字段,字段][*] from a [inner] join b on 连接条件 [ where 其它条件]
select * from emp inner join dept on emp.dept_id = dept.id
select * from emp inner join dept on emp.dept_id = dept.id where emp.id = 2
select * from emp join dept on emp.dept_id = dept.id where emp.id = 2
2.小结
-
内连接的特点(查的是什么东西)
内连接查询的是公共部分,满足连接条件(主外键关系)的部分
-
使用内连接的关键点
-
使用主外键关系做为条件来去除无用信息. 抓住主外键的关系,用主外键作为连接条件 b表里面的外键 = a表里面的主键
-
显示内连接里面的,on只能用主外键关联作为条件,如果还有其它条件,后面加where
-
-
语法
-- 隐式(不出现inner)
select * from a,b where a.主键=b.外键 and 其它条件
-- 显示(出现inner)
select * from a [inner] join b on a.主键=b.外键 where 其它条件
2.
以join左边的表为主表,展示主表的所有数据,根据条件查询连接右边表的数据,若满足条件则展示,若不满足则以null显示.
可以理解为:在内连接的基础上保证左边表的数据全部显示
2.1.1语法
select [字段][*] from a left [outer] join b on 条件
2.2
以join右边的表为主表,展示右边表的所有数据,根据条件查询join左边表的数据,若满足则展示,若不满足则以null显示
可以理解为:在内连接的基础上保证右边表的数据全部显示
2.1.2语法
select 字段 from a right [outer] join b on 条件
2.3小结
2.3.1语法
select * from a left [outer] join b on 连接条件 --左外连接
select * from a right [outer] join b on 连接条件 --右外连接
-
内连接: 查询的是公共部分,满足连接条件的部分
-
1.用户1和订单m
查询所有的用户的订单信息 外连接
查询下单的用户的信息 内连接
2.用户1和账户m
查询所有的用户的账户信息 外连接
查询所有用户的开户信息 内连接