TIL/DB

SQL JOIN 와 서브쿼리

래니 2023. 11. 7. 21:26
728x90
반응형

 SELECT 컬럼명
	FROM 테이블이름 별칭[INNER] JOIN 테이블 이름 별칭
	ON 별칭.컬럼명 = 별칭.컬럼명;
-- on 이 where절 역할을 수행



SELECT 컬럼명
	FROM 테이블명1 별칭1 [INNER] JOIN 테이블2 별칭2
	ON 별칭1.컬럼명 = 별칭2.컬럼명[INNER] JOIN 테이블3.별칭3
	ON 별칭2.컬럼명 = 별칭3.컬럼명

 

left join 또는 left outer join

SELECT p.NAME, POSITION, p.deptno, p.profno, s.name, studno, grade, s.deptno1
	FROM professor p LEFT OUTER join student s
	ON p.deptno = s.deptno1;

right join 또는 right outer join

SELECT ename, job,sal,e.deptno, dname
FROM dept d right outer JOIN emp e 
-- right outer join 기준 오른쪽에 있는 데이터 모두, 
왼쪽 데이터는 일치하는 것만 출력
ON d.deptno = e.deptno;

 

self join

SELECT e.EMPNO , e.ENAME, e.job , em.MGR, em.EMPNO
	FROM emp e JOIN emp em 
	ON e.MGR = em.MGR;

동일한 테이블 내의 두 개의 레코드를 서로 비교하고 조인하는 것

 

cross join

테이블 두개를 조건 없이 모두 매칭한 결과

 

SELECT *
    FROM buy
    CROSS JOIN member; -- buy TABLE COUNT * member ROW counㅅ

full join

MariaDB는 FULL JOIN을 직접 지원하지 않습니다. 
대신 LEFT JOIN과 RIGHT JOIN을 UNION 연산자를 사용하여 결합하여
동일한 효과를 얻을 수 있습니다.

 

 

서브쿼리

서브 쿼리 🔥

하나의 sql문 안에 또 다른 sql문이 존재하는 것

서브쿼리 사용 시 주의사항

  • 괄호로 감싸서 사용한다.
  • 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능
  • ORDER BY를 사용하지 못한다
-- 서브쿼리
SELECT * FROM emp2 WHERE = ();
-- 스칼라 서브쿼리
-- select 절에 있는 쿼리
-- 하나의 값을 반환하는 단일행 단일컬럼
SELECT [필드명], (SELECT ~~ ) FROM emp2 WHERE = ();
-- 인라인뷰 
-- from 절에 있는 쿼리
SELECT [필드명] FROM (SELECT ~~) WHERE = ();

 

 

단일행 서브쿼리

등호, 부등호

SELECT employee_name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

다중행 서브쿼리

in, >all, <all, >any, <any, exists

SELECT employee_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location = 'New York');

 

 

다중열 서브쿼리

반응형