SQL

SQL 레벨업 - 2장 SQL 기초

chaewonni 2023. 9. 16. 15:53

6강 - SELECT 구문

검색 = 질의 = 추출 

검색을 위해 사용하는 SQL 구문 -> SELECT 구문

 

1. SELECT 구와 FROM 구

    'SELECT [컬럼이름] FROM [테이블 이름]

    'SELECT 1'처럼 상수를 선택하는 경우와 같은 예외를 제외하고는 FROM 구를 반드시 입력해야함

 

2. WHERE 구

   레코드를 선택할 때 추가적인 조건을 지정할 수 있는 방법

   '필터 조건'

   =, <>, >=, >, <=, < 와 같은 대표적인 연산자들이 있음

   ex) SELECT name, age

                FROM Address

             WHERE address = '서울시'

                     OR age >= 30;

   - WHERE구는 거대한 벤다이어그램

 

   - IN으로 OR조건을 간단하게 작성할 수 있음

   ex) WHERE address = '서울시' 

                   OR address = '인천시'

                   OR address = '부산시';

 

        => WHERE address IN('서울시', '인천시', '부산시');

 

   - NULL은 IS NULL 아니면 IS NOT NULL 둘 중 하나 

   ex) WHERE phone_num = NULL; (X)

          => WHERE phone_num IS NULL

 

3. GROUP BY 구

    테이블에서 단순하게 데이터를 선택하는 것뿐만 아니라 합계 또는 평균 등의 집계 연산을 SQL 구문으로 할 수 있음

 

   - SQL의 대표적인 집계 함수

     COUNT, SUM, AVG, MAX, MIN 

 

   ex) SELECT address, COUNT(*)

               FROM Address

           GROUP BY address;

 

  -GROUP BY (); -> 키를 지정하지 않는다는 뜻, GROUP BY구 자체를 생략하는 일이 많음

 

4. HAVING 구

   WHERE구로 레코드를 선택하는 것과 거의 같음

 

   - 선택된 결과 집합에 또다시 조건을 지정할 수 있음

     WHERE구가 '레코드'에 조건을 지정한다면, HAVING 구는 '집합'에 조건을 지정하는 기능

 

5. ORDER BY 구

   SELECT 구문의 결과 순서를 보장하기 위해 명시적으로 순서를 지정해주는 구

   ex) 나이가 많은 순으로 정렬

 

   -ASC: 오름차순 (기본), DESC: 내림차순

   ex) ORDER BY age DESC

 

6. 뷰와 서브쿼리

   뷰: 테이블과 같이 데이터베이스 안에 저장, 하지만 테이블과 달리 내부에 데이터를 보유하지는 않음

   CREARE VIEW CountAddress (v_address, cnt)

   AS

   SELECT address, COUNT(*)

      FROM Address

    GROUP BY address;

 

-> 테이블의 모습을 한 SELECT 구문

 

   SELECT v_address, cnt

      FROM CountAddress;

 

=> SELECT v_address, cnt

        FROM (SELECT address AS v_address , COUNT(*) AS cnt

                           FROM Address

                        GROUP BY address) AS CountAddress;   -> 서브쿼리

 

7강 - 조건분기, 집합 연산, 윈도우 함수

1. SQL과 조건분기

   CASE 식의 구문 

 

   CASE WHEN [평가식] THEN [식]

              WHEN [평가식] THEN [식]

              WHEN [평가식] THEN [식]

              생략

              ELSE [식]

   END

 

   CASE '식'은 SELCT, WHERE, GROUP BY, HAVING, ORDER BY 구와 같은 곳 같이 식을 적을 수 있는 곳이라면 어디든지 적을 수 있음

 

2. SQL의 집합연산

   UNION : 합집합, 중복 제거

   UNION ALL: 합집합, 중복 제거 x

   INTERSECT: 교집합, 중복 제거

   EXCEPT: 차집합, 중복 제거 -> 어떤 테이블을 먼저 적냐에 따라 결과가 달라짐

   

3. 윈도우 함수

   집약 기능이 없는 GROUP BY 구, GROUP BY에서 자르기 기능만 있는 것 (GROUP BY는 자르기 + 집약 기능)

   PARTITION BY라는 구로 수행

 

   SELECT name,

                  age,

                  RANK() OVER (ORDER BY age DESC) AS rnk

       FROM ADDRESS;

 

SELECT address,

                COUNT(*) OVER(PARTITION BY address)

         FROM Address;

 

4. 트랜잭션과 갱신

 

- INSERT로 데이터 삽입

  INSERT INTO [테이블 이름] ([필드 1], [필드 2], [필드 3] ....)

                                  VALUES ([값1], [값2], [값3] ......);

 

-DELETE로 데이터 제거 

  DELETE FROM Address

         WHERE address = '인천시';

 

*DELETE name FROM Address -> 오류

*DELETE * FROM Address -> 오류

 

-UPDATE로 데이터 갱신

 UPDATE [테이블 이름]

          SET [필드 이름] = [식];

 

UPDATE 구문의 SET 구에 여러 개의 필드를 입력하면, 한 번에 여러 개의 값을 변경할 수 있음

 

UPDATE Address

       SET (phone_nbr, age) = ('080-5848-XXXX', 20)

       WHERE name = '빛나래';