단어에서 시작하는 첫 알파벳만 알고 싶거SUBSTR나, 전화번호에서 마지막 네자리 숫자만 알고 싶을때는 문자열 일부를 추출하는 함수인 SUBSTR를 사용합니다.
함수
설명
SUBSTR(문자열 데이터, 시작위치, [추출길이] )
- 문자열 데이터의 시작 위치부터 추출 길이 만큼의 문자열을 출력합니다. - 시작위치가 음수인경우 문자열의 끝에서 부터 역산하여 위치를 찾아 해당 위치부터 추출 길이 만큼의 문자열을 출력합니다. - 추출길이가 생략된 경우 문자열의 시작위치 부터 끝까지를 출력합니다. 이때, 시작위치가 음수이면 문자열의 끝에서 부터 역산한 위치부터 끝까지의 문자열을 출력합니다.
----------------------------------------------------- 둘째마당 | 실무에서 자주 사용하는 SQL, SELECT문을 이용한 데이터 조회 04장 SELECT문의 기본 형식 __04-1 실습용 테이블 살펴보기 __04-2 데이터를 조회하는 3가지 방법 — 셀렉션, 프로젝션, 조인 __04-3 SQL의 기본 뼈대, SELECT절과 FROM절 __04-4 중복 데이터를 삭제하는 DISTINCT __04-5 보기 좋게 별칭 설정하기 __04-6 원하는 순서로 출력 데이터를 정렬하는 ORDER BY절 __04장 되새김 문제
05장 결과를 더 정확하고 다양하게 출력하는 WHERE절과 연산자 __05-1 필요한 데이터만 쏙 출력하는 WHERE절 __05-2 여러 개 조건식을 사용하는 AND, OR 연산자 __05-3 연산자 종류와 활용 방법 알아보기 __05장 되새김 문제
06장 데이터 처리와 가공을 위한 오라클 함수 __06-1 오라클 함수 __06-2 문자 데이터를 가공하는 문자 함수 __06-3 숫자 데이터를 연산하고 수치를 조정하는 숫자 함수 __06-4 날짜 데이터를 다루는 날짜 함수 __06-5 자료형을 변환하는 형 변환 함수 __06-6 %00; 처리 함수 __06-7 상황에 따라 다른 데이터를 반환하는 DECODE 함수와 CASE문 __06장 되새김 문제
07장 다중행 함수와 데이터 그룹화 __07-1 하나의 열에 출력 결과를 담는 다중행 함수 __07-2 결괏값을 원하는 열로 묶어 출력하는 GROUP BY절 __07-3 만든 그룹을 조건별로 출력할 때 사용하는 HAVING절 __07장 되새김 문제
08장 여러 테이블을 하나의 테이블처럼 사용하는 조인 __08-1 조인 __08-2 조인 종류 __08-3 표준 SQL 문법으로 배우는 조인 __08장 되새김 문제
09장 SQL 속 또 다른 SQL, 서브쿼리 __09-1 서브쿼리 __09-2 실행 결과가 하나인 단일행 서브쿼리 __09-3 실행 결과가 여러 개인 다중행 서브쿼리 __09-4 비교할 열이 여러 개인 다중열 서브쿼리 __09-5 FROM절에 사용하는 서브쿼리와 WITH절 __09-6 SELECT절에 사용하는 서브쿼리 __09장 되새김 문제 ----------------------------------------------------- 셋째마당 | 데이터를 조작, 정의하는 SQL 배우기 10장 데이터를 추가, 수정, 삭제하는 데이터 조작어 __10-1 테이블에 데이터를 추가하는 INSERT __10-2 테이블에서 데이터를 수정하는 UPDATE __10-3 테이블에서 데이터를 삭제하는 DELETE __10장 되새김 문제
11장 트랜잭션 제어와 세션 __11-1 하나의 단위로 데이터를 처리하는 트랜젝션 __11-2 트랜잭션을 제어하는 명령어 __11-3 세션과 읽기 일관성의 의미 __11-4 수정 중인 데이터 접근을 막는 LOCK __11장 되새김 문제
12장 데이터 정의어 __12-1 객체를 생성, 변경, 삭제하는 데이터 정의어 __12-2 테이블을 생성하는 CREATE __12-3 테이블을 변경하는 ALTER __12-4 테이블 이름을 변경하는 RENAME __12-5 테이블의 데이터를 삭제하는 TRUNCATE __12-6 테이블을 삭제하는 DROP __12장 되새김 문제
13장 객체 종류 __13-1 데이터베이스 관련 데이터를 저장한 데이터 사전 __13-2 더 빠른 검색을 위한 인덱스 __13-3 테이블처럼 사용하는 뷰 __13-4 규칙에 따라 순번을 생성하는 시퀀스 __13-5 공식 별칭을 지정하는 동의어 __13장 되새김 문제
14장 제약 조건 __14-1 제약 조건 종류 __14-2 빈 값을 허락하지 않는 NOT %00; __14-3 중복하지 않는 값 UNIQUE __14-4 유일하게 하나만 있는 값 PRIMARY KEY __14-5 다른 테이블과 관계를 맺는 FOREIGN KEY __14-6 데이터 형태와 범위를 정하는 CHECK __14-7 기본값을 정하는 DEFAULT __14장 되새김 문제 ----------------------------------------------------- 부록 A | 사용자, 권한, 롤 관리 __A-1 사용자 관리 __A-2 권한 관리 __A-3 롤 관리
SELECT ENAME,UPPER(ENAME), LOWER(ENAME), INITCAP(ENAME) FROM EMP;
해당 함수들은 문서의 비교나 특정 문자열을 찾는 경우, 해당 문자가 대문자로 쓰여 있던, 소문자로 쓰였있던, 섞어서 쓰여 있던 상관없이 검색이 가능합니다. 즉 내가 'Oracle' 이라는 단어를 검색하고 싶은데, 문서에는 "oracle", "ORACLE", "OrAcLe"와 같은 형식으로 쓰여 있는 경우 일반검색으로는 찾을 수 없지만, 문자를 모두 대문자나, 소문자로 치환하면 비교하여 찾는 것이 가능합니다.
자료 검색의 예로 이름이 'TH'로 끝나는 직원을 찾는 쿼리를 만들어 봅시다. (LIKE 연산자에 대해 궁금하신 부분은 'SQL 연산자 - LIKE 연산자' 부분을 참고하시면 됩니다.)
SELECT * FROM EMP WHEREUPPER(ENAME) LIKE UPPER('%th');
UPDATE문과 DELETE문은 테이블에 있는 데이터를 수정하거나 삭제하는 기능을 수행하고 있어, 작업에 위험성이 큰 명령어 입니다. 특히 민감한 데이터가 있는 테이블에 잘못된 작업을 실행한다면 큰 문제가 발생됩니다. 그러므로, UPDATE문과 DELETE문을 실행 할 때는 아래 사항들을 유의 하여 작업을 진행해야 합니다.
WHERE 조건 확인: UPDATE 문을 실행하기 전에는 반드시 WHERE 조건을 확인하여 의도한 데이터만 수정되도록 합니다. - WHERE 조건이 변경하고자 하는 행을 정확하게 선택하는지 SELECT문으로 먼저 조회하여 확인해 보는 습관이 필요합니다.
백업: 중요한 데이터를 수정하기 전에는 데이터를 백업하여 복구할 수 있도록 준비합니다. - ROLLBACK으로 복구가 가능한 부분도 있긴 합니다만, COMMIT해버린 자료에 대해서는 ROLLBACK 이 불가능 하니, 중요한 작업들은 백업 후 수행하는 습관을 꼭 들이시길 바랍니다. 그리고, 작업이 끝났으면, 확인 후 백업 파일을 지우는 습관도 같이 들여 두셔야 공간의 낭비 및 이후 작업의 혼선을 방지 할 수 있습니다.
트랜잭션 활용: 여러 UPDATE 문을 실행하거나 작업의 원자성이 중요한 경우 트랜잭션을 사용하여 COMMIT 또는 ROLLBACK 할 수 있도록 합니다. - COMMIT 시점을 잘 선택하여 필요한 시점에 ROLLBACK이 가능하도로 하는 것이 중요합니다.
테스트 환경에서 검증: 실제 운영 환경에 적용하기 전에 개발 또는 테스트 환경에서 충분히 검증하여 예상치 못한 결과를 방지합니다.
이러한 유의사항을 준수하여 UPDATE 문과 DELETE문을 사용한다면 데이터베이스의 데이터를 안전하고 효과적으로 수정/삭제 하실 수 있습니다.
두 개 이상의 SELECT문으로 조회한 결과를 하나의 결과로 연결하여 보여줄 때 사용 합니다. 이때 두 SELECT 문의 컬럼 갯수와 각 컬럼의 자료형, 순서가 일치해야 합니다. 서로 다른 타이블이나 컬럼에 대해서 수행이 가능 합니다. 이때 결과로 출력되는 컬럼명은 앞에 오는 SELECT문의 컬럼명이 사용 됩니다.
집합연산자들은 집합관계를 생각하시면 쉽게 이해하실 수 있습니다. 다음은 집합연산자 들에 대한 간략한 설명입니다.
종류
설명
집합관계
UNION
두개이상의 SELECT문을 하나의 결과 값으로 출력합니다. 이때 중복값은 제외 합니다.
A∪ B(합집합)
UNION ALL
두개이상의 SELECT문을 하나의 결과 값으로 출력합니다. 이때 중복값은 제외하지 않습니다.
A, B
MINUS
먼저 작성된 SELECT 문의 결과 값 중 다음 SELECT 문에 없는 결과 값만 출력 합니다.
A - B(차집합)
INTERSECT
먼저 작성된 SELECT 문과 다음 SELECT 문의 결과 값이 같은 것만 출력 합니다.
A⋂B(교집합)
1. UNION연산자
사원정보(EMP) 테이블에서 부서 번호(DEPTNO)가 10인 결과를 출력하는 SELECT문과 30인 결과를 출력하는 SELECT 문을 이용하여, 부서번호가 10 또는 30인 사원정보를 출력해 봅시다. EMP 테이블의 구조예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.
SELECT ENAME, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 10 UNION SELECT ENAME, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 30;
이때 출력할 컬럼의 숫자가 다르거나, 출력할 열의 자료형이 다른 경우에는 오류가 발생하여 실행되지 않습니다.
데이터 형만 같다면, 컬럼명에 영향을 받지 않음도 테스트 해 봅시다. 사원정보 테이블에서 급여(SAL)와 급여외 수당(COMM)은 NUMBER로 유형이 동일합니다. 이 컬럼의 위치를 두번째 SELECT 문에서 바꾸어 보면 어떻게 될까요?
SELECT ENAME, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 10 UNION SELECT ENAME, COMM, SAL, DEPTNO FROM EMP WHERE DEPTNO = 30;
아래 보시는 결과과 같이 컬럼명은 첫번째 SELECT 문에 사용된 것이 그대로 사용 되었고, 결과 자료는 각 SELECT 문의 수행 결과가 그대로 연결되었습니다.
실 사용시에도 이런 경우에는 오류가 발생하지 않으니, 작성시 유의 하시기 바랍니다.
2. UNION ALL연산자
사원정보(EMP) 테이블에서 부서 번호(DEPTNO)가 10인 SELECT 문 2개를 연결해 봅시다. 이때 UNION을 사용하면, 중복이 제거되어 SELECT 문 두개를 연결한 의미가 없습니다. 중복해서 2번 표현 되게 하려면 어떻게 해야 할까요?
SELECT ENAME, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 10 UNION ALL SELECT ENAME, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 10;
3. MINUS 연산자
집합연산자를 이용하여 사원정보(EMP) 테이블에서 부서 번호(DEPTNO)가 10인 정보만 제외하고 출력하는 쿼리를 만들어봅시다.
SELECT ENAME, SAL, COMM, DEPTNO FROM EMP MINUS SELECT ENAME, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 10;
결과와 같이 첫 번째 SELECT문의 결과값에서 두 SELECT문의 결과값이 같은 데이터를 제외한 값들이 출력됩니다.
4. INTERSECT 연산자
두개의 SELECT 문에서 공통적인 결과 값을 갖는 데이터만 출력하려면 어떻게 하면 될까요?
SELECT ENAME, SAL, COMM, DEPTNO FROM EMP INTERSECT SELECT ENAME, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 10;
결과와 같이 첫 번째 SELECT문의 결과값과두 SELECT문의 결과값이 같은 데이터들이 출력됩니다.