MySQL中的各种JOIN
1. 笛卡尔积(交叉连接)
在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用’,’
如
SELECT * FROM table1 CROSS JOIN table2
SELECT * FROM table1 JOIN table2
SELECT * FROM table1,table2
由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。
一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN
2. 内连接INNER JOIN
在MySQL中把INNER JOIN叫做等值连接,即需要指定等值连接条件
在MySQL中CROSS和INNER JOIN被划分在一起,不明白。
参看MySQL帮助手册
http://dev.mysql.com/doc/refman/5.0/en/join.html
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
3. MySQL中的外连接,分为左外连接和右连接,
即除了返回符合连接条件的结果之外,还要返回左表(左连接)或者右表(右连接)中不符合连接条件的结果,相对应的使用NULL对应。
a. LEFT [OUTER] JOIN
SELECT column_name FROM table1 LEFT [OUTER] JOIN table2 ON table1.column=table2.column
除了返回符合连接条件的结果之外,还需要显示左表中不符合连接条件的数据列,相对应使用NULL对应
b. RIGHT [OUTER] JOIN
SELECT column_name FROM table1 RIGHT [OUTER] JOIN table2 ON table1.column=table2.column
RIGHT与LEFT JOIN相似不同的仅仅是除了显示符合连接条件的结果之外,还需要显示右表中不符合连接条件的数据列,相应使用NULL对应
——————————————–
添加显示条件WHERE, ON, USING
1. WHERE子句
2. ON
3. USING子句,如果连接的两个表连接条件的两个列具有相同的名字的话可以使用USING
例如
SELECT <column_name> FROM <table1> LEFT JOIN <table2> USING (<column_name>)
连接多余两个表的情况
举例:
mysql> SELECT artists.Artist, cds.title, genres.genre
-> FROM cds
-> LEFT JOIN genres
-> ON cds.genreID = genres.genreID
-> LEFT JOIN artists
-> ON cds.artistID = artists.artistID;
或者
mysql> SELECT artists.Artist, cds.title, genres.genre
-> FROM cds
-> LEFT JOIN genres
-> ON cds.genreID = genres.genreID
-> LEFT JOIN artists
-> ON cds.artistID = artists.artistID
-> WHERE (genres.genre = ‘Pop’);
——————————————–
另外需要注意的地方
在MySQL中涉及到多表查询的时候,需要根据查询的情况,想好使用哪种连接方式效率更高。
1. 交叉连接(笛卡尔积)或者内连接
[INNER | CROSS] JOIN
2. 左外连接LEFT [OUTER] JOIN或者右外连接RIGHT [OUTER] JOIN
注意指定连接条件WHERE, ON,USING.
分享到:
相关推荐
inner join、left join 和 right join 是 Mysql 中三种最常用的连接查询方式。 inner join inner join 又称等值连接,是指从两个表中选择公共列的记录。只有当两个表中的列值相等时,才会返回结果集。例如: ...
在SQL查询中,联合查询是将两个或多个表格的数据结合在一起的一种方法,主要涉及三种类型的联合:INNER JOIN、OUTER JOIN(包括LEFT JOIN、RIGHT JOIN和FULL JOIN)以及CROSS JOIN。理解这些概念对于数据库开发人员...
在MySQL中,主要的Join方法包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN、SELF JOIN以及CROSS JOIN等。 INNER JOIN(内连接):是所有Join中最常见的类型。使用INNER JOIN后,只有两个表中能够相互匹配的记录...
3. **全外联结(FULL OUTER JOIN)**:MySQL不直接支持全外联结,但可以通过组合LEFT JOIN和RIGHT JOIN来实现相同的效果,展示左表和右表中所有匹配和不匹配的记录。 ```sql SELECT * FROM java LEFT JOIN mysql...
在MySQL中,如果没有指定ON条件,INNER JOIN和CROSS JOIN的结果相同,都是笛卡尔积。 字段字符集编码对性能的影响不容忽视。不同的字符集可能会导致不同的存储需求和处理速度。例如,如果一个JOIN操作涉及到两个...
在这个学习资源中,我们将学习七种基本的Join查询类型:inner join、left join、right join、full join、left outer join、right outer join和cross join。 3. 创建表: 在学习Join查询之前,我们需要了解如何创建...
在MySQL中,INNER JOIN和CROSS JOIN是等价的。例如: ```sql SELECT * FROM table1 INNER JOIN table2 ON table1.key = table2.key; ``` 这里,`key`是连接条件,只有当table1和table2的`key`值相等时,记录才会被选...
- 外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join)。 - **左外连接**(Left Join)保留左表(在JOIN语句中位于前面的表)的所有行,即使在右表中没有匹配的行...
这些知识点主要涉及几种不同的连接方式,包括内连接(INNER JOIN)、左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)、全外连接(FULL OUTER JOIN)、以及笛卡尔积(CROSS JOIN)。通过对这些连接类型的理解和应用,可以实现在...
4. **选择正确的JOIN类型**:根据需求,选择最合适的JOIN类型,有时INNER JOIN比OUTER JOIN更快。 5. **避免使用SELECT ***:明确指定需要的列可以减少数据传输量,提高性能。 四、执行计划分析 MySQL提供EXPLAIN...
- **左外连接 (LEFT OUTER JOIN)**:返回左表的所有行,即使在右表中没有匹配的行,对于右表中不存在的匹配行,结果为NULL。 - **右外连接 (RIGHT OUTER JOIN)**:与之相反,返回右表的所有行,左表中没有匹配的行...
在MySQL数据库管理系统中,JOIN操作是连接不同表的关键技术,用于检索来自两个或更多相关表的数据。本资源“Joins_MySQL”很显然是为了帮助用户深入理解和实践MySQL中的JOIN操作。下面将详细介绍JOIN的不同类型及其...
- 外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN),但在MySQL中,全外连接不被支持。 - **左外连接(LEFT JOIN)**:返回左表的所有行,即使右表没有匹配的行,右表的...
MySQL关联查询是数据库操作中的重要概念,用于在多个表之间建立连接,以便从不同表中检索相关数据。关联查询能够让我们在单个SQL语句中处理来自多个表的数据,极大地提高了数据查询的效率和灵活性。这里我们将深入...
例如,在 MySQL 中并不直接支持全外连接,但在其他如 Oracle 或 SQL Server 中,则可以直接使用 `FULL OUTER JOIN`。 **注意事项:** - `WHERE` 子句和 `ON` 子句的区别:通常建议将连接条件放在 `ON` 子句中,而将...
- 左外连接(LEFT OUTER JOIN 或 LEFT JOIN):返回左表的所有行,即使在右表中没有匹配的行。对于右表中不存在的匹配,结果将填充NULL值。 - 右外连接(RIGHT OUTER JOIN 或 RIGHT JOIN):与左外连接相反,返回右表...
- 语法:`SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;` - 示例:查询员工表中的所有数据及其对应的部门信息。 ```sql SELECT e.*, d.name FROM emp e LEFT OUTER JOIN dept d ON e.dept_...