개발/Database

[ORACLE SQL] select 문을 이용한 연습

Dane.Kim 2021. 8. 22.
alter session set nls_Date_format='RR/MM/DD';



CREATE TABLE DEPT
       (DEPTNO number(10),
        DNAME VARCHAR2(14),
        LOC VARCHAR2(13) );



INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');


CREATE TABLE EMP (
 EMPNO               NUMBER(4) NOT NULL,
 ENAME               VARCHAR2(10),
 JOB                 VARCHAR2(9),
 MGR                 NUMBER(4) ,
 HIREDATE            DATE,
 SAL                 NUMBER(7,2),
 COMM                NUMBER(7,2),
 DEPTNO              NUMBER(2) );



INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,'81-11-17',5000,NULL,10);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,'81-05-01',2850,NULL,30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,'81-05-09',2450,NULL,10);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,'81-04-01',2975,NULL,20);
INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,'81-09-10',1250,1400,30);
INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,'81-02-11',1600,300,30);
INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,'81-08-21',1500,0,30);
INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,'81-12-11',950,NULL,30);
INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,'81-02-23',1250,500,30);
INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,'81-12-11',3000,NULL,20);
INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,'80-12-09',800,NULL,20);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,'82-12-22',3000,NULL,20);
INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,'83-01-15',1100,NULL,20);
INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,'82-01-11',1300,NULL,10);



commit;
/*여기까지 dept와 emp 테이블 작성과정*/

select * from emp;

select deptno as 부서번호, ename as 사원명 from emp;
/* 별칭으로 검색 */

select ename, comm from emp where job = 'SALESMAN';
/*직업이 SALESMAN인 사원의 이름과 커미션 검색*/

select ename, sal, sal*12, sal*12+comm from emp;

select empno, ename, deptno from emp where deptno=10;
/*where 절로 deptno=10인 칼럼 검색 숫자일때는 작은 따옴표 x*/

select empno, ename, deptno from emp where job='president';
/*아무것도 출력되지 않는데, 이것은 대소문자를 구별하기 때문*/

select empno, ename, hiredate from emp where hiredate >= '1982/01/01';
/*날짜 리터럴 사용법*/

select empno, ename, job from emp where job in ('SALESMAN', 'PRESIDENT');
/*한가지 컬럼에서 여러 정보를 검색할 때는 괄호 사용
만약 조건에 부합하지 않는 정보만 검색하려면 not in 사용*/

select empno, ename, hiredate, sal from emp where ename like 'J%';
/*J로 시작하는 사원의 정보 검색방법 마찬가지로 %J이면 J로 끝나는 정보 검색
_J% 을 사용 시 두번째 글자가 J인 정보 검색
%J% 을 사용 시 J를 포함하는 정보 검색 */

select empno, ename, hiredate from emp where lower(ename) ='ford';
/* emp테이블에서 영문자인 값을 소문자로 변환하여 검색 
반대로 upper 사용 시 대문자로 변환*/

select deptno, initcap(dname), initcap(loc) from dept where deptno = 10;
/*첫번째 문자를 대문자로 나머지 문자는 소문자로 변환하여 검색*/

select deptno, dname, concat(deptno, dname) as d_noname from dept where deptno = 10;
/*특정 컬럼을 특정 값과 연결하는 concat*/

select substr(ename, 1, 2) from emp;
/* 첫번째 글자에서 시작해서 두번째 글자까지만 검색 */

select deptno, dname, instr(dname, ’G') from dept where deptno = 10;
/* 명명된 문자 G의 위치를 구하는 instr */

select deptno, dname, loc from dept where instr(loc,'DAL')>0;
/* 특정 문자열을 가진 열을 검색 */

select deptno, dname, loc from dept where instr(loc,'DAL')<1;
/* 특정 문자열을 가진 열을 제외하고 검색 */

select deptno, dname, lpad(dname, 15, '*') from dept where deptno = 10;
/* 15자까지 제한을 두고, 왼쪽 문자 자리를 *로 채운다.
반대로 rpad 사용시 오른쪽 문자 자리를 채운다. */

select deptno, dname, trim(leading ' ' from dname) from dept where deptno = 10;
/* 왼쪽 공백 문자를 지운다. */

select deptno, dname, translate(dname, 'NG', 'SO' ) from dept where deptno = 10;
/* 특정 문자열 대체 translate, replace도 사용 가능 */

/* 여기까지 select 문 */

왜 아래쪽이 다 주석으로 표시되는건진 모르겠다.

 

아무튼 table 생성부터 select 문의 다양한 기능들을 모아보았다.

댓글