SQL개념, 서브쿼리(2)

1 분 소요

데이터베이스 바로가기

💼📝🔑⏰ 📙📓📘📒🎓

💼 DML

📝 INSERT 문

INSERT INTO [테이블이름](컬럼1,컬럼2 ...) VALUES (컬럼1,컬럼2 ...)

📝 UPDATE 문

UPDATE [테이블이름] 
SET 컬럼1 = 1 , 컬럼2 = 2 ....
WHERE 컬럼 = 

📝 DELETE 문

DELETE FROM [테이블명]
WHERE [컬럼] = []

📝 SELECT 문

SELECT 컬럼1, 컬럼2
FROM [테이블]
WHERE [컬럼] = []

💼 데이터 검색

- SELECT문 쿼리 실행 순서: FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY

📝 그룹질의

  • 특정 기준으로 레코드를 그룹화하고 레코드에 대해 집계 함수를 적용하는 질의
  • [주의] SELECT 절에 그룹의 기준과 집계 함수 이외의 컬럼은 포함될 수 없음 (원자성 위배)

📝 집계함수 (GROUP BY)

  • 특정 컬럼에 집계함수를 통해 다양한 통계 연산을 수행할 수 있는 기능
  • SELECT 절 또는 HAVING절에 기술
  • 집계 함수의 종류
    • COUNT : 컬럼에 있는 값의 개수
    • SUM : 값의 합
    • AVG : 평균
    • MAX : 최대값
    • MIN : 최소값

🔑 예제

-- 중복을 제거 한 count
SELECT COUNT(DISTINCT [컬럼명]) AS 별칭
FROM [테이블]

📝 중첩질의(서브쿼리)

  1. SELECT절에서 중첩 질의 : 스칼라쿼리
  2. FROM 절에서의 중첩 질의 : 인라인 뷰
    • 조회 결과를 SELECT 절에서 사용가능
  3. WHERE 절에서의 중첩 질의 : 일반적인 서브쿼리
    • 조회 결과를 SELECT 절에서 사용불가.(비교 조건만 가능)
    • IN, NOT IN, EXISTS, NOT EXISTS <= WHERE 절에서 사용하는 서브쿼리용 함수

🔑 IN 함수와 EXISTS 차이

  1. 사용방법의 차이
    • EXISTS 함수는 서브쿼리만을 사용이 가능,
    • IN 함수는 서브쿼리뿐만 아니라 단순 값도 사용이 가능
  2. 실행순서
    • EXISTS 함수는 메인 쿼리의 결과 값을 서브쿼리에 대입하여 조건 비교 후 결과를 출력 메인쿼리 -> EXISTS
    • IN 함수는 서브 쿼리의 결과 값을 메인쿼리에 대입하여 조건을 비교 후 결과를 출력 IN -> 메인쿼리
  3. 성능 차이
    • EXISTS 함수는 메인쿼리에서 가져온 데이터를 WHERE 절에서만 평가, SELECT절에 평가 하지 않으므로 성능이 더 좋다.
    • IN 함수는 SELECT 절에서 조회한 실제 결과 값을 일일히 ROW마다 비교하므로 EXISTS 보다 성능이 떨어짐
  4. NOT IN과 NOT EXISTS의 NULL 값에 대한 처리
    • NOT EXISTS : NULL 데이터에 대해서도 true값을 준다.
    • NOT IN : NULL 데이터 무조건 제외시킨다. 정확한 데이터를 뽑을 수 없음.
      • 예를 들어 학과 NOT IN ('컴퓨터과학과')가 아닌 데이터들을 모두 뽑고 싶은데 학과가 NULL인것도 포함되어야 하는데 포함되지 않는다..
SELECT *
FROM EMP E
WHERE 
    JOB = 'CLERK'
AND EXISTS (
    -- SELECT 절은 평가하지 않으므로 아무거나 써도 된다.  
    SELECT 1
    FROM DEPT D
    WHERE E.DEPTNO = D.DEPTNO 
    -- E.DEPTNO = 30 그냥 값을 줘도 된다.
);

댓글남기기