MySQL 다중 테이블 공동 쿼리

실제 비즈니스에서는 테이블만 쿼리하는 것이 아닌 경우가 많습니다.

  1. 전자상거래 시스템에서 제품을 구매하지 않은 사용자를 쿼리합니다.

  2. 은행은 위반 기록을 조회할 수 있으며, 동시에 사용자의

  3. 당첨 정보 및 당첨자의 기본 정보를 조회할 수 있습니다.

위는 두 테이블을 함께 쿼리해야 하는 경우입니다.

위에서 언급한 비즈니스에서 쿼리 결과를 얻으려면 여러 테이블을 함께 조인해야 하며, 다중 테이블 공동 쿼리의 핵심은 테이블 연결입니다.

테이블 연결

여러 테이블의 필드를 쿼리해야 하는 경우 테이블 연결을 사용하여 이를 수행할 수 있습니다. 테이블 조인은 내부 조인과 외부 조인으로 구분됩니다.

  1. 내부 조인: 두 테이블의 필드가 조인 관계와 일치하는 조인 관계를 갖는 레코드를 조인하여 레코드 세트를 구성합니다.

  2. 외부 조인: 일치하지 않는 다른 레코드가 선택되어 외부 왼쪽 조인과 외부 오른쪽 조인으로 구분됩니다.

학습 실험에 앞서 모두를 위한 두 개의 시뮬레이션 데이터 테이블을 준비했습니다.

  1. 사용자 정보를 저장하는 User 테이블
  2. 어떤 사용자가 어떤 제품을 구매했는지 저장하는 Order 테이블

user 테이블 생성문

존재하지 않는 경우 테이블 생성 user (user (
   uid int(11) NOT NULL,
   username varchar(30) NOT NULL,
   password char(32) NOT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS order_goods (
   oid int(11) NOT NULL,
   uid int(11) NOT NULL,
   name varchar(50) NOT NULL,
   buytime uid int(11) NOT NULL,
username varchar(30) NOT NULL,

password char(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

존재하지 않는 경우 테이블 생성 order_goods (oid int(11) NOT NULL,uid int(11) NOT NULL,이름 varchar(50) NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8;uidusernamepassword1Jingtian 1 234562 왕샤오얼2456673왕바오창12355314징보란1234555 판빙빙5abcwa6 황샤오밍abcdeef 7anglebabycaption8TFBOYSabcdwww9An Xiao chao12tfdd wd10Gao Xiaofeng13한샤오핑121rcfwr fq14송샤오강123123tcsd15 통샤오강3cxvdfs

order_goods 데이터는 다음과 같습니다:

구매 시간 int(11) NOT NULL사용자 테이블 데이터는 다음과 같습니다:
ㅠㅠ
5위의 order_goods 테이블에서 uid는 사용자 테이블의 uid 필드를 나타냅니다. 위 표에서 oid가 있는 데이터 행은 1이고 uid가 있는 사용자는 10입니다. 사용자 테이블에 uid 10을 가진 사용자의 경우: Gao Xiaofeng. 사용자가 Apple 마우스를 구입했습니다. 구매 시간 buytime은 유닉스 타임스탬프입니다. 내부 조인category자세한 설명기본 구문표 1을 선택합니다. 필드 [별칭], 표 n은 표 1 [별칭]에서 필드를 선택합니다. ], 테이블 n 여기서 조건
oiduidnamebuytime
110Apple mouse121 2313
23아이폰 ㅠㅠ 4242123
3아이폰 키보드12123413
참고:
기본 구문 1:

user.uid,user.username을 사용자 이름,order_goods.oid,order_goods.uid,order_goods.name으로 user,order_goods에서 선택, 여기서 user.uid = order_goods.uid ;

설명 예시제품 테이블에서 어떤 사용자가 제품을 구매했는지 조회하고 사용자 정보를 표시합니다

참고: 다음 예에서 from 테이블은 테이블 별칭을 사용합니다.

테이블 이름이 너무 길어서 작성할 때마다 실수하기 쉽습니다. 축약된 영어 문자열을 사용하여 표를 직접 따라갈 수 있습니다. 이전에 필드를 연결할 때는 약어 string.field를 사용하세요.

mysql> 사용자 u,order_goods o에서 사용자 이름으로 u.uid,u.username, o.oid,o.uid,o.name을 선택합니다. 여기서 u.uid = o.uid;
+------+------------+------+------+---------------+
| 아이디 | 아이디 | +------+------------+------+------+---------------+
10 | 가오샤오펑 | 10 | 3 | 왕바오창 2 | 12 | 리샤오차오 12 | 15 | 3 | 리 웬카이 | 3 | +------+------------+------+------+---------------+
5행 세트(0.00초)


기본 구문 2:


category

자세한 설명
테이블 1. 필드 [별칭], 테이블 n 필드 선택 표 1 조건에 따른 INNER JOIN 테이블 n;
기본 구문
Exampleuser.uid,user.username을 사용자 이름으로 선택,order_goods.oid,order_goods.uid,order_goods.name을 사용자 내부 조인에서 shopname으로 user.uid의 order_goods = order_goods.uid;
설명 예시제품 테이블에서 어떤 사용자가 상품을 구매했는지 조회하고 사용자 정보를 표시합니다

결과는 기초문법 1과 일치합니다.

mysql> 사용자 내부 조인 order_goods에서 사용자 이름으로 user.uid,user.username, order_goods.oid,order_goods.uid,order_goods.name을 상점 이름으로 선택 = order_goods.uid;
+------+------------+------+------+---------------+
| 아이디 | 아이디 | +------+------------+------+------+---------------+
10 | 가오샤오펑 | 10 | 3 | 왕바오창 2 | 12 | 리샤오차오 12 | 15 | 3 | 왕바오창 5 |
+------+------------+------+------+---------------+
5행 세트(0.00초) 외부 조인 JOIN 테이블 n on 조건;



Example

select * from user left Join order_goods on user.uid = order_goods.uid;

예제 설명 주로 on the 왼쪽, 상품을 구매하지 않은 사용자를 쿼리하고 사용자 정보를 표시합니다

외부 조인은 왼쪽 조인과 오른쪽 링크로 구분되며 구체적인 정의는 다음과 같습니다.

왼쪽 조인: 오른쪽 테이블의 레코드와 일치하지 않는 레코드도 포함하여 왼쪽 테이블의 모든 레코드를 포함합니다.

mysql> select * from user left Join order_goods on user.uid = order_goods.uid;
+-- - --+------------+---+------+------+---- --- -------+----------+
| 사용자 이름 | oid 이름 |
+----+- --- ----+------------+------+------+------------- --+ -----------+
| 10 | 애플 마우스 | 1235531 | 3121241 |
| 12 | 3cxvdfs | 1235531 |5 |아이폰 키보드 123456 | NULL | NULL | NULL | |
| 5abcwa | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | | NULL | NULL ----------+------+------+---------------+---- ---- --+
16행 세트(0.00초)

오른쪽 조인: 오른쪽 테이블에 일치하지 않는 레코드도 포함하여 오른쪽 테이블의 모든 레코드를 포함합니다

Category자세한 설명
기본 구문표 1을 선택하세요. 필드 [별칭으로], 테이블 n. 테이블 1의 필드 오른쪽 JOIN 테이블 n 조건;
Exampleselect * from user right Join order_goods on user.uid = order_goods.uid;
예제 설명 제품 테이블의 어떤 사용자가 제품을 구매했는지 쿼리하고 사용자 정보를 표시합니다

mysql> 사용자 권한에서 *를 선택하여 user.uid에서 order_goods에 가입 = order_goods.uid;
+------+- - ---------+------------+------+------+---------------+ - ----------+
| 사용자 이름 | oid | 구매 시간 |
+-------+- ------+------+------+---------------+------------+
| 10 | 3124qwqw | 애플 마우스 | 1235531 | 12 | 3 | 12 | 15 | 3cxvdfs | 3424212 | 121234 13 | --- ------+------------+------+------+---------------+---- -- ----+
5개 행(0.00초)

Subquery

때때로 쿼리할 때 필요한 조건이 다른 select 문의 결과인 경우 하위 쿼리를 사용해야 합니다. 하위 쿼리에 사용되는 키워드에는 in, not in, =, !=, 존재함, 존재하지 않음 등이 포함됩니다.

Category

자세한 설명기본 구문select field from table where field in (condition)예 1select * from user where uid in (1, 3 , 4);예제 1 설명ID로 지정된 사용자 쿼리예제 2select * from user where uid in(order_goods에서 uid 선택);예제 2 설명 정보 상품을 구매한 사용자 정보가 표시됩니다

예 1:

mysql> uid가 (1,3,4);
인 사용자에서 *를 선택하세요. +------+------------+----------+
| 사용자 이름 |
+------+------------+----------+
1 | 징티안 | 3 |왕바오창 | 4 | 징보란 123455 |
+------+------------+----------+
3행 세트(0.00초)

예 2:

mysql> select * from user where uid in(order_goods에서 uid 선택);
+------+------------+----------+

| 사용자 이름 |
+------+------------+----------+
10 | 가오샤오펑 | 3 |왕바오창 | 12 | 리 샤오차오 |
15 | 통샤오강 | +------+------------+----------+
4 행 세트(0.00초)


mysql> select * from emp where deptno in(dept에서 deptno 선택);

Union 기록

Union 및 Union All 키워드를 사용하여 두 테이블의 데이터를 결합합니다. a 특정 쿼리 조건을 쿼리한 후 결과를 병합하여 함께 표시합니다. 둘의 주요 차이점은 결과를 직접 병합한다는 점이며, 합집합은 모두 합친 후 결과에 대해 별도의 작업을 수행하고 중복된 레코드를 제거한 결과입니다.

Category

자세한 설명기본 구문select 문 1 Union[all] select 문 2Exampleselect * from user where uid in (1, 3, 4 );설명 예제품 테이블의 사용자 정보와 사용자 테이블의 사용자 정보를 결합합니다mysql> 사용자 조합에서 uid 선택 order_goods에서 uid 선택; +------+ |
+------+
1 |

2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
+------+
15줄 세트 (0.00초)


지속적인 학습

||
<?php echo "Hello Mysql"; ?>
  • 코스 추천
  • 코스웨어 다운로드
현재 코스웨어를 다운로드할 수 없습니다. 현재 직원들이 정리하고 있습니다. 앞으로도 본 강좌에 많은 관심 부탁드립니다~