본문 바로가기
Coding Note/SQL

SQL 기초 / 데이터 유형(VARCHAR2, NUMBER, DATE 등)

by 푸린이 2021. 12. 26.

Oracle SQL Developer 프로그램으로 SQL을 배워보았다.

* 데이터베이스 DB?

- 창고 안에 데이터를 넣어두고 사용자의 입맛대로 활용(CRUD)할 수 있도록 저장소 역할

- CRUD 중 Read == select, 검색 방법이 다양함

- DBMS : Database Management System (DB 관리 시스템_담당자)

 

* SQL?

- Structured Query Language

- 구조적인 질의 언어

 

먼저,

쿼리문을 작성하기 위해 데이터베이스 파일을 생성해주기

저 버튼을 누르거나 파일 - 새로 만들기

파일명과, 저장할 디렉토리를 설정해주기

 

-- Query문 (질의어) : 문장식으로 데이터를 가져옴, 가공해서 원하는 데이터를 시각화(안드로이드, 웹)

SELECT * FROM employees;

employees 테이블 안의 모든것(*)을 검색하라는 뜻

 

-- 주석문

-- 한줄 주석문

/*
범위주석문
*/

 

-- table : row(행), column(열) / 데이터를 삽입하기 위해 정형화된 틀

형식 :

CREAT TABLE 테이블명(
        컬럼명1 자료형, 
        컬럼명2 자료형,
            :  여러개 가능
    );

 

-- SQL 데이터 유형

Java와 비교해보기

Java DB
String VARCHAR2, CHAR, LONG         (MySQL : VARCHAR)
int INTEGER, NUMBER
double NUMBER
Date DATE

- VARCHAR2, NUMBER, DATE 많이 씀

 

-- 문자형

-- VARCHAR2

-- 테이블 생성
CREATE TABLE TB_VARCHAR (
    COL1 VARCHAR2(10 BYTE),
    COL2 VARCHAR2(10),
    COL3 VARCHAR2(20)
);

- 용량을 정해놓아야 함 (BYTE는 생략 가능)

 

-- 데이터 삽입
INSERT INTO TB_VARCHAR(COL1, COL2, COL3)
VALUES('ABC', 'ABC', 'ABC');

INSERT INTO TB_VARCHAR(COL1, COL2, COL3)
VALUES('가나다', '가나다', '가나다');
-- 데이터 검색
SELECT * FROM TB_VARCHAR;

- 데이터를 삽입한 해당 테이블을 검색하면

- 위와 같은 값이 출력된다.

 

SELECT COL1, COL2, COL3, lengthb(COL1), lengthb(COL2), lengthb(COL3)
FROM TB_VARCHAR;

- 칼럼의 바이트를 알고 싶을 때 검색할 수 있다.

영문 1바이트, 한글 3바이트라는 것을 알 수 있다.

-  컬럼마다 지정한 바이트에 맞춰서 삽입해야 한다.

 

INSERT INTO TB_VARCHAR(COL1, COL2, COL3)
VALUES('가나다', '가나다', '가나다라');

- COL3 컬럼은 20BYTE 이기 때문에 '가나다라'를 입력할 수 있지만

 

INSERT INTO TB_VARCHAR(COL1, COL2, COL3)
VALUES('가나다라', '가나다라', '가나다라');

- COL1, COL2 컬럼은 10BYTE라서 오류가 뜬다.

- "HR"."TB_VARCHAR"."COL1" 열에 대한 값이 너무 큼(실제: 12, 최대값: 10)

 

-- LONG

- 최대 2GB까지 저장 가능

- TABLE당 1개의 컬럼만 사용 가능

CREATE TABLE TB_LONG(
    COL LONG
  --  COL1 LONG (사용 불가 - 에러)
);

INSERT INTO TB_LONG(COL)
VALUES('ABCDE');

SELECT * FROM TB_LONG;

- 예시

CREATE TABLE BOOK(			-- 책 내용 넣는다고 가정
	TITLE VARCHAR2(200),		-- 책 제목
	CONTENT LONG			-- 책 내용
);

 

-- 숫자형

-- INTEGER

CREATE TABLE TB_INTEGER(
	COL1 INTEGER,
	COL2 INTEGER
);
-- 기본
INSERT INTO TB_INTEGER(COL1, COL2)
VALUES(123, 456);

-- 문자열로 넣기
INSERT INTO TB_INTEGER(COL1, COL2)
VALUES('123', '456');

-- 소수점
INSERT INTO TB_INTEGER(COL1, COL2)
VALUES(123.1, 456);

-- 검색
SELECT * FROM TB_INTEGER;

- 숫자형이 아닌 문자열을 넣어도 DB는 받아들인다.

- 소수점은 잘려서 출력된다. (강제형 변환과 비슷)

 

-- NUMBER 정수, 실수

CREATE TABLE TB_NUMBER(
	COL1 NUMBER,	    		-- 무조건 수용	
	COL2 NUMBER(5),			-- 정수 5자리(소수점 반올림)
	COL3 NUMBER(5, 2),		-- 5자리, 소수점 2째자리까지(반올림)
	COL4 NUMBER(*, 2)		-- 모든자리 수용, 소수점 2째자리까지(반올림)
);

INSERT INTO TB_NUMBER(COL1, COL2, COL3, COL4)
VALUES(1234.5678, 12345.67, 123.456, 12345.6789);

SELECT * FROM TB_NUMBER;

- 설정해준대로 맞춰서 반올림됨

- NUMBER(5, 2)라면 소수점까지 5자리로 맞춰짐 (정수 5자리가 아님)

 

-- 날짜

-- DATE (연도, 월, 일, 시, 분, 초)

CREATE TABLE TB_DATE(
	COL1 DATE, 
	COL2 DATE
);

-- SYSDATE == 현재 날짜와 시간

INSERT INTO TB_DATE(COL1, COL2)
VALUES(SYSDATE, SYSDATE-1);     -- 오늘 날짜, 오늘날짜-하루

SELECT * FROM TB_DATE;

 

-- String date = "2021-12-31 11:50:10"  외부 데이터 넣기

INSERT INTO TB_DATE(COL1, COL2)
VALUES(SYSDATE, '2021-12-31 11:50:10');		-- X (시간 넣으면 안돌아감)

INSERT INTO TB_DATE(COL1, COL2)
VALUES(SYSDATE, '2021-12-31');			-- O 시간을 빼고 넣으면 들어감 (시간은 00:00:00)

INSERT INTO TB_DATE(COL1, COL2)
VALUES(SYSDATE, '2021/12/31');			-- O /넣어도 들어감

 

-- 형식 지정해주기

INSERT INTO TB_DATE(COL1, COL2)
VALUES(SYSDATE, TO_DATE('2021-12-31 11:50:10', 'YYYY-MM-DD HH:MI:SS'));		-- 형식을 입력해줌

COMMIT; -- 입력한 것을 적용(이클립스는 오토커밋)

- TO_DATE('넣고자 하는 문자열', '형식') : DATE 형태로 바꿔서 넣으라는 함수

- SQL Developer는 시간이 나오지 않는다.

댓글