SQL은 DB의 데이터를 관리하기 위해 사용하는 명령어들이다. 모든 데이터베이스들은 비슷한 SQL문을 사용한다.
◆ SQL (Structured Query Language)
DB를 관리할 수 있는 명령어 ( SQL문은 대소문자를 구분하지 않는다. )
◆ DDL (Data Definition Language) 데이터 정의 명령문
사용할 객체(테이블)를 생성, 변경, 삭제 하는데 쓰이는 명령문( CREATE, ALTER, DROP )이다.
오라클 기준으로 생성시키는 객체들은 아래와 같은 것들이 있다.
- table : 저장용 객체
- sequence : 번호 생성 객체
- view : 조회결과 저장용 객체
▶ DDL - 테이블 생성(CREATE)
create table 테이블이름( 컬럼명 타입, 컬럼명 타입, ...);
=> 왼쪽 테이블탭을 우 클릭하여 만들 수도 있으며,
타입은 문자(varchar2), 숫자(number) - 정수/실수, 시간(date) 등이 있다.
- 컬럼/타입의 구분은 컴마(,)로 하며 마지막 컬럼/타입은 콤마를 찍지 않는다. )
- sql의 주석은 ‘—’ 로 처리한다.
▶ Oracle의 데이터 타입
-
- 문자형 데이터 타입
-
varchar2(byte)
=> 영어는 1바이트 당 한 글자, 한글은 3바이트 당 한 글자
즉, 한글 3글자는 varchar2(9)
(varchar형은 가변길이이기 때문에 괄호 안 숫자는 최대 길이 )
-
- 수치형 데이터타입
-
number(전체 자리 수, 소수점아래 할당부분)
ex ) number(1,0) 한자리수 정수, number(3,2) => ex) 3.12
-
- 시간 형 데이터 타입
- date
▶ DDL – 테이블 변경(ALTER)
-
alter table 변경할 테이블 명 drop column 삭제 할 컬럼;
: ex ) alter table baby drop column birth;
=> ‘baby’ 테이블의 ‘birth’라는 컬럼을 삭제 -
alter table 변경할 테이블 명 add (컬럼명 컬럼 타입);
: ex ) alter table baby add (birth date);
=> ‘baby’ 테이블의 ‘birth’라는 컬럼을 date타입으로 추가
▶ DDL – 테이블 삭제(DROP)
drop table 삭제할 테이블
ex ) drop table baby; => ‘baby’테이블을 삭제
-
- desc 테이블
- 테이블의 정보 확인
ex ) desc baby;
=> ‘baby’ 테이블의 형태를 확인
◆ DML (Data Manipulation Language) 데이터 조작 명령문
테이블 객체 관련 DML( 추가(INSERT), 삭제(DELETE), 변경(UPDATE), 조회(SELECT) )
데이터의 추가,삭제,변경,조회를 CRUD라고 한다.
▶ CREATE - 데이터 삽입 (INSERT)
insert into 테이블명(컬럼,컬럼...) values(값,값,..)
또는
insert into 테이블명 values (값,값 .. )
- 값은 홑따옴표( ‘ ‘ )안에 작성, null값은 홑따옴표를 적지 않으며 ‘ ’ 는 null과 같다.
- 값을 순서대로 넣을때는 컬럼값을 입력하지 않아도 된다.
- (SqlDeveloper)왼쪽 테이블 탭에서 더블클릭으로 테이블의 데이터를 확인할 수 있고, 그 안에서 변경 또한 가능하다.
- 테이블을 만들 때 정의했던 데이터 형식과 일치해야 저장이 되지만, 소수부는 알아서 반올림 처리되기 때문에 자릿수가 넘어가도 상관없이 처리된다.
ex ) number(3,2) => 1.32123 (가능) , 32.123 (불가능)
▶ READ - 데이터 조회(SELECT)
-
select 컬럼, 컬럼 ... from 테이블
: 해당 테이블의 해당 컬럼만 뽑아서 보여줌
-
select * from 테이블
: 해당 테이블의 모든 열을 다 뽑아서 보여줌
▶ UPDATE - 데이터 변경
update 테이블명 set 컬럼=변경할 값, 컬럼=변경할값 ...;
위 명령어는 모든 행의 gender를 1로바꾸지만, where절을 이용하여 조건을 설정할 수도 있다.
▶ DELETE - 데이터 삭제
delete from 테이블
테이블 전체 열( 데이터 행 )을 삭제 ( rollback 가능 )
마찬가지로 where절과 같이 사용하는것이 일반적
◆ DCL (Data Control Language) 데이터 제어 명령문
DML로 했던 작업을 되돌리거나, 저장시키는 명령문 ( ROLLBACK, COMMIT )
▶ ROLLBACK
마지막 COMMIT 시점으로 돌아감. ( COMMIT 시점 뒤로는 돌아갈 수 없음 )
ex ) rollback;
▶ COMMIT
실제로 메모리에 저장
=> DB에서는 가상 작업으로 COMMIT 시키지 않으면 실제로 저장되지 않고, 자바에서 작업할 경우에는 바로바로 COMMIT 작업을 시켜버리기 때문에 DB에서 COMMIT시키지 않은 상태에서 자바에서 작업할 경우 렉이 걸릴 수 있다.
◆ 데이터베이스 키워드
▶ Date타입에 현재시간 넣기
데이터베이스 date타입의 데이터를 넣을 때 sysdate를 값으로 넣게 되면 현재시간으로 들어가게 된다.
JDBC에서 사용할 때도 스트링으로 “sysdate”를 넣어주면 같은 효과가 발생한다.
▶ 외래키를 설정할 시
-
- on delete cascade
- 부모 데이터 삭제 시 계단식 삭제
-
- on delete set null
- 부모 데이터 삭제 시 null로 설정
▶ 증가하는 number값이 필요할 시 ( 시퀀스 객체 )
Oracle은 데이터베이스 내에서 증가하는 시퀀스 객체를 생성해야 한다.
-
- 생성
- create sequence 증가 값 객체 변수 명;
-
- insert
- 증가 값 객체 명.nextval
주의) 삽입 실패 시에도 값은 증가된다.
-
- follow_sequence.currval
- 현재 시퀀스 값 반환
=> JDBC에서도 String형으로 똑같이 써주면 된다.
▶ DB의 DATE타입 비교 시
2018-01-30 이하로 비교할 시 2018-01-30 00시00분00초 이하로 비교하기 때문에 그 이후 데이터는 나오지 않게 되므로 주의!