본문 바로가기

Oracle

4.데이터 구축을 위한 구문들

일단 우리는 DDL전까지는 오라클에서 학습용으로 만들어둔 EMP ,  DEPT 데이터베이스를 사용하기로하자.


데이터베이스는 2차원 테이블을 사용한다는 이야기를 이전에 했다 그러면 

그 테이블을 한번 불러와보자 이 때  사용하는 구문은  DESC이다.

 


테이블을 불러왔다기보단 테이블의 구조를 보여준다 

 dept의 구조는 DEMPNO, DNAME, LOC 이라는 카테고리로 되어있다.

테이블의 카테고리를 우리는 칼럼이라고 부른다.


이곳에서 우리는 칼럼과 각 칼럼의 타입을 확인할수있다.


테이블의 기본 구조 설명이다 그림을 참고하자,


데이터를 조회하기 위해서는 Select 문을 사용한다.


형식은 


select * from [테이블이름];


그 테이블 전체를 불러온다.


emp1 이라는 테이블을 가지고 왔다 위의 카테고리들이 칼럼이고


 밑의 데이터 부분을 로우라고 부른다.


  • 테이블에 저장된 데이터를 조회하기 위한 명령어이다.
  • SQL문 중에 가장 많이 쓰인다.
  • SELECT문에는 FROM 키워드가 반드시 따라와야 한다.

  • 위에 SELECT문에서 * 은 찾고자 하는 테이블의 모든 내용을 검색하겠다는 키워드인데 특정 컬럼만 검색하고자 할때는 컬럼 이름을 기술하면 된다.

  • 예) [SELECT DNAME FROM DEPT;]

SELECT문은 여러 줄의 절로 구성된다

일단 Select : 조회하고자 하는 칼럼며의 리스트 나열
DISTINCT : 동일한 내용을 한번 씩만 출력하게하는 중복제거절
FROM : 조회하고자 하는 테이블 명의 리스를 나열
WHERE : 조회하고자 하는 로우의 조건을 나열.
GROUP BY : 동일한 값을 갖는 로우들을 한 그룹으로 묶는다.
HAVING : 로우들의 그룹이 만족해야하는 조건을 제시
ORDER BY : 로우들의 정렬 순서를 제시.

만약 테이블에서 내가원하는 모습만 보고 싶다면 위의 코드에서 *을 제거하고 원하는 칼럼이름을 넣으면 된다.


 
empno 칼럼만 불러온 모습

조건을위한 where 문

  • WHERE 조건은 SELECT문에서 마지막에 쓸 수 있는데 원하는 레코드만 검색하고자 할 때 쓰인다.
  • 예) 사원테이블(DEPT)에서 급여 (SAL)가 3000 이상인 사원을 출력하는 쿼리문



산술/비교/논리 연산자

  • 산술 연산자
    • SQL에서 산술 연산자를 사용하여 조회 가능하다



비교 연산자



  • 예) 비교 연산자를 사용하여 부서 번호(DEPTNO)가 20인 사원에 관한 정보만 출력하는 쿼리문

    SQL> SELECT * FROM EMP WHERE DEPTNO = 20;

  • 문자, 날짜는 반드시 단일 따옴표 안에 표시해야 한다.

  • 예) 이름(ENAME)이 FORD인 사람의 사번(empno), 이름(ename), 급여(SAL)를 출력하는 쿼리문

  • SQL> SELECT EMPNO, ENAME, SAL FROM EMP WHERE ENAME = 'FORD';

    • 예) 1982년 1월 1일 이후에 입사한 사원을 출력하는 쿼리문

      SQL> SELECT EMPNO, ENAME, SAL FROM EMP WHERE HIREDATE >= '1982/01/01';

논리 연산자

  • 여러개의 조건을 조한해서 결과를 얻어야 할 경우 논리 연산자를 사용하면 된다.

    • AND : 두 가지 조건을 모두 만족해야만 검색할 수 있다

    SQL> SELECT EMPNO, DEPTNO, JOB FROM EMP WHERE DEPTNO = 10 AND JOB = 'MANAGER';

    • OR : 두 가지 조건 중에서 한 가지만 만족하더라도 검색할 수 있다.

    SQL> SELECT EMPNO, DEPTNO, JOB FROM EMP WHERE DEPTNO = 10 OR JOB = 'MANAGER';

    • NOT : 조건에 만족하지 못하는 것만 검색할 수 있다.

    SQL> SELECT EMPNO, DEPTNO, JOB FROM EMP WHERE NOT DEPTNO = 10;

    SQL> SELECT EMPNO, DEPTNO, JOB FROM EMP WHERE DEPTNO <> 10;

    SQL> SELECT EMPNO, DEPTNO, JOB FROM EMP WHERE DEPTNO != 10; * 사진 위에 세 쿼리문은 모두 같은 결과를 보여준다.



BETWEEN AND 연산자

  • BETWEEN

    • 하나의 컴럼의 값이 범위 내에 속하는지 알아보기 위한 연산자이다.
    • 숫자형, 문자형, 날짜형에 사용 가능하다.
    • 예) 급여가 2000~3000 사이의 사원을 검색하는 쿼리문

      SQL> SELECT * FROM EMP WHERE SAL BETWEEN 2000 AND 3000;

    • 예) 급여가 2000 미만이거나 3000 초과인 사원을 검색하는 쿼리문

      SQL> SELECT * FROM EMP WHERE SAL NOT BETWEEN 2000 AND 3000;

    • 예) 1987년에 입사한 사원을 출력하는 쿼리문

      SQL> SELECT * FROM EMP WHERE HIREDATE BETWEEN '1987/01/01' AND '1987.12.31';

  • IN

    • 예) 커미션(COMM)이 300 혹은 500 혹은 1400인 사원이 있는지 검색하는 쿼리문

      SQL> SELECT * FROM EMP WHERE COMM IN (300, 500, 1400);

    • 예) 커미션(COMM)이 300 혹은 500 혹은 1400이 아닌 사원이 있는지 검색하는 쿼리문

      SQL> SELECT * FROM EMP WHERE COMM NOT IN (300, 500, 1400);



LIKE 연산자와 와일드 카드

  • LIKE
    • 컬럼에 저장된 데이터의 시작 위치에 데이터가 일치하면 조회가 가능한 연산자이다.
    • 검색하고자 하는 값을 전확히 모를 경우 와일드 카드와 함께 사용할 수 있다.

      • %

        • 특정 문자가 포함되기만 하고 그 이전이나 이후에 어떤 문자가 몇 개가 오든지 상관없다는 의미를 표현하기 위해서는 LIKE 연산자와 함께 사용한다.
        • 예) 이름이 F로 시작하는 사람을 찾는 쿼리문

          SQL> SELECT * FROM EMP WHERE ename LIKE 'F%';

        • 예) 위치 상관 없이 이름 중에 A가 들어있는 사람을 찾는 쿼리문

          SQL> SELECT * FROM EMP WHERE ename LIKE '%A%';

        • 예) 이름이 N으로 끝나는 사람을 찾는 쿼리문

          SQL> SELECT * FROM EMP WHERE ename LIKE '%N';

      • _

        • 어떤 문자가 오든 상관없다는 의미로 사용한다.
        • %와의 차이점은 %는 몇 개의 문자가 오든 상관이 없지만 _는 단 한 문자에 대해서만 와일드 카드 역할을 한다.
        • 조건의 문자 위치와 순서에 유의하기 바란다!
        • 예) 이름의 두 번째 글자가 A인 사원을 찾는 쿼리문

          SQL> SELECT * FROM EMP WHERE ename LIKE '_A%';

        • 예) 이름의 세 번째 글자가 A인 사원을 찾는 쿼리문

          SQL> SELECT * FROM EMP WHERE ename LIKE '__A%';

      • ESCAPE 옵션

        • LIKE 연산자에서 사용하는 와일드 문자(%, _) 자체를 포함한 문자열을 검색할 때, 와일드 문자를 일반 문자처럼 취급하기 위한 옵션이다.
        • 해당하는 와일드 문자 앞에 사용자가 원하는 한 글자를 적고 ESCAPE 옵션을 사용하여 해당 문자 뒤에 한 글자는 일반 문자 그대로 인식되도록 설정 되어있다.
        • 예) 문자열 가운데 언더바(_)가 포함된 경우를 검색하는 쿼리문

          [SQL> SELECT * FROM EMP WHERE ename LIKE '%_%';] : 이 쿼리문을 실행하면 일반적으로 ename 안에 언더바(_)가 들어있는 경우만 출력하는 것으로 생각할 수 있지만 오라클에서는 한 글자라도 차지하고 앞뒤로 어떤 길이의 문자열이 와도 되는 것으로 인식한다.

        • [SELECT * FROM EMP;] 쿼리문과 SELECT * FROM EMP WHERE ename LIKE '%_%'; 쿼리문은 동일한 결과를 추출한다.
        • 예) 이름(ENAME)이 '%\%%'와 같은 데이터를 검색하는 쿼리문
        • ESCAPE 옵션 옆에 '\'를 썻는데 이는 \ 뒤에 오는 한 글자(%)는 글자 그대로 '%'로 인식하는 옵션이다.
        • EMP 테이블에 ename 중에는 '%'문자가 들어가 있는 이름이 없기 때문에 결과값이 없는 것이 정상이다.

          SQL> SELECT * FROM EMP WHERE ename LIKE '%\%%' ESCAPE'\';

      • NOT LIKE 연산자
        • 예) 이름에 A를 포함하지 않는 사람만 검색하는 쿼리문

          SQL> SELECT * FROM EMP WHERE ENAME NOT LIKE '%A%';

NULL을 위한 연산자

  • 오라클에서는 컬럼에 NULL값이 저장되는 것을 허용한다.
  • NULL의 의미 : 미확정, 알 수 없는 값을 의미한다. 고로 연산, 할당, 비교가 불가능하다.
  • EMP 테이블에 커미션(COMM)이 NULL인 레코드가 있다.
  • 예) 커미션(COMM)을 받지 못하는 사원을 검색하는 쿼리문

    SQL> SELECT ENAME, JOB, COMM FROM EMP WHERE COMM=NULL;

  • 위의 쿼리문을 실행하면 아마 선택된 레코드들이 없다 할 것이다. 왜냐하면 NULL이 저장되어 있는 경우에는 =연산자로 판단할 수 없기 때문이다. 그럼 어떻게 해야할까?

  • IS NULL/ IS NOT NULL

    • 임의의 컬럼이 NULL인지 아닌지를 비교/검색 한다.
    • 특정 컬럼값이 NULL값인지를 비교할 경우 IS연산자를 사용한다.
    • 예) 커미션(COMM)을 받지 않는 사원을 검색하는 쿼리문

      SQL> SELECT ENAME, JOB, COMM FROM EMP WHERE COMM IS NULL; SQL> SELECT ENAME, JOB, COMM FROM EMP WHERE COMM IS NOT NULL;


  • 정렬을 위한 ORDER BY절

    • 정렬이란 크기 순서대로 나열하는 것이다.
    • 정렬 방식에는 오름차순과 내림차순이 있다.

      • 오름차순(ascending) : 작은 값이 위에 출력되고 아래로 갈수록 큰 값이 출력되도록 한다.
      • 내림차순(descending) : 큰 값이 위에 출력되고 아래로 갈수록 작은 값이 출력되도록 한다.
    • ORDER BY절

      • 로우를 정렬하려면 SELECT문에 ORDER BY절을 추가해야 한다.
      • 예) 사원들의 급여를 오름차순으로 정렬하는 쿼리문

        SQL> SELECT * FROM EMP ORDER BY SAL ASC;

      • 예) 가장 최근에 입사한 사원부터 출력하는 쿼리문

        SQL> SELECT * FROM EMP ORDER BY HIREDATE DESC;



DISTINCT/별칭/연결 연산자

  • DISTINCT

    • 동일한 데이터 값들이 중복되어 출력되지 않도록 사용한다.
    • [SELECT DEPTNO FROM EMP;] 쿼리문을 실행하면 같은 부서의 번호가 중복되어 출력이 된다.
    • 여기서 DISTINCT 명령어를 사용하면 중복이 제거되어 출력이 된다.
    • 예) 사원들이 소속되어 있는 부서의 번호를 출력하는 쿼리문

      SQL> SELECT DISTINCT DEPTNO FROM EMP;

  • 별칭 연산자

    • 컬럼 이름으로 의미를 알아 보기 힘든 경우 컬럼의 이름에 별칭을 부여할 수 있다.
    • 밑에 두 쿼리문의 결과를 보고 별칭이 어떤것인지 파악하고 어떻게 쓰이는지 확인해보자.

      SQL> SELECT ENAME, SAL12+NVL(COMM, 0) FROM EMP; SQL> SELECT ENAME, SAL12+NVL(COMM, 0) AS ANNSAL FROM EMP;

    • " "(큰 따옴표)로 별칭 부여하기 - 공백문자나 특수 문자를 포함시킬때 사용한다.
      • SELECT ENAME, SAL*12+NVL(COMM, 0) "$##A n n s a l##$" FROM EMP;
    • 한글로 별칭 부여하기
      • SELECT ENAME, SAL*12+NVL(COMM, 0) "연봉" FROM EMP;
  • 연결 연산자

    • SELECT문 내부에 "||" 수직바를 사용해서 표현한다.
    • 기존의 컬럼내에 문자열을 추가하고자 할 떄 사용한다.

      SQL> SELECT ENAME || ' is a ' || JOB "연결정의 예" FROM EMP;


'Oracle' 카테고리의 다른 글

6.SQL 함수  (0) 2018.04.22
5.SQL*PLUS명령어  (0) 2018.04.22
3.SQL로그인, 데이터 타입  (0) 2018.04.22
2. SQL,SQL*PLUS,데이터조회  (0) 2018.04.22
1. 오라클??  (0) 2018.04.22