[ORACLE] SQL DEVELOPER 1일차 - SELECT문,DISTINCT,WHERE,연산자,ORDER BY

SQL DEVELOPER

SQL DEVELOPER 워크시트 설명문 처리

--워크시트에서 작성된 SQL 명령을 실행하는 방법 [CTRL]+[ENTER] / [F5]
--[CTRL]+[ENTER] : 커서 위치의 SQL 명령을 전달하여 실행 - [F9]
--[F5] : 워크시트에 작성된 모든 SQL 명령을 전달하여 실행
--SQL 명령의 실행 결과는 [스크립트 출력] 탭 또는 [질의 결과] 탭에 출력

SQL문 작성지침

  • SQL 문장은 대소문자를 구별하지 않는다.
  • 일반적으로 키워드는 대문자로 작성한다.
  • SQL 문장은 여러 줄에 걸쳐 작성 가능하다.
  • 키워드(SELECT, FROM 등)는 줄여 사용할 수 없고, 여러줄에 걸쳐 작성할 수 없다.
  • 모든 SQL 문장의 끝은 세미콜론(;)으로 끝난다.

테이블(TABLE)

데이터베이스에서 데이터(행)을 저장하기 위한 기본 객체

--계정이 소유한 테이블 목록 보기
SELECT * FROM TAB;
--테이블 이름만 보기
SELECT TABLE_NAME FROM TABS;
질의 결과


테이블의 구조 확인 : 테이블 속성 정보 - 컬럼명과 자료형

형식)DESC 테이블명
--EMP 테이블 : 사원 정보를 저장하기 위한 테이블 
DESC EMP;
--특정 테이블의 컬럼 구조 보기 
--DEPT 테이블 : 부서 정보를 저장하기 위한 테이블 
DESC DEPT;

SELECT문

SELECT문

  • = DQL(데이터 질의어, Data Query Language)

    데이터베이스로부터 데이터를 검색하는 기능을 갖는다.
    기본 문법 :
    형식) SELECT 검색대상, 검색대상,... FROM 테이블명, 테이블명,...;
    => SELECT [DISTINCT] {*,column [alias],...}
    FROM table;

테이블에 저장된 모든 행을 검색한다. 
검색대상 : *(모든 컬럼) 

- 다른 검색대상과 동시 사용 불가능, 컬럼명, 연산식, 함수 등
SELECT * FROM EMP;
--테이블 내 특정 컬럼 데이터보기 
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP;
질의 결과

--전체 출력

--EMPNO, ENAME,SAL,DEPTNO 출력 

COLUMN ALIAS : 검색대상에 별칭을 부여하는 기능

검색대상을 명확하게 구분하여 표현하기 위한 별칭
형식) SELECT 검색대상 [AS] 별칭,검색대상 [AS] 별칭,... FROM 테이블명,테이블명,...;

SELECT EMPNO AS NO,ENAME AS NAME,DEPTNO AS DNO FROM EMP;
--EMPNO-> NO로, ENAME->NAME, DEPTNO->DNO 붙여준 별칭으로 출력된다. 

--AS 키워드는 생략이 가능하다.
SELECT EMPNO NO,ENAME NAME,DEPTNO DNO FROM EMP;
--별칭명은 한글로도 적을 수 있다. 
--식별자(테이블명,컬럼명,별칭 등)은 스네이크 표기법(단어와 단어를 _로 구분하여 표현) 사용
--컬럼 별칭으로 공백문자 또는 특수문자 사용 불가능

--컬럼 별칭을 " " 기호 안에 표현하면 모든 형태의 별칭 사용 가능 - " " 기호는 별칭을 표현하기 위한 기호
SELECT EMPNO "사원 번호",ENAME "사원 이름",SAL*12 "연봉^^" FROM EMP;

산술연산 이용한 SQL문

--SQL문장 내 숫자 및 날짜 타입에는 +,-,*,/ 사용가능
--연산식이 컬럼명으로 표시된다.
SELECT EMPNO,ENAME,SAL*1.1 FROM EMP;

NULL의 정의 및 처리


기호 사용(연결 연산자 ||, 리터럴 '')

--|| 기호를 이용하여 값을 결합하여 표현 가능
SELECT ENAME||JOB FROM EMP;

질의 결과

--오라클에서는 문자값을 ' ' 기호를 이용하여 표현
SELECT ENAME||'님의 업무는 '||JOB||'입니다.' FROM EMP;

질의 결과

중복 컬럼값과 중복되지 않는 컬럼값(DISTINCT) 검색

--EMP 테이블에 저장된 모든 사원의 업무 검색 - 중복 컬럼값 검색
SELECT JOB FROM EMP;
--DISTINCT : 검색대상의 중복값을 제외하고 유일한 하나의 결과값만 검색하는 기능을 제공하는 키워드
--DISTINCT 키워드 뒤에 검색대상을 여러개 나열하여 검색 가능
SELECT DISTINCT JOB,DEPTNO FROM EMP; 

--EMP 테이블에 저장된 모든 사원의 업무 검색 - 중복 컬럼값 제외 검색
  > 형식)SELECT DISTINCT 검색대상[,검색대상,...] FROM 테이블명
SELECT DISTINCT JOB FROM EMP;
질의 결과
--중복 컬럼값 포함 검색

--중복 컬럼값 제외 검색

WHERE

WHERE

테이블 내 모든 행을 검색하는 대신 조건식을 사용하여 조건이 참인 행만 검색하는 기능을 제공
형식)SELECT 검색대상,검색대상,... FROM 테이블명,테이블명,... WHERE 조건식

--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP;

--EMP 테이블에서 사원번호가 [7698]인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE EMPNO=7698;

--EMP 테이블에서 사원이름이 [KING]인 사원의 사원번호,사원이름,업무,급여 검색
--문자값은 대소문자를 구분하여 비교, 
--ENAME이 KING이기 때문에 king(소문자)로는 검색되지 않는다. 
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME='KING';

질의 결과
--모든 사원의 사원번호,사원이름,업무,급여 검색

WHERE 활용

  • 특정 조건 검색하기
--EMP 테이블에서 입사일이 [1981년 6월 9일]인 사원의 사원번호,사원이름,업무,급여,입사일 검색

--날짜값은 ' ' 기호 안에 [RR/MM/DD]형식의 패턴으로 표현
SELECT EMPNO,ENAME,JOB,SAL,HIREDATE FROM EMP WHERE HIREDATE='81/06/09';

--날짜값은 ' ' 기호 안에 [YYYY-MM-DD]형식의 패턴으로 표현
SELECT EMPNO,ENAME,JOB,SAL,HIREDATE FROM EMP WHERE HIREDATE='1981-06-09';

질의 결과값



  • 비교연산자

    <> : 다르다
    !=와 ^=는 <>와 동일한 의미

--EMP 테이블에서 업무가 [SALESMAN]이 아닌 사원의 사원번호,사원이름,업무,급여 검색

SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB<>'SALESMAN';
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB!='SALESMAN';

--EMP 테이블에서 급여가 [2000]이상인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL>=2000;

--EMP 테이블에서 사원이름이 [A],[B],[C]로 시작되는 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME<'D';

--EMP 테이블에서 [1981년 5월 1일]이전에 입사한 사원의 사원번호,사원이름,업무,급여,입사일 검색
SELECT EMPNO,ENAME,JOB,SAL,HIREDATE FROM EMP WHERE HIREDATE<'81/05/01';

--EMP 테이블에서 업무가 [SALESMAN]인 사원 중 급여가 [1500]이상인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB='SALESMAN' AND SAL>=1500;

--EMP 테이블에서 부서번호가 [10]이거나 업무가 [MANAGER]인 사원의 사원번호,사원이름,업무,급여,부서번호 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP WHERE DEPTNO=10 OR JOB='MANAGER';

--EMP 테이블에서 급여가 [1000~3000]인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL>=1000 AND SAL<=3000;

  • 연산자

    1) 범위 연산자
    BETWEEN A값 AND B값 : 두 값의 범위에 포함되는
    형식)컬럼명 BETWEEN 작은값 AND 큰값
    IN(set) : 괄호 안의 값과 일치하는
    LIKE : 문자의 조합이 같은
    IS NULL : 널 값

--SAL(급여)이 1000~3000인 사람의 EMPNO,ENAME,JOB,SAL 검색 
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL BETWEEN 1000 AND 3000;

질의 결과

--선택 연산자를 이용하여 컬럼값이 나열된 값들 중 하나인 경우의 조건식 표현
--형식)컬럼명 IN (값1,값2,...)
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB IN('ANALYST','SALESMAN');

질의 결과

--EMP 테이블에서 성과급이 존재하지 않는 사원의 사원번호,사원이름,업무,급여,성과급 검색
--NULL : 존재하지 않는 값을 표현하기 위한 키워드
--NULL은 존재하는 값이 아니므로 연산 불가능 - 검색 오류
SELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP WHERE COMM=NULL;
--IS 연산자를 이용하여 [NULL] 비교
형식)컬럼명 IS NULL 또는 컬럼명 IS NOT NULL
--성과급이 NULL인 사원의 사원번호,사원이름,업무,급여,성과급 검색
SELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP WHERE COMM IS NULL;

--EMP 테이블에서 성과급이 존재하는 사원의 사원번호,사원이름,업무,급여,성과급 검색
SELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP WHERE COMM IS NOT NULL;

질의 결과

2) 논리 연산자
AND : 두개의 조건이 TRUE면 TRUE를 리턴
OR : 두개의 조건 중 하나의 조건이 TRUE면 TRUE를 리턴
NOT : 조건이 FALSE인 경우 TRUE를 리턴

--EMP 테이블에서 업무가 [ANALYST]이거나 [SALESMAN]인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB='ANALYST' OR JOB='SALESMAN';

--EMP 테이블에서 사원이름이 [A]로 시작되는 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME>='A' AND ENAME<'B';
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME BETWEEN 'A' AND 'B' AND ENAME<>'B';

질의 결과

--NOT 연산자를 이용하여 조건식의 결과를 반대로 표현
--형식)NOT(조건식)
--EMP 테이블에서 업무가 [MANAGER]가 아닌 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE NOT(JOB='MANAGER');

3) LIKE 연산자
% : 0글자 이상의 임의 문자를 대표
_ : 1글자 임의 문자를 대표
--검색패턴문자
--검색하려는 문자열에 패턴 매칭 연산자가 포함될 경우 ESCAPE 옵션 사용한다.

--패턴 연산자를 이용하여 [%] 또는 [_]를 검색패턴문자로 처리하여 조건식 표현
--형식)컬럼명 LIKE '값 또는 검색패턴문자'

--앞에 A로 시작하는 EMPNAME 값을 모두 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE 'A%';

질의 결과

--EMP 테이블에서 사원이름에 [A]가 포함되는 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '%A%';

--EMP 테이블에서 사원이름의 두번째 문자가 [L]인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '_L%';

질의 결과

--EMP 테이블에 새로운 사원정보를 삽입하여 저장
INSERT INTO EMP VALUES(9000,'M_BEER','CLERK',7788,'81/12/12',1300,NULL,10);
COMMIT;

SELECT * FROM EMP WHERE EMPNO=9000;

스크립트 출력

질의 결과

--EMP 테이블에 사원번호가 9000인 사원정보 삭제
DELETE FROM EMP WHERE EMPNO=9000;
COMMIT;
SELECT * FROM EMP WHERE EMPNO=9000;

스크립트 출력

질의 결과

--EMP 테이블에서 사원이름에 [_]가 포함되는 사원의 사원번호,사원이름,업무,급여 검색
--SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '%_%';

질의 결과 
--LIKE 연산자는 [%] 또는 [_]를 값이 아닌 검색패턴문자로 처리하여 검색하므로 모든 사원정보 검색 - 검색오류

--ESCAPE 키워드를 이용하여 표현 불가능한 문자를 ESCAPE 문자로 표현
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '%\_%' ESCAPE '\';

질의 결과

--검색패턴문자가 없어도 [=] 연산자 대신 [LIKE] 연산자를 사용하여 값 비교 가능
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME='ALLEN';
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE 'ALLEN';

ORDER BY : 컬럼값을 비교하여 행이 정렬되도록 검색하는 기능을 제공

형식) SELECT 검색대상,검색대상,... FROM 테이블명,테이블명,... [WHERE 조건식]
ORDER BY {컬럼명|연산식|별칭|INDEX} {ASC|DESC},{컬럼명|연산식|별칭|INDEX} {ASC|DESC},...
--ASC : 오름차순 정렬, DESC : 내림차순 정렬
--정렬 기준을 여러개 나열하여 선언하면 앞의 검색값이 같은 경우 뒤의 검색값을 비교하여 정렬

--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호 검색
--기본적으로 테이블에 행이 삽입되어 저장된 순서대로 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP;

질의 결과

--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호를 부서번호(DEPTNO)로 오름차순 정렬하여 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY DEPTNO ASC;
--오름차순 정렬인 경우 [ASC] 키워드 생략 가능
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY DEPTNO;

질의 결과

--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호를 급여로 내림차순 정렬하여 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY SAL DESC;

질의 결과

--EMP 테이블에서 모든 사원의 사원번호,사원이름,연봉(급여*12)을 연봉으로 내림차순 정렬하여 검색
SELECT EMPNO,ENAME,SAL*12 ANNUAL FROM EMP ORDER BY SAL*12 DESC;
SELECT EMPNO,ENAME,SAL*12 ANNUAL FROM EMP ORDER BY ANNUAL DESC;

--SELECT 명령의 검색대상에는 자동으로 첨자(COLUMN INDEX)가 부여
--오라클은 첨자(INDEX)가 1부터 1씩 증가되는 숫자값으로 표현
SELECT EMPNO,ENAME,SAL*12 ANNUAL FROM EMP ORDER BY 3 DESC;

질의 결과 : 3개 명령 값 결과 모두 같음 

--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호를 부서번호로 오름차순 정렬하고 같은 경우 급여로 내림차순 정렬하여 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY DEPTNO, SAL DESC;

질의 결과

좋은 웹페이지 즐겨찾기