자격증 공부📖/SQLD

[SQL] SQL 코딩테스트 대비 함수 정리

hyunsix 2021. 9. 15. 08:28
  • SELECT
    • 찾을 컬럼
    • SELECT ANIMAL_TYPE AS ANIMAL
      • ANIMAL_TYPE이라는 컬럼을 출력할땐 ANIMAL이라고 출력하기
  • FROM
    • 탐색할 테이블
  • ORDER BY 컬럼
    • ASC : 오름차순(디폴트값)
    • DESC : 내림차순
    • ex) ORDER BY NAME, DATETIME DESC
      • 기준이 여러개면 ORDER BY 뒤에 우선순위대로 넣으면 됨!
      • NAME 오름차순으로 먼저 정렬 후 이름이 같은 경우
      • DATETIME 내림차순 기준으로 정렬한다는 뜻!
  • WHERE
    • 특정 조건 찾기
    • ex) INTAKE_CONDITION = 'Sick' -> INTAKE_CONDITION이 'Sick'인 동물 찾기! '' 꼭 필요!
  • LIMIT
    • 위에서부터 몇 개 뽑을지 정하기
    • ex) LIMIT 3
  • COUNT
    • 개수 세기
    • NULL의 경우
      • COUNT(*) -> NULL까지 셈!
      • COUNT(컬럼명) -> NULL빼고 셈!
  • AVG
    • 평균 내기
  • MAX
    • 최댓값 구하기
  • MIN
    • 최솟값 구하기
  • DISTINCT
    • 중복 제거
    • ex) SELECT COUNT(DISTINCT NAME) -> 중복제거된 NAME 개수세기
  • NULL
    • IS NOT NULL
    • IS NULL
  • GROUP BY
    • 그룹짓기
  • HAVING
    • GROUP BY 절에 의해서 생긴 각 그룹에 대해 조건을 적용할 때 사용
    • SELECT NAME, COUNT(NAME) AS COUNT
      FROM ANIMAL_INS
      GROUP BY NAME
      HAVING COUNT(NAME) >= 2 # NAME별로 이름을 세봤을 때 그 개수가 2 이상인 경우!
      ORDER BY NAME​
  • BETWEEN
    • WHERE절에 쓰이고 이상, 이하의 범위를 가짐
  • YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
    • 각종 시간관련 추출
  • IFNULL
    • SELECT ANIMAL_TYPE, 
             IFNULL(NAME, 'No name') AS NAME, 
             # MYSQL은 IFNULL이란 함수를 사용한다
             # NAME이란 컬럼에 NULL이 있을 경우 그 값을 'No name'으로 바꿔줘란 뜻이다
             # 그리고 그 컬럼의 이름은 NAME이라 만들고 저장해줘
             SEX_UPON_INTAKE
      FROM ANIMAL_INS​
  • 서브쿼리
    • SELECT ANIMAL_ID, NAME
      FROM ANIMAL_OUTS
      WHERE ANIMAL_ID NOT IN (
                              SELECT ANIMAL_ID
                              FROM ANIMAL_INS
                             )
                        # 테이블이 ANIMAL_OUTS / ANIMAL_INS 두 개임!
                        # 괄호를 통해 서브쿼리를 생성한다.
                        # ANIMAL_INS 테이블에서 ANIMAL_ID를 가져온후
                        # 위에 FROM ~ WHERE NOT IN을 통해
                        # ANIMAL_OUTS 테이블의 ANIMAL_ID랑 비교하여
                        # ANIMAL_OUTS에는 있지만 ANIMAL_INS에는 없는 ANIMAL_ID를 찾아낸다!
  • JOIN
    • SELECT I.ANIMAL_ID, I.NAME
      
      FROM ANIMAL_INS I
      # ANIMAL_INS를 기준으로 조인을 실행할거임! 그리고 다 쓰기 귀찮으니깐 ANIMAL_INS를 I라고 명명
      # ANIMAL_INS가 기준이다는 것은 ANIMAL_INS의 행은 다 살아있다는 것!
      # -> 만약 데이터가 INS에는 없고 OUTS에는 있는 경우여도 NULL로 ANIMAL_INS의 행을 살려줌
      LEFT JOIN ANIMAL_OUTS O ON O.ANIMAL_ID = I.ANIMAL_ID
      # 대상이 되는 테이블 -> ANIMAL_OUTS, 이름은 O로 정함
      # 외래키인 ID를 서로 비교하여 같은 친구들을 찾아서 JOIN!
      WHERE O.DATETIME < I.DATETIME
      # I의 날짜가 O의 날짜보다 뒤인 경우를 찾아서~!
      # 위에 SELECT문으로 I의 데이터들을 추출
      ORDER BY I.DATETIME
  • LIKE
    • WHERE 절 뒤에 따라옴
    • 나이키% : 나이키로 시작하는
    • %나이키 : 나이키로 끝나는
    • %나이키% : 나이키가 들어가는
    • 나이키_ : 나이키 뒤에 무조건 한 글자오는 친구 찾기
    • _나이키 : 나이키 앞에 무조건 한 글자 오는 친구 찾기
    • %R%R% : R이 2개 있는건 다 가져오기!
      • SBRBR 이것도 되고
      • RR 도 되고
      • NBXGRRBC도 된다!
  • CASE WHEN ~ THEN ~ ELSE
    • 특정 case 찾아서 재설정하고 프린트할 때 사용
    • SELECT ANIMAL_ID, NAME,
          CASE WHEN SEX_UPON_INTAKE LIKE 'Ne%' OR SEX_UPON_INTAKE LIKE 'Sp%' 
          # SELECT 안에 들어가 있는 것 이므로 들여쓰기 주의! 
          # SEX_UPON_INTAKE가 Ne로 시작하거나 Sp로 시작하면!
              THEN 'O'
              # O라고 설정하고
              ELSE 'X' END AS 중성화
              # 아니면 X라고 설장하고 그 컬럼이름은 중성화라고 짓는다!
      FROM ANIMAL_INS
  • DATE_FORMAT
    • 주어진 시간 내 맘대로 바꾸기
    • DATE_FORMAT(컬럼, '%Y-%m-%d')
    • 막 영문자 치다보면 뭐라도 나올듯!
    • 구분기호 역할 구분기호 역할
      %Y 4자리 년도 %m 숫자 월 (두 자리)
      %y 2자리 년도 %c 숫자 월(한자리는 한자리)
      %M 긴 월(영문 %d 일자 (두자리)
      %b 짧은 월(영문) %e 일자 (한자리는 한자리)
      %W 긴 요일 이름(영문) %l 시간 (12시간)
      %a 짧은 요일 이름(영문) %H 시간(24시간)
      %i %r hh:mm:ss AM, PM
      %T hh:mm:SS %S
  • CEILING
    • 올림
  • ROUND
    • 반올림
  • FLOOR
    • 내림
  • UPPER
    • 대문자로
  • LOWER
    • 소문자로
  • RANK
    • 1 2 3 4 5 5 5 5 8
  • DENSE RANK
    • 1 2 3 4 5 5 5 5 6
  • ROW NUMBER
    • 1 2 3 4 5 6 7 8
  • LTRIM, RTRIM, TRIM
    • 왼쪽, 오른쪽, 양쪽 공백제거
  • SUBSTRING
    • 문자열에서 원하는 문자열 추출
    • SUBSTRING('TISTORY', '2', '3') -> 'IST'
  • REPLACE
    • 문자열 치환
    • REPLACE('문자열', '치환할 문자열', '대체할 문자열')
    • REPLACE('ABCDE', 'A', '1') -> '1BCDE'