관계형 데이터베이스 구성 요소
1. 테이블
- 관계형 데이터베이스는 기본적으로 데이터를 2차원 표 형태로 저장하고 관리함.
- 표 형태의 데잊터 저장 공간
- 테이블은 2차원 형태로 가로줄과 세로줄로 구성.
- 가로는 행 / 세로는 열
2. 행
- 저장하려는 하나의 개체를 구성하는 값.
3. 열
저장하는 데이터를 대표하는 이름과 공통특성을 정의.
열은 저장정보의 종류(자료형)와 자료의 저장가능한 최대 크기, 중복 여부 설정.
*오라클에서 열의 속성에 들어가는 주요 자료형
1. number(n, n1)
n: 전체 자리수 / n1: 소수점 자리수 / n - n1 : 정수 자리수 (± 38자리까지 저장가능)
2. char(n)
- 문자열이 n개가 저장되는 자료형. (고정 자료형)
3. varchar(n)
- 문자열이 n개가 저장되는 자료형. (현재는 사용하지 않음)
4. varchar2(n)
- 문자열이 n개가 저장되는 자료형. (가변 자료형)
* 한글은 한 글자당 2바이트씩 사용.
5. date 날짜가 저장되는 자료형 (시스템의 현재 날짜 및 시간이 저장.)
**중요 개념**
무결성
- 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제 값이 일치하는 정확성을 의미
무결성 제약조건?
- 데이터베이스에 저장된 데이터의 정확성을 보장하기 위해서 정확하지 않은 데이터가 데이터베이스 내에 저장되는 것을 방지하기 위한 조건.
데이터베이스 상에서 제약 조건의 종류
1. unique : 중복이 되면 안되는 제약 조건.
2. not null : 지정된 열에 null을 허용하지 않는 제약 조건. 공백을 허용하지 않음.
3. check : 특정한 값이 아닌 데이터가 들어오지 못하게 하는 제약 조건. 설정에 해당하는 값만 허용.
4. primary key : unique + not null 과 같음. 기본키는 해당 테이블을 대표하는 컬럼으로서의 역할을 수행. 다른 테이블에서 외래키들이 참조할 수 있는 키로서의 자격을 가짐. 이를 참조 무결성이라고 함.
테이블을 만드는 형식
예) 학생 테이블
create table 테이블이름(
학번(컬럼명) 자료형(크기) {제약조건},
이름 자료형(크기) {제약조건},
학과 자료형(크기) {제약조건},
학년 자료형(크기) {제약조건},
나이 자료형(크기) {제약조건},
연락처 자료형(크기) {제약조건},
주소 자료형(크기) {제약조건},
입학일 자료형(크기) {제약조건}
);
create table student(
id varchar2(15) primary key,
name varchar2(20) not null,
major varchar2(30) not null,
year number(1),
age number(3),
phone varchar2(20) not null,
regdate date not null
);
테이블에 컬럼을 추가하는 방법
alter table 테이블이름 add(컬럼명, 데이터타입(크기), 제약조건);
예)
alter table student add(addr varchar2(200));
테이블의 컬럼을 수정하는 방법
alter table 테이블이름 modify(컬럼명 데이터타입(크기));
예)
alter table student modify(age varchar2(3));
테이블의 컬럼명을 수정하는 방법
alter table 테이블이름 rename column 기존컬럼명 to 새로운 컬럼명;
예)
alter table student rename column addr to address;
테이블의 컬럼을 삭제하는 방법
alter table 테이블이름 drop column 컬럼명;
예)
alter table student drop column age;
테이블에 데이터를 추가하는 방법
형식1) 컬럼 순서에 맞게 데이터를 써 넣음.
insert into 테이블이름 values('컬럼1 데이터', '컬럼2 데이터', ------);
형식2) 넣을 컬럼을 지정해준 다음 지정한 컬럼에만 데이터를 써 넣음.
insert into 테이블이름(컬럼명, 컬럼명, 컬럼명, ------) values('데이터', '데이터', '데이터', -----);
특정 컬럼을 수정하는 방법
update 테이블이름 set 컬럼이름 = 컬럼수정내용, 컬럼2이름 = 컬럼2수정내용, ------ where primary key로 설정된 컬럼 = 컬럼데이터;
특정 레코드를 삭제하는 방법
delete from 테이블이름 where primary key로 설정된 컬럼명 = 컬럼데이터;
테이블의 모든 데이터를 삭제하기
delete from 테이블이름;
DB에 적용시킨 것들을 이전 커밋 상태까지 돌려주기
rollback;
*질의문
현재 계정에 있는 모든 테이블 출력.
select * from tab;
특정 테이블의 모든 컬럼 출력
select * from 테이블이름;
특정 테이블의 컬럼들을 출력하기
select 컬럼명1, 컬럼명2, ------ from 테이블이름;
이 때 컬럼에 연산을 해서 출력하는 것도 가능함. but, null값을 가지는 다른 컬럼과 연산하면 결과값이 null이 됨.
==> nvl() 함수 : null값을 특정한 값으로 변경시켜 주는 함수. 모든 데이터 타입에 적용 가능.
nvl(null 값이 들어 있는 컬럼명, 변경할 값)
예)
select empno, ename, sal+nvl(comm, 0) from emp;
nvl2() 함수
nvl2(컬럼명, expr1, expr2) : 컬럼명의 값이 null이 아닌 경우 expr1 값을 반환 / null인 경우 expr2 값을 반환
예)
select empno, ename, sal + nvl2(comm, comm, 0) from emp;
** 이런식으로 하면 컬럼명이 지저분해진다. 이 때 as 키워드를 통해 컬럼명을 변경해준다.
select empno, ename, sal + nvl2(comm, comm, 0) as bonus from emp;
distinct : 중복을 제거해주는 키워드
- 항상 select 다음에 기술.
- distinct 키워드 뒤에 나오는 컬럼들은 모두 distinct의 영향을 맏음.
예)
select distinct job from emp;
테이블 생성 예제
create table member10 (
num number(7) primary key,
memid varchar2(20) not null,
memname varchar2(20) not null,
pwd varchar2(20) not null,
age number(3),
mileage number(8) not null,
job varchar2(30),
addr varchar2(200),
regdate date not null
);
컬럼을 생성한 것임.
이제 여기에 insert into member10 values(~~~~~~); 해주면 데이터가 생성됨.
literal 문자열?
컬럼명이나 별칭(as)이 아닌 select 목록에 포함되는 문자, 표현식 숫자를 의미.
날짜나 문자열인 경우 단일 인용 부호(' ')를 사용해야 한다.
예)
select ename || ' 사원의 연봉은 ' sal * 12 || ' 입니다.' as "사원의 연봉" from emp;
**where 조건절
사용자가 원하는 데이터만 조건에 맞게 조회할 경우에 사용.
1) = : 조건이 같은가?
2) < : 조건이 작은가?
3) <= : 조건이 작거나 같은가?
4) > : 조건이 큰가?
5) >= : 조건이 ㅋ크거나 같은가?
6) !=: 조건이 같지 않은가?
7) <> : 조건이 같지 않은가? 6)과 같음.
8) between A and B : A와 B 사이에 있는가? **A, B 포함이며 작은 값을 앞에 기술해야 함.
9) in(list) : list 값 중에 어느 하나와 일치하는가?
10) not between A and B : A와 B 사이에 있지 않은가?
11) not in(list) : list 값과 일치하지 않는가?
예시)
emp 테이블의 직책이 MANAGER인 모든 행 출력
select * from emp where job = 'MANAGER';
emp 테이블에서 부서번호가 30인 모든 행 출력
select * from emp where deptno = 30;
emp 테이블에서 급여가 1300이상 1500이하에 해당하는 행의 이름, 직무, 급여, 부서번호 출력
select ename, job, sal, deptno from emp where sal between 1300 and 1500;
emp 테이블에서 사번이 7902, 7788, 7566인 사원의 사번, 이름, 담당업무를 화면에 출력
select empno, ename, job from emp where empno in(7902, 7788, 7566);
emp member10 테이블에서 이름이 홍길동이면서 직업이 학생인 회원의 모든 정보를 화면에 출력
select * from member10 where memname = '홍길동' and job = '학생';
products 테이블에서 제조사가 '삼성' 또는 '현대' 면서 입고가가 100만원 이하인 상품의 상품명과 입고가, 출고가를 화면에 출력
select products_name, input_price, output_price from products where company in('삼성', '현대') and input_price <= 1000000;
'국기훈련과정 > Oracle SQL' 카테고리의 다른 글
06. JAVA에서 쿼리문 사용하기 (0) | 2021.09.07 |
---|---|
05. JAVA와의 연동 (0) | 2021.09.07 |
04 (0) | 2021.09.07 |
03. (0) | 2021.09.06 |
02. (0) | 2021.09.03 |