본문 바로가기
[Tools]/[SQL]

[Cheat Sheet] SQL QUERY

by 보끔밥0130 2024. 1. 27.
728x90

데이터 베이스, 테이블 구조


데이터 베이스 (폴더)
        ┖ 테이블1 (파일)
             ┖ sheet (column1, value1 …)
        ┖ 테이블2 (파일)
            ┖ sheet (column1, value1 …)

6가지 핵심 키워드


  • 핵심 쿼리 “작성” 순서 :
    • SELECT > FROM > WHERE > GROUP BY > HAVING > ORDER BY
  • 핵심 쿼리 “실행” 순서 :
    • FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY

데이터 베이스


쿼리 의미
CREATE DATABASE [데이터베이스 이름]; 데이터베이스 만들기
SHOW DATABASES; 모든 데이터베이스 조회하기
USE [데이터베이스 이름]; 데이터베이스 사용 선언하기
DROP DATABASE [데이터베이스 이름]; 데이터베이스 지우기
DROP DATABASE IF EXISTS [데이터베이스 이름]; 데이터베이스가 존재한다면 지우기

테이블

쿼리 의미
CREATE TABLE [테이블 이름] ( [컬럼 이름] [데이터 타입], [컬럼 이름] [데이터 타입],); 테이블 생성하기
ALTER TABLE [테이블 이름] RENAME [새로운 테이블 이름]; 테이블 이름 변경하기
ALTER TABLE [테이블 이름]
ADD COLUMN [컬럼 이름] [데이터 타입];
새로운 컬럼 추가하기
ALTER TABLE [테이블 이름]
MODIFY COLUMN [컬럼 이름] [새로운 데이터 타입];
기존 컬럼 타입 변경하기
ALTER TABLE [테이블 이름] CHANGE COLUMN [컬럼 이름] [새로운 컬럼 이름] [새로운 데이터 타입]; 기존 컬럼 이름과 타입 변경하기
ALTER TABLE [테이블 이름] DROP COLUMN [컬럼 이름]; 컬럼 지우기
DROP TABLE IF EXISTS [테이블 이름]; 테이블이 존재한다면 지우기
TRUNCATE TABLE [테이블 이름]; 테이블 값만 지우기

데이터 삽입, 삭제

쿼리 의미
INSERT INTO [테이블 이름] ( [컬럼1 이름], [컬럼2 이름], [컬럼3 이름])
VALUES ([컬럼1 값], [컬럼2 값], [컬럼3 값]),
([컬럼1 값], [컬럼2 값], [컬럼3 값]),
([컬럼1 값], [컬럼2 값], [컬럼3 값]);
데이터 여러 개 삽입하기 단, 항상 insert와 values의 리스트 내 갯수가 일치해야 합니다.
DELETE FROM [테이블 이름] WHERE 조건식; 데이터 삭제하기
UPDATE [테이블 이름] SET [컬럼 이름] = [새 값] WHERE 조건식; 데이터 수정하기

기본 필수 쿼리 틀

작성 순서 데이터 입력 기능
USE input; input : 데이터 베이스 데이터 베이스 사용 선언
SELECT input1 AS input2 ★ GROUP BY가 쓰인 쿼리인 경우 SELECT 절은 GROUP BY 대상 컬럼과 그룹 함수만 사용 가능 input1 : 컬럼, * , 데이터 input2 : 별명 (이름 표시) 가져올 데이터 선택, 컬럼을 선택
FROM input input : 테이블 가져올 테이블을 지정
WHERE 조건식 (함수 가능) 비교, NOT, AND, OR, 컬럼 BETWEEN AND, 컬럼 IN (값, 값, 값) 행을 필터링 (테이블 전체) 즉, 개별 행임
조건을 지정 (참이 되는 로우 선택)
GROUP BY input input : 컬럼 데이터 그룹화
HAVING 조건식 (함수 가능) 그룹을 필터링 (그룹화된 테이블) 즉, 결과 집합의 행 참이 되는 그룹만 선택
ORDER BY 1, [2] [DESC] 컬럼1, [컬럼2] 단, 내림차순 DESC 복수 개의 컬럼 지정 컬럼 번호는 SELECT절의 컬럼 이름의 순서(1부터) 데이터를 정렬
  • 응용 쿼리 작성 틀
쿼리 위치 작성 순서 데이터 입력 기능
필수 쿼리 USE input; input : 데이터 베이스 데이터 베이스 사용 선언, 미작성 시 FROM 절 데이터베이스.테이블이름 형식으로 표기 필수
필수 쿼리 SELECT input1 AS input2
★ GROUP BY가 쓰인 쿼리인 경우 SELECT 절은 GROUP BY 대상 컬럼과 그룹 함수만 사용 가능
- input1 : 컬럼, * , 데이터
- input2 : 별명 (이름 표시)
가져올 데이터 선택, 컬럼을 선택
● SELECT 절 내 [SELECT DISTINCT input] input : 컬럼 중복을 제거
● SELECT 절 내 RANK() OVER (ORDER BY input) AS

DENSE_RANK() OVER (ORDER BY input) AS

ROW_NUMBER() OVER (ORDER BY input) AS
input : 컬럼 순위 매기기 , RANK : 공동 순위 있다면 순위가 건너 띔 (1, 2, 2, 4, 5) , DENSE_RANK : 공동 순위 있어도 순위 건너 띄지 않음 (1, 2, 2, 3, 4), ROW_NUMBER : 공동 순위 무시함, (1, 2, 3, 4, 5)
● SELECT 절 내 - 다양한 숫자 함수 : ABS, CEILING, FLOOR, ROUND 등
- 다양한 문자 함수 : LOCATE, LENGTH, RIGHT, LEFT 등
- 시간, 날짜 함수 : NOW, YEAR, MONTH, HOUR, MINUTE 등
함수(컬럼) 연산 편의 제공
● SELECT 절 내 - 다양한 집계 함수 : COUNT, SUM, AVG, MIN, MAX
with GROUP BY
집계함수(컬럼) 그룹 내 연산 편의 제공
● SELECT 절 내 IF() (조건, 참값, 거짓값) 하나의 조건으로 새 컬럼 반환 (조건 형식의 새로운 컬럼)
● SELECT 절 내 IF NULL() (컬럼, NULL대신할 값) 데이터가 NULL이라면 새로운 값을 반환
● SELECT 절 내 CASE
WHEN 1 THEN a
WHEN 2 THEN b
ELSE c
END
1, 2 : 조건식 / a, b, c : 조건에 해당하면 결과값 여러 개 조건으로 새 컬럼 반환 ※ CASE 컬럼이름 형식으로 작성할 경우 조건식이 아닌 컬럼과 비교하는 조건값으로 작성해야 함 ※ ELSE 문장은 생략 시 NULL값을 반환해 줍니다.
✏︎ sub 쿼리 반드시** 괄호 안** SELECT [컬럼 이름], ( SELECT [컬럼 이름] FROM [테이블 이름] WHERE 조건식 )   스칼라 서브 쿼리 반드시 결과값이 하나의 값
필수 쿼리 FROM input input : 테이블 가져올 테이블을 지정
✏︎ sub 쿼리 반드시 괄호 안 ( SELECT [컬럼 이름] FROM [테이블 이름] WHERE 조건식 ) AS [테이블 별명]   인라인 뷰 서브쿼리 반드시 결과값이 하나의 테이블 반드시 별명을 가져야 함
🄙 조인 쿼리 (공통) INNER JOIN input1 ON input2 - input1 : another 테이블 (FROM 내 테이블과 다른 테이블)
-input2 : tableA.columnA = tableB.columnB
(각 테이블에서 같은 이름의 컬럼 = KEY 컬럼 확인)
같은 기준으로 테이블을 합칩니다.
🄙 조인쿼리 (왼쪽 기준) LEFT JOIN input1 ON input2 - input1 : another 테이블 (FROM 내 테이블과 다른 테이블)
- input2:
tableA.columnA = tableB.columnB
(각 테이블에서 같은 이름의 컬럼 = KEY 컬럼 확인)
왼쪽 기준으로 테이블을 합칩니다.
🄙조인쿼리 (오른쪽 기준) RIGHT JOIN input1 ON input2 - input1 : another 테이블 (FROM 내 테이블과 다른 테이블)
- input2 : tableA.columnA = tableB.columnB
(각 테이블에서 같은 이름의 컬럼 = KEY 컬럼 확인)
오른쪽을 기준으로 테이블을 합칩니다.
🄙 기타 조인 쿼리 1. LEFT JOIN 쿼리 UNION RIGHT JOIN 쿼리 2. CROSS JOIN 3. INNER JOIN ON CROSS JOIN은 ON 키워드가 없어도 됨 SELF JOIN은 같은 테이블 간의 구분을 위해 AS(별명)가 필수이다.
SELF JOIN은 SELECT 지정 시 '테이블.컬럼' 형식으로 지정해야 한다.
1. OUTER JOIN : 두 테이블에 있는 모든 값 합치기 (중복 제외)
2. CROSS JOIN : 두 테이블에 있는 모든 값을 각각 합치기 (모든 경우의 수를 합친다)
3. SELF JOIN : 같은 테이블에 있는 값 합치기
행 쿼리 [LIMIT input1 OFFSET input2] - input1 로우 개수
- input2 로우 번호 (0부터)
로우 개수를 지정
기본 쿼리 WHERE 조건식 (함수 가능) 비교, NOT, AND, OR, 컬럼 BETWEEN AND, 컬럼 IN (값, 값, 값) 행을 필터링 (테이블 전체) 즉, 개별 행 조건을 지정 (참이 되는 로우 선택)
● WHERE 절 내 [LIKE] 컬럼 LIKE 문자열 ex) “%e” 끝남, “%e%” 포함 , “ _e” 1개문자와 끝남 문자열 검색하기
● WHERE 절 내 [IS NULL], [IS NOT NULL] 컬럼 IS NULL, 컬럼 IS NOT NULL NULL 값을 확인
✏︎ sub 쿼리 반드시 괄호 안 WHERE [컬럼 이름] [연산자] ( SELECT [컬럼 이름] FROM [테이블 이름] WHERE 조건식 )   중첩 서브쿼리 반드시 결과값이 하나의 컬럼 연산자가 비교 연산자면 서브 쿼리는 하나의 값 주요 연산자면(IN, ALL,ANY) 서브 쿼리는 하나의 컬럼 단, EXISTS는 단독으로 쓰며, 결과값이 여러 컬럼이여도 됨 (값이 있는지 확인할 때 사용하는 연산자)
기본 쿼리 GROUP BY input input : 컬럼 데이터 그룹화
기본 쿼리 HAVING 조건식 (함수 가능) 그룹을 필터링 (그룹화된 테이블) 즉, 결과 집합의 행, 참이 되는 그룹만 선택
정렬 쿼리 ORDER BY 1, [2] [DESC] 컬럼1, [컬럼2] 단, 내림차순 DESC 복수 개의 컬럼 지정 컬럼 번호는 SELECT절의 컬럼 이름의 순서(1부터) 데이터를 정렬

※ 집계 함수는 그냥 사용할 경우 데이터 전체 로우에 적용되고 GROUP BY와 쓰인 경우 (피벗처럼)그룹별로 집계하는 함수로 적용된다.

COUNT(칼럼명) : 이것은 NULL값은 제외하고 나온다. (실제 값을 읽기에 속도가 느립니다) 즉, 해당 컬럼의 행이 몇 개인지 세는 경우

COUNT(*), COUNT(1) : 이것은 NULL값을 포함합니다. (데이터를 읽지 않고 레코드 수만 불러와 속도가 빠르다) 즉, 전체 행이 몇 개인지 세는 경우

※ 기타 조인 방법 중 OUTER JOIN는 우회하여 구현합니다. (MySQL 키워드에 없음)

※ SELECT 결과를 INSERT 하기

INSERTINTO 목적지테이블

SELECT *FROM 출발지테이블

※ 서브 쿼리

  • 의미 : 하나의 쿼리 내 포함된 또 하나의 쿼리
  • 서브 쿼리는 반드시 괄호 안에 있어야 합니다.
  • SELECT, FROM, WHERE, HAVING, ORDER BY 절에 사용 가능합니다.

= 6가지 쿼리 중 GROUP BY를 제외한 쿼리에서 사용 가능합니다.

  • INSERT, UPDATE, DELETE 문에도 사용 가능합니다.
  • 서브쿼리에는 ; (세미 콜론)을 붙이지 않아도 됩니다.

※ From sub-query에 alias(as)가 반드시 붙는 이유 : From 절 안에 모든 테이블은 이름을 가져야 하기 때문에 파생 테이블인 서브 쿼리도 이름을 가져야 합니다.

※ ALL은 큰 값은 최대값 보다 크고 작은 값은 최소값보다 작으면 됨, ANY는 큰 값은 최소값보다 크고 작은 값은 최대값보다 작으면 됨

  • JOIN과 UNION 차이
    • 공통점 - 테이블의 데이터를 연결, 차이점 - 연결하는 방법이 다름
    • UNION: 하나의 결과 세트만 나타난다. (Append result sets vertically)
    • JOIN: 적어도 하나의 속성이 공통인 두 테이블 속성을 결합하고자 할 때 사용된다. (Append result sets horizontally)
  • 쿼리와 쿼리 간 결과 합치기 (여러 테이블 한 번에 다루기)
형식 함수 설명
[쿼리A] UNION [쿼리B] UNIOIN 각 쿼리의 결과 합을 반환하는 합집합 (중복제거)
[쿼리A] UNION ALL [쿼리B] UNION ALL 각 쿼리의 모든 결과를 포함한 합집합 (중복제거 안함)
  • UNION 규칙
    • 열의 개수와 순서가 모든 쿼리에서 동일해야 한다. 단일 결과 세트로 나오기 때문이다.
    • 데이터 형식이 호환되어야 한다. 즉, 숫자면 숫자, 문자면 문자라는 조건이 성립되어야 한다.
    • ORDER BY는 마지막에 [쿼리A]에서 가져온 컬럼으로만 가능
  • 함수 만들기 (isStrong 으로 이해해보기)
    • 프로시저(Procedure)란 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
    • Delimiter은 구문 문자를 정의하는 기능
    • 프로시저 안의 세미콜론(;)으로 인해 여러 명령문으로 나눠지는 것을 막고 프로시저 자체를 하나의 명령문으로 묶어주기 위해서 Delimiter 를 사용
    • 하나의 프로시저 전체를 서버로 보내기 위해서는 DELIMITER 를 이용해 구분자를 재정의해줘야 한다.
SET GLOBAL log_bin_trust_function_creators = 1;

DELIMITER//

CREATE FUNCTION isSTrong(attack INT, defense INT)

            RETURNS VARCHAR(20)

BEGIN

        DECLARE a INT;

        DECLARE b INT;

        DECLARE isstrong VARCHAR(20);

        SET a = attack;

        SET b = defense;

        SELECT CASE

                    WHEN a + b > 120 THEN 'very strong'

                    WHEN a + b > 90 THEN 'strong'

                    ELSE 'not strong'

                    END INTO isstrong;

        RETURN isstrong

END

//

DELIMITER ;

함수 삭제 : DROP FUNCTION isStorng;

728x90

'[Tools] > [SQL]' 카테고리의 다른 글

The SQL cheatsheet-Created  (0) 2024.01.29

댓글