Published 2020. 5. 11. 20:00
728x90
반응형

SQL이란?


Structured Query Language의 약자 (구조화된 질의 언어)
관계형 데이터베이스에서 데이터를 조회하거나 조작하기 위해 사용하는 표준 검색 언어
원하는 데이터를 찾는 방법이나 절차를 기술하는 것이 아닌 조건을 기술하여 작성함
DBMS(벤더)에 따라 사용되는 SQL 문법이 다름


기본 SQL 문법 종류


1. DDL (Data Definition Language) : 데이터 정의어 
    데이터베이스의 구조를 정의하거나 변경, 삭제 하기 위해 사용하는 언어
    주로 DB 관리자 또는 설계자가 사용함
    CREATE(개체 생성), ALTER(개체 수정), DROP(개체 삭제), TRUNCATE(개체 초기화)
    ex) DB를 생성/수정/삭제 하거나 TABLE을 생성/수정/삭제 등

2. DML (Data Manipulation Language) : 데이터 조작어 - DQL(Data Query Language)를 보통 포함한 개념
    Data를 조작하기 위해 사용하는 언어
    Data의 삽입, 수정, 삭제, 조회 등의 동작을 제어함
    Data를 이용하려는 사용자(어플리케이션)와 시스템간의 인터페이스를 직접적으로 제공하는 언어
    가장 많이 사용됨
    INSERT(데이터 삽입), UPDATE(데이터 수정), DELETE (데이터 삭제)
    DQL (Data Query Language) : DML 중에서 SELECT를 따로 정의함.
            데이터를 검색(추출)하기 위해 사용되는 언어
            SELECT (데이터 검색)

3. DCL (Data Control Language) : 데이터 제어어
    사용자의 권한이나, 관리자 설정 등을 처리
    GRANT(유저 권한 생성), REVOKE(유저 권한 삭제/회수)

4. TCL (Transaction Control Language) : 트랜젝션 제어어
    트랜 잭션 관리 처리 언어
    COMMIT(트랜잭션 종료처리후 저장), ROLLBACK(트랜잭션 취소), SAVEPOINT(임시저장)


계정 생성 및 접속권한 부여

 

create user abc identified by abc --abc 계정 만들고, 비밀번호는 abc  
default tablespace users; 

grant connect, resoutce to kh;  --일반사용자 abc계정 만드는 공식 

 

알아두어야 할 명칭

 

table이란?
entity, relation(entity가 결합된 상태) 데이터가 보관된 장소

row(행)?
record, tuple, java vo 객체 하나에 대응함

column(열)?
field, attribute

domain?
하나의 field에서 취할 수 있는 값의 집합 gender 남/여


자료형


1. 문자형
    char    : 고정길이(최대크기 2000byte)
   char(10) 'oracle' 저장했을 경우, 실제데이터는 6byte, 저장된 데이터는 10byte(영문은 1byte)
                          '자바' 저장했을 경우, 실제데이터는 6byte이지만, 저장된 데이터는 10byte(한글은 3byte씩)
                          '오버워치 리그' 저장했을 경우, 실제데이터는 19byte이므로 저장 불가(오류)
    varchar2: 가변길이(최대크기 4000byte)
    varchar2(10) 'oracle' 저장했을 경우, 실제데이터는 6byte, 저장된 데이터는 6byte
                                '오라클' 저장했을 경우, 실제데이터는 9byte이지만, 저장된 데이터는 9byte
                                '오버워치 리그' 저장했을 경우, 실제데이터는 19byte이므로 저장 불가(오류)
    long 가변길이 (최대크기 2GB) ->문자 많을시
    clob 가변길이 (최대크기 4GB)
    XE버젼에서는 한글을 3byte처리
    SE, EE버젼에서는 한글을 2byte처리하므로 추후에 고려할 것

--테이블 생성 
create table tbl_datatype_string ( 
    a char(10), 
    b varchar2(10) 
); 

-- 테이블 데이터 조회 
select * from tbl_datatype_string; 

--실제 byte조회 
select lengthb(a), lengthb(b) 
from tbl_datatype_string; 

--데이터 추가 
insert into tbl_datatype_string 
values('abc', 'abc'); 


2. 숫자형

    number(p,s)
    p : 표현할 수 있는 전체자릿수(1 ~ 38)
    s : 소수점이하 자릿수(-84 ~ 127)
/*
    1234.567 데이터 저장시 
    number(7,3) 1234.567
    number(7)   1235
    number(7,-2) 1200
    number      1234.567
*/

--아래에서 a b c d는 컬럼명 
create table tbl_datatype_number( 
    a number(7,3), 
    b number(7), 
    c number(7,-2), 
    d number 
); 

insert into tbl_datatype_number 
values(1234.567, 1234.567, 1234.567, 1234.567); 

insert into tbl_datatype_number 
values(5678.567, 5678.567, 5678.567, 5678.567);  --반올림 확인 

insert into tbl_datatype_number 
values(100, 100, 100, 100); 

select *from tbl_datatype_number; 


3. 날짜형
    date 년월일 시분초
    timestamp 년월일 시분초 밀리초

select sysdate,  
       to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss'), --날짜를 특정포맷의 문자형으로 변경  
systimestamp 
from dual; --한 행짜리 가상 테이블 


    날짜연산
    ① 날짜 +/- 숫자 => 날짜형(이때 숫자는 1이 하루를 의미함)
    ② 날짜 - 날짜 => 숫자 (두 날짜의 차이를 리턴 → 1이 하루를 의미)

select sysdate + 1,  --내일 이시간 
        sysdate - 1   --어제 이시간 
from dual; 

select to_char(sysdate + 1, 'yyyy/mm/dd hh24:mi:ss'),  
       to_char(sysdate - 1, 'yyyy/mm/dd hh24:mi:ss') 
from dual; 

 

변경내역을 실제 DB서버에 적용하는 TCL


commit;     --현재 변경 내역을 저장(commit시점은 한개밖에 없음)
rollback;   -- 현재 변경 내역을 버리고, 마지막 commit시점으로 돌아감(두번 해도 소용X)


DQL


1. Data Query Language
2. DML Data Manuplation Language의 하나 CRUD
3. select문을 가리킴
4. 조회된 결과를 result set(결과 집합 -> 조회된 행 모음)이라고 함
---------------------------------------------------------------
    select 컬럼명, 컬럼명,..... (컬럼명 나열) --------⑤
    from (조회할)테이블 명 ------------------------①    
    where 조건절 -----------------------------------②    
    group by 절 ------------------------------------③    
    having 절 ---------------------------------------④    
    order by 컬럼명(정렬) --------------------------⑥
---------------------------------------------------------------


반드시 쌍따옴표를 사용해야 하는 경우


1. 공백이 있는 경우
2. 숫자로 시작하는 경우

반응형

'프로그래밍 > SQL' 카테고리의 다른 글

05.18(join)  (0) 2020.05.18
05.15(union, union all, intersect, minus)  (0) 2020.05.15
05.14(group by & having)  (0) 2020.05.14
05.13(Oracle 내장 함수)  (0) 2020.05.13
05.12(SQL기본 구문 select, where, order by)  (0) 2020.05.12
복사했습니다!