본문으로 바로가기

180222 DB-2

category 프로그래밍/DB 2018. 2. 22. 21:18

*EMPLOYEES 테이블 구성요소

PCT:Percent(퍼센트)
gnb : global navigation bar
gbn : gubun(구분?)
manager_id : 관리자id
department_id: 부서id

*WHERE절 추가내용

SELECT *
FROM EMPLOYEES
WHERE SALARY <=10000(작거나 같다)
ORDER BY SALARY ASC
;

 

SELECT *
FROM EMPLOYEES
WHERE SALARY >=10000(크거나 같다)
ORDER BY SALARY ASC
;

------------------------------------------------------------------------------
*3000 이상 9000미만인 사원을 구하시오.

SELECT *
FROM EMPLOYEES
WHERE SALARY >=3000 (조건1)

AND SALARY <9000 (조건2)
ORDER BY SALARY ASC
;
위예제와 보듯이
조건은 조건1과 조건2가 하나되어 완성형이어야한다. 그래야지만 컴퓨터가 알아들을 수 있다.
------------------------------------------------------------------------------------
*between 연산자

-사용방법
between A and B :값이 A 이상 B이하의 데이터 값을 가지고 온다.(미만은 포함하지 않는다)

SELECT *
FROM EMPLOYEES
WHERE SALARY BETWEEN 3000 AND 8999
ORDER BY SALARY ASC
;
---------------------------------------------------------------------------
*3000 이하 15000이상인 사원을 구하시오.

SELECT *
FROM EMPLOYEES
WHERE SALARY <= 3000 OR SALARY >= 15000
ORDER BY SALARY ASC
;
----------------------------------------------------------------------------
*급여가 3000, 5000, 6000, 9000인 사원을 구하시오.

*in연산자
-()안에 지정한 값과 일치하는 데이터를 가져온다.
-숫자, 문자이든 몇개 씩 값을 줄때는 in을 쓴다.(단, 문자일때는 ''큰따옴표를 붙여야 함)

-사용방법
컬럼명 in(A,B,C,...);

SELECT *
FROM EMPLOYEES
WHERE  SALARY IN(3000,5000,6000,9000)
ORDER BY SALARY ASC


*지정한 값 이외
-사용방법
컬럼명 not in(A,B,C,...);

SELECT *
FROM EMPLOYEES
WHERE  SALARY NOT IN(3000,5000,6000,9000)
ORDER BY SALARY ASC
;

같다 = , 같지 않다 !=
SELECT *
FROM EMPLOYEES
WHERE  SALARY != 3000
ORDER BY SALARY ASC
;

-------------------------------------------------------------------------
* 문자열함수(UPPER함수와 LOWER함수)
---> select, where절에서 사용가능

-대소문자 사용
UPPER(값) : 값을 대문자로 변환한다.

-소문자사용
LOWER(값) : 값을 소문자로 변환한다.


ex)
SELECT FIRST_NAME,UPPER(FIRST_NAME), LOWER(FIRST_NAME)
FROM EMPLOYEES
WHERE UPPER(FIRST_NAME) = UPPER('jack')
;
그러니까 결과물이 FIRST_NAME = jack일때만 UPPER(대문자)로 바꾸어서 출력합니다.

원본데이터가 바뀐것은 아니며 그 값을 비교하기 위해 바꾸어서 출력해주는 함수이다.
FIRST_NAME,UPPER(FIRST_NAME), LOWER(FIRST_NAME)
Jack  JACK  jack

------------------------------------------------------------------------
*문자열비교연산자(LIKE) : 형태가 비슷한것을 찾아준다...
- 사용법(문자,숫자 모두 사용 가능)
문자는 역시 큰따옴표를 붙인다.
값1 like 값2
값1에서 값2와 닮은것

값2가 문제가 되는데 오라클에서는 %는 ~가 있을 수도 없을수도 있다.

조건절 WHERE에서
'A%'    : A로 시작하는 데이터를 찾아준다.
'%A%'   : 앞이든 뒤든 A가 있는 데이터를 찾아준다.
'%A'    : 맨뒤가 A를 찾아준다.
'A%A%' : 이름이 A로 시작하고 중간에  A가들어가는 경우

----------------------------------------------------------------------------
* IS NULL연산자  <---> IS NOT NULL연산자
null : 값이 없는경우
0은 null이 아니다.

IS NULL 연산자를 사용하면 컬럼에 대한 데이터 값이 NULL값만 걸러낸다.
그반대인IS NOT NULL연산자는 NULL값이 아닌값만 걸러낸다.

사용법
SELECT 컬럼명
FROM 테이블이름
WHERE 컬럼명 IS NULL(IS NOT NULL);


ex)
SELECT *
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL
;

* Null Value or Null Value Logic
*NVL(값1, 값2) :화면에 나타냈을때 값1이 null이면 값으로 표시하겠다.
ex)
SELECT NVL(commission_pct,0)
FROM EMPLOYEES
--WHERE COMMISSION_PCT IS NULL
;

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

SELECT 1+2*3/2
FROM  DUAL(테이블이 비어있다는 의미)
;
값 : 4

SELECT 1-2*3/2
FROM  DUAL
;
값 : -2

*MOD(값1, 값2)
나머지를 필요로 하는경우 MOD를 사용

ex)
SELECT MOD(1,2)
FROM  DUAL
;

각 사원들의 커미션 금액을 수하시오
금여 * 커미션비율

SELECT FIRST_NAME, SALARY * COMMISSION_PCT
FROM EMPLOYEES
WHERE COMMISSION_PCT != 0
ORDER BY SALARY*COMMISSION_PCT DESC
;

John 0.4 5600
Karen 0.3 4050
Alberto 0.3 3600
Janette 0.35 3500
Patrick 0.35 3325
Gerald 0.3 3300
Ellen 0.3 3300
Allan 0.35 3150
Peter 0.3 3000
----------------------------------------------------------------

* TO_CHAR(값, 형태)
값을 지정 형태의 문자열로 변환, 한글은 안됨

sysdate는 시스템 시간
                 YEAR(년), MINUTE(분), DAY(날짜), HOUR(시), MINUTE(분), SOCOND(초)
ex)1
SELECT to_char(SYSDATE,'YYYY-MM-DD DAY AM HH24:MI:SS')
FROM DUAL
;
결과
2018-02-22 목요일 오후 14:52:01
-----------------------------------------------------------------
*숫자나 날짜를 문자로 변환해주는 함수

-사용법
TO_CHAR(숫자 혹은 날짜, format)
format   설명   사용예
AM, A.M.  오전    to_char(SYSDATE,'AM')  -> 오전
PM, P.M.  오후    to_char(SYSDATE,'PM')  -> 오후  
YYYY, YYY, YY, Y 년도    to_char(SYSDATE,'YYYY') -> 2018
MONTH, MON   월     TO_CHAR(SYSDATE,‘MONTH’)  ->2월
MM    01~12 형태의 월   TO_CHAR(SYSDATE, ‘MM’) → 02
D    주중의 일을 1~7로 TO_CHAR(SYSDATE, ‘D’) → 2
HH24   시간을 01~24 형태 TO_CHAR(SYSDATE, ‘HH’) → 15
HH, HH12   시간을 01~12시 형태로 TO_CHAR(SYSDATE, ‘HH’) → 03
MI    분을 00~59분 형태로 TO_CHAR(SYSDATE, ‘MI’) → 56
SS    초를 01~59초 형태로 TO_CHAR(SYSDATE, ‘SS’) → 33
WW or IW  주를 01~53주 형태로 TO_CHAR(SYSDATE, ‘WW’) → 06
,(콤마)   콤마로 표시  TO_CHAR(123456, ‘999,999’) → 123,456
ex)
SELECT to_char(SYSDATE,'YYYY-MM-DD D AM HH24:MI:SS')
FROM DUAL
;

DAY를 지우고 D를 입력하면
 0    1      2       3        4      5      6     7
 일   월     화      수       목     금     토    일
2018-02-22 5 오후 14:51:22

ex)
SELECT to_char(SYSDATE,'iw')

FROM DUAL
;

-시스템언어에 맞게 반환 == U도 같음
SELECT to_char(100000000000,'L999,999,999,999,99')

*달러
SELECT to_char(100000000000,'$999,999,999,999,99')
FROM DUAL
;

ex)
*1월에 입사한 사원들 중 커미션을 받는 사원들의 커미션 금액을 구하시오.

--출력: 이름, 입사일, 커미션 금액
SELECT  FIRST_NAME,HIRE_DATE,SALARY * COMMISSION_PCT  
FROM EMPLOYEES
WHERE TO_CHAR(hire_date, 'MM') = '01' AND COMMISSION_PCT != 0;
               IS NOT NULL
---------------------------------------------------------------------------------
* 데이터 타입

- Date : 날짜
- Number : 숫자
- Varchar2 : 문자

*||(파이프라인) :  문자를 연결할때 쓴다.(이어준다)

ex)

SELECT 'HELLO' || 'WORLD'
FROM EMPLOYEES

;

----------------------------------------------------
*concat 함수
CONCAT('hello', 'world','!!')
--concat(값1, 값2)
--값1과 값2를 이어준다.(한번에 2개씩만)


ex)
SELECT CONCAT(CONCAT('hello', 'world'),'!!')
FROM EMPLOYEES
;
-----------------------------------------------------

ex)
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '%' || 'c' || '%'
;

-------------------------------------------------------------------------------
-사원 정보를 입력하시오
-출력: 사번, 이름+성, 이메일


SELECT EMPLOYEE_ID, FIRST_NAME  ||' '|| LAST_NAME , EMAIL
FROM EMPLOYEES

;
---> 공백도 문자열...

*문자열 함수 SUBSTR
substz(대상값, 숫자) : 대상값을 숫자번째 글자부터 출력
substz(대상값, 숫자1, 숫자2) : 대상값을 숫자1번째 글자부터 숫자 2개만큼 자른다.

 


 

'프로그래밍 > DB' 카테고리의 다른 글

DB-180228  (491) 2018.03.02
DB-180227  (479) 2018.03.02
180226 DB-4  (487) 2018.02.27
18223 DB-3  (462) 2018.02.25
2018221 DB-1  (475) 2018.02.21