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隐式内连接

    隐式里面是没有inner关键字的

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;

 

  1.2显示内连接

    显示里面是由inner关键字的

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.小结  

  1. 内连接的特点(查的是什么东西)

    内连接查询的是公共部分,满足连接条件(主外键关系)的部分

  2. 使用内连接的关键点

    • 使用主外键关系做为条件来去除无用信息. 抓住主外键的关系,用主外键作为连接条件 b表里面的外键 = a表里面的主键

    • 显示内连接里面的,on只能用主外键关联作为条件,如果还有其它条件,后面加where

  3. 语法

-- 隐式(不出现inner)
select * from a,b where a.主键=b.外键 and 其它条件

-- 显示(出现inner)
select * from a [inner] join b on a.主键=b.外键 where 其它条件

2.外连接

  2.1左外连接

以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 连接条件 --右外连接

 

   2.3.2内连接和外连接的区别

  • 内连接: 查询的是公共部分,满足连接条件的部分

  • 左外连接: 以左边表为主表, 查询出左边表的所有的数据. 再通过连接条件匹配出右边表的数据, 如果满足连接条件, 展示右边表的数据; 如果不满足, 右边的数据通过null代替

   2.3.3引用

1.用户1和订单m
查询所有的用户的订单信息 外连接
查询下单的用户的信息 内连接

2.用户1和账户m
查询所有的用户的账户信息 外连接
查询所有用户的开户信息 内连接

posted @ 2020-12-29 20:02  乃颜先生  阅读(79)  评论(0编辑  收藏  举报