Oracle 2일차(1)-SELECT, 연산자
1.QUERY(DATA 검색어)
○SELECT
2.DML(DATA MANIPULATION LANGUAGE : 데이터 조작어)
○INSERT
○UPDATE
○DELETE
3.DDL(데이터 정의어)
○CREATE
○ALTER
○DROP
○RENAME
4.TCL(트랜젝션 정의어)
○COMMIT(DML 저장)
○ROLLBACK(DB취소)
○SAVEPOINT
5.DCL(권한 정의)
○GRANT(~TO)
○REVOKE(~FROM)
1.SELECT
SELECT 컬럼명 FROM 테이블명
SELECT * FROM PERSONNEL;
SELECT PNO,PNAME,PAY,JOB FROM PERSONNEL;
▶중복제거
SELECT JOB FROM PERSONNEL;
SELECT DISTINCT JOB FROM PERSONNEL;
▶정렬
ASC : 오름차순
SELECT * FROM PERSONNEL
ORDER BY PAY ASC;
ASC는 생략가능
SELECT * FROM PERSONNEL
ORDER BY PNAME;
DESC : 내림차순
SELECT * FROM PERSONNEL
ORDER BY PAY DESC;
칼럼번호로 정렬 가능
SELECT PNO,PNAME,PAY,PAY+1000 FROM PERSONNEL
ORDER BY 4;
NULL값은 제일 큰 값으로 인식
SELECT MANAGER FROM PERSONNEL
ORDER BY MANAGER ASC;
사원번호가 높은 순으로 정렬
SELECT * FROM PERSONNEL
ORDER BY PNO;
▶별칭
파생열
SELECT PNO,PNAME,PAY,PAY+1000 AS 보너스 FROM PERSONNEL;
SELECT PNO,PNAME,PAY,PAY+1000 보너스 FROM PERSONNEL;
→ AS는 생략이 가능
SELECT PNO,PNAME,PAY,PAY+1000 AS "보 너 스" FROM PERSONNEL;
→띄어쓰기는 " "안에
파생 컬럼으로 정렬
SELECT PNO,PNAME,PAY,PAY+1000 AS 보너스 FROM PERSONNEL
ORDER BY 보너스;
ORDER BY만 별칭가능. 나머지는 공식을 사용
SELECT PNO,PNAME,PAY,PAY+1000 AS 보너스 FROM PERSONNEL
ORDER BY PAY+1000;
사원의 급여와 일년치 연봉을 구하시오.
SELECT PNO,PNAME,JOB,PAY,PAY*12 AS 연봉 FROM PERSONNEL;
연산가능
SELECT PAY,PAY-500 FROM PERSONNEL;
SELECT PAY,PAY*5 FROM PERSONNEL;
SELECT PAY,PAY/5 FROM PERSONNEL;
2.연산자
▶연결 연산자 : ||
SELECT PNAME || '' || PNO AS PNAME_PO FROM PERSONNEL;
NVL(컬럼명,조건1,조건2) : 컬럼값이 있으면 조건1 출력, 없으면 조건2
SELECT PNO,PNAME,PAY,BONUS, NVL(BONUS*1.1,0) AS 인상분 FROM PERSONNEL;
▶WHERE 컬럼명=값 : 행제한(조건식)
SELECT * FROM PERSONNEL
WHERE JOB='SALESMAN';
▶연산자
=, >, <, <=, >=, <>(같지않다)
급여가 1600인 사원
SELECT * FROM PERSONNEL
WHERE PAY=1600;
사번이 1116인 사원
SELECT * FROM PERSONNEL
WHERE PNO=1116;
급여가 2000아래인 사원
SELECT * FROM PERSONNEL
WHERE PAY<=2000;
90년 12월 17일에 입사한 사원
SELECT * FROM PERSONNEL
WHERE STARTDATE='1990-12-17'; ▶DATE타입은 문자
이름이 JAMES인 사원
SELECT * FROM PERSONNEL
WHERE PNAME='JAMES';
▶논리연산자
AND
부서번호가 10번이고 급여가 3000이상인 사원
SELECT * FROM PERSONNEL
WHERE DNO=10 AND PAY>=3000;
직업이 SALESMAN이고 90년 이후에 입사한 직원
SELECT * FROM PERSONNEL
WHERE JOB='SALESMAN' AND STARTDATE>='1991-01-01';
91년 9월에 입사한 직원
SELECT * FROM PERSONNEL
WHERE STARTDATE>='1991-09-01' AND STARTDATE<='1991-09-30';
OR
부서번호가 10번이거나 급여가 3000이상인 직원
SELECT * FROM PERSONNEL
WHERE DNO=10 OR PAY>=3000;
직업이 SALESMAN이거나 90년 이후에 입사한 직원
SELECT * FROM PERSONNEL
WHERE JOB='SALESMAN' OR STARTDATE>='1991-01-01';
업무가 SALESMAN,CLERK인 사원
SELECT * FROM PERSONNEL
WHERE JOB='SALESMAN' OR JOB='CLERK';
SELECT * FROM PERSONNEL
WHERE JOB IN ('SALESMAN','CLERK'); ▶WHERE 컬럼 IN(조건1,조건2…)
NOT
업무가 SALESMAN,CLERK이 아닌 사원
SELECT * FROM PERSONNEL
WHERE JOB<>'SALESMAN' AND JOB<>'CLERK';
SELECT * FROM PERSONNEL
WHERE NOT JOB IN('SALESMAN','CLERK');
SELECT * FROM PERSONNEL
WHERE JOB NOT IN('SALESMAN','CLERK');
▶문자열 연산자
BETWEEN A AND B → A:작은값 B:큰값
급여가 1000에서 2000사이인 사원
SELECT * FROM PERSONNEL
WHERE PAY BETWEEN 1000 AND 2000;
91년 9월에 입사한 사원
SELECT * FROM PERSONNEL
WHERE STARTDATE BETWEEN '1991-09-01' AND '1991-09-30';
부서번호가 20과 30사이인 사원
SELECT * FROM PERSONNEL
WHERE DNO BETWEEN 20 AND 30;
91년 9월에 입사하지 않은 사원
SELECT * FROM PERSONNEL
WHERE STARTDATE NOT BETWEEN '1991-09-01' AND '1991-09-30';
LIKE
이름이 A로 시작되는 사원
% : 자릿수 제한X
SELECT * FROM PERSONNEL
WHERE PNAME LIKE 'A%';
사원번호가 111_인 사원
_ : 자릿수 제한O
SELECT * FROM PERSONNEL
WHERE PNO LIKE '111_';
91년 9월에 입사한 직원
SELECT * FROM PERSONNEL
WHERE STARTDATE LIKE '1991-09-%';
PNO가 11로 시작되고 다음에 2가오면 안됨
SELECT * FROM PERSONNEL
WHERE REGEXP_LIKE(PNO,'11[^2]'); ▶REGEXP_LIKE : 정규식 사용
PNO가 1로 시작되고 다음에 1또는 2가오면 됨
SELECT * FROM PERSONNEL
WHERE REGEXP_LIKE(PNO,'1[1,2]');
이메일에서 아이디 추출
SELECT REGEXP_SUBSTR('SUZI@NAVER.COM','[^@]+') 아이디 FROM DUAL;
DUAL : 테스트해보고 싶을때 사용
SELECT * FROM DUAL;
SELECT 123+123 FROM DUAL;