>  기사  >  데이터 베이스  >  mysql 다중 테이블 연결 쿼리 작업 예제

mysql 다중 테이블 연결 쿼리 작업 예제

无忌哥哥
无忌哥哥원래의
2018-07-18 10:00:542167검색

실제 프로젝트에서는 여러 테이블 사이에 관계가 존재합니다. 하나의 테이블에 있는 모든 데이터를 검색하는 것은 불가능합니다. 테이블 연결이 없으면 많은 작업이 필요합니다. 예를 들어, 테이블 B에서 데이터를 검색하려면 테이블 A에서 제한 조건을 찾아야 합니다. 작동하려면 여러 테이블이 필요할 뿐만 아니라 그다지 효율적이지 않습니다. 예를 들어, 책의 예:

코드는 다음과 같습니다.

SELECT FId
FROM T_Customer
WHERE FName='MIKE'

이 SQL 문은 2, 즉 FId 값을 반환합니다. MIKE라는 고객은 2이므로 T_Order로 이동하여 FCustomerId가 2인 레코드를 검색할 수 있습니다.

코드는 다음과 같습니다.

SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2

다음을 살펴보겠습니다. 테이블 연결을 자세히 설명합니다. 테이블 조인에는 크로스 조인(CROSS JOIN), 내부 조인(INNER JOIN), 외부 조인(OUTTER JOIN) 등 다양한 유형이 있습니다.

(1) INNER JOIN: 내부 조인은 두 테이블을 결합하여 두 테이블의 연결 조건을 만족하는 데이터만 얻는 것입니다.

코드는 다음과 같습니다:

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId

참고: 대부분의 데이터베이스 시스템에서 INNER JOIN의 INNER는 선택 사항이며 INNER JOIN이 기본 연결 방법입니다. .

테이블 연결을 사용할 때, 두 개의 테이블만 연결하는 것에 국한되지 않습니다. 많은 테이블에 접속해야 하는 상황이 많기 때문입니다. 예를 들어, 필요한 정보를 검색하려면 T_Order 테이블도 T_Customer 및 T_OrderType 테이블에 연결되어야 합니다.

코드는 다음과 같습니다. #🎜 🎜#

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
INNER JOIN T_OrderType
ON T_Order.FTypeId= T_OrderType.FId
# 🎜🎜#(2) 교차 조인(CROSS JOIN): 교차 조인에 포함된 모든 테이블의 모든 레코드가 결과 집합에 포함됩니다. 교차 연결은 암시적 연결과 명시적 연결이라는 두 가지 방법으로 정의할 수 있습니다.

암시적 예를 살펴보겠습니다.


코드는 다음과 같습니다.

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer, T_Order

명시적 연결을 사용하는 경우, CROSS JOIN을 사용해야 합니다. 예는 다음과 같습니다.

코드는 다음과 같습니다.

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer
CROSS JOIN T_Order

(3) 외부 연결(OUTTER JOIN): 내부 연결만 주로 이러한 시나리오를 해결하기 위해 연결 조건을 충족하는 데이터를 얻고 외부 연결의 경우. 조건을 충족하는 데이터가 검색된다는 것은 의심의 여지가 없습니다. 외부 연결은 데이터의 다른 부분도 검색하므로 조건을 충족하지 않는 데이터를 NULL로 채웁니다. 먼저 외부 조인의 분류를 살펴보겠습니다. 왼쪽 외부 조인(LEFT OUTER JOIN), 오른쪽 외부 조인(RIGHT OUTER JOIN), 완전 외부 조인(FULLOUTER JOIN).

I. LEFT OUTER JOIN: 앞서 언급했듯이 조건에 맞지 않는 데이터는 NULL로 채워집니다. 그러면 구체적으로 NULL로 채워야 하는 것은 무엇입니까? 연결 조건 중 왼쪽 테이블의 데이터가 오른쪽 테이블에 해당 일치 항목이 없는 경우 해당 오른쪽 테이블 필드는 다음과 같습니다. NULL 값으로 채워집니다. 즉, 왼쪽 외부 연결의 본체가 왼쪽 테이블이고 오른쪽 테이블이 이에 일치합니다.

코드는 다음과 같습니다:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

참고: 왼쪽 외부 연결을 사용하는 경우 where 문을 통해 비준수 데이터를 필터링할 수 있습니다.

# 🎜🎜#코드는 다음과 같습니다:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
WHERE o.FPrice>=150

II 오른쪽 외부 조인: 오른쪽 외부 조인은 왼쪽 외부 조인의 반대입니다. 왼쪽 테이블의 필드는 NULL 값으로 채워집니다. 즉, 오른쪽 외부 연결의 주체가 오른쪽 테이블이고, 왼쪽 테이블이 이에 일치합니다.

코드는 다음과 같습니다:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

참고: 왼쪽 외부 조인과 마찬가지로 where 문을 사용하여 필터링할 수 있습니다.

III, FULLOUTER JOIN : 완전 외부 조인은 왼쪽 외부 조인과 오른쪽 외부 조인의 집합입니다. 즉, 왼쪽 외부 연결의 결과 세트와 오른쪽 외부 연결의 결과 세트를 모두 포함합니다.

코드는 다음과 같습니다:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
FULL OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

결과는 다음과 같습니다:

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
UNION
SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId

============ ==== ============================================= ==== ====================

다중 테이블 쿼리에 대한 다양한 SQL 작성 방법: (다음은 두 개의 쿼리입니다. tables<또한 세 개의 테이블에서 질의하는 것으로 볼 수 있습니다>, v_goods 테이블의 모든 필드를 표시하고, admin2 테이블의 name 필드를 adder로 표시하고, admin2 테이블의 name 필드를 연산자로 표시합니다. 따라가세요 다음 세 가지 예문을 작성하세요 sql

SELECT v.*,(SELECT a.name FROM admin2 a WHERE a.adminId=v.loadInId) AS aname,(SELECT a.name FROM admin2 a WHERE a.adminId=v.operatorId) AS uname FROM v_goods v  where 1=1;
SELECT v.*,a.name  aname,b.name uname FROM v_goods v,admin2 a,admin2 b WHERE a.adminId=v.loadInId AND b.adminId=v.operatorId ;
SELECT v.*,a.name  aname,b.name uname FROM v_goods v LEFT JOIN admin2 a ON a.adminId=v.loadInId LEFT JOIN admin2 b ON b.adminId=v.operatorId ;

위 내용은 mysql 다중 테이블 연결 쿼리 작업 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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