>데이터 베이스 >MySQL 튜토리얼 >MySQL의 조인 작업에 대한 자세한 소개

MySQL의 조인 작업에 대한 자세한 소개

黄舟
黄舟원래의
2017-05-14 09:58:421114검색

이 글에서는 Mysql 조인 연산 관련 내용을 주로 소개하고 있으니 필요한 친구들은

조인 종류

1. 내부 조인(Inner Join): 두 테이블의 필드에 조인 관계가 있고 조인 관계와 일치하는 레코드를 결합하여 레코드 세트를 구성하는 조인입니다.

2. 외부 조인: 외부 왼쪽 조인과 외부 오른쪽 조인으로 구분됩니다.

사례 배경

create table java (name varchar(255));
insert into java values ('java1'),('java2'),('blue'); 
create table mysql (name varchar(255));
insert into mysql values ('mysql1'),('mysql2'),('blue');

Inner Join

select * from java,mysql where java.name=mysql.name;
SELECT * FROM java JOIN mysql ON java.name=mysql.name;
SELECT * FROM java INNER JOIN mysql ON java.name=mysql.name;
SELECT * FROM java CROSS JOIN mysql ON java.name=mysql.name;
SELECT * FROM java STRAIGHT_JOIN mysql ON java.name=mysql.name;

이 네 문은 모두 인라인 조인이고 반환 결과는 모두

+------+------+
| name | name |
+------+------+
| blue | blue |
+------+------+

  • table_reference 항목의 각 쉼표는 내부 공용체와 동일한 것으로 간주됩니다.

  • 기본 JOIN은 INNER JOIN입니다

  • CROSS JOIN은 INNER JOIN과 문법적으로 동일합니다

  • STRAIGHT_JOIN은 JOIN과 동일합니다. 한 가지 차이점을 제외하면 왼쪽 테이블이 오른쪽 테이블보다 먼저 읽혀집니다. STRAIGH_JOIN은 조인 최적화 프로그램이 테이블을 잘못된 순서로 정렬하는 상황에서 사용할 수 있습니다.

내부 조인의 구문은 다음과 같습니다.

join_table:
 table_reference [INNER | CROSS] JOIN table_factor [join_condition]
 | table_reference STRAIGHT_JOIN table_factor
 | table_reference STRAIGHT_JOIN table_factor ON condition

외부 조인

왼쪽 조인

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name;

결과는

+-------+------+
| name | name |
+-------+------+
| java1 | NULL |
| java2 | NULL |
| blue | blue |
+-------+------+

이므로 위의 결과를 보면 Java 테이블의 java1과 java2에 기록된 이름이 MySQL 테이블에는 해당 이름이 없기 때문에 비어 있지만 java의 모든 열은 여전히 ​​java1 및 java2 레코드가 있고 mysql 테이블의 모든 열은 NULL입니다. 나머지 파란색 레코드는 Java 테이블과 mysql 테이블

간의 내부 조인 의 결과입니다.

LEFT JOIN의 ON 또는 USING 섹션에 오른쪽 테이블과 일치하는 레코드가 없으면 모든 열이 NULL로 설정된 행이 오른쪽 테이블에 사용됩니다. 테이블이

다른 테이블에 대응 항목이 없는 경우 이 방법을 사용하여 해당 테이블에서 레코드를 찾을 수 있습니다:

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name WHERE mysql.name IS NULL;

이 SQL은 java에는 있지만 mysql에는 없는 사람을 찾습니다. 여기 있는 사람들 , 분명히 'java1'과 'java2'라는 사람들이 요구 사항을 충족합니다.

오른쪽 조인

SELECT * FROM java RIGHT JOIN mysql ON java.name=mysql.name;

반환 결과는

+------+--------+
| name | name |
+------+--------+
| NULL | mysql1 |
| NULL | mysql2 |
| blue | blue |
+------+--------+

오른쪽 조인과 왼쪽 조인의 결과는 비슷하지만, 이번에는 mysql입니다. 테이블은 모든 결과 세트를 보유합니다.

외부 조인 구문

join_table:| table_reference LEFT [OUTER] JOIN table_reference join_condition
 | table_reference NATURAL [LEFT [OUTER]] JOIN table_factor
 | table_reference RIGHT [OUTER] JOIN table_reference join_condition
 | table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor

USING(column_list) 절

두 테이블에 동시에 존재해야 하는 일련의 열 이름을 지정하는 데 사용됩니다.

SELECT java.*,mysql.* FROM java LEFT JOIN mysql USING (name);

결과가 반환됩니다

+-------+------+
| name | name |
+-------+------+
| java1 | NULL |
| java2 | NULL |
| blue | blue |
+-------+------+

Join

SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c);
--相当于
SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4) ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

괄호가 조인 순서에 미치는 영향

SELECT t1.id,t2.id,t3.id FROM t1,t2 LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id;
--实际上这么执行
SELECT t1.id,t2.id,t3.id FROM t1,( t2 LEFT JOIN t3 ON (t3.id=t1.id) ) WHERE t1.id=t2.id;
--应该这么写
SELECT t1.id,t2.id,t3.id FROM (t1,t2) LEFT JOIN t3 ON (t3.id=t1.id) WHERE t1.id=t2.id;

여기서 괄호는 매우 중요하므로 앞으로는 이러한

쿼리 괄호를 몇 개 더 작성하는 것을 잊지 마세요. 이렇게 하면 많은 실수를 피할 수 있습니다.

위 내용은 MySQL의 조인 작업에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.