이론/자바 풀스택 국비수업
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