(사용형식)
expr IN 값(값1[,값2,....])
Alias는 사원번호, 사원명, 입사일, 급여
-- 연속적인 범위는 AND, BETWEEN으로 표현 가능
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
HIRE_DATE AS 입사일,
SALARY AS 급여
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID>=10 AND DEPARTMENT_ID<=40;
마지막 WHERE절은 BETWEEN으로도 표현 가능하다
WHERE DEPARTMENT_ID BETWEEN 10 AND 40;
Alias는 사원번호, 사원명, 입사일, 급여
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
HIRE_DATE AS 입사일,
SALARY AS 급여
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID IN (20,70,80,100)
ORDER BY 3;
WHERE절 SOME으로 대체 가능
WHERE DEPARTMENT_ID = SOME (20,70,80,100)
(사용형식)
expr 관계연산자 ANY|SOME(값1[,값2,...])
Alias는 회원번호, 회원명, 직업, 마일리지
-- (주부회원들의 마일리지 조회)
SELECT MEM_MILEAGE
FROM MEMBER
WHERE MEM_JOB='주부';
--주부들의 마일리지를 이미 알고있을때 쓰는 방법
SELECT MEM_ID AS 회원번호
MEM_NAME AS 직업명
MEM_JOB AS 직업,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE > ANY (800,1000,2700,8700);
--마일리지 모를땐? 서브쿼리
WHERE MEM_MILEAGE > ANY (SELECT MEM_MILEAGE
FROM MEMBER
WHERE MEM_JOB='주부'
Alias는 회원번호, 회원명,직업,마일리지
(직업이 학생인 회원들의 마일리지)
SELECT MEM_MILEAGE
FROM MEMBER
WHERE MEM_JOB='학생';
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_JOB AS 직업,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE > ALL (700,2200,2700)
ORDER BY 4;
(사용형식)
expr BETWEEN 값1 AND 값2
Alias는 일자, 상품코드, 수량, 단가, 금액이다
SELECT BUY_DATE AS 일자,
BUY_PROD AS 상품코드,
BUY_QTY AS 수량,
BUY_COST AS 단가,
BUY_QTY*BUY_COST AS 금액
FROM BUYPROD
WHERE BUY_DATE >= TO_DATE('20050201') AND BUY_DATE<=LAST_DAY(TO_DATE('20050201'));
TO_DATE() : 날짜형으로 변환시켜주는 함수
LAST_DAY() : 달의 마지막 날짜를 구해준다.
WHERE절의 AND연산자는 BETWEEN으로 표현 가능하다.
WHERE BUY_DATE BETWEEN TO_DATE('20050201') AND LAST_DAY(TO_DATE('20050201'));
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
CASE WHEN SUBSTR (MEM_REGNO2,1,1) = '1' OR
SUBSTR (MEM_REGNO2,1,1) = '2' THEN
EXTRACT(YEAR FROM SYSDATE)-(TO_NUMBER(SUBSTR(MEM_REGNO1,1,2))+1900)
ELSE
EXTRACT(YEAR FROM SYSDATE)-(TO_NUMBER(SUBSTR(MEM_REGNO1,1,2))+2000)
END AS 나이,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE SUBSTR(MEM_NAME,1,1) BETWEEN '김' AND '박'
ORDER BY 4;
ALTER는 구조를 바꾸는것, 우리는 내용을 바꿀거니까 UPDATE문 사용 ( 모든 상품의 마일리지를 바꾸므로 WHERE절 필요 X)
UPDATE PROD
SET PROD_MILEAGE = TRUNC(PROD_PRICE*00002,-1);
TRUNC 함수는 주로 소수점 절사 및 날짜의 시간을 없앨 때 사용한다.
Alias는 상품코드,상품명,판매가,마일리지
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명,
PROD_PRICE AS 판매가,
PROD_MILEAGE AS 마일리지
FROM PROD
WHERE PROD_PRICE BETWEEN 200000 AND 299999;
(사용형식)
expr LIKE 패턴문자열
(1) ‘%’
(2) ‘_’
[CART 테이블]
2 = 8바이트는 상품정보, 5바이트는 고객정보( = 5자리만 가능 하므로 하루 99,999명 수용 ㄱㄴ)
3 = 외래키
수량은 있는데 중요한 상품단가가 없다. >> Join연산 필요!
Alias는 일자, 상품코드, 판매수량
SELECT TO_DATE(SUBSTR(CART_NO,1,8)) AS 일자,
--앞자리부터 8글자라는 뜻
CART_PROD AS 상품코드,
CART_QTY AS 판매수량
FROM CART
WHERE CART_NO LIKE '200507%'; --상품코드 앞부분이 바로 날짜!
🚨 EX) 매입테이블에서 2005년 7월 매입현황을 조회하시오 >> 형식이 날짜니까 LIKE 불가능
Alias는 회원번호, 회원명, 주소, 마일리지
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_ADD1||''||MEM_ADD2 AS 주소,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_ADD1 LIKE '충남%';
Alias는 상품코드, 상품명, 거래처코드, 매입가격
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명,
PROD_BUYER AS 거래처코드,
PROD_COST AS 매입가격
FROM PROD
WHERE PROD_NAME LIKE '%삼성%';
부서번호 80번부서의 평균급여보다 더 많은 급여를 받는 사원들을 조회하시오
Alias는 사원번호, 사원명, 부서번호, 급여
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서번호,
SALARY AS 급여
FROM HR.EMPLOYEES
WHERE SALARY >=(SELECT AVG(SALARY)
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID=80)
SELECT A. EMPLOYEE_ID AS 사원번호,
A.EMP_NAME AS 사원명,
A.DEPARTMENT_ID AS 부서번호,
A.SALARY AS 급여
FROM HR.EMPLOYEES A
WHERE EXISTS ( SELECT 1
FROM (SELECT AVG(B.SALARY) AS ASL
FROM HR.EMPLOYEES B
WHERE B.DEPARTMENT_ID = 80) C
WHERE C.ASL<A.SALARY
)