본문 바로가기

SQL

DML

DML (Data Manupulation Language)

UPDATE 명령어 (INSERT / UPDATE / DELETE)

INSERT : 테이블에 데이터를 넣을 수 있게 해줌 (행 추가)

  • INSERT INTO users VALUES
-- 데이터를 삽입할 테이블명 입력
INSERT INTO users VALUES (
  'hayoung',
  'hayoung@abc.com',
  'abc123123!',
  'hi'
);
-- (이 방법은 항상 열의 순서와 모든 값을 기억해야 하기 때문에 좋지 않음)

 

추가할 데이터의 열 이름을 괄호안에 명시하여 값을 넣을 수 있음 (그외의 값은 null)

INSERT INTO users (name, email) VALUES (
  'gamja',
  'gamja@gmail.com'
);

 

UPDATE / DELETE : 테이블의 데이터를 변경/삭제 할 수 있음 (행 수정/삭제)

  • 데이터 변경/삭제 여부를 묻지 않고 바로 반영해버리기 때문에 조심해야함
  • 변경/삭제할 데이터의 범위를 좁히기 위해 WHERE 사용(조건은 필수가 아니나, 조건 미지정 시 전체 데이터에 반영됨)
UPDATE users SET age = 20 WHERE name = 'gamja';
DELETE FROM users WHERE user_id = 1;
UPDATE users SET is_manager = 0 WHERE nickname IS NULL AND name = 'gamja';

 

 

SELECT

  • 열과 행이 있는 테이블을 반환
SELECT 1+1, 2+2, UPPER('hi');

  • FROM 은 존재하는 테이블에서 데이터를 가져옴
  • * : 전체를 의미
  • SELECT 명령 뒤에 가져올 데이터의 열을 지정하여 원하는 데이터만 가져올 수 있음
  • FROM 이 먼저 호출되어 모든 데이터를 가져오고 SELECT 가 표시할 열을 필터링함
SELECT * FROM users;
SELECT name, age FROM users;

 

 

SQL 데이터 처리 및 분석

IN / NOT IN (멤버십 조건)

  • IN 연산자는 지정된 값 목록 중 하나와 일치하는지 확인한다.
-- Documentary 또는 Comedy 장르의 영화 선택
SELECT * FROM movies WHERE genres IN ('Documentary' , 'Comedy');

-- Documentary와 Comedy 장르가 아닌 영화 선택
SELECT * FROM movies WHERE genres NOT IN ('Documentary' , 'Comedy');

 

 

LIKE / NOT LIKE (패턴 매칭)

  • LIKE 연산자는 문자열 패턴을 매칭하는데 사용된다.

와일드카드

  • `%` :  0개 이상의 임의의 문자를 나타냄
  • `_` : 정확히 한 개의 임의의 문자를 나타냄, 글자 수를 구체화하는데 사용
SELECT * FROM movies WHERE title LIKE 'The%'; -- 특정한 단어로 시작
SELECT * FROM movies WHERE title LIKE '%Love'; -- 특정한 단어로 종료
SELECT * FROM movies WHERE genres LIKE '%Drama%'; -- 특정한 단어 포함
SELECT * FROM movies WHERE genres not LIKE '%Drama%'; -- 특정한 단어 미포함
SELECT * FROM movies WHERE title LIKE '___ing'; -- 앞이 세글자로 이루어진 ing 로 끝나는 title

 

 

CASE 문을 이용한 조건부 분류

  • CASE 문은 조건에 따라 다른 값을 반환함
SELECT title, 
CASE 
  WHEN rating >= 8 THEN '😙' 
  WHEN rating <= 6 THEN '😒'
  ELSE '😮' 
END AS is_good
FROM movies;

 

ORDER BY (정렬)

  • 데이터를 특정 기준에 따라 정렬함
  • 다중 기준 정렬 시, 첫 번째 기준으로 정렬 후 동일한 값에 대해 두 번째 기준이 적용됨
-- 기본값, 오름차순 정렬 (ASC)
SELECT * FROM movies WHERE director = 'Darren Aronofsky' ORDER BY revenue; 

-- 내림차순 정렬 (DESC)
SELECT * FROM movies WHERE director = 'Darren Aronofsky' ORDER BY revenue DESC;

-- 다중 기준 정렬(출시일 정렬 먼저, 그다음 수익 기준 정렬)
SELECT * FROM movies ORDER BY release_date DESC, revenue DESC;

 

 

LIMIT / OFFSET

  • 결과 집합의 크기를 제한하거나 특정 위치부터 데이터를 가져옴
-- 조회할 행의 양 제한(상위 5개 행만 조회)
SELECT * FROM movies LIMIT 5;

-- skip! (6번째부터 5개 행 조회)
SELECT * FROM movies LIMIT 5 OFFSET 5;

-- 페이지네이션, 무한스크롤에 주로 적용
SELECT * FROM movies LIMIT 5 OFFSET page * 5;

 

 

GROUP BY 와 집계 함수

  • GROUP BY는 데이터를 그룹화하고, 집계 함수와 함께 사용하여 데이터를 분석함
SELECT release_date, round(AVG(rating), 2) AS avg_rating
FROM movies 
WHERE rating IS NOT NULL
AND release_date IS NOT NULL
GROUP BY release_date
HAVING avg_rating > 6
ORDER BY avg_rating DESC;
  • 그룹화 : 특정 열 기준으로 데이터 그룹화
  • 집계 함수 : 해당 그룹의 모든 행의 특정 열에 대한 연산을 수행, 하나의 행으로 병합
  • HAVING : 그룹화된 데이터에 대한 필터링을 수행(WHERE 와의 차이점 : 실행하는 순간)
    • SQL 엔진이 쿼리를 실행하기 전에 SELECT에 어떤 데이터를 가져올지
      미리 파악하기 때문에 SELECT 절의 열이나 식을 참조할 수 있음
      HAVING은 SELECT의 결과를 참조할 수 있지만, 보통 집계된 값이나 그룹화된 데이터를 필터링하는 데 사용하는 것이 더 적합

주의사항

  • GROUP BY 후 집계함수를 사용하지 않더라도 열은 병합됨
  • GROUP BY 하지 않은 항목을 SELECT하는 것은 의미가 없음 (그룹의 마지막 행의 값이 선택됨)
  • GROUP BY 없이 집계 함수 사용 시 전체 데이터가 하나로 병합됨
  • SELECT 문에 있는 표현식으로도 GROUP BY가 가능함
  • 실제 SQL 실행 순서는 작성 순서와 다름

'SQL' 카테고리의 다른 글

DDL  (0) 2025.01.29
SQL  (0) 2025.01.26