[6/14 TIL] DB(SELECT)

yumyeonghan·2023년 6월 19일
0

🍃프로그래머스 백엔드 데브코스 4기 교육과정을 듣고 정리한 글입니다.🍃

SELECT

  • 테이블에서 레코드를 조회
SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
WHERE 조건
GROUP BY 컬럼1, 컬럼2 ...
ORDER BY 컬럼(숫자)[ASC|DESC]	
LIMIT 숫자;

CASE WEHN

  • 조건에 따라 다른 결과를 반환
SELECT fruit,
       CASE
           WHEN price < 1 THEN '싼 과일'
           WHEN price >= 1 AND price <= 2 THEN '보통 가격의 과일'
           WHEN price > 2 THEN '비싼 과일'
           ELSE '알 수 없음'
       END AS price_range
FROM fruits;

COUNT

  • 조건에 맞는 행의 개수 반환
--NULL값을 포함한 테이블의 모든 행 개수 세기
SELECT COUNT(*) FROM 테이블명 WHERE 조건;
SELECT COUNT(숫자) FROM 테이블명 WHERE 조건;

--NULL값을 포함하지 않은 테이블의 모든 행 개수 세기
SELECT COUNT(NULL) FROM 테이블명 WHERE 조건;

--NULL값을 포함하지 않은 테이블의 해당 컬럼 행 개수 세기
SELECT COUNT(컬럼) FROM 테이블명 WHERE 조건;

--NULL값을 포함하지 않은 테이블의 해당 컬럼 행 개수 중복 제외하고 세기
SELECT COUNT(DISTINCT 컬럼) FROM 테이블명 WHERE 조건;

WHERE

  • 조건으로 사용
  • CASE WHEN에서 사용 가능

IN

  • 주어진 목록에 속하는 값을 비교
SELECT * FROM 테이블명 WHERE 컬럼 [NOT] IN (1,2,3);

LIKE

  • 패턴 매칭을 수행하여 문자열 비교
  • % 기호는 임의의 문자열
SELECT * FROM 테이블명 WHERE 컬럼 [NOT] LIKE '%패턴%';

BETWEEN

  • 주어진 범위 내의 값을 비교(시작값과 끝값 포함)
  • 숫자, 날짜 및 문자열 사용 가능
SELECT * FROM 테이블명 WHERE 열명 BETWEEN1 AND2;

STRING FUNCTION

LEFT(str, N)

  • 문자열 str의 왼쪽에서 N개의 문자를 반환
SELECT LEFT('Hello World', 5);
-- 결과: 'Hello'

REPLACE(str, exp1, exp2)

  • 문자열 str에서 exp1을 exp2로 대체한 결과를 반환
SELECT REPLACE('Hello World', 'World', 'Universe');
-- 결과: 'Hello Universe'

UPPER(str), LOWER(str)

  • 문자열 str을 대(소)문자로 변환한 결과를 반환
SELECT UPPER('Hello');
-- 결과: 'HELLO'

SELECT LOWER('WORLD');
-- 결과: 'world'

LENGTH(str)

  • 문자열 str의 길이를 반환
SELECT LENGTH('Hello World');
-- 결과: 11

LPAD(str, N, exp), RPAD(str, N, exp)

  • 문자열 str을 왼(오른)쪽으로 채우고, 총 길이가 N이 되도록 exp로 채움
SELECT LPAD('Hello', 10, '*');
-- 결과: '*****Hello'

SELECT RPAD('World', 10, '_');
-- 결과: 'World_____'

SUBSTRING(str, N)

  • 문자열 str에서 특정 부분 문자열을 추출
  • 시작 위치와 추출할 길이 지정
SELECT SUBSTRING('Hello World', 7);
-- 결과: 'World'

SELECT SUBSTRING('Hello World', 7, 5);
-- 결과: 'World'

CONCAT(str1, str2, ...)

  • 여러 문자열을 하나로 결합
SELECT CONCAT('Hello', ' ', 'World');
-- 결과: 'Hello World'

ORDER BY

  • 테이블에서 레코드를 정렬
  • 오름차순(ASC)가 기본값, ORDER BY 1 ASC
  • 내림차순(DESC)을 원하면, ORDER BY 1 DESC
  • 여러 개의 필드(숫자)를 사용해서 정렬, ORDER BY 1 ASC, 2 DESC, ...
  • NULL값은 오름차순 일 경우 처음에 위치, 내림차순 일 경우 마지막에 위치

DATE

NOW()

  • 현재 날짜와 시간 반환
SELECT NOW();
-- 결과: '2023-06-19 15:30:45'

DATE, WEEK, MONTH, YEAR, HOUR, MINUTE, SECOND, QUARTER, MONTHNAME

SELECT DATE('2023-06-19');
-- 결과: '2023-06-19'

SELECT WEEK('2023-06-19');
-- 결과: 25

SELECT MONTH('2023-06-19');
-- 결과: 6

SELECT YEAR('2023-06-19');
-- 결과: 2023

SELECT HOUR('2023-06-19 15:30:45');
-- 결과: 15

SELECT MINUTE('2023-06-19 15:30:45');
-- 결과: 30

SELECT SECOND('2023-06-19 15:30:45');
-- 결과: 45

SELECT QUARTER('2023-06-19');
-- 결과: 2

SELECT MONTHNAME('2023-06-19');
-- 결과: 'June'

DATEDIFF(date1, date2)

  • 두 날짜 간의 일수 차이를 계산
SELECT DATEDIFF('2023-06-19', '2023-06-15');
-- 결과: 4

DATE_ADD(date, INTERVAL value unit)

  • 날짜에 지정된 값과 단위를 더하거나 뺌
SELECT DATE_ADD('2023-06-19', INTERVAL 1 DAY);
-- 결과: '2023-06-20'

SELECT DATE_ADD('2023-06-19', INTERVAL 1 MONTH);
-- 결과: '2023-07-19'

STR_TO_DATE(str, format)

  • 문자열을 날짜 형식으로 변환
SELECT STR_TO_DATE('2023-06-19', '%Y-%m-%d');
-- 결과: '2023-06-19'

DATE_FORMAT

  • 날짜를 지정된 형식의 문자열로 변환
SELECT DATE_FORMAT('2023-06-19', '%Y-%m-%d');
-- 결과: '2023-06-19'

SELECT DATE_FORMAT('2023-06-19', '%W, %M %e, %Y');
-- 결과: 'Monday, June 19, 2023'

GROUP BY

  • SELECT 문과 함께 사용되며, 그룹화할 컬럼(여러개) 지정
  • 아래의 집계함수와 함께 사용
SELECT 컬럼1, 집계함수(컬럼2) FROM 테이블명 GROUP BY 컬럼1;

COUNT()

  • 그룹 내의 행 수를 계산

SUM()

  • 그룹 내의 열의 합계 계산

AVG()

  • 그룹 내의 열의 평균 값 계산

MIN()

  • 그룹 내의 열의 최솟값 계산

MAX()

  • 그룹 내의 열의 최댓값 계산

GROUP_CONCAT()

  • 그룹 내의 열 값을 문자열로 결합
profile
웹 개발에 관심 있습니다.

0개의 댓글