STUDY/ORACLE

Oracle 2일차(1)-SELECT, 연산자

Anne of Green Galbes 2019. 1. 16. 17:57

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;