您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MySQL

Linux下MySQL多表操作

时间:11-21来源:作者:点击数:

建立如下两个数据库进行多表操作

1.普通双表连接查询

select 表1.列名,表2.列名 from 表1,表2 where 连接条件;

select 表1别名.列名,表2别名.列名 from 表1 as 表1别名,表2 as 表2别名 where 连接条件;

2.内连接查询

内连接发生在从两个表中选取记录且第一个表中某一列的值能够能够在第二个表的相同列找到。内连接在连接条件中使用(=)运算符比较被连接的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接中的重复列。内连接中参与连接的表的地位是相等的。

select 表1别名.列名,表2别名.列名 from 表1 as 表1别名 inner join 表2 as 表2别名 on 连接条件;(不能使用where)

3.外连接查询

外连接查询是将一个表中的行与另一个表中的行相关联,但有时候可能会包含没有关联行的那些行。

(1):左外连接查询以左表为主体,将左表中的每条数据都会显示出来。

select 表1别名.列名,表2别名.列名 from 表1 as 表1别名 left join 表2 as 表2别名 on 连接条件;

后面三条信息是将左表中的信息显示了出来,因为右表行数不够,只能用NULL来填充。

(2):右外连接查询以右表为主体,将右表中的每条数据都会显示出来。

select 表1别名.列名,表2别名.列名 from 表1 as 表1别名 right join 表2 as 表2别名 on 连接条件;

可以看出来,在左外查询中共有19条信息,但是在右外查询中只有16条信息。这是因为左表中共有19条信息,右表中共有16条信息,因此,左外查询时会将左表中的数据全部显示出来,右表中数据不够用NULL查询;右外查询时会将右表中的数据全部显示出来,左表中只取前16行数据(因为右表只有16行数据,左表中最后三行省略)。

4.子查询

将查询一张表的结果来充当另一个查询的条件,这样嵌套的查询就称为子查询。

在select语句中,子查询总是由内向外查询的,且只有当内查询的结果为真时才会执行外查询。作为子查询的select语句只能查询单个列。

(1):带IN关键字的子查询

select 表1列名 from 表1 连接条件 in (select 表2列名 from 表2 连接条件);

(2):带EXISTS关键字的子查询

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False,当里面的子查询为真时,外面的查询才会启动。

select 表1列名 from 表1 连接条件 exists (select 表2列名 from 表2 连接条件);

上面的查询语句先进行后面的select语句的查询,先查询supplier语句中是否存在s_id为104,存在,返回True,然后执行外部查询。

(3):带ANY、SOME关键字的子查询

select 表1列名 from 表1 连接条件 连接符 ANY/SOME (select 表2列名 from 表2 );

ANY和SOME关键字跟在一个比较操作数的后面,表示该值若与子查询返回的任何值比较为True,则返回True。通俗来讲,只要满足子查询中的任意一个条件,就返回True。

ANY和SOME的查询是一样的。上面的SQL语句的作用是先将supplier表中的s_id取出来,然后和fruit表中的s_id进行比较,只要fruit中的s_id大于suppier表中的s_id,那么就将s_id的值输出。因此输出结果为102-107,因为supplier和fruit表中的s_id的值都是101-107,fruit中的102-107都只是大于supplier中的101,所以会把102-107输出。

(4):带ALL关键字的子查询

select 表1列名 from 表1 连接条件 连接符 ALL (select 表2列名 from 表2 );

ALL关键字跟在一个比较操作符的后面,表示该值若与子查询返回的最大值比较为True,则返回True。通俗来讲,必须要满足子查询中的每一个条件,才能返回True。

ALL查询是与子查询的结果中最大的进行比较。上面的SQL语句的作用是先将supplier表中的s_id取出来,然后和fruit表中的s_id进行比较,必须要fruit中的s_id大于suppier表中最大的s_id,那么就将s_id的值输出。因此输出结果为Empty,因为supplier和fruit表中的s_id的值都是101-107,fruit中的没有任何值大于supplier中的107(supplier中最大的值是107),所以会输出Empty。

5.合并结果查询

利用UNION关键字,可以将查询的结果合并到一张结果集中,也就是通过UNION关键字将多条select语句连接起来,注意,合并结果集只是增加了表中的记录,并不是将表中的字段增加,仅仅是将记录合并到一起。其显示的字段应该是相同的,不然不能合并。

UNION:执行的时候会删除重复的记录,所有返回的行数是唯一的。

UNION ALL:不删除重复行也不对结果进行排序。

select 表1列名 from 表1 连接条件 union select 表1列名 from 表1 连接条件;

select 表1列名 from 表1 条件 union all select 表1列名 from 表1 条件;

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门