mysql 表关联
Posted 野生大魔王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 表关联相关的知识,希望对你有一定的参考价值。
一、什么是连接查询:就是将二个或二个以上的表,“连接起来”当做一个数据源,并从中去取得所须要的数据。连接查询包括交叉连接查询、内连接查询、外连接查询
(一) 交叉连接:交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
1、 格式1:select 要查询的内容 from 表名1 cross join 表名2;
2、 格式2:select 要查询的内容 from 表名1,表名2…;
3、 格式3:select 要查询的内容 from 表名1 join 表名2;
(二) 内连接:内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
1、 方法1:select 要查询的内容 from 表名1 inner join 表名2 on 表1.字段名=表2.字段名;
2、 方法2:select 要查询的内容 from 表名1 join 表名2 on 表1.字段名=表2.字段名;
3、 注意:在使用内连接时,可以给表起别名,格式为select 要查询的内容 from 表名1 别名1 join 表名2 别名2 on 别名1.字段名=别名2.字段名;
(三) 外链接:只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式,外连接分为左外连接、右外连接
1、 左外连接(以左表为主,即左表中的内容会全部显示出来,右表中不符合条件的部分用null补充):select 要查询的内容 from 表1 left join 表2 on 表1.字段名=表2.字段名;
2、 右外连接(以右表为主,即右表中的内容会全部显示出来,左表中不符合条件的部分用null补充)):select 要查询的内容 from 表1 right join 表2 on 表1.字段名=表2.字段名;
3、 习题:以product表和product_type表为例,查出每个品种各有多少个商品select a.protype_name, count(b.pro_name) from product_type a left join product b on a.protype_id = b.protype_id group by a.protype_name;
二、子查询:当一个查询是另一个查询的条件时,称之为子查询。子查询可以分为如下几类
(一) 按子查询结果分:表子查询、行子查询、列子查询、标量子查询
1、 表子查询:子查询的结果为多行多列,即一个表,该子查询通常放在from关键字后面
2、 行子查询:返回一行数据中多个列的内容
3、 列子查询:返回的结果为一列多行数据,此时可以当做“多个值”使用,类似:(5,17,8)
4、 标量子查询:返回的结果为一行一列,即一个值
(二) 按子查询所在位置分
1、 作为主查询的结果数据:select c1,(select f1 from tab2) as f11 from tab1;这里子查询应该是一个标量子查询
2、 作为主查询的条件数据:select c1 from tab1 where c1 in (select f1 from tab2);这里子查询应该是列子查询,即一列多行
3、 作为主查询的数据来源:select c1 from (select f1 as c1, f2 from tab2) as t2;这里子查询应该是表子查询
(三) 子查询之any、all关键字的使用
1、 any:表示大于集合中的任意一个值即可
1) 表1
2) 表2
3) 查询1:mysql> select * from tab2 where id>any (select f1 from tab3);
4) 查询2:mysql> select * from tab2 where id>all (select f1 from tab3);
(四) 子查询之exists关键字
以上是关于mysql 表关联的主要内容,如果未能解决你的问题,请参考以下文章