• Home
  • About
    • on Weekend photo

      on Weekend

      𝙎𝙩𝙪𝙙𝙮𝙞𝙣𝙜

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • 필사
  • Projects

01.06 웹개발 강의 정리

06 Jan 2021

Join

데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현해주는 것입니다. 검색하고 싶은 컬럼이 다른 테이블에 있을 경우에 주로 사용하게 되고, 여러 테이블을 묶어서 하나로 사용하는 방법입니다.

1) inner join
이 테이블과 이 테이블을 연결했을 때, 중복되는 값을 검색해줍니다. 가장 많이 사용하는 조인입니다.

사용법

첫번째 테이블 이름 inner join 두번째 테이블 이름 on 조건
on where 절을 사용해 조건을 넣을 수도 있습니다.

2) left/right join
두 개를 연결하되, 왼쪽/오른쪽을 기준으로 검색을 해줍니다.
기준테이블의 값 + 테이블과 기준 테이블의 중복된 값이 만들어집니다.

3) cross join
A테이블의 데이터와 B테이블의 데이터를 모두 연결하는 것.

짧은 이름으로 테이블 가져오기

/* 각 사원들의 사원번호, first_name, 근무 부서 번호를 가져온다.
그때 정렬은 사원번호 내림차순으로 가져온다. */

select a1.emp_no, a1.first_name, a2.dept_no
from employees a1, dept_emp a2
where a1.emp_no = a2.emp_no
order by a1.emp_no desc;

left join 1 : 이름이 중복인(=같은) 컬럼을 조회한다.

# LEFT JOIN
select * from usertbl
left join buytbl
on usertbl.userID = buytbl.userID
where height >= 180;

left join 2 : 문자를 합쳐서 ‘연락처’라고 나오게 하자.

select u.userID, u.name, b.prodName, concat(u.mobile1, u.mobile2) as '연락처'
from usertbl u
left join buytbl b
on u.userID = b.userID
order by u.userID;

서브쿼리 : 현재 받는 급여의 평균보다 많이 받는 사원들의 사원번호, 급여액을 가져온다.

use employees;
select * from salaries;

select emp_no, salary
from salaries
where salary > ( select avg(salary) from salaries );

d001 부서에서 근무하고 있는 사원들의 사원번호와 first_name을 가져온다.

use employees;
select * from salaries;

select emp_no, salary
from salaries
where salary > ( select avg(salary) from salaries );

date type의 값 비교하기 : 1960년 이후에 태어난 사원들의 사원번호, 근무부서번호를 가져온다.

select e.emp_no, d.dept_no
from employees e, dept_emp d
where e.birth_date > '1960-01-01';

union

union은 두 개의 select 결과를 합치기 위해 사용합니다. 합친 결과에서 중복되는 행은 하나만 표시합니다. 단, 컬럼의 갯수가 같아야 하고, 각 컬럼의 데이터타입이 같아야 합니다.
사용법은 아래와 같습니다.

SELECT * FROM A UNION (ALL) SELECT * FROM B

이때 UNION ALL을 하게되면 중복을 제거하지 않습니다.


𝑹𝒆𝒇𝒆𝒓𝒆𝒏𝒄𝒆

SELECT 합치기 - UNION



backend Share Tweet +1