4.2 SELECT문 및 연산자

출처 URL : http://www.gurubee.net/lecture/1017

SELECT문은 데이터베이스로부터 저장되어 있는 데이터를 검색하는데 사용 한다.

SELECT 문법

INSERT
  • – DISTINCT : 중복되는 행을 제거하는 옵션.
  • – * : 테이블의 모든 column을 출력.
  • – alias : 해당 column에 대해서 다른 이름을 부여할 때 사용.
  • – table_name : 질의 대상 테이블 명
  • – WHERE : 조건을 만족하는 행들 만 검색
  • – condition : column, 표현식, 상수 및 비교 연산자
  • – ORDER BY : 질의 결과 정렬을 위한 옵션(ASC:오름차순(Default),DESC내림차순)
SQL문의 작성 방법
  • – SQL 문장은 대소문자를 구별하지 않는다.
  • – SQL 문장은 한 줄 또는 여러 줄에 입력될 수 있다.
  • – 일반적으로 키워드는 대문자로 입력한다. 다른 모든 단어, 즉 테이블 이름, 열 이름은 소문자로 입력한다.(권장)
  • – 가장 최근의 명령어 한 개가 SQL buffer에 저장 된다.
  • – SQL문 마지막 절의 끝에 “;”를 기술하여 명령의 끝을 표시 한다.
 
-- empno와 ename 은 각각 사번과 성명이라는 컬럼 별칭(alias)으로 만들어 출력
-- alias를 사용할 때 as라는 키워드를 사용해도 되고, 생략 할 수도 있다.
SQL> SELECT empno 사번, ename 성명
      FROM   emp
     WHERE  deptno = 10

      사번      성명
---------- ---------------
 7782      CLARK
 7839      KING
 7934      MILLER
    
WHERE절에 사용될 수 있는 SELECT 연산자
연산자설 명
BETWEEN a AND ba와 b사이의 데이터를 출력.(a, b값 포함)
IN (list)list의 값 중 어느 하나와 일치하는 데이터를 출력
LIKE문자 형태로 일치하는 데이터를 출력(%, _사용)
IS NULLNULL값을 가진 데이터를 출력 합니다.
NOT BETWEEN a AND ba와 b사이에 있지않은 데이터를 출력(a, b값 포함하지 않음)
NOT IN (list)list의 값과 일치하지 않는 데이터를 출력
NOT LIKE문자 형태와 일치하지 않는 데이터를 출력
IS NOT NULLNULL값을 갖지 않는 데이터를 출력

IN, NOT IN 연산자

IN 연산자
  
-- 사번이 7900, 7934번인 사원의 사번과 성명 출력
SQL> SELECT empno, ename
     FROM  emp
     WHERE empno IN (7900, 7934) ;

    EMPNO    ENAME
 --------- -------------
    7934      MILLER
    7900      JAMES
    
NOT IN 연산자
  
-- 사번이 7900, 7934번이 아닌 사원의 사번과 성명 출력
SQL> SELECT empno, ename
     FROM  emp
     WHERE  empno NOT IN (7900, 7934);

  EMPNO   ENAME
-------- --------------
  7369    SMITH
  7499    ALLEN
  7698    BLAKE
  .... 
    

BETWEEN 연산자

AND를 이용해 두 조건을 결합한 검색과 같은 결과값을 보여 준다.

-- 급여가 3000에서 5000사이인 사원만 조회      
SQL> SELECT empno, ename
     FROM  emp
     WHERE  sal BETWEEN  3000 AND 5000;

  EMPNO ENAME
------- ------
   7788 SCOTT
   7839 KING
   7902 FORD  
    

LIKE 연산자

  • – 검색 STRING 값에 대한 와일드 카드 검색을 위해서 LIKE 연산자를 사용.
  • – % : 여러 개의 문자열을 나타내는 와일드 카드
  • – _ : 단 하나의 문자를 나타내는 와일드 카드
  • – ESCAPE : 와일드 카드 문자를 일반문자 처럼 사용하고 싶은 경우에 사용.
  •   ex) WHERE name LIKE ‘%a\_y%’ ESCAPE ‘\’
  • – LIKE 연산자는 대소문자를 구분 한다.
  • – UPPER() 함수를 이용해 대소문자 구분없이 출력 할 수 있다.(인덱스 성능문제 발생, 함수기반 인덱스 사용..)
구 분설 명
LIKE ‘A%’‘A’로 시작하는 데이터만 검색
LIKE ‘%A’‘A’로 끝나는 테이터들만 검색
LIKE ‘%KIM%’‘KIM’ 문자가 있는 데이터 들만 검색
LIKE ‘%K%I%’‘K’ 문자와 ‘I’문자가 있는 데이터 들만 검색
LIKE ‘_A%’‘A’문자가 두 번째 위치한 데이터 들만 검색
LIKE 연산자 예제
-- 'K' 문자가 들어있는 사원 정보 조회
-- UPPER() 함수는 k를 대문자로 변환하여 'K'로 인식    
SQL> SELECT empno, ename
     FROM  emp
     WHERE  UPPER(ename) LIKE '%K%';

EMPNO   ENAME
------- -----------
 7698   BLAKE
 7782   CLARK
 7839   KING

-- '_'를 이용한 LIKE검색
SQL> SELECT empno, ename
     FROM  emp
     WHERE UPPER(ename) LIKE '_I%'

  EMPNO ENAME
------- ----------
   7839 KING
   7934 MILLER
    

ORDER BY

ORDER BY 절은 데이터의 정렬을 위해 사용합니다.(ASC[오름차순], DESC[내림차순])

-- 아래 두 개의 쿼리는 동일한 결과를 반환 한다.
-- 이름을 ASC로 정렬     
SQL> SELECT empno, ename
     ROM  emp
     WHERE  deptno = 30
     ORDER BY ename ASC;

-- 두 번째 컬럼을 디폴트(ASC) 순으로 정렬
SQL> SELECT empno, ename
     FROM  emp
     WHERE  deptno = 30
     ORDER BY 2
         
   EMPNO ENAME
-------- ---------
    7499 ALLEN
    7698 BLAKE
    7900 JAMES
... 
    

참고링크

SQL 전문가 가이드 – ORDER BY (정렬)

대용량 데이터베이스 솔루션 2 – 논리합(OR, IN) 연산자의 이해

대용량 데이터베이스 솔루션 2 – IN을 활용한 액세스 효율화

대용량 데이터베이스 솔루션 2 – 중복된 IN 조건의 활용

대용량 데이터베이스 솔루션 2 – IN을 고려한 결합 인덱스의 선정


답글 남기기 0

Your email address will not be published. Required fields are marked *