이론/자바 풀스택 국비수업

220407~0408 데이터베이스 SELECT 1

달거북씨 2022. 4. 10. 22:02

1. 주석 사용법

-- 한 줄 주석

 

/*

 * 여러 줄 주석

 */

 

▶ 자바 할 때와 단축키 동일

 

 

 

2. 데이터 조작어(DML) : SELECT, INSERT, DELETE, UPDATE- 이 중 가장 까다로운 것은???- SELECT- 방대한 데이터 중에 필요한 데이터만 골라내야 하기 때문에 가장 까다롭다.

 

 

 

3. 형식SELECT      속성이름 or *(전체항목)FROM        테이블이름WHERE     검색조건AND(OR)   검색조건

 

ex)SELECT   *FROM      tab;▶ 테이블 안에 있는 전체 데이터를 가져오겠다는 뜻

 

Tip. 대소문자 상관없음

 

 

 

4. 사용법 예시

-- 해당 테이블의 모든 데이터 조회('*' 사용)
-- employees 테이블의 모든 항목 조회
SELECT	*
FROM	EMPLOYEES;

-- 해당 테이블에서 특정 컬럼 조회
-- tab이라는 테이블에서 tname 컬럼을 조회
SELECT	tname
FROM	tab;

-- WHERE 사용해서 조건 주기
-- employees 테이블에서 last_name 컬럼값이 Austin인 사람 조회
SELECT	*
FROM	EMPLOYEES
WHERE	LAST_NAME = 'Austin';
-- Tip. 문자열은 홑따옴표(') 사용

-- employees 테이블에서 department_id 60이고, manager_id가 102인 사람 조회
SELECT	*
FROM	EMPLOYEES
WHERE	DEPARTMENT_ID = 60
AND	MANAGER_ID = 102;
Tip. 세미콜론(;) 위치로 실행위치를 지정할 수 있다.
     만약 맨 끝이 아니라 세번째 줄에 세미콜론(;)을 놓으면, department_id가 60인 사람까지만 조회된다.  
     
-- AND 사용해서 조건 여러 개 주기
-- employees 테이블에서 department_id가 100이고 job_id가 FI_MGR인 사람 조회
SELECT	*
FROM	EMPLOYEES
WHERE	DEPARTMENT_ID = 100
AND	JOB_ID = 'FI_MGR';     
     
-- employees 테이블에서 last_name이 Smith인 사람의 employee_id와 last_name 조회
SELECT	EMPLYEE_ID, LAST_NAME
FROM	EMPLOYEES
WHERE	LAST_NAME = 'Smith';

-- employees 테이블에서 first_name이 Guy인 사람의 employee_id, first_name, last_name, job_id 조회
SELECT	EMPLOYEE_ID, FRIST_NAME, LAST_NAME, JOB_ID
FROM	EMPLOYEES
WHERE	FIRST_NAME = 'Guy';

-- employees 테이블에서 department_id가 50이고 manager_id가 121인 사람의 
-- employee_id, first_name, last_name, job_id 조회
SELECT	EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID
FROM	EMPLOYEES
WHERE	DEPARTMENT_ID = 50
AND	MANAGER_ID = 121;

-- OR 사용
-- employees 테이블에서 department_id가 50이거나 manager_id가 100인 사람 조회
SELECT	*
FROM	EMPLOYEES
WHERE	DEPARTMENT_ID = 50
OR	MANAGER_ID = 100;

-- 별칭(as, 알리아스)
SELECT	employee_id AS "ID", salary "$", DEPARTMENT_ID de
FROM	EMPLOYEES e 
;
-- Tip. 자동완성을 사용하면 e가 자동으로 붙는데, 이도 알리아스로 자동완성된 것
-- Tip. AS는 생략 가능하며, 쌍따옴표(") 없이 문자만 써도 가능

 

 

 

5. SELECT 함수

- 오라클 외 DB는 다를 수 있음

 

- distinct : 중복제거

-- employees 테이블에서 job_id 중복제거해서 가져오기
SELECT DISTINCT	JOB_ID
FROM		EMPLOYEES e
;

 

- 크거나 같다(>=), 크다(>), 작거나 같다(<=), 작다(<)

-- employees 테이블에서 salary가 2500보다 작은 사라마 조회하기
SELECT	*
FROM	EPLOYEES
WHERE SALARY < 2500
;

-- employees 테이블에서 salary가 5000보다 크거나 같은 first_name, last_name, salary 조회하기
SELECT	FIRST_NAME, LAST_NAME, SALARY
FROM	EMPLOYEES
WHERE	SALARY >= 5000
;

 

- NOT(NOT, <>, !=)

-- employees 테이블에서 department_id가 50이 아닌 사람 조회하기
-- NOT 사용
SELECT	*
FROM	EMPLOYEES
WHERE	NOT(DEPARTMENT_ID = 50);
Tip. 총 데이터는 107명인데, department_id = 50은 45명, NOT은 61명이 조회된다.
     1명이 차이 나는 이유는 deparment_id가 NULL인 사람이 있기 때문
     
-- <> 사용
SELECT	*
FROM	EMPLOYEES
WHERE	DEPARTMENT_ID <> 50;

-- != 사용
SELECT	*
FROM	EMPLOYEES
WHERE	DEPARTMENT_ID != 50;

 

- BETWEEN A AND B

-- employyes 테이블에서 salary 4000 ~ 8000 사이의 first_name, last_name, salary 조회하기
SELECT 	FIRST_NAME, LAST_NAME, SALARY 
FROM 	EMPLOYEES e
WHERE 	SALARY >= 4000
AND 	SALARY <= 8000
;

-- between A and B로 표현
SELECT 	FIRST_NAME, LAST_NAME, SALARY 
FROM 	EMPLOYEES e
WHERE 	SALARY BETWEEN 4000 AND 8000
;

-- 문제
/* employees 테이블에서 department_id가 10 또는 30 또는 100 또는 90에 속하고, 
 * salary가 5000 이상 10000 이하이고, manager_id가 100이 아닌 사람의
 * employee_id, first_name, last_name, job_id, manager_id, salary를 조회
 */
SELECT 	EMPLOYEE_ID , FIRST_NAME , LAST_NAME , JOB_ID , MANAGER_ID , SALARY
FROM	EMPLOYEES e 
WHERE 	DEPARTMENT_ID in(10, 30, 100, 90)
AND		SALARY BETWEEN 5000 AND 10000
AND 	MANAGER_ID <> 100
;

 

- in()

-- employees 테이블에서 salary 6500, 7700, 13000인 사람의 first_name, last_name, salary 조회
SELECT 	FIRST_NAME , LAST_NAME , SALARY 
FROM 	EMPLOYEES e 
WHERE	SALARY = 6500 
OR 		SALARY = 7700
OR 		SALARY = 13000 
;

-- in()으로 표현
SELECT 	FIRST_NAME , LAST_NAME , SALARY 
FROM 	EMPLOYEES e 
WHERE	SALARY IN(6500, 7700, 13000)
;

 

- like

-- like -> D로 시작하는 사람
SELECT	 FIRST_NAME , LAST_NAME 
FROM 	EMPLOYEES e 
WHERE 	FIRST_NAME LIKE 'D%'	-- 대문자 D뒤에는 어떤 단어가 와도 상관없다는 뜻
;

-- like -> d로 끝나는 사람
SELECT 	FIRST_NAME , LAST_NAME 
FROM 	EMPLOYEES e 
WHERE 	FIRST_NAME LIKE '%d'	-- 소문자 d 앞에 어떤 단어가 와도 상관없다는 뜻
;

-- like -> 이름 3번째 자리에 e가 놓인 사람
SELECT 	FIRST_NAME , LAST_NAME 
FROM	EMPLOYEES e  
WHERE 	FIRST_NAME LIKE '__e%'	-- 언더바(_)로 자리수를 나타낸다.
;

 

- NULL

-- is null
-- employees 테이블에서 commission_pct가 null인 사람의 firsrt_name, last_name, job_id, commision_pct 조회
SELECT 	FIRST_NAME , LAST_NAME , JOB_ID , COMMISSION_PCT 
FROM 	EMPLOYEES e 
WHERE 	COMMISSION_PCT IS NULL 

-- is not NULL
-- commission_pct가 null이 아닌 사람의 firsrt_name, last_name, job_id, commision_pct 조회
SELECT 	FIRST_NAME , LAST_NAME , JOB_ID , COMMISSION_PCT 
FROM	EMPLOYEES e  
WHERE 	COMMISSION_PCT IS  NOT NULL 
;

 

- 오름차순과 내림차순

-- order by ASC -> 오름차순
-- employees 테이블의 전체 데이터를 first_name 오름차순 순으로 조회하기
SELECT 		*
FROM		EMPLOYEES e  
ORDER BY	FIRST_NAME ASC  
;

-- 생략가능
SELECT 		*
FROM		EMPLOYEES e  
ORDER BY	FIRST_NAME
;

-- order by EDSC -> 내림차순
-- employees 테이블의 전체 데이터를 salary 내림차순 순으로 조회하기
SELECT 		*
FROM 		EMPLOYEES e 
ORDER BY	SALARY DESC
;

 

- 합계 sum()

-- employees 테이블에서 salary의 합계 조회
SELECT	SUM(SALARY)
FROM	EMPLOYEES;

 

- count()

-- employees 테이블에서 employee_id 갯수 조회
SELECT	COUNT(EMPLOYEE_ID)
FROM	EMPLOYEES
;

-- 문제
-- employees 테이블에 몇 개의 부서가 있는지 조회하기
SELECT	COUNT(DISTINCT DEPARTMENT_ID)	-- 부서 갯수를 알아야 하므로 중복데이터는 제거
FROM	EMPLOYEES
;

-- employees 테이블에서 first_name count와, 중복을 제거한 first_name count 조회하기
SELECT COUNT(FIRST_NAME), COUNT(DISTINCT FIRST_NAME)
FROM EMPLOYEES e 
;

 

- 평균 avg()

-- employees 테이블에서 salary 평균 조회
SELECT 	AVG(SALARY) 
FROM 	EMPLOYEES e  
;

-- 문제
-- department_id 80인 급여 평균 조회하기
SELECT 	AVG(SALARY) 
FROM	EMPLOYEES e 
WHERE 	DEPARTMENT_ID = 80
;

 

-- 최대값 max(), 최소값 min()

-- max
-- 급여를 가장 많이 받는 사람
SELECT 	MAX(SALARY)
FROM 	EMPLOYEES e 
;

-- 가장 나중에 입사한 사람
SELECT 	MAX(HIRE_DATE)
FROM 	EMPLOYEES e 
;

-- min
-- 급여를 가장 적게 받는 사람
SELECT 	MIN(SALARY) 
FROM 	EMPLOYEES e 
;

-- 가장 먼저 입사한 사람
SELECT 	min(HIRE_DATE)
FROM	EMPLOYEES e 
;

 

728x90