Database
{데이터 저장}
{DBMS 종류}
{데이터베이스 사용}
{Oracle설치}
[설치확인]
느리면 우클릭, 시작유형을 수동으로 바꿈. -> 오라클을 껐다 켰다 할 수 있다.
{Oracle 접속도구}
- 오라클을 설치하면 sqlplus라는 접속도구가 자동으로 설치가 됩니다.
관리자는 sqlplus를 많이 사용합니다.
오라클을 전문적으로 다룰 때는 sqlplus에서 작업하는 것이 좋습니다.
- sqldeveloper.oracle에서 무료로 제공하는 java로 만든 gui 접속도구.
java로 만든 프로그램은 jre가 설치되어 있어야만 실행이 가능.
- toad: 개발 현업에서 많이 사용하는 데이터베이스 접속도구
무료도 있기는 하지만 근본적으로는 유료.
*참고
메모장에 옮겨적어 놓고 복사해서 붙여넣기한다(네트웍, 데이터베이스)
{Oracle 을 설치하고 난 후 처음 제공되는 계정}
- sysdva: 슈퍼 관리자
- system: 관리자 계정
- 데이터베이스에 문제가 생긴 경우 sysdba에서 작업 그 이외의 경우는 system에서 작업합니다.
오라클은 기본적으로 1521 번 포트를 사용하도록 설치되고 8080번 포트도 사용합니다.
데이터베이스 이름을 SID라고 하는데 Express Edition은 기본으로 xe이라는 이름으로 설치되고 enterprise edition을 설치하면 orcl로 설치됩니다.
1. 실습용 계정 생성 - 시스템으로 로그인해서 생성
오라클에서는 보통 scott이나 hr계정으로 연습을 합니다.
scott을 만들 때는 보통 비밀번호를 tiger로 합니다.
이곳에 명령어 입력.
scott 계정 생성하는 코드.
입력한 명령어를 선택하고 실행키를 클릭.
스크립트 출력 부분을 통해 제대로 시행이 되었는지 확인 가능.
2. scott 계정에 샘플데이터베이스를 삽입
scott.sqp 파일의 내용을 실행하면 됩니다.
1)scott 계정으로 로그인
우클릭 - 접속해제 / 우클릭 - 접속(scott/tiger)
->실습을 할 때 관리자 계정을 사용하는 것은 위험한 행동입니다.
그래서 보통 계정을 생성을하고 사용하는데,
오라클에서 제공하는 샘플 sql이 전부 scott이나 hr로 되어 있어서 계정을 scott이나 hr로 생성했습니다.
그리고 scott이 테스트 해 볼 데이터는 scott.sql이라는 파일로 제공이 됩니다. 이 데이터를 삽입해서 사용합니다.
3)샘플 데이터 확인
명령어를 입력해서 제대로 등록이 되었는지 확인할 수 있습니다.
->최근에 데이터베이스를 다운받은 경우는 12개의 데이터가 나오고 예전 버전에서는 14개의 데이터가 조회됩니다.
{Oracle 을 설치하고 난 후 처음 제공되는 계정}
empno 사원번호, 숫자4, 프라머리 키
ename 사원이름, 문자10
job 업무, 문자9
mgr 관리자 사원번호, 숫자4
hiredate 입사일, 날짜형식
sal 급여, 숫자7
comm 상여금, 숫자 7
deptno 부서번호 dept 테이블의 외래키 숫자2
2. dept 테이블 - 부서 테이블
deptno 부서번호, 숫자2자리, primary key
dname 부서명, 문자 14자리
loc 위치, 문자 13자리
3. salgrade테이블 호봉 테이블
grade 등급, 숫자
losal 최저급여
hisal 최고급여
{Select}
데이터를 조회할 때 사용하는 구문. 6개의 절로 구성.
- select 조회하고자 하는 컬럼이나 연산식 또는 *
- from 조회하고자 하는 테이블이름을 나열
- where 조회하고자 하는 조건을 기술
- group by 그룹화하고자 하는 컬럼이나 연산식
- having 그룹화(group by) 이후의 조건
- order by 정렬할 컬럼이나 연산식을 나열
- select와 from은 필수
- 실행순서 : from - where - group by - having - select - order by
- 예약어와 테이블이름 그리고 컬럼이름은 대소문자 구분을 하지 않습니다.
- 예약어 다음에는 반드시 한 칸 이상의 공백이 있어야 합니다.
1. 테이블의 전체 데이터 조회
select*
from 테이블이름
ex) emp 테이블의 전체 데이터를 조회
데이터베이스에서는 날짜도 산술 연산이 가능.
- 하루를 1로 보고 계산.
ex) emp 테이블에서 ename 과 sal*12 한 결과를 조회.
ex) emp 테이블에서 ename 과 입사한 지 몇일이 지났는지 조회
입사일은 hiredate 컬럼이고 현재 시간 및 날짜는 sysdate
4. 컬럼에 별명을 설정해서 출력.
- 별명은 한 칸 공백을 주고 설정. (단, 대문자나 공백이 있으면 별명을 ""로 감쌈)
ex) emp 테이블에서 ename 과 sal*12를 조회. 단, sal*12는 년봉이라고 출력
- 연산식이나 함수의 결과를 조회할 때는 별명을 사용하는 것이 좋습니다.
5. 데이터베이스 에서 NULL
- 데이터베이스는 모든 자료형에 대해서 NULL을 대입할 수 있습니다.
- 데이터베이스에서는 NULL을 실제로 저장하는 것이 아니고 NULL을 판단할 수 있는 별도의 바이트를 할당해서 NULL 여부를 저장
- NULL 과 산술연산을 수행하면 NULL 이 됩니다.
- emp 테이블의 comm이라는 컬럼은 NULL을 포함하고 있습니다.
ex) emp 테이블에서 ename 과 sal*12+comm의 결과 조회
-comm이 NULL인 컬럼의 값이 NULL로 출력됩니다.
- NVL(컬럼이름 또는 연산식, 치환할 값)의 형식으로 사용합니다.
ex) emp 테이블에서 ename 과 sal*12+comm 의 결과를 조회
emm 컬럼의 값이 NULL일 때는 0으로 해서 계산
sal*12+comm 컬럼의 이름을 지급액이라고 출력
6. 결합 연산자 - ||
- 문자열을 결합할 때 사용하는 연산자
- 컬럼들을 하나로 합쳐서 출력하고자 할 때 사용하는 연산자
- 날짜 같은 데이터를 저장할 때 Date를 이용하지 않고 년 월 일을 각각의 컬럼으로 저장한 후 출력할 때 하나로 합치기 위한 목적으로 사용
ex) emp 테이블 ename 과 job을 하나로 묶어서 조회
7. Literal
- 사용자가 직접 입력하는 데이터
- 프로그램의 상수 영역에 별도로 저장해서 다음에 사용할 대 저장된 데이터를 이용합니다.
- 리터럴은 한 번 메모리를 할당하면 프로그램이 종료될 때까지 소멸되지 않습니다.
- 리터럴은 사용할 대 상수 영역을 확인해서 상수 영역에 존재하면 그 데이터를 이용하고 존재하지 않으면 새로 저장해서 사용합니다.
- 오라클에서는 문자 리터럴은 작은 따옴표 안에 기재합니다.
'문자 또는 문자열' / 자바: 큰 따옴표
int a =10; int b =10; - 변수는 위치를 저장한다. 상수의 경우, 메모리에 같은 데이터가 있는지를 확인하고 있으면 이전 데이터를 사용한다. (자바도 마찬가지) |
8. distinct
- select 절의 맨 앞에 기재할 수 있는 예약어.
- 컬럼의 중복을 제거하고 조회할 때 사용합니다.
- 컬럼이름이 하나 일 때는 컬럼 1개의 중복을 제거하지만 컬럼을 여러 개 나열하면 나열 된 모든 컬럼의 값이 동일한 경우에만 중복을 제거.
ex) emp 테이블에서 job의 중복을 제거하고 조회
distinct 는 select 절의 맨 앞에 1번만 올 수 있음
아래 같은 문장 안됨
이 문장의 경우는 ename 과 job이 모두 동일한 경우에만 제거
9. where 절
- 테이블에 조건을 적용해서 조건에 맞는 행 만 필터링 하기 위한 절
- select 가 테이블의 데이터를 열 단위로 필터링하는데 where 는 행단위로 필터링 합니다.
- from 다음으로 수행됩니다.
1) 단일 행 연산자
> / >= / < / <=
= / !=(<>)
- 앞에 not을 붙이면 결과는 반대가 됨
- 날짜도 숫자로 간주함 때문에 크기 비교 연산자 사용 가능
- 문자열도 크기 비교 연산자를 사용할 수 있는데 코드 값을 가지고 비교함.
ex) EMP 테이블에서 sal이 3000 이상인 사원의 empno, ename, job, sal을 조회
select empno, ename, job
from emp
where sal >= 3000;
ex) EMP 테이블에서 job이 MANAGER 인 사원의 empno, ename, job, sal, deptno을 조회
2) 날짜 데이터 사용
- 날짜 - to_date('2008/04/14 22:02:14', 'yyyy/mm/dd hh24:mi:ss;)
- 오늘 날짜 및 시간 -sysdate
ex) EMP 테이블에서 hiredate가 1982년 01월 01일 이후 인 사원의 empno, ename, job, sal, hiredate, deptno 을 조회
3) and, or
- and : 모두 true 일 때만 true
첫번째 결과가 false이면 결과가 무조건 false이기 때문에 뒤에 조건은 조사하지 않음
양쪽의 식은 서로 다른 값이 출력된다. | |
int a = 10; if(a>1 && a++>5){ } System.out.println(a) | int a = 10; if(a<1 && a++>5){ } System.out.println(a) |
- or : 모두 false 일 때 만 false
첫번째 결과가 true이면 결과가 무조건 true이기 때문에 뒤의 조건은 조사하지 않음
4) in, not in
- in은 여러 개 값 중에서 하나라도 일치하는 게 있으면 조회
- not in 은 여러 개 값에 일치하는 게 없으면 조회
5) between A and B
- A 보다 크거나 같고 B보다 작거나 같은 데이터 조회
- 반드시 B의 값이 A보다 크거나 같아야 합니다.
6) is null, in not null
- null인 데이터를 조회할 때는 is null
- null이 아닌 데이터를 조회할 때는 is not null
ex1) emp 테이블에서 sal이 1000이상이고 job이 CLERK인 사원의 ename과 job과 sal을 조회
select ename, job, sal
from emp
where job = 'CLERK' && sal >= 1000;
and 앞뒤의 내용이 바뀌어도 결과는 똑같다.
하지만 효율을 따져봐야 한다.
첫번째 부분에서 많이 걸러야 일을 덜 해서 효율적이다.
현장에서는 많은 양의 데이터를 다루어야 하기 때문이다.
job이 CLERK 인것이 3개,
sal이 1000이상 인것이 10개 이므로
3개 중에서 sal이 1000이상인 것을 고르는 게 효율적이다.
따라서 이 예제에서는
이 방법이 좋은 방법이다.
ex2) emp 테이블에서 job 이 CLERK 이거나 MANAGER인 사원의 ename 과 job을 조회
select ename, job
from emp
where job = 'CLERK' or job = 'MANAGER';
select ename, job
from emp
where job in ('CLERK', 'MANAGER');
-- 위와 같은 말이다. where job = ('CLERK', 'MANAGER');
ex3) emp 테이블에서 comm의 값이 null 이 아닌 데이터의 ename 과 sal을 조회
select ename, sal
from emp
where comm is not null;
null은 = 나 != 로 비교하지 않습니다.
ex) emp 테이블에서 ename에 L이 포함된 사원의 ename 과 job을 조회
select ename, job
from emp
where ename like '%L%';
ex2) emp 테이블에서 ename의 3번째 글자가 L인 사원의 ename과 job을 조회
select ename, job
from emp
where ename like '__L%';
-즉, %%로 감싼 문자열이 포함된 것을 찾아 출력
-즉, n번째에 특정문자가 포함된 것을 찾을 대는 n-1번째까지는 _로 도배 후 특정문자 위에 %를 붙이면 원하는 결과가 출력
ex) emp 테이블에서 hiredate가 81년인 데이터의 모든 컬럼을 조회
select *
from emp
where hiredate like '81%';
(크다,작다 또는 between을 사용해도 된다.)
10. order by 절
- 데이터를 순서대로 나열(정렬)하기 위한 절
- select 구문에서 가장 마지막에 작성하고 가장 마지막에 수행됩니다.
- ascending(오름차순): 작은것→큰것 순서대로 나열하는 것. 기본은 오름차순
- descending(내림차순): 큰것→작은것 순으로 나열하는 것.
연습문제 연결▼▼
- 비용 有 [본문으로]
'JAVA 공책 > 수업 메모' 카테고리의 다른 글
Student 테이블을 만들어서 stream API 연습하기 (0) | 2018.08.07 |
---|---|
상위클래스의 생성자를 호출하는 방법 (0) | 2018.08.06 |
통신 (0) | 2018.07.24 |
URL (0) | 2018.07.24 |
MulticastSoket22 (0) | 2018.07.24 |