본문 바로가기

Lobo's study room/오라클DB

[1일차]select함수

## SQL - 1일차

#오라클 서버 연결
호스트:125.141.133.87
포트:1521
SID:xe

사용자:aa08
비번:aa08

---------------------------------------------------

# 유저 hr의 emp 테이블을 복사

create table emp as select * from hr.emp;

#쿼리 실행 : ctrl + enter

-------------------------------------------------------

EMPLOYEE_ID 사번
FIRST_NAME 
LAST_NAME 이름
EMAIL
PHONE_NUMBER
HIRE_DATE 입사일
JOB_ID 직군,직위
SALARY 월급,급여
COMMISION_PCT  판매수당율 : 0.25 -> 25%
MANAGER_ID 직속상관사번
DEPARTMENT_ID 부서번호

--------------------------------------------------------

# SELECT 절
- 컬럼명, 컬럼명, .....
- 모든 컬럼 : *
- 수식
- 별칭 : AS 별칭명, AS 생략가능
- || : 결합연산자
- DISTINCT : 중복행 제거
- 함수
- 서브쿼리

사번, 이름, 월급 검색

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM EMP ;

모든 컬럼

SELECT * FROM EMP;

사번, 이름, 월급, 보너스 검색
보너스 = 월급의 2배

SELECT EMPLOYEE_ID, LAST_NAME, SALARY, SALARY * 2
FROM EMP;

SELECT EMPLOYEE_ID, LAST_NAME, SALARY, SALARY * 2 AS BONUS
FROM EMP:

SELECT FIRST_NAME ||' '|| LAST_NAME
FROM EMP;

SELECT DISTINCT DEPARTMENT_ID FROM EMP;

-----------------------------------------------------------
IF (조건식)
 {
   참일때 명령문;
 }
ELSE
 {  
   거짓일때 명령문;
 }

# 조건 검색

-WHERE 조건식 AND 조건식...
-조건식 : 좌항 비교연산자 우항 ===> T, F
- 죄항 (컬럼) / 우항(값)
-비교연산자 : >, >=, <, <=, =, != ( <>, ><)
-행을 제한

# 숫자 검색
- 숫자만 쓸것 (콤마, 화폐단위) 빼고...

월급이 15000 이상 받는 사원의 이름과 월급

SELECT LAST_NAME, SALARY
FROM EMP
WHERE SALARY >= 15000;

# 문자 검색
- 문자는 작은따옴표로 감싼다!
- 작은따옴표 안에 문자는 대소문자 구분

Chen 의 월급과 입사일

SELECT SALARY, HIRE_DATE
FROM EMP
WHERE LAST_NAME = 'Chen';

# 날짜 검색
- 날짜 : 세기, 년, 월, 일, 시, 분, 초 -> 7 가지 정보
- 날짜는 작은 따옴표로 감싸고 날짜포맷으로 자료 넣을 것

2005년 이전에 입사한 사원의 이름과 입사일, 급여

SELECT LAST_NAME, HIRE_DATE, SALARY
FROM EMP
WHERE HIRE_DATE < '2005-01-01';

#조건이 여러개

2005년 이전에 입사한 사원중에 급여를 10000 이상 받는 사원의 이름, 입사일, 급여

SELECT LAST_NAME, HIRE_DATE, SALARY
FROM EMP
WHERE HIRE_DATE < '2005-01-01' AND SALARY>=10000;

---------------------------

# 그 밖의 연산자

-비교연산자:>,>=,<,<=,=,!=(<>,><)

-BETWEEN ... AND...
-IN
-LIKE
-IS

# 범위 검색
-BETWEEN 최소값 AND 최대값
==> 최소값과 최대값을 바꿔쓰면 검색결과 없음!!!
-최소값, 최대값 모두 포함
-숫자, 날짜, 문자 모두 범위검색 가능

월급 10000~15000 사이인 사원이름과 월급

SELECT LAST_NAME, SALARY
FROM EMP
WHERE SALARY BETWEEN 10000 AND 15000;

SELECT LAST_NAME, SALARY
FROM EMP
WHERE SALARY >=10000 AND SALARY <= 15000;

#목록
-IN(값1, 값2...)

부서 10, 20, 30 부서에 근무하는 사원의 이름과 부서번호

SELECT LAST_NAME, DEPARTMENT_ID
FROM EMP
WHERE DEPARTMENT_ID IN (10,20,30);

SELECT LAST_NAME, DEPARTMENT_ID
FROM EMP
WHERE DEPARTMENT_ID=10
OR DEPARTMENT_ID=20
OR DEPARTMENT_ID=30;

#패턴 검색
-LIKE
-문자 자료에만 ...
-% => 여러문자 대신
-_ => 한문자 대신

이름 첫자가 'T'인 사원의 이름

SELECT LAST_NAME
FROM EMP
WHERE LAST_NAME LIKE 'T%';

SELECT LAST_NAME
FROM EMP
WHERE LAST_NAME LIKE '%T%';

이름이 세자인 사원의 이름

SELECT LAST_NAME
FROM EMP
WHERE LAST_NAME LIKE '___';

SELECT LAST_NAME
FROM EMP
WHERE LAST_NAME LIKE '_t%';

SELECT * 
FROM 도서
WHERE 책이름 LIKE '%자바%' OR 책이름 LIKE '%JAVA%';

#IS
-NULL 값을 비교할 때 반드시 IS 사용할 것

판매수당율이 NULL인 사원만 검색

SELECT LAST_NAME, COMMISSION_PCT
FROM EMP
WHERE COMMISSION_PCT IS NULL;

#NOT
NOT LIKE
IS NOT NULL

------------------------------------------

#정렬

ORDER BY 컬럼명 [옵션],  컬럼명 [옵션] ...
-항상 쿼리의 마지막에 기술한다.

옵션
-오름차순 :ASC -> 기본이므로 생략가능
-내림차순:DESC

사번, 이름, 월급 검색, 단 월급이 많은 사원부터...

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM EMP
ORDER BY SALARY DESC;

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM EMP
ORDER BY SALARY DESC, LAST_NAME;

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM EMP
ORDER BY 3 DESC, 2;

** 컬럼명 대신 컬럼의 순서를 숫자로 사용한다.
** SELECT 절에 기술하지 않은 컬럼으로도 정렬가능 !!

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM EMP
ORDER BY HIRE_DATE;