(사용형식)
컬럼명 IN(표현식1, 표현식2,...)
예)사원테이블에서 부서코드가 20, 60, 80번 부서에 속한 사원을 검색하시오.
(IN 연산자를 사용하지 않는 경우)
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
SALARY AS 급여
FROM EMPLOYEES
WHERE DEPARTMENT_ID=20 OR DEPARTMENT_ID=60 OR DEPARTMENT_ID=80
ORDER BY DEPARTMENT_ID ASC;
(IN 연산자를 사용하는 경우)
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
SALARY AS 급여
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(20, 60, 80)
ORDER BY 3; --SELECT 절에 나온 세번째 컬럼
(사용형식)
컬럼명 관계연산자 ANY|SOME (표현식1, 표현식2,...)
(ANY 연산자 사용)
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
SALARY AS 급여
FROM EMPLOYEES
WHERE DEPARTMENT_ID=ANY(20, 60, 80)
ORDER BY 3;
(SOME 연산자 사용)
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서코드,
SALARY AS 급여
FROM EMPLOYEES
WHERE DEPARTMENT_ID=SOME(20, 60, 80)
ORDER BY 3;
예)회원테이블에서 직업이 공무원인 회원이 가진 마일리지보다 더 많은 마일리지를 보유한 회원을 조회하시오. Alias 회원번호, 회원명, 직업, 마일리지
(직업이 공무원인 회원의 마일리지)
SELECT MEM_NAME, MEM_MILEAGE
FROM MEMBER
WHERE MEM_JOB='공무원'
ORDER BY MEM_MILEAGE DESC;
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_JOB AS 직업,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE > ANY (SELECT MAX(MEM_MILEAGE)
FROM MEMBER
WHERE MEM_JOB='공무원')
-- IN : ( )안의 절과 같은 조건일 때 출력
-- ANY : ( )안의 절에서 제일 작은값보다 클때 출력
예)사원테이블에서 부서번호가 30,50,80부서에 속하지 않은 사원을 조회하시오. Alias 사원번호, 사원명, 부서번호, 입사일
SELECT EMPLOYEE_ID AS 사원번호,
EMP_NAME AS 사원명,
DEPARTMENT_ID AS 부서번호,
HIRE_DATE AS 입사일
FROM EMP
--WHERE DEPARARTMENT_ID NOT IN(30, 50, 80) --IN
WHERE NOT DEPARTMENT_ID = ANY(30, 50, 80) --ANY
ORDER BY 3;
(사용형식)
컬럼명 ALL(표현식1, 표현식2,...)
(사용형식)
WHERE EXISTS (서브쿼리)
예)사원테이블에서 전체 사원의 평균급여보다 많은 급여를 수령하는 사원이 근무하는 부서코드를 조회하시오.
(전체 사원의 평균급여)
SELECT ROUND(AVG(SALARY))
FROM EMPLOYEES;
SELECT DISTINCT DEPARTMENT_ID --DISTINCT 중복제거
FROM EMPLOYEES
WHERE EXISTS(SELECT 1
FROM EMPLOYEES
WHERE SALARY > (SELECT ROUND(AVG(SALARY))
FROM EMPLOYEES))
ORDER BY 1;
(사용형식)
컬럼명 BETWEEN 값1 AND 값2
예)회원테이블에서 마일리지가 1000~3000사이인 회원정보를 조회하시오. Alias 회원번호, 회원명, 마일리지
(AND 연산자 사용)
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE >= 1000 AND MEM_MILEAGE <= 3000;
(BETWEEN 연산자 사용)
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_MILEAGE AS 마일리지
FROM MEMBER
WHERE MEM_MILEAGE BETWEEN 1000 AND 3000;
예)회원테이블에서 회원번호, 회원명, 주민번호를 조회하시오. 단, 주민번호는 'xxxxxx-xxxxxxx' 형식으로 출력하시오.
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
MEM_REGNO1 || '-' || MEM_REGNO2 AS 주민번호
FROM MEMBER;
(사용형식)
CONCAT(C1, C2)
예)회원테이블에서 회원번호, 회원명, 주민번호를 조회하시오. 단, 주민번호는 'XXXXXX-XXXXXXX' 형식으로 출시하되, CONCAT 함수 사용
SELECT MEM_ID AS 회원번호,
MEM_NAME AS 회원명,
CONCAT(CONCAT(MEM_REGNO1, '-'), MEM_REGNO2) AS 주민번호
FROM MEMBER; --위의 결과와 동일
(사용형식)
INITCAP(C1)
SELECT EMP_NAME FROM EMPLOYEES;
SLECT INITCAP(EMP_NAME) FROM EMPLOYEES;
(사용형식)
UPPER(col), LOWER(col)
(사용형식)
ASCII(col), CHR(col)
(사용형식)
LPAD(c, n [,pattern])
RPAD(c, n [,pattern])
예)매입테이블에서 2005년 2월 매입현황을 조회하시오. 단, 매입단가는 9자리에 출력하되 남은 왼쪽공간에 '*'을 삽입하여 출력하시오. Alias 날짜, 매입상품코드, 수량, 단가
SELECT BUY_DATE AS 날짜,
BUY_PROD AS 매입상품코드,
RPAD(BUY_QTY,5) AS 수량, --뒤에 패턴이 공백이고 싶으면 생략하면 된다.
LPAD(BUY_COST,9,'*') AS 단가
FROM BUYPROD
WHERE BUY_DATE BETWEEN '20050201' AND '20050228';
(사용형식)
LTRIM(c1 [,c2]), RTRIM(c1 [,c2]), TRIM(c1)
-c2가 생략되면 공백을 삭제
예)상품테이블에서 '대우'로 시작하는 상품명중 '대우'를 삭제하고 출력하시오. Alias 상품코드, 상품명, 분류코드, 거래처코드
SELECT PROD_ID AS 상품코드,
PROD_NAME AS 상품명1,
LTRIM(PROD_NAME,'대우 ') AS 상품명2,
PROD_LGU AS 분류코드,
PROD_BUYER AS 거래처코드
FROM PROD
WHERE PROD_NAME LIKE '대우%';
SELECT SUBSTR('IL POSTINO', 3, 4),
SUBSTR('IL POSTINO', 3),
SUBSTR('IL POSTINO', -3, 4)
FROM DUAL;
예)상품테이블에서 상품명 중 '대우'를 찾아 'Apple'로 변경하시오.
SELECT PROD_ID,
PROD_NAME,
REPLACE(PROD_NAME, '대우','Apple')
FROM PROD
WHERE PROD_NAME LIKE '%대우%';