mysql的多表查询
来源:互联网 发布:淘宝开店申请流程 编辑:程序博客网 时间:2024/05/29 17:22
在mysql的增删改查中,使用最多的就是查询,而查询中使用较多的就是多表之间的查询,
多表查询是指在某一条件下,对多个有逻辑关系的表进行查询,并将结果合并输出的查询方式。
而多表查询的方法就是基于这种逻辑关系而运行的,这种逻辑关系就是主外键的关系。
1.主外键约束关系
主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性。
外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。
每一个表都有自己的主键,而外键是用来连接多个表之间的逻辑关系,比如下面两张表:
Dept_id就是员工表的外键,是用来和部门表建立关系的。
所以在进行多表查询时要建立表之间的主外键约束关系。
首先建立两个表来演示多表查询的结果。
创建一个部门表。
建立一个员工表,并且提前建立主外键的关系。
同时将两张表添上数据:
多表查询的方式有很多,主要是用连接查询的方法,现在介绍连接查询的方法。
1.连接查询:就是先将表进行笛卡尔积的查询:
所谓的笛卡尔积就是指表之间的积,比如员工表有三行数据,部门表也有三行数据,得出的笛卡尔积就有九行数据。而这并不是我们需要的查询结果,
要么对其的重复数据进行删除,就是通过条件筛选,要么通过关联关系去除笛卡尔积。
(1).内连接:通过条件进行查询
有两种形式:select 列1,列2,......from 表1,表2......where 表1.外键=表2.主键;
selete 列1,列2,.......from 表1 inner join 表2 on 表1.外键=表2.主键;
可以发现上面两种形式得出的查询结果是相同的,当需要查询所有数据时可以使用通配符*。
(2)外连接:分为左外连接和右外连接,查询出的结果可能有不满足条件的可能,如null。
左外连接:左表的数据不论是否满足条件都显示,然后再去查询右表,右表满足条件的显示出来,不满足的显示null:
select 列 from 表1 left outer join 表2 on 表1.外键=表2.主键[left outer join 表3 on .....];
因为员工表中没有宣传部的人员,所以都补上null。
右外连接:与左外连接相反,先把右表的数据全部显示,左表不满足的补上null:
select 列 from 表1 right outer join 表2 on 表1.外键=表2.主键[right outer join 表3 on .....];
因为部门表中没有4这个部门,所以补上null。
特殊:全外连接:将表的所有数据全部显示,没有匹配的全部补上null,mysql没有全外连接,但是可以用以下语句实现全外连接查询:
select 列 from 表1 left outer join 表2 on 表1.外键=表2.主键[left outer join 表3 on .....]
union
select 列 from 表1 right outer join 表2 on 表1.外键=表2.主键[right outer join 表3 on .....];
(3)嵌套查询(子查询):select语句中还嵌套有select语句,即拥有两个以上的select语句的查询,外查询是主查询,内查询是子查询。
子查询先运行,子查询的结果作为主查询的值使用。
当子查询出现在where后时,作为条件的一部分,可以使用all,any等关键词;
比如查询工资大于2部门的所有员工信息:
比如查询工资小于2部门的任意一人的员工信息:
当子查询出现在from后时,作为被查询的一条表。
小结:多表查询包括连接查询,交叉查询(笛卡尔积)和子查询,连接查询中要用到主外键的约束关系除去笛卡尔积,子查询要注意子查询的位置,代表了子查询的作用。
- mysql的多表查询
- mysql数据库常用的查询语句(多表查询)
- MySQL数据库的复杂查询技术-多表查询
- 区别mysql的多表查询和连接查询
- 【MySQL】MySQL多表查询
- Mysql多表查询的实现
- Mysql简单的查询多表
- 对mysql多表查询的理解
- MySQL多表查询的基本操作
- mysql语句的多表查询
- MySQL数据库的多表查询
- mysql之简单的多表查询
- MySQL的多表联合查询
- 关于mysql的多表查询
- MySQL 多表查询
- mysql多表查询
- Mysql多表查询
- MySQL多表查询
- 反汇编代码分析
- Properties 读取配置文件
- HDOJ 5804 Price List (水题)
- 【PAT】(乙级)1017. A除以B (20)
- Activiz使用
- mysql的多表查询
- 石子合并最快算法
- Altera OpenCL入门(一)环境变量的设计
- git diff 详解
- Android应用界面开发09
- ViewPager 详解(二)---详解四大函数
- HDU 1011 Starship Troopers(树形DP+01背包)
- 对SVN的基本理解
- hdu 1286 找新朋友 欧拉函数