SQL-연산자01

5 분 소요

SQL이란?

  • Structured Query Language(구조적인 질의어)

종류

  1. 데이터 정의어(DDL): Data Definition Language (중요)
    • 객체(예:table, view, sequence, trigger)에 대한 생성, 삭제, 변경, 이름변경, 데이터 잘라내기
    • 데이터베이스 관리자나 응용프로그래머가 데이터베이스의 논리적인 구조를 정의하기 위한 언어.
    • 명령어: CREATE(객체추가), DROP(객체삭제), ALTER(열삭제), RENAME(객체이름변경), TRUNCATE(잘라내기)
  2. 데이터 조작어(DML): Data Manipulation Language (매우 중요)
    • 데이터베이스에 저장된 데이터를 조작(추가,삭제,수정)하기 위해 사용하는 언어.
    • 명령어: INSERT, DELETE, UPDATE
  3. 데이터 제어어(DCL): Data Control Language
    • 데이터베이스에 대한 접근 권한 부여등의 데이터베이스 시스템의 관리를 위한 목적으로사용되는 언어
    • 명령어: GRANT(권한부여), REVOKE(권한회수)
  4. 데이터 질의어(DQL): Data Query Language (매우 중요)
    • 데이터 (행렬) 검색, 조회 명령어
    • 명령어: SELECT
  5. 일련의 과정 제어어 (TCL) : Transaction Control Language
    • transaction 관리 - 논리적인 작업의 단위
    • 공동 작업에서 의미가 있음. 개인작업은 의미없음.
    • 명령어: COMMIT(일련의 과정이 끝날 때 - 멀티캠퍼스 과정 끝났을 때가 COMMIT), ROLLBACK(일련의 과정 속 오류떴을 때 롤백), SAVEPOINT

각 테이블의 구조(컬럼명,자료형) 검색

  • DESC 테이블명
  • 테이블을 구성하는 컬럼과 자료형을 표현.

테이블에 저장된 데이터에 대한 검색(조회)

  • 형식 : SELECT (조회하고싶은)컬럼명 FROM (컬럼이 속한)테이블명 WHERE 조건식;

  • sql은 대소문자 구분하지 않음
  • sql은 명령문을 왼쪽에서 오른쪽이 아니라 오른쪽에서 왼쪽으로 읽는다.
  • sql에서 문자와 문자열 구분없이 인용부호 ‘ ‘를 사용한다. (자바와 다른 점)
      select '안녕하세요' from dual;
      select 2*3 from dual;              // 이런 식으로도 가능
    
  • 별칭 사용하기
      select '안녕하세요' as msg from dual;
    
  • as 생략 가능
      select empno 사원번호 from emp;
    
  • 별명에 띄어쓰기 들어가면 “ “ 를 사용해야함.
      select empno "사원 번호" from emp;
    
  • 컬럼에 산술연산도 가능
       select sal, sal*12 as yearsal from emp;    // 급여와 연봉 출력
         SAL    YEARSAL
      ------ ----------
         800       9600
        1600      19200
        1250      15000
        2975      35700
        1250      15000
        2850      34200
    
  • 접합연산자 : || → 부드러운 문장 출력 가능
      select ename||'사원의 직책은 '||job||'입니다.' as 직책정보 from emp;
      직책정보
      ------------------------------------
      SMITH사원의 직책은 CLERK입니다.
      ALLEN사원의 직책은 SALESMAN입니다.
      WARD사원의 직책은 SALESMAN입니다.
      JONES사원의 직책은 MANAGER입니다.
      MARTIN사원의 직책은 SALESMAN입니다.
    
  • 결과값에 대한 중복제거
    • 형식 : select distinct 중복이 예상되는 컬럼명 from 테이블명;
        select distinct job from emp;
        JOB
        ---------
        CLERK
        SALESMAN
        PRESIDENT
        MANAGER
        ANALYST
      
  • 10과 3의 사칙연산의 결과를 출력하는 sql문을 작성하시오.
      select 10+3 as 더하기, 10-3 as 빼기, 10*3 as 곱하기, 10/3 as 나누기 from dual;
          더하기       빼기     곱하기     나누기
      ---------- ---------- ---------- ----------
              13          7         30 3.33333333
    

SQL 명령어 특징

  • 관계형 데이터베이스의 ANSI표준언어
  • 여러줄실행
  • 종결문자필요 ;
  • 키워드 단축 불가
  • 버퍼에 마지막 명령문 저장
  • 대소문자 구분없음 (단, 데이터를 표시할때는 반드시 대소문자를 구분함★)

where절

  • 조건절, 출력행을 제어하는 역할
  • 형식 : select 컬럼명 from 테이블명 where 조건식;
  • select는 열 제어, where은 행 제어

  • 조건식의 구성
    • where 기준 컬럼명 연산자(비교연산자, LIKE, IN, BETWEEN) 비교데이터
    • 비교연산자
      • 크거나 작거나 → <, <=, >, >=
      • 같다 → = // 자바랑 다름. 자바는 ==
      • 다르다 → !=, ^=, <> // 자바랑은 !=만 공통됨.
          select empno, ename, deptno from emp where deptno = 30;
          EMPNO ENAME                    DEPTNO
          ----- -------------------- ----------
           7499 ALLEN                        30
           7521 WARD                         30
           7654 MARTIN                       30
           7698 BLAKE                        30
           7844 TURNER                       30
           7900 JAMES                        30                    // 이런 식으로 이용
        
  • 데이터비교는 대소문자를 확실히 비교해야한다.
      select empno, ename, hiredate, deptno from emp where ename = 'smith';  //이건 에러
      select empno, ename, hiredate, deptno from emp where ename = "smith";
           EMPNO ENAME                HIREDATE     DEPTNO
      ---------- -------------------- -------- ----------
            7369 SMITH                80/12/17         20
    
  • 날짜 비교의 정석
      SELECT EMPNO, ENAME, DEPTNO, HIREDATE FROM EMP WHERE HIREDATE > '810601';  //  야매
      SELECT EMPNO, ENAME, DEPTNO, HIREDATE FROM EMP WHERE HIREDATE > to_date(810
      601);  //  정석
           EMPNO ENAME                    DEPTNO HIREDATE
      ---------- -------------------- ---------- --------
            7654 MARTIN                       30 81/09/28
            7782 CLARK                        10 81/06/09
            7788 SCOTT                        20 87/04/19
            7839 KING                         10 81/11/17
            7844 TURNER                       30 81/09/08
            7876 ADAMS                        20 87/05/23
            7900 JAMES                        30 81/12/03
            7902 FORD                         20 81/12/03
            7934 MILLER                       10 82/01/23
    

like 연산자

  • 형식 : 컬럼명 like ‘pattern’
  • 패턴과 닮은 컬럼이 속한 행을 조회
  • 패턴 내의 예약문자 (횟수를 표현하는 문자)
    • % : 0~n개의 문자를 대체
    • _ : 단 1개의 문자를 대체
    • %, _ 이거를 사용하지않으면 LIKE연산자는 큰 의미가 없음.

      문자데이터 예) ‘a’, ‘ab’, ‘ad’, ‘abc’, ‘abbbbbbb’, ‘bababa’

  • like ‘a%’ ===> ‘a’문자로 시작하는 데이터 —> ‘a’, ‘ab’, ‘ad’, ‘abc’, ‘abbbbbbb’

  • like ‘a__’ —> ‘abc’
  • like ‘%a’ ===> ‘a’문자로 끝나는 데이터 —> ‘a’, ‘bababa’

  • like ‘__c’ —> ‘abc’

  • likc ‘%a%’ ===> ‘a’문자를 포함하는 데이터 ===> ‘a’, ‘ab’, ‘ad’, ‘abc’, ‘abbbbbbb’, ‘bababa’

  • 문제) 이름이 ‘A’로 시작하는 사원의 사원번호, 사원명, 급여를 출력하시오.
      select empno,ename,sal
      from emp
      where ename like 'A%';
        
      EMPNO ENAME                       SAL
      ----- -------------------- ----------
       7499 ALLEN                      1600
       7876 ADAMS                      1100     
    
  • 문제) 이름이 ‘S’로 끝나는 사원의 사원번호, 사원명, 급여를 출력하시오.
      select empno,ename,sal
      from emp  
      where ename  like '%S';
        
       EMPNO ENAME                       SAL
      ------ -------------------- ----------
        7566 JONES                      2975
        7876 ADAMS                      1100
        7900 JAMES                       950
    
  • 문제) 이름에 ‘A’문자가 포함된 사원의 사원번호, 사원명, 급여를 출력하시오.
      select empno,ename,sal
      from emp 
      where ename  like '%A%';
        
      EMPNO ENAME                       SAL
      ----- -------------------- ----------
       7499 ALLEN                      1600
       7521 WARD                       1250
       7654 MARTIN                     1250
       7698 BLAKE                      2850
       7782 CLARK                      2450
       7876 ADAMS                      1100
       7900 JAMES                       950
    
  • 문제) 이름의 세번째 문자에 ‘A’가 들어가는 사원의 사원번호, 사원명, 급여를 출력하시오.
      select empno,ename,sal
      from emp
      where ename like '__A%';
        
      EMPNO ENAME                       SAL
      ----- -------------------- ----------
       7698 BLAKE                      2850
       7782 CLARK                      2450
       7876 ADAMS                      1100
    
  • DML로 새로운 행 추가하기
      insert into emp (empno, ename, sal) values (8000, '홍%길동', 2500);
    
  • 문제) 이름에 ‘%’문자가 포함된 사원의 사원번호, 사원명, 급여를 출력하시오.
  • 참고) ESCAPE옵션: ‘%’ 또는 ‘_’ 를 와일드 카드가 아닌 문자의 의미를 가지고자 할 때 사용. —> 컬럼명 LIKE ‘패턴’ ESCAPE ‘부호’ ;
        select empno,ename,sal
        from emp
        where ename like '%%%'; // 잘못된 방법
           
        select empno,ename,sal
        from emp
        where ename like '%\%%' ESCAPE '\';   // 올바른 방법
            
      EMPNO ENAME                       SAL
      ----- -------------------- ----------
       8000 홍%길동                     2500 
    
  • rollback ; —-> insert작업 (홍%길동 행 추가한 작업)을 취소!!

in 연산자

  • 문제) 커미션을 300 또는 500 또는 1400받는 사원들의 사원번호, 사원명, 부서번호, 커미션을 출력.
      select empno, ename, deptno, comm
      from emp
      where comm=300 or comm=500 or comm=1400;   // 이게 너무 복잡하므로
        
      select empno, ename, deptno, comm
       from emp
       where comm in (300, 500, 1400);   // 이렇게 IN연산자를 사용
       EMPNO ENAME                    DEPTNO       COMM
      ------ -------------------- ---------- ----------
        7499 ALLEN                        30        300
        7521 WARD                         30        500
        7654 MARTIN                       30       1400
    

BETWEEN AND 연산자

  • 범위 조건시 사용
  • 형식) BETWEEN a AND b ===> a이상 b이하 (BETWEEN 최소값 AND 최대값)
  • 주의) BETWEEN AND 연산자는 초과와 미만은 표현을 못함!!
  • 문제) 급여가 1600 이상이고 3000 이하인 사원의 사원번호, 사원명, 급여를 출력하시오.
      select empno, ename, sal
      from emp
      where sal>=1600  AND  sal<=3000;   // 이건 너무 복잡하므로
           
      select empno, ename, sal
      from emp
      where sal  between 1600 and 3000;   // 이렇게 BETWEEN AND 연산자를 사용
        
      EMPNO ENAME                       SAL
      ----- -------------------- ----------
       7499 ALLEN                      1600
       7566 JONES                      2975
       7698 BLAKE                      2850
       7782 CLARK                      2450
       7788 SCOTT                      3000
       7902 FORD                       3000
    

카테고리:

업데이트:

댓글남기기