SQL (Union, Join, Concat)

·2023년 4월 28일
0

SQL

목록 보기
4/11

📌 Union

여러 개의 SQL 문을 합쳐서 하나의 SQL 문으로 만들어주는 방법 (단, 칼럼이 개수가 같아야 한다.)

  • UNION : 중복된 값을 제거하여 알려준다.
  • UNION ALL : 중복된 값도 모두 보여준다.
#1. union
select * from test 1
union
select * from test 2

#2. union all
select * from test 1
union all
select * from test 2

  • birthday의 date 형식을 작성할 때, 문자열 표시 ('') 해줘야 한다.

  • birthday의 date 형식은 '1970-01-01' , '19700101' 둘 다 가능하다.




📌 Join

두 개 이상의 테이블을 결합하는 것


📒 snl_show 테이블 생성



📒 INNER JOIN

두 개의 테이블에서 공통된 요소들을 통해 결합한다.

select tableA.column1, tableA.column2, ..., tableB.column1, tableB.column2, ...
from tableA
inner join tableB
on tableA.column = tableB.column  # on 으로 기준을 정한다
where condition;



📒 LEFT OUTER JOIN

두 개의 테이블에서 공통영역을 포함하고, 왼쪽 테이블의 다른 데이터를 포함해 결합한다.

select tableA.column1, tableA.column2, ..., tableB.column1, tableB.column2, ...
from tableA
left join tableB
on tableA.column = tableB.column  # on 으로 기준을 정한다
where condition;



📒 RIGHT OUTER JOIN

두 개의 테이블에서 공통영역을 포함하고, 오른쪽 테이블의 다른 데이터를 포함해 결합한다.

select tableA.column1, tableA.column2, ..., tableB.column1, tableB.column2, ...
from tableA
right join tableB
on tableA.column = tableB.column  # on 으로 기준을 정한다
where condition;



📒 FULL OUTER JOIN

두 개의 테이블에서 공통영역을 포함하고, 양쪽 테이블의 다른영역을 모두 포함해 결합한다.

select tableA.column1, tableA.column2, ..., tableB.column1, tableB.column2, ...
from tableA
full outer join tableB
on tableA.column = tableB.column  # on 으로 기준을 정한다
where condition;

💡 주의 ! MySQL 에서는 full outer join 을 사용할 수 없다. full outer join 을 지원하는 DBMS에서는 위의 구문을 사용할 수 있다.


MySQL 에서는 다음의 쿼리로 같은 결과를 만들 수 있다.

select tableA.column1, tableA.column2, ..., tableB.column1, tableB.column2, ...
from tableA
left join tableB
on tableA.column = tableB.column  # on 으로 기준을 정한다
union
select tableA.column1, tableA.column2, ..., tableB.column1, tableB.column2, ...
from tableA
right join tableB
on tableA.column = tableB.column
where condition;



📒 SELF JOIN

  • 가장 많이 사용되는 조인방식

  • 문법은 다르지만 INNER JOIN 과 같은 결과가 나온다.

select tableA.column1, tableA.column2, ... , tableB.column1, tableB.column2, ...
from tableA, tableB, ...
where tableA.column = tableB.column;

모든 join문에서 컬럼명 앞에 table명을 명시해주지 않아도 된다. 하지만 코드의 가독성도 중요하기 때문에 table명을 명시적으로 보여주는 것을 추천한다.





📌 다양한 기능들

📒 CONCAT

여러 문자열을 하나로 합치거나 연결해주는 함수

select concat('string1', 'string2', ... );



📒 ALIAS

  • 컬럼이나 테이블 이름에 별칭 생성하는 기능

  • 컬럼이나 테이블 이름이 너무 길 경우에 사용한다.

select column as alias from table_name;
# as 생략가능

  • concat, alias 함께 쓰는 쿼리

1) 이름이 3글자인 연예인 정보를 검색하여 다음과 같이 출력하세요.

2) 앞글자가 2글자이고, '엔터테인먼트'로 끝나는 소속사 연예인 중 SNL에 출연한 연예인의 신상정보(나이, 성별)와 출연정보(시즌-에피소드, 방송날짜), 소속사 정보를 방송날짜 최신순으로 정렬하여 다음과 같이 검색하세요.

"앞글자가 2글자이고, '엔터테인먼트'로 끝나는 소속사 연예인 중" 원하는 데이터를 조회하는 쿼리문이기 때문에, "앞글자가 2글자이고, '엔터테인먼트'로 끝나는 소속사 연예인 중" 이 부분이 조건문 (where) 에 들어가야 한다 !



📒 DISTINCT

검색한 결과의 중복을 제거하는 기능

select distinct column1, column2, ... from table_name;



📒 LIMIT

검색 결과를 정렬된 순으로 주어진 숫자만큼만 조회하는 기능

select column1, column2, ... from table_name
where condition
limit number;




0개의 댓글