관계 형 데이터베이스 관계 형 데이터 배 이스 는 테이블 의 집합 으로 데이터 를 표현 하 는 것 이 다 . 관계 형 데이터베이스 관리 시스템 ( Relational Database Management System , RDBMS ) Oracle , IBM , SAP , MS - SQL , MySQL , SQLite , Tibero , AccessOracle : 공공 기관 이나 대 기업 에서 사용 IBM , SAP : 대 기업 이나 금융 권 MySQL , Access : 소규모 기업 Tibero : 공공 기관 , 대 기업 SQLite : embedded 주요 용어 릴레이 션 ( Relation ) : 정보 저장 의 기본 형태 가 2 차원 구조 의 테이블 속성 ( Attribute , Column , Field ) : 테이블 의 각 열 을 의미 도메인 ( Domain ) : 속성 이 가질 수 있 는 값 의 집합 ( 데이터 타입 + 제약 조건 ) 튜플 ( Tuple , Row , Record ) : 테이블 이 행 을 구성 하 는 속성 들 의 집합 카디널 리티 ( Cardinality ) : 서로 다른 테이블 사이 에 대응 되 는 수 key : 데이터 를 구분 할 수 있 는 속성 , 혹은 속성 의 집합 Primary Key : 기본 키 라고 도 함 . 테이블 내 에서 데이터 를 구별 하 기 위한 속성 또는 속성 의 집합 이 다 . 데이터베이스 는 데이터 를 저장 한 순서 대로 저장 하 지 않 는다 . Primary Key 를 이용 해 Indexing 하 면서 저장 한다 . Foreign Key : 외래 키 , 또는 참 조키 라고 도 부른다 . 다른 테이블 에서 유일 한 값 을 갖 는 속성 이 다 . 일관 성 있 게 데이터베이스 를 설정 하 기 위해서 외래 키는 설정 해 두 는 것 이 좋 다 . OracleOracle 사 에서 제작 한 관계 형 데이터베이스 프로그램 . Oracle 웹 사이트 에서 회원 가입 후 다운로드 받 아서 설치 1 . 버전 1 ) Enterprise Editon : 대 규모 기업 에서 사용 할 수 있 는 제품 으로 프로세서 개수 에 상관없이 사용 가능 2 ) Standard Editon : 프로세서 를 4 개 까지 사용 할 수 있 는 제품 3 ) Express Edition : 1 개 의 프로세서 만 사용 가능 하 고 11 GB 까지 만 저장 가능 한 제품 2 . 설치 확인 1 ) [ 제어판 - - [ 관리 도구 ] - [ 서비스 ] 에서 Oracle 로 시작 하 는 제품 이 등록 되 었 는지 확인 → OracleService 이름 : Oracle 서버 를 위한 서비스 이름 이 ExpressEdition 이 면 XE , EnterpriseEdtion 이 면 ORCL 이 다 . → Oracle 이름 TNSListener : 외부 에서 접속 하 기 위 한 서비스 . 이 서비스 가 중지 중 이 면 외부 에서 는 접속 이 불 가능 . 2 ) 콘솔 창 에서 sqlplus 입력 . user - name 은 system , 비밀 번호 는 설치 할 때 사용 한 비밀 번호 입력 후 접속 여부 확인 . 3 . 접속 도구 1 ) sqlplus : 기본 적 으로 제공 되 는 접속 도구 . 보통 관리자 들 이 사용 하 는 접속 도구 다 . CLI ( Command Line Interface ) 기반 으로 명령어 를 직접 입력 헤야 하 는 번거 로움 이 있 다 . 2 ) SQL Developer : 오라클 이 제공 하 는 GUI 툴 . 3 ) Toad : 개발자 들 이 많이 사용 하 는 GUI 툴 . 4 . 접속 도구 를 이용 해 system 으로 접속 후 scott . sql 실행 오라클 서버 에 접속 에 필요 한 정보 오라클 서버 위치 : 자신 의 컴퓨터 이 면 localhost 오라클 서버 포트 : 기본 은 1521 오라클 서비스 이름 : ExpresssEdition 의 경우 는 xe , EnterpriseEdition 의 경우 는 OCRL 계정 비밀 번호 위 의 정보 를 가지 고 접속 프로그램 에서 접속 샘플 계정 에 접속 및 샘플 데이터베이스 생성 C : \ oraclexe \ app \ oracle \ product \ 11 . 2 . 0 \ server \ rdbms \ admin \ scott . sql 아이디 : SCOTT 비밀 번호 : TIGER 5 . 현재 접속 한 유저 관련 SQL 1 ) 현재 유저 가 가진 객체 확인 하 기 select * from user _ objects ; 2 ) 현재 유저 가 가진 테이블 만 확인 하 기 select object _ namefrom user _ objectswhere object _ type = ' TABLE '; 3 ) 테이블 구조 보 기 desc 테이블 이름 ; desc emp ;※ 필드 설명 emp 테이블 : 사원 테이블 empno : 사원 번호 - 기본 키 ename : 사원 이름 job : 담당 업무 mrg : 관리자 사원 번호 hiredate : 입사 일 sal : 급여 comm : 성과급 deptno : 부서 번호 dept 테이블 : 부서 테이블 deptno : 부서 번호 - 기본 키 dname : 부서 이름 loc : 부서 위치 SQL ( Structured Query Language ) 데이터베이스 에서 사용 하 는 구조 적 질 의 어 다 . 1 . 분류 1 ) DDL ( Data Definition Language ) 데이터 정의 언어 . 관리자 의 언어 . 한 번 수행 되 면 되돌릴 수 없 다 . 따라서 각별 한 주의 가 필요 . Create : 구조 를 생 성 Alter : 구조 를 변경 Drop : 구조 를 삭제 Rename : 이름 을 변경 Truncate : 테이블 내 의 데이터 를 모두 삭제 2 ) DCL ( Data Control Language ) 데어 터 제어 언어 . 관리자 의 언어 . 데이터베이스 접속 이나 사용 에 대한 권한 설정 을 의미 함 . Grant : 권한 을 부여 Revoke : 권한 을 회수 3 ) DQL ( Data Query Language ) 데이터 질 의 언어 . 개발자 가 가장 많이 사용 하 는 언어 . 아무리 많이 수행 해도 데어 터 베이스 를 변경 시키 지 않 는다 . Select : 데이터 를 검색 4 ) DML ( Data Manipulation Language ) 데이터 조작 언어 . 개발자 가 주로 사용 하 는 언어 . 데이터베이스 원본 이 아니 라 복사본 에 작업 을 수행 . TCL 을 이용 해서 내용 을 원본 에 반영 할 수 도 있 고 반영 하 지 않 을 수 도 있 다 . Insert : 데이터 를 삽입 Update : 데이터 를 수정 Delete : 데이터 를 삭제 5 ) TCL ( Transaction Control Language ) 트랜잭션 제어 언어 . 개발자 언어 . 한 번 수행 하 면 되돌릴 수 없 다 . Commit : 현재 까지 의 작업 내용 을 데이터베이스 에 반영 Rollback : 현재 까지 의 작업 내용 을 데이터베이스 에 반영 하 지 않 고 폐기 Savepoint : 중간 에 Rollback 할 수 있 는 포인트 를 설정 작성 규칙 SQL 예약어 , 테이블 이름 , 컬럼 이름 은 대소문자 구분 을 하 지 않 는다 . Where 절 에서 값 을 비교 할 때 는 대수 문자 를 구분 하 고 계정 이름 과 비밀 번호 도 대소문자 를 구분 한다 . SQL 문장 은 세미콜론 ( ;) 으로 마무리 한다 . SQL PLUS 를 제외 한 곳 에서 는 생략 이 가능 하 다 . java 등 프로그래밍 언어 에서 SQL 을 사용 할 때 는 삽입 해서 는 안 된다 . 문자열 상수 를 작성 할 시 에 는 작 은 따옴표 ( ') 안 에 기재 해야 한다 . 단 , 대문자 와 특수 문자 는 큰따옴표 ( ") 를 사용 해야 한다 . Select 데이터 를 검색 하 기 위한 SQL 명령어 로서 데이터 질 의 언어 ( Data Query Language , DQL ) 이 다 . 1 . 기본 형식 select * 또는 컬럼 이름 나열 from 테이블 이름 → 테이블 에서 컬럼 의 값 만 가져오 기 * 을 사용 하 면 모든 컬럼 2 . select 에 산술 연산자 사용 가능 from 절 을 제외 한 모든 곳 에서 사용 가능 하 다 . 날짜 데이터 는 +, - 만 가능 하 다 . 날짜 데이트 를 다룰 때 하루 는 숫자 1 로 계산 하 여 연산 한다 . 예 1 > emp 테이블 의 모든 데이터 조회 select * from emp ; 예 2 > emp 테이블 에서 ename 과 sal 의 값 을 조회 select ename , salfrom emp ; 예 3 > emp 테이블 에서 ename 과 sal + 300 의 결과 를 조회 select ename , sal + 300 from emp ; 3 . NULL 아직 알려 지 지 않 은 값 으로 0 이나 공백 과 는 다르 다 . NULL 을 표시 하 는 방법 은 데이터 공간 이외 에 1 byte 를 추가 해서 표시 한다 . NULL 과 다른 데이터 를 산술 연산 하 면 결과 는 NULL 이 된다 . NULL 로 산술 연산 을 수행 하 면 결과 가 무조건 NULL 이 되 기 때문 에 NVL 함수 를 이용 하 여 변환 한 후 연산 을 수행 한다 . NVL ( 컬럼 이름 이나 연산 식 , NULL 일 때 대체 되 는 값 ) . 컬럼 이름 이나 연산 식이 NULL 일 때 NVL 을 붙이 면 뒤 에 있 는 값 으로 대체 된다 . 예 > emp 테이블 에서 ename , sal * 12 + comm 의 값 을 조회 comm 의 값 이 null 일 때 0 으로 계산 찰 못 된 예 > select ename , sal * 12 + commfrom emp ; 올바른 예 > select enam , sal * 12 + nvl ( comm , 0 ) from emp ; 4 . 별명 붙이 기 컬럼 이름 에 는 별명 을 부여 할 수 있 다 . Select 절 에서 컬럼 이름 뒤 에 공백 을 주 고 문자열 을 입력 하 면 별명 이 출력 된다 . 별명 설정 시 공백 ( ' ') 만 추가 해도 되 고 AS 를 함께 추가 해도 된다 . 별명 에 대문자 가 있 거나 특수 문자 가 있 으면 큰따옴표 ( " ") 안 에 별명 을 기재 해야 한다 . 예 > EMP 테이블 에서 ename is a jon 의 형태 로 조회 되 도록 SQL 문장 을 작성 . 별명 은 " 직원 이름 과 업무 " 로 조회 . ename 과 job 은 컬럼 이름 select ename || ' is a ' || job as " 직원 이름 과 업무 " from emp ; 5 . 결합 연산자 || 로 표시 . 오라클 로 보 고서 작성 시 || 를 사용 . 데이터베이스 연동 프레임워크 ( MyBatis ) 를 이용 해서 패턴 검색 을 할 때 사용 6 . DISTINCT 중복 을 제거 하 는 리턴 예약어 select 절 에서 select 바로 다음 에 기술 select 뒤 컬럼 이 하 나면 중복 이 있 는 컬럼 을 제거 컬럼 이 두 개 이상 이 면 두 개 가 모두 중복 되 는 컬럼 을 제거 한다 . 예 1 > emp 테이블 에서 job 의 중복 을 제거 하 고 job 을 조회 select distinct jopfrom emp ; 예 2 > emp 테이블 에서 deptno 와 job 모두 중복 되 는 경우 를 제거 하 고 출력 select distinct deptno , jobfrom emp ; 7 . WHERE 테이블 의 데이터 중 에서 조건 에 맞 는 데이터 만 추출 할 때 사용 하 는 어절 FROM 절 다음 에 놓이 고 FROM 다음 에 실행 된다 . 1 ) 비교 연산자 >, >=, , ! =, ^=, NOT 컬럼 이름 = 데이터 : 같 지 않 다 . NOT 컬럼 이름 > 데이터 : 데이터 보다 크 지 않 다 . 예 1 > EMP 테이블 에서 sal 이 3000 이상 인 사원 의 empno , ename , sal 을 조회 select empno , ename , salfrom EMPwhere sal >= 3000 ; 예 2 > emp 테이블 에서 job 이 MANAGER 인 사원 의 ename , sal , comm 을 조회 select ename , sal , commfrom EMPwhere job = ' MANAGER '; 날짜 데이터 도 비교 가 가능 하 다 . where hiredate >= to _ date ( ' 1986 / 06 / 30 ', ' yyyy / mm / dd '); 오늘 날짜 는 sysdate , 특정 날짜 는 to _ date ( ' 날짜 데이터 ', ' 날짜 서식 ') 의 형식 으로 표현 한다 . 1975 년 3 월 16 일 ( ' 1975 / 03 / 16 ', ' yyyy / mm / dd ') 예 3 > EMP 테이블 에서 hiredate 가 1981 년 6 월 30 일 이후 인 사원 들 의 ename 과 sal 을 조회 select ename , salfrom empwhere hiredate >= to _ date ( ' 1981 / 06 / 30 ', ' yyyy / mm / dd '); 2 ) SQL 연산자 Between A and B : A 와 B 사이 의 값 ( A 와 B 값 은 포함 되 며 B 의 값 이 A 의 값 보다 크 거나 같 아야 한다 . ) IN ( 목록 ) : 목록 안 에 포함 된 값 is null : null 인 데이터 like : % 와 _ 를 이용 하 여 패턴 을 검색 이상 4 개 의 연산자 안 에 는 NOT 을 추가 할 수 있 다 . AND : 2 개 의 조건 을 모두 만족 했 을 때 에 만 참인 값 . 앞 의 조건 이 거짓 이 면 뒤 의 조건 은 조회 하 지 않 는다 . OR : 2 개 의 조건 중 한 개 라도 참 이 면 참인 값 . 앞 의 조건 이 참 이 면 뒤 의 조건 은 조회 하 지 않 는다 . 예 1 > EMP 테이블 에서 hiredate 가 1981 년 1 월 1 일 부터 1981 년 12 월 31 일 사이 인 사원 의 ename 과 hiredate 를 조회 select ename , hiredatefrom empwhere hiredate between to _ date ( ' 1981 / 01 / 01 ', ' yyyy / mm / dd ') and to _ date ( ' 1981 / 12 / 31 ', ' yyyy / mm / dd '); 예 2 > EMP 테이블 에서 job 이 CLERK 이 거나 MANABER 인 사원 의 ename 과 job 을 조회 select ename , jobfrom empwhere job in ( ' CLERK ', ' MANAGER ' ); 예 3 > EMP 테이블 에서 comm 이 null 인 사원 의 ename 과 comm 을 조회 select ename , commfrom empwhere comm is null ;※ comm = null 로 검색 하 지 않 다 록 주의 한다 . like 에서 % 는 글자 수 와 상관 없 는 문자열 이 고 _ 는 한 글자 에 해당 하 는 와일드 카드 문자 다 . ~ 로 시작 하 는 : like '~ %'~ 로 끝 나 는 : like '%~'~ 를 포함 하 는 : like '%~%'~ 가 세 번 째 에 포함 된 : '_ _ ~ %' 예 > 1982 년 입사 한 사원 의 모든 사항 을 조회 select * from empwhere hiredate like ' 82 %'; 예 > 이름 중 에 R 이 2 회 포함 된 사원 의 모든 사항 예 > 이름 이 E 로 끝 나 는 사원 의 모든 사항 명령어 의 실행 순서 는 아래 와 같 다 . 3 . select 1 . from 2 . where 4 . orderby 예 > EMP 테이블 에서 sal 이 3000 이상 인 사원 의 empno , ename , job , sal 을 조회 하 는 SELECT 문장 을 작성 select empno , ename , job , salfrom empwhere sal >= 3000 ; 예 > EMP 테이블 에서 empno 가 7788 인 사원 의 ename 과 deptno 를 조회 하 는 SELECT 문장 을 작성 select ename deptnofrom empwhere empno = 7788 ; 예 > EMP 테이블 에서 hiredate 가 1981 년 2 월 20 과 1981 년 5 월 1 일 사이 에 입사 한 사원 의 ename , job , hiredate 을 조회 하 는 SELECT 문장 을 작성 ( 단 hiredate 순 으로 조회 ) select ename , job , hiredatefrom empwhere hiredate between to _ date ( ' 1981 / 02 / 20 ', ' yyyy / mm / dd ') and to _ date ( ' 1981 / 05 / 01 ', ' yyyy / mm / dd ') order by hiredate ; 예 > EMP 테이블 에서 deptno 가 10 , 20 인 사원 의 모든 정보 를 조회 하 는 SELECT 문장 을 작성 ( 단 ename 순 으로 조회 ) select * from empwhere deptno in ( 10 , 20 ) order by ename ; 예 > EMP 테이블 에서 sal 이 1500 이상 이 고 deptno 가 10 , 30 인 사원 의 ename 과 sal 를 조회 하 는 SELECT 문장 을 작성 ( 단 HEADING 을 employee 과 Monthly Salary 로 조회 ) select ename , sal as " employee 과 Monthly Salary " from empwhere sal >= 1500 and deptno in ( 10 , 30 ) ; 예 > EMP 테이블 에서 hiredate 가 1982 년 인 사원 의 모든 정보 를 조회 하 는 SELECT 문 을 작성 select * from empwhere hiredate like ' 82 %'; 공유 하 기 글 요소