join 과 subquery

ya·2025년 3월 25일

DataBase와 SQL

목록 보기
3/12
post-thumbnail

🔗 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법

  • 서로 다른 테이블에 저장된 데이터를 함께 가져와 하나의 결과로 표시
  • 여러 개의 테이블을 마치 하나의 테이블처럼 사용

🔀 CROSS JOIN (교차 조인)

📌 모든 행을 조합하여 출력

  • 각 테이블의 모든 행이 다른 테이블의 모든 행과 한 번씩 매칭
  • 테이블A 행 수 × 테이블B 행 수 만큼의 결과 생성
SELECT * FROM A CROSS JOIN B;

🔎 INNER JOIN (내부 조인)

📌 조건에 맞는 데이터만 가져오는 조인

✅ Equi Join (이퀴 조인)

  • = 연산자를 사용하여 두 테이블을 연결
SELECT A.name, B.salary
FROM A 
INNER JOIN B ON A.id = B.id;

✅ Non-Equi Join (비이퀴 조인)

  • = 외의 비교 연산자 (<, >, <=, >=, !=) 사용
SELECT A.name, B.salary
FROM A 
INNER JOIN B ON A.age > B.min_age;

🎭 OUTER JOIN (외부 조인)

📌 한쪽에만 데이터가 있어도 포함하여 출력

종류설명
LEFT JOIN 🔹왼쪽 테이블 기준, 매칭되는 데이터가 없는 경우 NULL
RIGHT JOIN 🔸오른쪽 테이블 기준, 매칭되는 데이터가 없는 경우 NULL
-- LEFT JOIN 예제
SELECT A.name, B.salary
FROM A 
LEFT JOIN B ON A.id = B.id;

-- RIGHT JOIN 예제
SELECT A.name, B.salary
FROM A 
RIGHT JOIN B ON A.id = B.id;

🔄 SELF JOIN (자기 조인)

📌 같은 테이블 내에서 컬럼끼리 조인

  • 테이블에 별칭을 부여하여 사용
SELECT staff.last_name, staff.job_id, manager.last_name, manager.job_id
FROM employees staff, employees manager
WHERE staff.manager_id = manager.employee_id;

🛠 JOIN 문법 정리

✅ ANSI SQL 방식

  • ON 조건 사용 → WHERE 절에서 추가 조건 지정
SELECT * 
FROM A 
JOIN B ON A.id = B.id
WHERE A.age > 30;

✅ Non-ANSI SQL 방식

  • FROM 절에서 테이블을 쉼표로 구분, WHERE에서 조건 지정
SELECT * 
FROM A, B 
WHERE A.id = B.id AND A.age > 30;

🔍 Subquery (서브쿼리, 중첩 질의)

📌 쿼리 안에 또 다른 쿼리를 포함

✅ 단일 행 - 단일 열 (1×1)

SELECT name 
FROM employees 
WHERE salary = (SELECT MAX(salary) FROM employees);

✅ 다중 행 - 단일 열 (n×1)

연산자설명
IN서브쿼리 결과 중 하나라도 일치
ANY서브쿼리 결과 중 어느 하나라도 만족
ALL서브쿼리 결과 중 모두 만족
EXISTS결과가 존재하면 TRUE
NOT EXISTS결과가 없으면 TRUE
SELECT name 
FROM employees 
WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 100);

✅ Correlated Subquery (상관 서브쿼리)

📌 서브쿼리가 메인 쿼리의 행을 기준으로 반복 실행

SELECT name 
FROM employees e
WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id);

📦 JSON 변수

📌 데이터를 저장하고 전송하는 경량의 텍스트 형식

✅ 객체(Object) { key: value }

{
  "name": "Alice",
  "age": 25,
  "city": "Seoul"
}

✅ 배열(Array) [ value1, value2, ... ]


{
  "employees": [
    { "name": "Alice", "age": 25 },
    { "name": "Bob", "age": 30 }
  ]
}
profile
ya로그

0개의 댓글