#3 DBMS _SELECT문_1

정진형·2021년 11월 2일
0

DBMS

목록 보기
3/11
post-thumbnail

oracleDB XE11g R2, DBeaver 21.2.3

wihdow10

  1. 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
;

0개의 댓글