/*
Function(함수)
* 특정 기능을 실행하는 코드 집합
* Java에서는 Method라고 부름
* 단일행 함수, 집계함수, 분석함수로 구분
*/
-- ### > 단일행 함수
-- * 결과집합의 행마다 연산하는 함수
SELECT MEMBER_ID, UPPER(MEMBER_ID) AS 대문자 FROM MEMBER;
SELECT MEMBER_ID, LOWER(MEMBER_ID) AS 대문자 FROM MEMBER;
SELECT * FROM MEMBER WHERE INSTR(LOWER(MEMBER_ID), LOWER('kh')) > 0;
-- ### > 집계 함수
-- * 데이터를 종합하여 하나의 결과를 만드는 함수(합계, 평균, 개수, 최대, 최소)
-- * (주의) 일반적인 항목과 같이 출력할 수 없다.
SELECT PRICE FROM PRODUCT;
SELECT SUM(PRICE) FROM PRODUCT;
-- SELECT NAME, SUM(PRICE) AS 합계 FROM PRODUCT; -- 개수가 맞지 않아 조회 불가
SELECT AVG(PRICE) AS 평균 FROM PRODUCT;
SELECT MAX(PRICE) AS 최대 FROM PRODUCT;
SELECT MIN(PRICE) AS 최소 FROM PRODUCT;
SELECT COUNT(PRICE) AS 개수 FROM PRODUCT; -- 가격이 몇개 있는가?(null 제외)
SELECT COUNT(*) AS 개수 FROM PRODUCT; -- 데이터가 몇 개 있는가?(null 포함)
SELECT SUM(PRICE) AS 합계, AVG(PRICE) AS 평균 FROM PRODUCT;
-- (Q) 가장 비싼 상품의 이름을 출력(PRODUCT)
SELECT MAX(PRICE) AS 최대가격 FROM PRODUCT;
SELECT NAME FROM PRODUCT WHERE PRICE = 3000;
/*
SUBQUERY 사용
*/
-- #### SUB QUERY
-- * 구문을 중첩시켜 순차적으로 실행
SELECT NAME FROM PRODUCT WHERE PRICE = (SELECT MAX(PRICE) FROM PRODUCT);
-- (Q) 가장 최근에 만든 상품 정보
-- 1. 가장 마지막 시간을 구하고 그와 같은 상품을 조회
SELECT * FROM PRODUCT WHERE MADE = (SELECT MAX(MADE) FROM PRODUCT);
-- 2. 상품을 최신순으로 정렬하고 첫 번째 조회
-- 결과의 순서에 해당하는 항목을 알아야 함
-- #### ROWNUM
SELECT PRODUCT.*, ROWNUM FROM PRODUCT;
SELECT PRODUCT.*, ROWNUM FROM PRODUCT ORDER BY MADE DESC;
SELECT TMP.*, ROWNUM FROM (
SELECT PRODUCT.* FROM PRODUCT ORDER BY MADE DESC
) TMP WHERE ROWNUM = 1;
-- ORDER 한 다음, ROWNUM을 붙이고 ROWNUM을 지정해 SELECT
SELECT TMP.*, ROWNUM FROM (
SELECT PRODUCT.* FROM PRODUCT ORDER BY MADE DESC
) TMP WHERE ROWNUM BETWEEN 1 AND 3;
-- (Q) 가장 먼저 가입한 회원 정보
-- 1. 집계함수 사용
SELECT * FROM MEMBER WHERE MEMBER_JOIN = (SELECT MAX(MEMBER_JOIN) FROM MEMBER);
-- 2. ROWNUM 사용
SELECT TMP.* FROM (SELECT MEMBER.* FROM MEMBER ORDER BY MEMBER_JOIN DESC) TMP
WHERE ROWNUM = 1;
-- #### PAGING
-- * ROWNUM 활용
SELECT TMP.* FROM (SELECT MEMBER.* FROM MEMBER ORDER BY MEMBER_JOIN DESC) TMP
WHERE ROWNUM BETWEEN 1 AND 10;
SELECT TMP.* FROM (SELECT MEMBER.* FROM MEMBER ORDER BY MEMBER_JOIN DESC) TMP
WHERE ROWNUM BETWEEN 2 AND 10;
-- #### TOP END QUERY
-- * ROWNUM은 반드시 1부터 부여된다.
ALTER TABLE MEMBER DROP CONSTRAINT CONSTRAINT_NAME