MySQL多表连接查询

多表连接查询

数据表的连接查询常用的有内连接和外连接两种,其中外连接又分为左连接和右连接。

内连接查询

通过INNER JOIN……ON关键字实现,命令如下:

SELECT field1,field2,……fieldn from table_name INNER JOIN join_table ON join_condition;

  • ON 后面的字段其实就是外键约束中两个对应的列名
  • 内连接时如果忽略on条件的限制,就会出现前表中所有记录和后表中所有记录一一对应的情况。记录数量会变成m*n条,一定要避免出现这种情况

 外连接查询

命令如下:
SELECT field1,field2,……fieldn from table_name LEFT / RIGHT JOIN join_table ON join_condition;

左连接和右连接查询的区别是:
左连接的主表是 'table_name',右连接的主表是'join_table'
查询时以主表数据为准,主表中有的数据才会显示,主表中没有的数据及时附表中有也不显示在结果中!!

子查询

子查询可以将一张表的数据作为条件去查另一张表

单行单列

SELECT */field from table_a WHERE field1 > (SELECT field1 from table_b where field2 = '举例');

释义:从B表中查询出字段=‘举例’的数据对应的字段1,那么这个查询结果一定是一个单行单列的数据,再用这个数据查询最终想要输出的数据,要求两个表起码有一个共有字段,括号内返回的值必须是单行单列的值!

 单行多列

SELECT */field from table_a WHERE (field1,field2) > (SELECT (field1,field2) from table_b where field2 = '举例';
释义:从B表中查询出字段=‘举例’的数据对应的字段1和字段2,再用这两个数据查询最终想要输出的数据
要求两个表起码有两个共有字段,括号内的返回值和查询的列名必须一致!

单列多行

SELECT */field from table_a WHERE field1 in (SELECT field1 from table_b);→查询结果在返回字段结果内,与其对应的是 not in,表示查询结果不在返回字段结果内

SELECT */field from table_a where field1 >= ANY(SELECT field1 from table_b);→只能查询数值,满足ANY后面的返回结果中的任意一个就返回查询结果

SELECT */field from table_a where field1 >= ALL(SELECT field1 from table_b);→只能查询数值,满足ALL后面的返回结果中的全部数值才返回查询结果


原文链接:https://blog.csdn.net/su_2018/article/details/83832594



 

原文地址:https://www.cnblogs.com/lvhuayan/p/15257180.html