SQL 되돌아보기

seonyoung·2024년 7월 23일
0

📁 SQL 작동순서 및 작성순서

<작동순서>

  • FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY
  • 테이블(FROM)을 확인한 후, 조인 조건(ON)을 확인하고, 조인(JOIN) 후 추출 조건 (WHERE)을 확인
  • 그 뒤로 데이터 그룹화(GROUP BY, HAVING), 추출(SELECT), 중복제거(DISTINCT) 후 제일 마지막으로 데이터를 정렬(ORDER BY)
    ★ 작동순서를 고려하지 않고 쿼리를 작성할 경우 의도와 다른 결과를 얻게 될수도 있음

<작성순서>

  • SELECT 절 → FROM → JOIN → ON → WHERE → GROUP BY → HAVING → ORDER BY

📁 SQL 조건문 : WHERE

ex) 성별이 여자인 데이터 가져오기

select *
from thegloy
where 성별 = 'F';

ex) 아픈 동물 찾기

select animal_id, name
from animal_ins
where intake_condition = 'sick'
order by animal_id;

📁 SQL 조건문 : CASE WHEN

<기본 구조>

SELECT CASE WHEN 조건식1 THEN 결과1
            WHEN 조건식2 THEN 결과2
            ELSE 결과3 
            END AS 새로운 컬럼이름
FROM 테이블명
;

  • 가장 상단에 위치하는 WHEN을 우선으로 하여 참과 거짓을 구분
  • 거짓일 경우 그 다음 WHEN 절을 수행
  • 마지막 조건까지 거짓일 경우 제일 마지막에 ELSE 절을 수행해 결과를 도출
    ex) NULL 처리하기
SELECT ANIMAL_TYPE
     , CASE
       WHEN NAME IS NULL THEN 'No name'
       ELSE NAME
       END AS  NAME
     , SEX_UPON_INTAKE
  FROM ANIMAL_INS
 ORDER BY ANIMAL_ID

📁 조건문을 지원하는 연산자

연산자연산자의 예의미
>, <N<10, N>10N이 10 미만, N이 10 초과
>=, <=N<=10, N>=10N이 10 이하, N이 10 이상
=N=10N이 10인 값
!=N!=10N이 10이 아닌 값 
LIKELIKE('%과자%') 맛있는 과자, 과자는 살찐다문자열이 ~와 같을 때 문자열을 기준으로 앞, 뒤 문자열과 상관없이 볼 때 %를 앞뒤에 작성해줍니다. / %는 0개 이상의 임의의 문자를 의미함.
LIKE('과자') 내과자야 —> True 맛있는 과자 —> Fasle 과자는 살찐다 —> False* _는 단일의 임의이 문자를 의미함. / 이 위치에 정확히 한 개의 문자가 올 수 있음 의미.
ANDA AND BA 그리고 B를 모두 만족하는 값
ORA OR BA 또는 B인 값
NOT, !NOT A, !AA가 아닌 값 
BETWEENA BETWEEN 10 AND 20A가 10과 20 사이에 포함된 값. 10과 20도 포함.
INA IN BB에 A가 포함된 값
NOT INA NOT IN BB에 A가 포함되지 않은 값
IS NULLA IS NULLA 값이 비어있는 값
IS NOT NULLA IS NOT NULLA 값이 비어있지 않는 값

📁 결과값 정렬 : ORDER BY

  • 오름차순 ASC, 내림차순 DESC
  • 특정 열(Column)을 기준으로 결과값을 출력 할 때 사용
  • 필수는 아니며, 기본값은 ASC(Ascending, 오름차순)

📁 출력 개수 제한 : LIMIT & OFFSET

☑️ 제일 마지막에 LIMIT 구문을 작성해주면 출력되는 데이터의 개수를 제한할 수 있음

  • ORDER BY 다음에 사용
    ex) 상위 n개 레코드
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1;

📁 자료형

구 분Data type
문자형(StringVARCHAR(size)VARIABLE 길이 문자열(문자, 숫자 및 특수 문자를 포함할 수 있음)
수치형(Numeric)INT(size)정수
FLOAT(size, d)실수(소수점)
날짜 및 시간DATE날짜. (YYYY-MM-DD)
DATETIME(fsp)날짜와 시간의 조합. (YYYY-MM-DD hh:mm:ss)

📁 함수 익히기

<UPPER(값)/LOWER(값) - 주어진 값을 전부 대문자나 소문자로 변경>
ex)

SELECT UPPER('abc');
SELECT LOWER('ABC');

<IFNULL(값, 대체값) - NULL 값을 다른 값으로 대체>

  • 주어진 값이 NULL일 경우 대체값으로 반환하고, 주어진 값이 NULL이 아닌 경우 주어진 값 그대로 반환
    ex)
SELECT IFNULL(, "Null일 경우 대체 값") FROM 테이블명; -- 기본 문법.

SELECT IFNULL(NULL, "Null일 경우 대체 값");
SELECT IFNULL("NOT NULL", "Null일 경우 대체 값");

<DATE_FORMAT(포맷할 문자, "형식") - 날짜 형식을 설정>

  • 포맷 문자의 종류
포맷문자설명예시
%YYear, numeric, four digits2024
%mMonth, numeric (00..12)07
%dDay of the month, numeric (00..31)05
%WWeekday name (Sunday..Saturday)
%TTime, 24-hour (hh:mm:ss)20:10:00
%HHour (00..23)20
%iMinutes, numeric (00..59)10
%S, %sSeconds (00..59)00

ex) DATETIME에서 DATE로 형 변환

SELECT
	ANIMAL_ID,
	NAME,
	DATE_FORMAT(DATETIME, "%Y-%m-%d")날짜
FROM
	ANIMAL_INS
ORDER BY
	ANIMAL_ID;

<CAST(값 AS 데이터 형식) - 주어진 값을 지정된 데이터 유형으로 변환>
ex)

SELECT *, CAST(날짜 AS date) FROM THEGLORY t ;
  • 변환할 수 있는 데이터 형식
Value설명
DATE값을 DATE로 변환합니다.
형식: "YYYY-MM-DD"SELECT CAST("2017-08-29" AS DATE);
DATETIME값을 DATETIME으로 변환합니다.
형식: "YYYY-MM-DD HH:MM:SS"
TIME값을 TIME으로 변환합니다.
형식: "HH:MM:SS"SELECT CAST("14:06:10" AS TIME);
DECIMAL값을 DECIMAL로 변환합니다.
CHAR값을 CHAR(문자열)로 변환합니다.
(MySQL 서버의 기본 문자 집합 사용)SELECT CAST(150 AS CHAR);
NCHAR값을 NCHAR로 변환합니다.
(CHAR와 유사하나 유니코드 문자(UTF-8) 집합 사용. 더 많은 자원 필요로 할 수 있음.)
SIGNED값을 SIGNED(부호 있는 64비트 정수)로 변환합니다.SELECT CAST(5-10 AS SIGNED);
UNSIGNED값을 UNSIGNED(부호 없는 64비트 정수)로 변환합니다.
BINARY값을 BINARY(바이너리 문자열)로 변환합니다.SELECT CAST('A' = 'B' AS BINARY); —> FALSE
profile
원하는 바를 이루고 싶은 사람입니다.

0개의 댓글