>  기사  >  데이터 베이스  >  MySQL의 조인 연산에 대한 자세한 설명

MySQL의 조인 연산에 대한 자세한 설명

怪我咯
怪我咯원래의
2017-07-05 11:11:021769검색

이 글에서는 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;

이 4개의 문은 모두 내부 조인이고 반환 결과는 모두

+------+------+
| name | name |
+------+------+
| blue | blue |
+------+------+
  • table_reference 항목의 모든 쉼표는 내부 공용체와 동일한 것으로 간주됩니다

  • 기본 JOIN은 INNER JOIN입니다.

  • CROSS JOIN은 구문상 INNER JOIN

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

Inner 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

outer Join

left Join

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로 설정된 행이 오른쪽 테이블에 사용됩니다. 테이블의

other

테이블에 해당 부분이 없으면 이 방법을 사용하여 이 테이블에서 레코드를 찾을 수 있습니다.

SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name WHERE mysql.name IS NULL;
이 SQL은 Java에서는 사람을 찾지만 mysql에서는 찾을 수 없습니다. 이것은 분명히 사람 'java1'입니다. 및 'java2'는 요구 사항을 충족합니다.

Right Join

SELECT * FROM java RIGHT JOIN mysql ON java.name=mysql.name;
반환된 결과는

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

입니다. Right Join과 Left Join의 결과는 비슷하지만 이번에는 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 |
+-------+------+

조인 작업 순서

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으로 문의하세요.