SQL_04

functionMan·2024년 1월 29일

SQL

목록 보기
4/5
post-thumbnail

1. SELECT

  • ORDER BY : 정렬
    • 조회결과를 특정 컬럼을 기준으로 순서대로 정렬해서 조화하고 싶을 때 사용
    • 정렬 옵션
      • ASC : (default) 오름차순
      • DESC : 내림차순
    • SELECT 절 마지막에 위치
    • 정렬 기준은 컬럼명이나, 1부터 자동으로 부여되는 컬럼번호 지정 가능
    • 정렬 기준은 여러개 나열 가능, 처음 작성한 기준으로 정렬된 결과에서 다음 기준으로 정렬 컬럼의
    • 값이 NULL인 경우, NULL 값이 정렬 결과의 맨 마지막으로 위치함

2. MySQL 내장 함수

  • MySQL에서 제공하는 주요 내장 함수

  • 집계 함수(그룹함수)

    • 조건에 따른 집계된 값을 가져옴
    • GROUP BY 절과도 함께 사용됨
  • 숫자 함수

    • 숫자함수의 종류
    • GREATEST(숫자1, 숫자2, 숫자3,...) : 주어진 수 중 제일 큰 수 리턴
    • LEAST(숫자1, 숫자2, 숫자3,...) : 주어진 수 중 가장 작은 수 리턴
    • TRUNCATE(숫자, 소수점자리수) : 숫자를 소수점자리수까지 선택, 나머지는 버리기
    • RAND() : 0 과 1 사이 실수인 랜덤값 리턴
    • MOD(a, b) : a % b 한 결과 리턴. 나머지값 구하기
  • 문자 함수

    • 문자함수의 종류
    • REVERSE(문자열) : 문자열 뒤집기
    • REPEAT(문자열, 횟수) : 문자열을 횟수만큼 반복
  • 날짜 함수

    • 현재 날짜와 시간
      NOW(), SYSDATE(), CURRUNT_TIMESTAMP()
    • 현재 날짜
      CURDATE(), CURRENT_DATE()
    • 현재 시간
      CURTIME(), CURRENT_TIME()
    • 특정 날짜 리턴 함수
      DATE(), YEAR(), MONTH(), MONTHNAME(), DAYOFMONTH(), DAY(), WEEKDAY(), DAYNAME()
    • 특정 시간 리턴 함수
      HOUR(), MINUTE(), SECOND(), TIME()
  • 시간 / 날짜 연산 함수

    • 더하기
      ADDDATE(날짜, INTERVAL 값 유닛), DATE_ADD(날짜, INTERVAL 값 유닛)
      • 유닛 : MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR
        ex : ADDDATE(날짜, INTERVAL 1 HOUR)
    • 빼기
      SUBDATE(날짜, INTERVAL 값 유닛) DATE_SUB(날짜, INTERVAL 값 유닛)
    • 차이계산
      DATE_DIFF(end_date, start_date), TIME_DIFF(time1, time2)
      • DATE_DIFF 날짜 형식 : YYYY-MM-DD
      • TIME_DIFF 시간/날짜형식 : HH:MM:SS, YYYY-MM-DD HH:MM:SS
        날짜/시간 지정 시, 위와 같은 패턴으로 작성
    • 마지막 날짜
      LAST_DAY(날짜)
    • 시간/날짜 지정한 패턴으로 리턴(날짜 -> 문자)
      DATE_FORMAT(날짜, format)
    • 문자 -> 날짜로 리턴
      STR_TO_DATE(문자열, format)
    • format의 주요 지정자(specofier)
  • 날짜/시간 함수의 종류

3. GROUP BY : 그룹화(select)

  • 데이터를 원하는 그룹으로 나누어 조회
  • ex. 부서별 인원수 조회
  • select 절 조회에는 그룹화할 컬럼이나 집계함수만 올 수 있다.
  • 그룹화 후 결과에 조건을 걸때는 where절 대신 HAVING절 사용
  • 컬럼 그룹화
    SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할컬럼;
  • 조건 처리 후, 컬럼 그룹화
    SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할컬럼;
  • 조건 처리 후 컬럼 그룹화 후, 그룹 조건 처리
    SELECT 컬럼 FROM 테이블 WHERE 조건식 GROUP BY 그룹화할컬럼 HAVING 조건식;
  • 정렬이 추가 되어야 하는 경우
    SELECT 컬럼 FROM 테이블 [WHERE 조건식] GROUP BY 그룹화할컬럼[HAVING 조건식] ORDER BY 정렬기준컬럼, ...;

4. JOIN 조인

  • 두 개 이상의 테이블을 이용한 조회

  • 한 테이블의 행을 다른 테이블의 행에 연결하여 두 개 이상의 테이블을 결합하여 조회

    • 컬럼을 표현할 때는 [테이블명.컬럼명] 또는 [별칭.컬럼명] 을 사용
  • (INNER)JOIN

    • 조인하는 테이블의 ON절이 일치하는 결과만 출력, 조건에 부합되지 않는 레코드는 조회에서 누락.
    • ANSI 표준
      SELECT a.컬럼, b.컬럼... FROM ATABLE AS a JOIN BTABLE AS b ON a.컬럼=b.컬럼;
    • MySQL
      SELECT a.컬럼, b.컬럼... FROM ATABLE AS a, BTABLE AS b WHERE a.컬럼=b.컬럼;
      - FROM 절에 테이블을 쉼표(,)로 나열하면 INNER JOIN으로 치부한다.
  • LEFT / RIGHT OUTER JOIN

    • 두 테이블이 합쳐질때 왼쪽/오른쪽을 기준으로 했느냐에 따라, 기준 테이블의 것은 모두 출력
    • OUTER JOIN은 조인하는 테이블의 ON절의 조건 중 한쪽의 데이터를 모두 가져온다.
    • LEFT OUTER JOIN (주로 사용)
      • 첫번째 테이블을 기준으로 두번째 테이블을 조합하는 조인
      • 빈 컬럼값이 있어도 그냥 합쳐진다.
      • 어떤 테이블을 기준으로 LEFT할 것인지에 따라, 레코드의 개수가 달라진다
      • Table1을 기준으로 LEFT OUTER 조인
    • SELECT A.컬럼, B.컬럼,.. FROM A LEFT OUTER JOIN B ON A.컬럼=B.컬럼[WHERE...];
    • INNER JOIN과 달리 LEFT OUTER JOIN은 테이블의 순서가 상당히 중요하다. 어떤 순서로 테이블을 조인하는지에 따라 결과 테이블에 조회되는 행의 개수며, 구성이 달라질 수 있 다. 따라서 JOIN문을 작성할 때, 만약 LEFT JOIN을 할 것이라면, 가장 첫번째의 테이블로 SELECT문에 가장 많은 컬럼을 가져와야할 테이블을 우선으로 적어준다.
    • 조인을 여러번 해야하는데, 시작을 LEFT JOIN으로 했다면 나머지 조인도 LEFT JOIN을 이 어나간다.즉, LEFT JOIN을 쓰다가 갑자기 INNER JOIN이나 다른 조인을 사용하지 않는 다...
  • RIGHT OUTER JOIN

    • 두 테이블 중, 두번째 테이블을 기준으로 첫번째 테이블을 조합하는 조인
      SELECT A.컬럼, B.컬럼,.. FROM A RIGHT OUTER JOIN B ON A.컬럼=B.컬럼[WHERE..];
  • 3중 조인(OUTER JOIN)

    • 만일 원하는 정보가 테이블 3개로 흩어져 있을 때, 이 세개의 테이블을 모아야 할때
      OUTER JOIN을 연속으로 3번 사용
  • SELF JOIN

    • 테이블 자기 자신을 조인한 것(하나의 테이블을 마치 두개 처럼 사용)
      SELECT a1.컬럼, a2.컬럼,.. FROM A a1, A a2 WHERE a1.컬럼=a2.컬럼;

5. 서브쿼리 Subquery

  • 중첩 쿼리

  • SELECT 문 안에 또다른 SELECT문이 ()묶여 들어간 형태 서브 쿼리의 - 결과를 하나의 컬럼 또는 테이블 처럼 사용

  • 실행 순서 : 서브쿼리 -> 메인쿼리

  • 서브쿼리 위치에 따른 명칭

  • 일반 서브쿼리

    • 서브쿼리 결과 값이 1개여야 하는 경우
      SELECT 컬럼,.. FROM 테이블 WHERE 컬럼 = (SELECT 컬럼 FROM 테이블 WHERE 조건식);
    • 서브쿼리 결과 값이 여러개일 경우
      - OR : 결과 중 하나라도 만족 할 때
      -> SELECT 컬럼... FROM 테이블명 WHERE 컬럼 = ANY(SELECT 컬럼 FROM 테이블 WHERE
      조건);
      -> SELECT 컬럼... FROM 테이블명 WHERE 컬럼 IN (SELECT 컬럼 FROM 테이블 WHERE
      조건);
      - AND : 결과가 모두 만족 할 때
      -> SELECT 컬럼... FROM 테이블명 WHERE 컬럼 = ALL(SELECT 컬럼 FROM 테이블 WHERE
      조건);
  • INLINE VIEW 인라인뷰

    • 서브쿼리가 FROM절에 사용
    • 서브쿼리의 결과를 테이블 처럼 사용
    • 서브쿼리가 FROM절에 사용될 경우 무조건 서브쿼리에
      [AS 별칭]을 지정해주셔야 한다.
      SELECT 별칭.컬럼... FROM (SELECT 컬럼.. FROM 테이블 WHERE 조건) AS 별칭[WHERE...];
  • SCALAR 서브쿼리

    • 다른 테이블에서 어떤 값을 메인쿼리에 컬럼의 값으로 가져올 때 사용
    • 컬럼으로 사용되는 서브 쿼리는 하나의 레코드(ROW)만 리턴 가능, 두개 이상 의 레코드는 리 턴 불가
      -> SELECT 별칭.컬럼, (SELECT 컬럼 FROM 테이블명 WHERE 컬럼=별칭.컬럼) AS 별칭 FROM
      테이블 AS 별칭
    • 서브쿼리의 SELECT 절에는 집계함수 많이 사용
  • EXISTS

    • 존재하면~
    • 서브쿼리 먼저 실행하여, 그 결과가 1건이라도 나오면 메인쿼리 실행 만약 서브쿼리 결과가 하나도 없으면, 메인쿼리 아예 실행X
  • LIMIT

    • LIMIT n : n으로 지정한 숫자만큼 행이 출력된다.

    • LIMIT n, m
      - n : offset : n 부터 (offset의 기본숫자는 0부터 시작)
      - m : limit : 출력할 행의 숫자 지정

    • order by 뒤에 작성

profile
functionMan

0개의 댓글