728x90
1. DB 접속하기
- 다양한 방법으로 DB 접속이 가능하나 현재는 오라클DB에서 제공하는 sqlplus 를 사용함
- cmd - sqlplus dbID/dbPasswd
2. WHERE 조건절
- WHERE 조건절에는 여러 연산자가 오는데 이때 비교나 논리 연산자가 아닌 다른 연산자들은 앞이나 뒤에 NOT 을 붙여주면 반대를 구할 수 있다.
- BETWEEN 작은값 AND 큰값, NOT BETWEEN
- IS NULL, IS NOT NULL
- IN ( ~), NOT IN (~)
- LIKE, NOT LIKE % _
3. SQL 내용 저장하기
1) SAVE
- 내가 작성했던 가장 마지막 SQL 문장을 파일로 저장하기 위해서 사용하는 명령어
- 아래 명령어로 저장이 가능하며, 저장되는 위치는 C:\Users\[사용자명] 이 기본 위치
- 이는 기본적으로 CMD 를 열었을 때의 위치가 C:\Users\[사용자명] 이기 때문이라고 생각한다.
- 만일 SQLPLUS 를 cmd에서 위치를 바꿔 특정 위치에서 실행한다면 그 위치에 파일이 저장된다.
- 저장 시 위치를 지정해준다면 해당 위치에 파일이 저장된다.
- 만일 해당 위치에 동일한 파일 명의 sql 파일이 존재한다면 기본적으로 replace 덮어쓰기를 수행한다. 혹은 save [파일명] replace 로 덮어쓰기 명령을 사용할 수 있다.
SAVE [파일명]
save E:\\app\\[파일명] => E 드라이브 app 폴더 안에 해당 파일명으로 저장
SAVE [파일명] REPLACE => 해당 파일명으로 덮어쓰기
- 아래 명령어를 사용해서 save 로 저장되어있던 SQL 파일 안의 내용을 실행할 수 있다.
@[파일명].sql
2) SPOOL
- SAVE 와는 다르게 전체 명령어와 명령어로 확인된 QUERY 결과를 저장하는 명령어
- 저장 위치에 대해서는 기존 SAVE 명령어와 동일하게 자신이 지정해 줄 수 있으며 기본 위치는 cmd 의 위치라고 생각하면 됨.
- 만약 spool off 없이 cmd 를 닫아버린다면, spool 이 어디까지 저장되는지는 미지수 꼭 spool off 를 해주자
SPOOL [파일명] => 기본확장자는 LST
SPOOL [파일명].[확장자명]
SPOOL 명령어만 단독으로 사용한다면 스풀 사용 여부를 확인 할 수 있다.
##################################
SQL> -- 지금부터 모든 사용하는 모든 명령어는 b1.lst 로 저장된다.
SQL> SELECT * FROM DEPT;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> SELECT * FROM EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80/12/17 800 20
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 87/04/19 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 87/05/23 1100 20
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
14 개의 행이 선택되었습니다.
SQL> SELECT * FROM DEEPT;
SELECT * FROM DEEPT
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
SQL> -- SPOOL 사용여부는 그냥 SPOOL 명령어 사용
SQL> -- 저장완료는 SPOOL OFF
SQL> SPOOL OFF
3) 시간 관련
- 시간을 확인하기 위한 명령어
set time on : 말 그대로 현재 시간이 프롬프트에 출력됨
10:03:13 SQL> => 프롬프트에 이런 식으로 출력된다
set timing on
경 과: 00:00:00.00 => query 조회 시간이 출력됨
4. Function 함수
- SQL 을 다룰 때 보다 쉽게 다루기 위해서 미리 짜여진 일종의 프로그램 => JAVA 메서드
- 함수명(컬럼) ⇒ 결과 출력
- SQL 함수는 크게 2 가지
1) single row function : 각 행마다 실행되는 함수
- UPPER : 대문자로만 컬럼 내용 출력
- LOWER : 소문자로
- INITCAP : 맨 앞 글자만 대문자
- NVL("컬럼명", "지정값") : NULL 이 아닌 경우 컬럼 내용을 출력하고, NULL 인 경우 지정값을 출력함
- SUBSTR(컬럼명, 숫자 범위) : 컬럼의 내용을 숫자 범위만큼 잘라서 출력
SQL> SELECT SUBSTR(ENAME, 1, 3) , SUBSTR(ENAME, 3) FROM EMP;
SUBSTR SUBSTR(ENAME,3)
------ ----------------
SMI ITH
ALL LEN
WAR RD
JON NES
MAR RTIN
BLA AKE
CLA ARK
SCO OTT
KIN NG
TUR RNER
ADA AMS
- INSTR(컬럼명, ‘글자’) : 해당 글자가 몇 번째에 위치해있는지 출력
- LENGTH(컬럼명) : 컬럼 내용이 몇 글자인지 출력
- RPAD, LPAD(컬럼명, 숫자, ‘기호’) : 숫자 만큼의 범위에서 컬럼 값의 길이만큼을 빼고 나머지는 기호로 채우기
- ROUND(숫자, 숫자) : 반올림
- TRUNC(숫자, 숫자) : 소숫점 자르기
SQL> SELECT ROUND(45.129, 2), TRUNC(49.129, 2) FROM DUAL;
ROUND(45.129,2) TRUNC(49.129,2)
--------------- ---------------
45.13 49.12
- MOD(숫자, 숫자) : 앞의 숫자를 뒤에 숫자로 나눴을 때 나머지 값 출력
- 날짜와 관련된 함수
- MONTHS_BETWEEN(날짜, 날짜) : 날짜와 날짜 사이 일 수
- ADD_MONTHS(날짜, 숫자) : 해당 날짜로부터 숫자 만큼 뒤
- NEXT_DAY(날짜, 요일) : 해당 날짜의 다음 요일이 몇 일 언제인지
- LAST_DAY(날짜) : 날짜 에 해당하는 달의 마지막 날
2) 함수의 중첩
- 함수는 단순히 한개만 사용가능한 것이 아니라 다른 프로그래밍 언어와 비슷하게 함수 안에 함수 사용이 - 중첩이 - 가능하다.
- 대표적으로 아래와 같이 응용 가능
SQL> SELECT ENAME AS 사원명, HIREDATE AS 입사일, NEXT_DAY(ADD_MONTHS(HIREDATE,6), '금') AS "6개월후금" FROM EMP;
사원명 입사일 6개월후금요일
---------- -------- --------
SMITH 80/12/17 81/06/19
SQL> SELECT ENAME AS "사원명", HIREDATE AS "입사일", TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE), 0) AS "근속월" FROM EMP;
사원명 입사일 근속월
---------- -------- ----------
SMITH 80/12/17 493
3) 형 변환
- SQL 은 기본적인 암시적 형변환 - 자동 형변환? - 을 지원한다.
- 문자열 컬럼에 숫자를 넣어서 찾을 때 암시적으로 숫자 → 문자로 변환하여 검색한다.
- NUMBER ↔ CHAR : 자동 형변환 가능
- 물론 암시적 형변환이 아닌 명시적으로 함수를 통해서 형변환을 시켜 검색해야하는 경우도 있음
- TO_변환하고자하는형(원래값, 형식) : TO_CHAR(), TO_NUMBER(), TO_DATE()
- 이때 형식이란 원래값이 어떤 형식으로 되어있는지를 의미함→ DATE 라면 YYYY/MM/DD
- 만약 월급 숫자 → 문자로 변환한다면 다음 형식을 따르게 된다.
- 이때 999 로 해둔 것은 일의 자리 숫자 중 가장 큰 숫자 9 를 넣어줌으로써 숫자가 있으면 그 숫자를 출력한다는 의미가 된다.
SQL> SELECT ENAME, TO_CHAR(SAL, '$999,999.99') FROM EMP; ENAME TO_CHAR(SAL, ---------- ------------ SMITH $800.00
- TO_변환하고자하는형(원래값, 형식) : TO_CHAR(), TO_NUMBER(), TO_DATE()
5. SQL 제어문 : IF , CASE
- SQL 에서는 제어문과 변수 모두 없음!!
1) DECODE 라는 함수를 통해서 IF문을 대신 할 수 있다 ⇒ 함수
DECODE('컬럼내용1', '컬럼1과 동일하면', ',컬럼1과 다르면'
'컬럼내용2', '컬럼2과 동일하면 실행', '컬럼2와 다르면 실행',
--------)
#################
SQL> SELECT ENAME, JOB, SAL, COMM, DECODE(JOB,'MANAGER',SAL*1.1,
2 'CLERK', SAL*1.05,
3 SAL) AS "연봉인상" FROM EMP;
ENAME JOB SAL COMM 연봉인상
---------- --------- ---------- ---------- ----------
SMITH CLERK 800 840
ALLEN SALESMAN 1600 300 1600
JONES MANAGER 2975 3272.5
2) ELSE 문 사용하여 SQL 문 제어에 활용할 수 있다 ⇒ 얘는 함수 X
CASE WHEN [조건문1]
WHEN [조건문2]
ELSE
[조건문3]
END [별칭]
##########################
SQL> SELECT ENAME, JOB SAL,
2 CASE WHEN JOB = 'MANAGER' THEN SAL*1.1
3 ELSE SAL
4 END AS "월급향상"
5 FROM EMP;
ENAME SAL 월급향상
---------- --------- ----------
SMITH CLERK 800
ALLEN SALESMAN 1600
'DB - SQL' 카테고리의 다른 글
SQL 다루기(3) : VIEW, INDEX, SEQUENCE, DB사용자 계정 다루기 (0) | 2022.02.19 |
---|---|
SQL 다루기(2) : DB 제약 조건과 key (0) | 2022.02.18 |
SQL 다루기(1) : DML, DDL (0) | 2022.02.15 |
DB 기본기 익히기 (3) : JOIN, GROUP BY, ORDER BY (0) | 2022.02.12 |
DB 기본기 익히기 (1) : 기본 slelect (0) | 2022.02.11 |
댓글