#3 DBMS SELECT文1


oracleDB XE11g R2, DBeaver 21.2.3


wihdow10

  • SQL
    1-1. SQL機能別
  • データ定義子(DDL)
    ->create、alter、drop文など、テーブルまたは関係を作成する構造.
  • データオペレータ(DML)
    ->テーブルでデータを検索、挿入、変更、削除し、select、insert、delete、update文を使用します.
  • データ制御言語(DCL)
    ->grant、revoke文などの
  • を含むデータ管理権限
    1-2. データオペレータ-検索
  • SELECT
  • -- 기본적으로 쿼리문은 대소문자를 안 가리나 대문자를 기본으로 사용하며
    -- 검색이나 조작등 특정한 키워드는 대소문자를 구분한다
    -- 쿼리문은 세미콜론으로 구분을 하며 커서가 가리키고 있는 구문만 실행된다
    
    -- 한줄 주석
    /*
    여러줄 주석
    */
    
    SELECT	컬럼명1, 컬럼명2, .....
    FROM	테이블명
    WHERE	조건
    OR	조건
    AND	조건
    ;
    
    -- EMPLOOYEES 테이블에서 EMPLOYEE_ID, LAST_NAME 출력
    -- 조건추가 : LAST_NAME이 Smith인 사람
    SELECT	EMPLOYEE_ID, LAST_NAME
    -- e는 자동완성시 붙는 키워드로 보통 첫글자가 소문자로 표현된다
    FROM	EMPLOOYEES e 
    
    ;
    
    SELECT	EMPLOYEE_ID, LAST_NAME
    FROM	EMPLOOYEESe
    WHERE	LAST_NAME = 'ostin'
    ;
    
    /*
    as : 별칭, 알리아스
    */
    SELECT	EMPLOYEE_ID	AS "ID" , 
    	LAST_NAME	AS "LNAME"
    --테이블은 알리아스를 쓰지않는다.        
    FROM	EMPLOOYEES e
    WHERE	LAST_NAME = 'ostin'
    ;
    
    -- 칼럼에 알리아스 키워드를 쓰지 않아도 된다
    SELECT	EMPLOYEE_ID "ID" ,
    	LAST_NAME "LNAME" ,
        	SALARY	"SAL"
    FROM	EMPLOOYEESe
    WHERE	LAST_NAME = 'ostin'
    ;
    
    -- *은 모든걸 의미하며 전체 범위를 불러온다
    -- 셀렉트에 *을 주고 프롬에 테이블을 선언해주면 자동완성 기능을 사용할수 있다
    SELECT	*
    FROM	EMPLOOYEESe
    ;
    
    -- DISTINCT : 중복제거
    SELECT	DISTINCT	JOB_ID
    FROM	EMPLOOYEESe
    ;
    
    -- 부서 중복 제거 조회
    -- 부서에서 중복되는 값을 없애주어서 몇개의 부서가 있는지 확인할 수 있다
    SELECT	DISTINCT	DEPARTMENT_ID
    FROM	EMPLOYEESe
    ;
    
    -- <, >, <=, >=
    -- EMPLOYEES 테이블에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY 조회
    -- SALARY 5000이상인 사람의 정보를 조회
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY
    FROM	EMPLOYEES e
    WHERE	SALARY >= 5000
    ;
    
    -- 아래와 같은 방식으로 활용 가능
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY
    FROM	EMPLOYEES e
    WHERE	SALARY < 5000
    ;
    
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY
    FROM	EMPLOYEES e
    WHERE	SALARY = 5000
    ;
    
    -- AND 모든 조건을 만족하는 값
    -- EMPLOYEES 테이블에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME 조회
    -- DEPARTMENT_ID = 50이고 JOB_ID = SH_CLERK 인 사람 조회
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	DEPARTMENT_ID =50 AND JOB_ID = 'SH_CLERK'
    ;
    
    -- EMPLOYEES 테이블에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME 조회
    -- JOB_ID = ST_MA이고 MANAGER_ID = 100이고 SALARY = 5000이상인 사람
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	JOB_ID = 'ST_MAN' AND MANAGER_ID = 100 AND SALARY >= 5000
    ;
    
    -- OR 모든 조건중 하나라도 만족하는 값
    -- EMPLOYEES 테이블에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME 조회
    -- DEPARTMENT_ID = 50 또는 MANAGER_ID = 100인 사람
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	DEPARTMENT_ID = 50 OR MANAGER_ID = 100
    ;
    
    -- NOT = <> !=의 개념
    -- EMPLOYEES 테이블에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME 조회
    -- DEPARTMENT_ID = 50이 아닌 사람
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	NOT (DEPARTMENT_ID = 50)
    ;
    
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	DEPARTMENT_ID <> 50
    ;
    
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	DEPARTMENT_ID <> 50
    ;
    
    -- 여러 조작어들을 같이 사용할수있다.
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	SALARY >= 4000 AND SALARY <= 8000
    AND	DEPARTMENT_ID <> 50
    ;
    
    -- BETWEEN A AND B A와 B 사이의 조건, AND를 간결하게 사용할 수 있다
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	SALARY BETWEEN 4000 AND 8000
    AND	DEPARTMENT_ID <> 50
    ;
    
    -- EMPLOYEES 테이블에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME 조회
    -- SALARY 6500 또는 7700 13000인 사람 
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	SALARY = 6500 OR SALARY = 7700 OR SALARY = 13000
    ;
    
    -- IN 여러 조건중 하나라도 만족하는 값, OR를 간결하게 사용할 수 있다
    -- EMPLOYEES 테이블에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME 조회
    -- SALARY 6500 또는 7700 13000인 사람 
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE	SALARY IN (6500, 7700, 13000)
    ;
    
    -- EMPLOYEES 테이블에서 EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID,
    -- MANAGER_ID,SALARY 조회
    -- DEPARTMENT_ID가 10 또는 30 또는 100 또는 90에 속하고,
    -- 급여가 5000에서 10000사이 이고 MANAGER_ID가 100이 아닌 사람을 조회
    SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, MANAGER_ID,
    	MANAGER_ID, SALARY
    FROM	EMPLOYEES e
    WHERE	DEPARTMENT_ID IN (10, 30, 90, 100)
    AND	SALARY BETWEEN 5000 AND 10000
    AND	MANAGER_ID <> 100
    ;
    
    -- LIKE(특정문자를 포함한 검색) : D로 시작하는 사람
    SELECT	FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE 	FIRST_NAME LIKE 'D%'
    ;
    -- e로 끝나는 사람
    SELECT	FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE 	FIRST_NAME LIKE '%e'
    ;
    
    -- 중간에 e가 들어가는 사람
    SELECT	FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE 	FIRST_NAME LIKE '%e%'
    ;
    
    -- a앞에 두글자가 있는 사람
    SELECT	FIRST_NAME, LAST_NAME
    FROM	EMPLOYEES e
    WHERE 	FIRST_NAME LIKE '__a%'
    ;
    
    -- IS NULL 널값 찾기
    SELECT	FIRST_NAME, LAST_NAME, COMMISSION_PCT
    FROM	EMPLOYEES e
    WHERE 	COMMISSION_PCT IS NULL
    ;
    
    -- IS NOT NULL 널이 아닌 값 찾기
    SELECT	FIRST_NAME, LAST_NAME, COMMISSION_PCT
    FROM	EMPLOYEES e
    WHERE 	COMMISSION_PCT IS NOT NULL
    ;
    
    -- 오름차순 ASC : ORDER BY [칼럼명] ASC
    -- ASC는 기본값, 생략가능
    SELECT	FIRST_NAME, LAST_NAME, COMMISSION_PCT
    FROM	EMPLOYEES e
    WHERE 	COMMISSION_PCT IS NOT NULL
    ORDER	BY COMMISSION_PCT ASC
    ;
    
    SELECT	FIRST_NAME, LAST_NAME, COMMISSION_PCT
    FROM	EMPLOYEES e
    WHERE 	COMMISSION_PCT IS NOT NULL
    ORDER	BY COMMISSION_PCT
    ;
    
    -- 오름차순 조거을 두개를 걸면 첫번째 오름차순으로 우선 정렬을 하고 두번때 조건을 정렬한다
    SELECT	FIRST_NAME, LAST_NAME, COMMISSION_PCT
    FROM	EMPLOYEES e
    WHERE 	COMMISSION_PCT IS NOT NULL
    ORDER	BY COMMISSION_PCT, FIRST_NAME
    ;
    
    -- 내림차순 : DESC
    SELECT	FIRST_NAME, LAST_NAME, COMMISSION_PCT
    FROM	EMPLOYEES e
    WHERE 	COMMISSION_PCT IS NOT NULL
    ORDER	BY COMMISSION_PCT ,FIRST_NAME DESC
    ;