SQL Query 정리 (CRUD)

귀찮Lee·2022년 6월 13일
0

DataBase / MySQL

목록 보기
13/16

◎ 데이터 추가 / 수정 / 삭제

  • 데이터 추가

    -- Customers의 Column 순서대로 저장
    INSERT INTO Customers
    VALUES ('Hekkan Burger', 'Gateveien 15', 'Sandnes', '4306', 'Norway');
    
    -- Customers의 CustomerName, Address를 저장
    -- 나머지는 기본값이나 Null로 저장
    INSERT INTO Customers (CustomerName, Address)
    VALUES ('Hekkan Burger', 'Gateveien 15');
  • 데이터 수정

    -- 모든 데이터의 City를 Oslo로 Country를 Norway로 변경
    UPDATE Customers SET City = 'Oslo', Country = 'Norway';
    
    -- Country가 Norway인 데이터의 City를 Oslo로 변경
    UPDATE Customers SET City = 'Oslo'
    WHERE Country = 'Norway';
  • 데이터 삭제

    -- Country가 Norway인 데이터를 삭제
    DELETE FROM Customers
    WHERE Country = 'Norway';
    
    -- Customers 테이블에 있는 모든 데이터 삭제
    DELETE FROM Customers; -- 한줄씩 삭제(시간 긺), ROLLBACK 가능
    TRUNCATE TABLE Customers; -- 처음 만들었을 떄 상태로 되돌림
    DROP TABLE Customers; -- 없었던 상태로 되돌림
    
    -- Rollback
    ROLLBACK;
    COMMIT;

◎ 데이터 조회

  • 기본적인 데이터 조회

    -- Customers 테이블의 모든 Column 조회 
    SELECT * FROM Customers;
    
    -- Customers 테이블의 NAME, SEX Column 조회 
    SELECT NAME, SEX FROM Customers;
    
    -- Customers 테이블의 Country Column (곂치는 것은 한번만) 조회
    -- 여러개를 사용할 경우, 조합 중 1개만 조회
    SELECT DISTINCT Country FROM Customers;
  • 조건문

    -- City가 Berlin인 데이터 조회
    SELECT * FROM Customers
    WHERE City = 'Berlin';
    
    -- City가 Berlin이 아닌 데이터 조회
    SELECT * FROM Customers
    WHERE NOT City = 'Berlin';
    
    -- PostalCode가 Null인 데이터 조회
    SELECT * FROM Customers
    WHERE PostalCode IS NULL;
    
    -- City가 Berlin이고 PostalCode가 12209인 데이터 조회
    SELECT * FROM Customers
    WHERE City = 'Berlin' AND PostalCode = 12209;
    
    -- City가 Berlin이거나 PostalCode가 12209인 데이터 조회
    SELECT * FROM Customers
    WHERE City = 'Berlin' OR City = 'London';
    -- 위에 있는 변수 사용사. HAVING 사용
    SELECT
        NAME,
        COUNT(NAME) AS COUNT
        FROM ANIMAL_INS
        GROUP BY NAME
    HAVING COUNT > 1
    ORDER BY NAME;
  • 정렬

    -- City 오름차순(A-Z) 조회
    SELECT * FROM Customers
    ORDER BY City;
    
    -- City 내림차순(Z-A) 조회
    SELECT * FROM Customers
    ORDER BY City DESC;
    
    -- Country, City 순서로 오름차순(A-Z) 조회
    SELECT * FROM Customers
    ORDER BY Country, City;
  • 특정 문자

    -- City가 a로 시작하는 데이터 조회
    SELECT * FROM Customers
    WHERE City LIKE 'a%';
    
    -- City가 a로 시작하지 않는 데이터 조회
    SELECT * FROM Customers
    WHERE City NOT LIKE 'a%';
    
    -- City에 a가 들어가는 데이터 조회
    SELECT * FROM Customers
    WHERE City LIKE '%a%';
    
    -- City가 a에서 시작해서 b로 끝나는 데이터 조회
    SELECT * FROM Customers
    WHERE City LIKE 'a%b';
    
    -- City가 두번쨰 문자가 a인 데이터 조회
    WHERE City LIKE '_a%';
    -- City가 첫번쨰 문자가 a,c,s중 하나인 데이터 조회
    WHERE City LIKE '[acs]%';
    -- City가 첫번쨰 문자가 a,c,s가 아닌 데이터 조회
    WHERE City LIKE '[!acs]%';
    -- City가 첫번쨰 문자가 a에서 f 사이인 데이터 조회
    WHERE City LIKE '[a-f]%';
  • 특정 범위

    -- Price가 10 ~ 20 인 데이터 조회
    SELECT * FROM Products
    WHERE Price BETWEEN 10 AND 20;
    
    -- Price가 10 ~ 20 가 아닌 데이터 조회
    SELECT * FROM Products
    WHERE Price NOT BETWEEN 10 AND 20;
    
    -- ProductName이 'Geitost', 'Pavlova' 사이인 데이터 조회
    SELECT * FROM Products
    WHERE ProductName BETWEEN 'Geitost' AND 'Pavlova';
  • 개수 제한

    -- 최대 200개 조회
    SELECT * FROM 테이블_이름
    LIMIT 200

◎ 데이터 집계 (내장 함수 이용)

  • MAX, MIN

    -- 시간이 최소값인 데이터 출력
    SELECT MIN(DATETIME) AS "시간" FROM ANIMAL_INS;
    -- 시간이 최대값인 데이터 출력
    SELECT MAX(DATETIME) AS "시간" FROM ANIMAL_INS;
  • SUM

    -- 평균을 계산
    SELECT AVG(MONEY) FROM TABLE;
  • COUNT

    -- NAME이 null이 아닌 데이터 개수 조회
    SELECT COUNT(NAME) FROM ANIMAL_INS;
    
    -- ANIMAL_TYPE의 종류의 개수 조회
    SELECT COUNT(DISTINCT ANIMAL_TYPE) FROM ANIMAL_INS;
    
    -- 테이블 안의 있는 데이터 개수 조회
    SELECT COUNT(*) FROM ANIMAL_INS;
    -- GROUP화를 시켜 COUNT를 나누어 할 수 있음
    SELECT 
        ANIMAL_TYPE,
        COUNT(*) AS "count"
        FROM ANIMAL_INS 
        GROUP BY ANIMAL_TYPE
    ORDER BY ANIMAL_TYPE;

◎ 조건문 사용

  • CASE WHEN … THEN … END 를 이용해 조건에 따라 값을 줄 수 있다.
  • NULL 예외 처리시레도 유용하게 사용할 수 있다.
  • 예시
    SELECT 
        restaurant_id AS table_number,
        time,   
        CASE 
          WHEN num_customer < 3 THEN 'kang'    
          WHEN num_customer < 5 THEN 'kim'  
          ELSE 'lee'
          END AS server
      FROM reservation 
      WHERE id < 300;

◎ 두 테이블 이상 연관 조회

  • INNER JOIN

    • 기준 테이블과 조인 테이블 모두에 조인 컬럼 데이터가 존재해야 조회됨
    SELECT 조회할 컬럼 FROM 테이블1, 테이블2
    [WHERE 조건문]
    
    SELECT 조회할 컬럼 FROM 테이블1
    (INNER) JOIN 테이블2
    ON 테이블1.컬럼 = 테이블2.컬럼
    [WHERE 추가조건]
  • LEFT JOIN (= LEFT OUTER JOIN)

    • 왼쪽 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워짐
    SELECT 조회할 컬럼 FROM 테이블1 
    LEFT (OUTER) JOIN 기준테이블2
    ON 조건문
    [WHERE 추가조건문]
  • RIGHT JOIN (= RIGHT OUTER JOIN)

    • 오른쪽 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워짐.
    SELECT 조회할 컬럼 FROM 테이블1 
    RIGHT (OUTER) JOIN 기준테이블2
    ON 조건문
    [WHERE 추가조건문]
  • 나머지 참고 자료

◎ 참고 자료

◎ 추후 정리할 자료

profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!

0개의 댓글