>  기사  >  데이터 베이스  >  MySQL의 조인 작업 예 공유

MySQL의 조인 작업 예 공유

小云云
小云云원래의
2018-01-24 13:50:431307검색

이 글은 주로 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 항목의 모든 쉼표는 내부 공용체와 동일한 것으로 간주됩니다

  • Default 모든 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 |
+-------+------+

입니다. 따라서 위의 결과에서 알 수 있듯이 java1과 Java 테이블의 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 |
+-------+------+

작업 순서 of the 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;

여기서 괄호는 매우 중요하므로 앞으로 이러한 쿼리를 작성할 때 괄호를 더 많이 작성하는 것을 잊지 말아야 합니다. 적어도 이렇게 하면 많은 오류를 피할 수 있습니다.

관련 권장 사항:

javaScript에서 분할과 조인의 차이점에 대한 자세한 예

MySQL의 Join 사용 예 공유

JOIN ON을 단순화하기 위해 SQL에서 JOIN USING을 사용하는 방법 예

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

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