위에서 언급한 비즈니스에서 쿼리 결과를 얻으려면 여러 테이블을 함께 조인해야 하며, 다중 테이블 공동 쿼리의 핵심은 테이블 연결입니다.
테이블 연결
여러 테이블의 필드를 쿼리해야 하는 경우 테이블 연결을 사용하여 이를 수행할 수 있습니다. 테이블 조인은 내부 조인과 외부 조인으로 구분됩니다.
내부 조인: 두 테이블의 필드가 조인 관계와 일치하는 조인 관계를 갖는 레코드를 조인하여 레코드 세트를 구성합니다.
외부 조인: 일치하지 않는 다른 레코드가 선택되어 외부 왼쪽 조인과 외부 오른쪽 조인으로 구분됩니다.
학습 실험에 앞서 모두를 위한 두 개의 시뮬레이션 데이터 테이블을 준비했습니다.
사용자 정보를 저장하는 User 테이블
어떤 사용자가 어떤 제품을 구매했는지 저장하는 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, buytimeuid 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,
구매 시간 int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
사용자 테이블 데이터는 다음과 같습니다:
uid
username
password
1
Jingtian
1 23456
2
왕샤오얼
245667
3
왕바오창
1235531
4
징보란
123455
5
판빙빙
5abcwa
6
황샤오밍
abcdeef
7
anglebaby
caption
8
TFBOYS
abcdwww
9
An Xiao chao
12tfdd wd
10
Gao Xiaofeng
ㅠㅠ
13
한샤오핑
121rcfwr fq
14
송샤오강
123123tcsd
15
통샤오강
3cxvdfs
order_goods 데이터는 다음과 같습니다:
oid
uid
name
buytime
1
10
Apple mouse
121 2313
2
3
아이폰 ㅠㅠ 4242123
5
3
아이폰 키보드
12123413
참고:
위의 order_goods 테이블에서 uid는 사용자 테이블의 uid 필드를 나타냅니다. 위 표에서 oid가 있는 데이터 행은 1이고 uid가 있는 사용자는 10입니다. 사용자 테이블에 uid 10을 가진 사용자의 경우: Gao Xiaofeng. 사용자가 Apple 마우스를 구입했습니다. 구매 시간 buytime은 유닉스 타임스탬프입니다.
내부 조인
기본 구문 1:
category
자세한 설명
기본 구문
표 1을 선택합니다. 필드 [별칭], 표 n은 표 1 [별칭]에서 필드를 선택합니다. ], 테이블 n 여기서 조건
예
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;
Example
user.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 조건;
Example
select * 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)
예 1
select * from user where uid in (1, 3 , 4);
예제 1 설명
ID로 지정된 사용자 쿼리
예제 2
select * 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 특정 쿼리 조건을 쿼리한 후 결과를 병합하여 함께 표시합니다. 둘의 주요 차이점은 결과를 직접 병합한다는 점이며, 합집합은 모두 합친 후 결과에 대해 별도의 작업을 수행하고 중복된 레코드를 제거한 결과입니다.