메뉴 건너뛰기

2017.11.16 20:02

mysql(union,join)

조회 수 3837 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

union


여러 테이블에서 추출한 데이터를 단순하게 하나의 결과로 표시할 때에는 union 을 사용합니다.

구조가 다른 테이블에서도 데이터를 추출할 수 있습니다.

기본적으로 함께 표시할 칼럽의 자료형은 일치해야합니다.

단, 실제로 mysql은 자료형이 달라도 추출할 수 있는 데이터는 모두 추출합니다.




셈플DB


    


2개의 테이블에서 레코드 추출하기

select 칼럼이름1 from 테이블이름1 union select 칼럼이름2 from 테이블이름2;


ex) select * from tb1 union select * from tb2;


조건을 설정해서 여러개의 추출 결과를 하나로 표시하기

ex) 1) tb에서 sales이 200 이상인 number 과 2) tb1에서 age가 35 이상인 사원번호

select number from tb where sales>=200 union select number from tb1 where age>=35;

 



여러 개의 추출 결과를 합쳐서 표시하기 - 중복 허용

앞선 쿼리문에서는 데이터가 3개가 추출되었는데 사실 1)의 결과는 A101, A102   2)의 결과는 A101, A105 입니다.

따라서 A101,A102,A101,A105 이렇게 추출되야하는데 그렇지 않고 중복되었던 A101의 값은 한번만 추출되었습니다.

그 이유는 중복된 데이터는 제외한다 라는 명령도 함께 실행 되었기 때문입니다.

union all 을 사용하면 중복된 데이터 또한 추출할 수 있습니다.


ex) select number from tb where sales>=200 union all select number from tb1 where age>=35;

 



추가적인 내용

1) 데이터 형식이 다를때

number = varchar(10) , age  = int

ex) select number from tb union select age from tb1;

 


2) union 으로 연결된 두 select 문이 지정한 컬럼의 수가 일지하지 않으면 에러가 발생합니다.

ex) select * from tb1 union select age from tb1;

 




JOIN 

여러 겨의 테이블을 특정 키로 연결하는 것이 '조인' 입니다. 실제로 웹상에서 운용되는 데이터베이스는 수많은 데이터로 구성되어 있습니다.따라서 하나의 거대한 테이블로만 처리할 수는 없기때문데 조인을 사용합니다.


2개의 테이블 조인으로 결합하기

SELECT 칼럼이름 FROM 테이블1 JOIN 결함할 테이블2 ON 테이블1의칼럼=테이블2의칼럼


ON~ 에 2개의 테이블을 연결하는 키가 되는 칼럼이 같다는 조건을 작성합니다.


ex) select * from tb join tb1 on tb.number=tb1.number;

 

결과를 보면 테이블 tb 의 칼럼 number 와 tb1의 number와 일치하는 레코드를 결합해서 추출하였습니다.

(A107이 추출되지 않은 이유는 tb1에 A107이 존재하지 않아서 입니다.)


이처럼 일치하는 레코드만 가져오는 결합을 내부 조인이라고 합니다(INNER JOIN).

쿼리문에 내부 조인을 명시적으로 표시하려면 select * from tb inner join tb1 on tb.number=tb1.number; 으로 하면 됩니다.


칼럼을 선택해서 표시하기

표시할 레코드를 선택해서 추출할때는 단순히 컬럼명만 기술해서는 어떤테이블의 칼럼인지 알 수 가 없습니다. 이럴때 칼럼이름을 

'테이블이름.칼럼이름' 으로 기술해야합니다.


ex) select tb.number, tb1.name, tb.sales from tb join tb1 on tb.number=tb1.number;

 

(확실하게 하기위해 컬럼마다,테이블명을 써주지만, 두 테이블의 공통인 number 만 구분해주면 되기때문에 number에만 테이블명을 붙어도 된다.)


ON 데신 USING

ON~ 에 2개의 테이블을 연결하는 키가 되는 칼럼이 같다는 조건을 작성을 하지만, 이는 칼럼의 데이트는 일치하나 칼럼명이 틀릴때 를 위해서이고 칼럼명을 알고 두 테이블의 칼럼명이 같다는것을 알때에는 USING을 사용해도 된다.

ex) select tb.number, name,sales from tb join tb1 using(number);



where 로 조건 주기 

ex) select tb.number, name,sales from tb join tb1 using(number) where sales>=100;


join 여러개 사용하기

ex) select tb.number,name,age,city from tb join tb1 using(number) join tb3 using(number);

 



외부조인

내부조인에의한 키가 일치하는 레코드만 추출한다. 그렇기 때문에, 테이블 tb나 tb1에만 존재하는 레코드는 무시됩니다. 하지만 레코드가 존재하는 이상 모두 표시해야 할때에는 외부조인을 사용합니다.


left join

두 테이블의 일치하는 레코드와 테이블1(쿼리문상 왼쪽에 있는 테이블)의 모든 레코드를 표시합니다.

ex) select tb.number,name,sales from tb left join tb1 using(number);

 

두 테이블을 비교했을때 tb(쿼리문구성상 왼쪽)에는 A107 이 있고, tb1에는 A107 이 존재하지 않지만

left join 을 통하여 tb에만 존재하는 A107 또한 추출되었다.


right join

left join 의 반대로가 생각하면 쉽다.

ex) select tb.number,name,sales from tb right join tb1 using(number);


List of Articles
번호 제목 날짜 조회 수
66 MYSQL 트리거 중첩트리거 file 2021.03.27 261
65 MYSQL 통계 함수 SUM AVG MAX MIN 예제 문제 5 file 2021.03.27 137
64 MySQL 클라이언트/서버 프로토콜 2018.07.18 2750
63 MySQL 쿼리 결과 값 세로로 보기 2017.04.12 6053
62 MySQL 최적화 방법 설명 2014.02.27 8022
61 MySQL 중복 데이터 찾아서 삭제하기 2019.01.11 1949
60 MySql 의 Trigger(트리거) 로 정보 업데이트 file 2016.08.30 10153
59 MySql 윈도우에서 DB dump 백업과 복구하기 file 2016.08.30 8475
58 MySQL 연결 속도 2017.12.28 3917
57 MySQL 에서 테이블에 이미 존재하는 값으로 UPDATE 하는 경우 file 2018.07.18 1533
56 MySql 에서 외래키(FK) 설정하는 방법과 Toad 에서 확인하기 file 2016.08.30 7149
55 MySQL 에서 랜덤(random)으로 레코드 읽어오기 2017.04.12 5727
54 mySQL 에서 날자표현 방법 2017.04.12 5365
53 MySQL 에서 NULL 값 처리 file 2016.08.30 6423
52 MySQL 암호화 방법 2020.11.25 360
51 MySQL 손상된 테이블 복구 2017.04.12 5330
50 MySQL 서버 데몬이 죽었을때 다시 실행하는 방법 2016.08.30 5842
49 MYSQL 부속질의어 예제&문제 9 file 2021.03.27 134
48 MySql 문자열 합치기 2014.02.27 6254
47 MySQL 마스터/마스터 replication 에서 AUTO_INCREMENT 문제 해결 방법 2018.07.18 1941
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved