내가 보려고 정리하는 SQL - (2) SELECT, WHERE


CREATE, ALTER, RENAME, UPDATE, SELECT, WHERE 예시를 담아보았습니다.🧐

1. 주석 작성

-- 1. 이것은 주석이오 (얘는 1줄만)--

/* 2. 이것도
      주석이오 (얘는 1줄 이상)*/


2. 테이블 생성 (CREATE TABLE)

  • 테이블명 : PRODUCT_SALES
  • 변수
    • PRD_NUM : 상품번호
    • DATE : 발생일
    • PRD_PRC : 상품값
    • PAY_PRC : 지불금
      CREATE TABLE PRODUCT_SALES
      (
         PRD_NUM    VARCHAR2(4), -- 상품번호
         DATE       VARCHAR2(8), -- 발생일
         PRD_PRC    NUMBER, -- 상품값
         PAY_PRC    NUMBER -- 지불금
      )
      

      (조회결과) image


3. 테이블값 입력 (INSERT INTO)

INSERT INTO PRODUCT_SALES VALUES ('P001', '20210512', 13000, 12000);
INSERT INTO PRODUCT_SALES VALUES ('P001', '20210513', 11500, 11000);
INSERT INTO PRODUCT_SALES VALUES ('P001', '20210103', 13000, 13000);
INSERT INTO PRODUCT_SALES VALUES ('P001', '20210205', 12600, 12500);
INSERT INTO PRODUCT_SALES VALUES ('P001', '20210414', 12500, 12300);
INSERT INTO PRODUCT_SALES VALUES ('P002', '20210316', 20000, 19800);
INSERT INTO PRODUCT_SALES VALUES ('P002', '20210208', 19500, 19000);
INSERT INTO PRODUCT_SALES VALUES ('P002', '20210611', 19700, 19700);

(조회결과) image


4. SELECT문을 이용한 테이블 생성

CREATE TABLE PRODUCT_SALES1 
	AS	(
			SELECT *
			FROM PRODUCT_SALES
		)


5. 테이블 수정 - 변수 추가 (ALTER TABLE)

-- 변수 추가
ALTER TABLE PRODUCT_SALES1 ADD (ADDRESS VARCHAR(20))

(조회결과) image

-- 기존 데이터가 있기 때문에 NULL대신에 어떤 값으로 처리할 것인지
ALTER TABLE PRODUCT_SALES1 ADD (CITY VARCHAR(20) NOT NULL DEFAULT 'SEOUL')

(조회결과) image


6. 변수명 변경 (RENAME COLUMN)

  • RENAME COLUMN 테이블명.기존변수명 TO 변경할변수명
    RENAME COLUMN PRODUCT_SALES.DATE TO DT
    

    (조회결과) image


7. 테이블명 변경 (RENAME TABLE)

RENAME TABLE PRODUCT_SALES1 TO PRODUCT_SALES2


8. 테이블 업데이트 (UPDATE)

  • 원하는 조건 : 상품값이 13,000원 이하일 때 지불금을 100원 더하기
    UPDATE PRODUCT_SALES2
    SET PAY_PRC = PAY_PRC + 100 -- 바꾸는 값
    WHERE PRD_PRC <= 13000 -- 조건
    

    (조회결과) image


9. 일부 칼럼 설정해서 보기 (SELECT)

SELECT PRD_NUM, DT
FROM PRODUCT_SALES

(조회결과) image


10. 모든 데이터 보기 (* 사용)

  • 우측정렬 : 숫자 / 좌측정렬 : 문자 및 날짜
    SELECT *
    FROM PRODUCT_SALES -- 우측정렬 : 숫자, 좌측정렬 : 문자 및 날짜
    

    (조회결과) image


11. 칼럼에 별칭(alias) 붙여서 조회 (AS)

  • 별명(ALIAS) 사용 : 칼럼 레이블 변경
    SELECT PRD_NUM AS PRODUCT_NAME, DT AS DATE, PRD_PRC AS PRODUCT_PRICE, PAY_PRC AS PAY_PRICE
    FROM PRODUCT_SALES
    

    (조회결과) image


12. 산술연산자를 통한 칼럼 생성

SELECT *, PRD_PRC - PAY_PRC AS LAST_PRC
FROM PRODUCT_SALES

(조회결과) image


13. 합성연산자(CONCATENATION)를 통한 칼럼 생성

  • 문자와 문자 연결 : 2개의 수직바(||)
    SELECT *, PRD_PRC - PAY_PRC || '원' AS LAST_PRC
    FROM PRODUCT_SALES
    

    (조회결과) image


14. 조건문 (WHERE)

  • 조건 : 상품번호가 P001이고 상품값이 12,500원 이하일 때
    SELECT *
    FROM PRODUCT_SALES
    WHERE PRD_NUM = 'P001' AND PRD_PRC <= 12500
    

    (조회결과) image


15. 조건문 - IN 사용(1)

  • 조건 : 상품번호가 P001이거나 P002이고 상품값이 19,500원 이하일 때
    SELECT *
    FROM PRODUCT_SALES
    WHERE PRD_NUM IN ('P001','P002') AND PRD_PRC <= 19500
    

    (조회결과) image


16. 조건문 - IN 사용(2)

  • 조건 : 상품번호가 P001이고 발생일이 20210512이거나 상품번호가 P002이고 발생일이 20210316일 때
    SELECT *
    FROM PRODUCT_SALES
    WHERE (PRD_NUM, DT) IN (('P001','20210512'),('P002','20210316'))
    

    (조회결과) image


17. 조건문 - BETWEEN 사용

  • 조건 : 상품값이 13,000원 이상이고 19,500원 이하일 때
    SELECT *
    FROM PRODUCT_SALES
    WHERE PRD_PRC BETWEEN 13000 AND 19500
    

    (조회결과) image


18. 조건문 - LIKE 사용 (%)

  • % : 0개 이상의 어떤 문자를 의미한다
  • 조건 : 상품번호가 마지막이 1로 끝날 때
    SELECT *
    FROM PRODUCT_SALES
    WHERE PRD_NUM LIKE '%1'
    

    (조회결과) image


19. 조건문 - LIKE 사용 (_)

  • _ : 1개인 단일 문자를 의미한다
  • 조건 : 발생일이 21년 3월일 때
    SELECT *
    FROM PRODUCT_SALES
    WHERE DT LIKE '202103__'
    

    (조회결과) image


20. 조건문 - LIKE 사용 (%, _)

  • 조건 : 발생일이 5월일 때
    SELECT *
    FROM PRODUCT_SALES
    WHERE DT LIKE '%05__'
    

    (조회결과) image


21. 조건문 - IS NULL / IS NOT NULL

  • -NULL값과의 수치연산은 NULL값을 리턴함
  • NULL 값과의 비교연산은 거짓(FALSE)을 리턴함
    SELECT *
    FROM PRODUCT_SALES
    WHERE PRD_NUM IS NULL
    
SELECT *
FROM PRODUCT_SALES
WHERE PRD_NUM IS NOT NULL


22. 조건문 - 부정연산자 (NOT)

  • 조건 : 상품번호가 P001가 아닐 때
    SELECT *
    FROM PRODUCT_SALES
    WHERE NOT PRD_NUM = 'P001'
    

    (조회결과) image


23. 특정 개수의 값 출력 (TOP)

  • HANA DB SQL에서는 ROWNUM이 없으므로 이를 대체할 수 있게 TOP 또는 ROW_NUMBER() 등으로 사용함
    SELECT TOP 2 *
    FROM PRODUCT_SALES
    ORDER BY DT
    

    (조회결과) image


24. 순위 부여하기 (ROW_NUMBER())

  • ROW_NUMBER() OVER(PARTITION BY 그룹 ORDER BY 순위기준)
  • 원하는 컬럼에 대해 정렬(ORDER BY)을 해서 순위를 부여하는 방법이며, 그룹별(PARTITION BY)로 순위를 따로 부여할 수 있음
  • 조건 : 상품번호에 따라 발생일 순서로 순위 부여하기
    -- sequential row num 부여
    SELECT ROW_NUMBER() OVER(PARTITION BY PRD_NUM ORDER BY DT) AS PRDNUM_SEQ, *
    FROM PRODUCT_SALES
    

    (조회결과) image






© 2020.02. by ysjang0926

Powered by theorydb