时间:2021-05-24
MySql会用到联表查询,对于刚学习的新手来说,可能会理解起来有难度。下面这篇文章就来给大家详细介绍MySQL联表查询的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
关系型数据库,免不了表之间存在各种引用与关联。这些关联是通过主键与外键搭配来形成的。所以,取数据时,很大情况下单张表无法满足需求,额外的数据则需要将其他表加入到查询中来,这便是 JOIN 关键字完成的操作。
多表联合查询时,可省略 JOIN 关键字,以逗号分隔多张表,此时默认会当作 INNER JOIN 来处理。比如,
SELECT table1.*, table2.* FROM table1, table2;等效于:
SELECT table1.*, table2.* FROM table1 INNER JOIN table2;需要注意的是,当逗号形式与其他联表关键词结合时,在指定了联表条件,比如通过 ON 条件时,会报错。
通过此方法可方便地过滤出右边表中不符合条件的记录。
一些 JOIN 示例:
SELECT * FROM table1, table2;SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;SELECT * FROM table1 LEFT JOIN table2 USING (id);SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id LEFT JOIN table3 ON table2.id = table3.id;考察下面的示例:
CREATE TABLE t1 (i INT, j INT);CREATE TABLE t2 (k INT, j INT);INSERT INTO t1 VALUES(1, 1);INSERT INTO t2 VALUES(1, 1);SELECT * FROM t1 NATURAL JOIN t2;SELECT * FROM t1 JOIN t2 USING (j);查询结果:
+------+------+------+
| j | i | k |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+
+------+------+------+
| j | i | k |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+
结果中同名的列只出现一次,且都是值相同的那些记录。
通过向两表中插入一条新记录,令它们的 j 不相同,再进行测试。
mysql> INSERT INTO t1 VALUES(2, 2);Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO t2 VALUES(2, 3);Query OK, 1 row affected (0.00 sec)mysql> select * from t1 natural join t2;+------+------+------+| j | i | k |+------+------+------+| 2 | 2 | 1 |+------+------+------+1 row in set (0.00 sec)USING 情况下的返回:
COALESCE(a.c1, b.c1), COALESCE(a.c2, b.c2), COALESCE(a.c3, b.c3)ON 的返回:
a.c1, a.c2, a.c3, b.c1, b.c2, b.c3
ON 语句中只能引用其操作表(operands)中的表。
针对上面的表,以下查询会报错:
mysql> SELECT * FROM t1 JOIN t2 ON (i1 = i3) JOIN t3;ERROR 1054 (42S22): Unknown column 'i3' in 'on clause'而以下查询则可以:
mysql> SELECT * FROM t1 JOIN t2 JOIN t3 ON (i1 = i3);Empty set (0.00 sec)因为此时 t3 在 ON 语句的操作范围内了。
相关资源
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
MySQL表子查询表子查询是指子查询返回的结果集是N行N列的一个表数据。MySQL表子查询实例下面是用于例子的两张原始数据表:article表:blog表:SQ
mysql中using的用法为:using()用于两张表的join查询,要求using()指定的列在两个表中均存在,并使用之用于join的条件。示例:复制代码代
我正在用MySQL客户端的时候,突然想到如果可以给查询结果添加排名该多好啊,然后就找到了一个简单的解决办法。下面是一个示例表的数据:然后我们要根据Roll_No
本文实例讲述了mysql多个leftjoin连接查询用法。分享给大家供大家参考,具体如下:mysql查询时需要连接多个表时,比如查询订单的商品表,需要查询商品的
本文实例讲述了MySQL查询语句简单操作。分享给大家供大家参考,具体如下:查询创建数据库、数据表--创建数据库createdatabasepython_test