2)ANY(SOME)연산자
**모르는 자료를 가지고 비교할 때, 확정되지 않은 값을 가지고 비교할 때 서브쿼리 사용
사용예) 회원테이블에서 모든 남성회원들보다 마일리지가 많은 여성회원을 조회하시오
(서브쿼리 : 모든 남성회원들의 마일리지)
SELECT MEM_MILEAGE
FROM MEMBER
WHERE SUBSTR(MEM_REGNO2,1,1) IN('1','3');
--SUBSTR(컬럼명,숫자1,숫자2) : 컬럼의 '숫자1'의 자리부터 시작해서 '숫자2'개 만큼의 문자열 추출
(메인쿼리 : 서브쿼리 결과보다 많은 마일리지를 보유한 여성회원의 정보)
-- 조건 : 여성, 서브쿼리 결과보다 많은 마일리지
SELECT MEM_ID AS 회원번호
MEM_NAME AS 회원명
MEM_REGNO1||'-'||MEM_REGNO2 AS 주민번호
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE SUBSTR(MEM_REGNO2,1,1) IN('2','4')
AND MEM_MILEAGE > ALL(SELECT MEM_MILEAGE
FROM MEMBER
WHERE SUBSTR(MEM_REGNO2,1,1) IN('1','3'));
--ANY일 때는 남성회원의 마일리지 중에 가장 작은 사람보다는 큰 값,
ALL을 쓸 때는 모든 남성회원들 중 가장 큰 수 보다 큰 값을 구함.
사용예)사원테이블에서 10,90,110번 부서에 속한 사원번호,사원명,급여를 출력하시오
(OR 연산자)
SELECT EMPLOYEE_ID AS 사원번호,
FIRST_NAME||' '||LAST_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
SALARY AS 급여
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID = 10
OR DEPARTMENT_ID = 90
OR DEPARTMENT_ID = 110
(IN 연산자)
SELECT EMPLOYEE_ID AS 사원번호,
FIRST_NAME||' '||LAST_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
SALARY AS 급여
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID IN(10,90,110);
(ANY,SOME 연산자)
SELECT EMPLOYEE_ID AS 사원번호,
FIRST_NAME||' '||LAST_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
SALARY AS 급여
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID =ANY(10,90,110);
--WHERE DEPARTMENT_ID =SOME(10,90,110);
3)ALL 연산자
사용예)회원테이블에서 거주지가 '충남'인 모든 회원들의 마일리지보다 더 많은 마일리지를 보유하고 있는 회원번호, 회원명, 거주지, 마일리지를 조회
거주지는 광역시도임
(서브쿼리 : 거주지가 '충남'인 모든 회원들의 마일리지)
SELECT MEM_MILEAGE
FROM MEMBER
WHERE SUBSTR(MEM_ADD1,1,2) = '충남';
(서브쿼리의 결과보다 많은 마일리지 보유회원정보 조회)
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
SUBSTR(MEM_ADD1,1,2) AS 거주지,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE >ALL(SELECT MEM_MILEAGE
FROM MEMBER
WHERE SUBSTR(MEM_ADD1,1,2)= '충남');
4)LIKE 연산자
사용예) 회원테이블에서 서울에 살고 있는 회원의 회원번호, 회원명, 주소, 핸드폰번호를 조회하시오
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_ADD1||' '||MEM_ADD2 AS 주소,
MEM_HP AS 핸드폰번호
FROM MEMBER
WHERE MEM_ADD1 LIKE '서울%';
사용예)장바구니테이블에서(CART) 2005년 4월 판매정보를 조회하시오
Alias는 구매회원 번호, 상품번호, 구매수량이다.
SELECT CART_MEMBER AS "구매회원 번호",
CART_PROD AS 상품번호,
CART_QTY AS 구매수량
FROM CART
WHERE CART_NO LIKE '200504%';
-- CART_NO에서 날짜 추출해야함. / 회원별로 상품수량, 상품금액을 곱하면 총 회원 구매금액나옴.
사용예)상품테이블에서 '컴퓨터제품'(분류코드 'P101')에 속한 제품정보를
상품코드를 이용하여 조회하시오.
Alias는 상품코드,상품명,거래처코드,매입가격
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명,
PROD_BUYER AS 거래처코드,
PROD_COST AS 매입가격
FROM PROD
WHERE PROD_ID LIKE 'P101%'; --기본키의 특징 : 글자의 길이가 같다
5)BETWEEN 연산자
사용예) 사원테이블에서 30-70번 부서에 속한 사원정보를 조회하시오
Alias는 사원번호,사원명,부서번호,직무코드이며
부서코드 순으로 출력하시오
(AND 연산자 사용)
SELECT EMPLOYEE_ID AS 사원번호,
FIRST_NAME||' '||LAST_NAME AS 사원명,
DEPARTMENT_ID AS 부서번호,
JOB_ID AS 직무코드
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID >=30 AND DEPARTMENT_ID<=70
ORDER BY 3;
(IN 연산자 사용)
SELECT EMPLOYEE_ID AS 사원번호,
FIRST_NAME||' '||LAST_NAME AS 사원명,
DEPARTMENT_ID AS 부서번호,
JOB_ID AS 직무코드
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID IN(30,40,50,60,70)
ORDER BY 3;
(=SOME, =ANY 연산자 사용)
SELECT EMPLOYEE_ID AS 사원번호,
FIRST_NAME||' '||LAST_NAME AS 사원명,
DEPARTMENT_ID AS 부서번호,
JOB_ID AS 직무코드
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID =ANY(30,40,50,60,70)
ORDER BY 3;
(BETWEEN 연산자 사용)
SELECT EMPLOYEE_ID AS 사원번호,
FIRST_NAME||' '||LAST_NAME AS 사원명,
DEPARTMENT_ID AS 부서번호,
JOB_ID AS 직무코드
FROM HR.EMPLOYEES
WHERE DEPARTMENT_ID BETWEEN 30 AND 70
ORDER BY 3;
사용예)2005년 1월-2월 매입정보를 조회하시오.
Alias는 날짜,매입상품,매입수량,매입금액이며 날짜순으로 출력하시오.
SELECT BUY_DATE AS 날짜,
BUY_PROD AS 매입상품,
BUY_QTY AS 매입수량,
BUY_COST AS 매입금액
FROM BUYPROD
WHERE BUY_DATE BETWEEN TO_DATE('20050101') AND LAST_DAY(TO_DATE('20050204'))
ORDER BY 1;
--날짜 타입이 없어서 8자리의 문자열로 날짜타입을 표현할 수 있는 함수를 써줌
사용예)회원테이블에서 회원명과 주민번호를 출력하시오
단 주민번호는 'XXXXXX-XXXXXXX'형식으로 출력하며 CONCAT함수를 사용
SELECT MEM_NAME AS 회원명,
CONCAT(CONCAT(MEM_REGNO1,'-'),MEM_REGNO2) AS 주민번호
FROM MEMBER;
함수(매개변수,매개변수) - 매개변수(Argument/Parameter) : 함수가 실행되기 위해 필요한 데이터의 통로
C: 문자
N: 숫자
D: DATE