내가 보려고 정리하는 SQL - (2) SELECT, WHERE
in Programming on SQL - Study
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 -- 지불금 )
(조회결과)
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);
(조회결과)
4. SELECT문을 이용한 테이블 생성
CREATE TABLE PRODUCT_SALES1
AS (
SELECT *
FROM PRODUCT_SALES
)
5. 테이블 수정 - 변수 추가 (ALTER TABLE)
-- 변수 추가
ALTER TABLE PRODUCT_SALES1 ADD (ADDRESS VARCHAR(20))
(조회결과)
-- 기존 데이터가 있기 때문에 NULL대신에 어떤 값으로 처리할 것인지
ALTER TABLE PRODUCT_SALES1 ADD (CITY VARCHAR(20) NOT NULL DEFAULT 'SEOUL')
(조회결과)
6. 변수명 변경 (RENAME COLUMN)
RENAME COLUMN 테이블명.기존변수명 TO 변경할변수명
RENAME COLUMN PRODUCT_SALES.DATE TO DT
(조회결과)
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 -- 조건
(조회결과)
9. 일부 칼럼 설정해서 보기 (SELECT)
SELECT PRD_NUM, DT
FROM PRODUCT_SALES
(조회결과)
10. 모든 데이터 보기 (* 사용)
- 우측정렬 : 숫자 / 좌측정렬 : 문자 및 날짜
SELECT * FROM PRODUCT_SALES -- 우측정렬 : 숫자, 좌측정렬 : 문자 및 날짜
(조회결과)
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
(조회결과)
12. 산술연산자를 통한 칼럼 생성
SELECT *, PRD_PRC - PAY_PRC AS LAST_PRC
FROM PRODUCT_SALES
(조회결과)
13. 합성연산자(CONCATENATION)를 통한 칼럼 생성
- 문자와 문자 연결 : 2개의 수직바(
||
)SELECT *, PRD_PRC - PAY_PRC || '원' AS LAST_PRC FROM PRODUCT_SALES
(조회결과)
14. 조건문 (WHERE)
- 조건 : 상품번호가 P001이고 상품값이 12,500원 이하일 때
SELECT * FROM PRODUCT_SALES WHERE PRD_NUM = 'P001' AND PRD_PRC <= 12500
(조회결과)
15. 조건문 - IN 사용(1)
- 조건 : 상품번호가 P001이거나 P002이고 상품값이 19,500원 이하일 때
SELECT * FROM PRODUCT_SALES WHERE PRD_NUM IN ('P001','P002') AND PRD_PRC <= 19500
(조회결과)
16. 조건문 - IN 사용(2)
- 조건 : 상품번호가 P001이고 발생일이 20210512이거나 상품번호가 P002이고 발생일이 20210316일 때
SELECT * FROM PRODUCT_SALES WHERE (PRD_NUM, DT) IN (('P001','20210512'),('P002','20210316'))
(조회결과)
17. 조건문 - BETWEEN 사용
- 조건 : 상품값이 13,000원 이상이고 19,500원 이하일 때
SELECT * FROM PRODUCT_SALES WHERE PRD_PRC BETWEEN 13000 AND 19500
(조회결과)
18. 조건문 - LIKE 사용 (%)
%
: 0개 이상의 어떤 문자를 의미한다- 조건 : 상품번호가 마지막이 1로 끝날 때
SELECT * FROM PRODUCT_SALES WHERE PRD_NUM LIKE '%1'
(조회결과)
19. 조건문 - LIKE 사용 (_)
_
: 1개인 단일 문자를 의미한다- 조건 : 발생일이 21년 3월일 때
SELECT * FROM PRODUCT_SALES WHERE DT LIKE '202103__'
(조회결과)
20. 조건문 - LIKE 사용 (%, _)
- 조건 : 발생일이 5월일 때
SELECT * FROM PRODUCT_SALES WHERE DT LIKE '%05__'
(조회결과)
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'
(조회결과)
23. 특정 개수의 값 출력 (TOP)
- HANA DB SQL에서는
ROWNUM
이 없으므로 이를 대체할 수 있게TOP
또는ROW_NUMBER()
등으로 사용함SELECT TOP 2 * FROM PRODUCT_SALES ORDER BY DT
(조회결과)
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
(조회결과)