[ SQL의 기본 목차 ]
1. 데이터 딕셔너리 TAB
2. 테이블 구조를 살펴보기 위한 DESC
3. 오라클의 데이터형
1) NUMBER
2) DATE
3) CHAR
4) VARCHAR2
4. 데이터를 조회하기 위한 SELECT문
5. 산출 연산자
6. NULL도 데이터!?
7. 컬럼 이름에 별칭 지정하기
1) AS로 컬럼에 별칭 부여하기
2) " " 로 별칭 부여하기
3) 별칭으로 한글 사용하기
8. Concatenation 연산자의 정의와 사용
9. DISTINCT 키워드
[ 1 ] 데이터 딕셔너리 TAB
- 오라클 설치하면 기본 사용자가 3개가 제공된다.
( 1 ) sys : 오라클 super 사용자명
- 데이터베이스에서 발생하는 모든문제를 처리할 수 있는 권한을 가진다.
( 2 ) system : 오라클 데이터베이스를 유지보수 관리할 때 사용하는 사용자명
- sys와의 차이점 --> 데이터베이스 생성권한이 없으면 불완전 복구를 할 수 없다.
( 3 ) scott : 처음 오라클을 사용하는 사용자를 위해 만들어 놓은 사용자명
- 학습을 위한 테이블들을 제공해준다.
- TAB ( TABLE의 약자 )
- SCOTT 사용자가 소유하고 있는 테이블의 정보를 알려주는 데이터 딕셔너리이다.
SQLPLUS SCOTT/TIGER
SELECT * FROM TAB;
[ 2 ] 테이블 구조를 살펴보기 위한 DESC
- 테이블에서 데이터를 조회하기 위해서는 테이블의 구조를 알아야한다.
테이블의 구조를 확인하기 위한 명령어로는 DESCRIBE (줄여서 DESC) 가 있다.
- DESC 명령어
: 테이블의 컬럼 이름, 데이터 형, 길이와 NULL 허용 유무 등과 같은
특정 테이블의 정보를 알려준다.
? 컬럼(columm) 이란, 관계형 데이터베이스 테이블에서 특정한 단순 자료형의
일련의 데이터값과 테이블에서의 각 열 을 말한다. -> 각각의 데이터 값에 대한 열
칼럼은 열이 어떻게 구성되어야 할 지에 대한 구조를 제공한다.
관계형 데이터베이스 용어에서 칼럼과 같은 의미로 사용되는 것은 속성(attribute)이다.
DB에서 테이블을 만든다는 것은 채울 데이터의 컬럼들을 정의한다는 것과 같다.
여러개의 컬럼들이 모여서 하나의 테이블을 구성할 수 있는 것이다. ?
- NOT NULL 제약 조건
- NULL : 컬럼에 어떤한 값도 정해지지 않을 때 가지는 값
할당받지 않은 값, 모르는 값, 정해지지 않을 값을 의미로
0 (숫자의 한 자리)이나, 스페이스(문자의 한 자리)와는 전혀 다른 값이다.
- NOT NULL : NOT NULL의 조건이 설정된 컬럼은 반드시 NULL값이 아닌
확실한 정보가 필수적으로 입력되어야 한다.
* 널? 에 NOT NULL 이라고 적혀있으면 거기에는 널이 들어가면 안된다는 것을 의미한다.
* Java 에서의 null --> 값이 비어있다.
DB 에서의 NULL --> 모르는 값 (알수없는 값)
SELECT * FROM TAB;
SELECT * FROM DEPT01;
DESC DEPT01;
INSERT INTO DEPT01 VALUES(NULL,'개발부','서울');
SELECT * FROM DEPT;
--INSERT INTO DEPT VALUES(NULL,'개발부','서울');
-- 오류 보고 ) ORA-01400: cannot insert NULL into ("SCOTT"."DEPT"."DEPTNO")
-- DEPTNO 칼럼에 NULL을 넣을 수 없다.
INSERT INTO DEPT VALUES(50,'개발부','서울');
DESC DEPT;
- 기본 키(Primary key) 제약 조건
- 유일한 값을 저장하기 위한 조건
--> DESC 명령으로 확인할 수 없다.
- 외래 키(Foreign key) 제약 조건
- 관계형 데이터베이스에서는 테이블 사이의 관계를 설정할 수 있는데 그럴 때
다른 테이블의 컬럼을 참조하도록 연결하여 제약을 걸어 두기 위해 외래 키(Foreign key)를 사용한다.
-- DESC[RIBE] 테이블명
DESC DEPT;
DESC EMP;
[ 3 ] 오라클의 데이터형
1. NUMBER 데이터 형
- 숫자 데이터를 저장하기 위해서 제공된다. (실수, 정수 모두 다 저장될 수 있다.)
- precision : 소수점을 포함한 전체 자리수를 의미
- scale : 소수점 이하 자리수를 지정
- scale 을 생략한 채 precision만 지정
--> 소수점 이하는 반올림되어서 정수 값만 지정된다.
- precision과 scale 모두 생략
--> 입력한 데이터 값만큼 공간이 할당된다.
-- 형식
NUMBER(PRECISION, SCALE)
-- 예
NUMBER(4) -- 정수로 최대 4자리
NUMBER(8,2) -- 전체 8자리, 소수 이하 2자리의 실수
2. DATE 데이터 형
- 세기, 년, 월, 일, 시간, 분, 초의 날짜 및 시간 데이터를 저장하기 위한 데이터 형
- 기본 날짜 형식은 "YY / MM / DD" 형식으로 "년 / 월 / 일" 로 출력된다.
ex) 2005년 12월 14일 --> "05 / 12 / 14" 로 출력
* 표현되는 것에는 시간, 분, 초가 없지만 실제로는 있다! 표현만 안된 것일뿐!
3. CHAR 데이터 형
- 문자 데이터를 저장하기 위한 자료형
고정 길이 문자 데이터를 저장한다.
- 입력된 자료의 길이와는 상관없이 정해진 길이만큼 저장 영역 차지하며
최소 크기는 1이다.
- char(20) 이라고 설정하고 'seoul' 이라는 데이터를 저장했다면,
다음과 같이 저장된다.
* char(20) 는 문자 데이터 집어넣을 저장공간 20개를 만들어준 것! -> 저장공간 고정되어 만들어짐
- CHAR는 주어진 크기만큼 저장공간이 할당되어서
편차가 심한 데이터를 입력하게 되는 경우
위의 사진과 같이 저장공간이 낭비되는 상황이 초래된다,,
4. VARCHAR2 데이터 형
- 가변적인 길이의 문자열을 저장할 수 있는 데이터 형
- address 란 컬럼의 데이터형을 VARCHAR2(20) 이라고 설정하고,
'seoul' 이란 데이터를 저장한다면,, 다음과 같이 저장된다.
- VARCHAR2 는 저장되는 데이터에 의해 저장공간이 할당
--> 메모리 낭비를 줄일 수 있다!!
* VARCHAR vs VARCHAR2
이 둘은 같은 것이다.
VARCHAR (ANSI 데이터타입) = VARCHAR2 (ORACLE 데이터타입)
여기서 ANSI 데이터타입은 미국 표준협?학?회에서 만든 데이터타입을 의미한다.
VARCHAR2 는 오라클에서만 사용가능하다.
그냥 VARCHAR와 VARCHAR2 는 같지만 VARCHAR는 표준타입이라고 생각하면된다. *
[ Tip. Boolean 타입 ]
- 오라클 데이터베이스에서는 불리형(boolean type)을 지원하지 않는다.
하지만 아래와 같은 방법을 사용할 수 있다.
-- 컬럼에 체크 제약조건(check constraint)을 사용한다.
CREATE TABLE ITEMS (
ITEM_NO NUMBER(3),
ISACTIVE CHAR(1) CHECK (ISACTIVE IN ('Y','N'))
);
INSERT INTO ITEMS VALUES (101, 'Y');
-- 데이터타입 : NUMBER, DATE, VARCHAR2
-- BOOLEAN 타입은 없지만 비슷하게 CHAR형으로 만들 수 있다.
CREATE TABLE ITEMS(
ITEM_NO NUMBER(3),
ISACTIVE CHAR(1) CHECK(ISACTIVE IN ('Y', 'N'))
-- 제약조건을 넣어준다. 제약조건 : NOT NULL, PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK
-- ISACTIVE에 Y 또는 N 문자열만 들어오는지 확인하는 제약조건 넣음
);
SELECT * FROM ITEMS;
INSERT INTO ITEMS VALUES(101, 'Y');
INSERT INTO ITEMS VALUES(101, 'N');
INSERT INTO ITEMS VALUES(102, 'F');
-- 오류 발생한다! Y 또는 N 문자열만 와야하는 제약조건을 집어넣었기 때문에 F문자열 넣으려고 하니 오류발생
[ 4 ] 데이터를 조회하기 위한 SELECT문
- SELECT문 : 데이터를 조회하기 위한 SQL 명령어
-- 형식
: SELECT [DISTINCT] {*, COLUMN[ALIAS], . . .} FROM TABLE_NAME;
-- 예시 (이건 스킵하심)
SELECT * FROM DEPT;
SELECT * FROM EMP;
DESC EMP
-- EMP 테이블의 구조 살피기
SET LINESIZE 100
-- 라인당 출력될 문자 수 변경
SELECT EMPNO, ENAME FROM EMP;
[ 5 ] 산출 연산자
- SQL 은 다른 프로그래밍 언어와 같이 산술 연산자를 사용할 수 있다.
SELECT ENAME, SAL, SAL*12 FROM EMP;
* NULL 데이터 취급하면서 산술 연산자 사용할 때는 유의해줘야한다..!!
[ 6 ] NULL도 데이터 ?!
- 오라클에서 NULL은 매우 중요한 데이터이다.
왜냐하면 오라클에서는 컬럼에 널값이 저장되는 것을 허용하는데
널(NULL) 값을 제대로 이해하지 못한 채 쿼리문을 사용하면
원하지 않는 결과를 얻을 수 있기 때문이다!
- 널(NULL) 의 정의
- 0(zero) 도 아니고 빈 공간도 아니다.
- 미확정(해당 사항 없음), 알 수 없는(unkown) 값을 의미한다.
- 어떤 값인지 알 수는 없지만, 어떤 값이 존재하고 있다는 것이다.
- ? 혹은 ∞의 의미이므로 널 (NULL) 값은 연산, 할당, 비교가 불가능하다.
ex) 100 + ? = ? / 100 + ∞ = ∞
-- 산술 연산자
SELECT ENAME, SAL, JOB, COMM, SAL*12, SAL*12+COMM FROM EMP;
-- NVL(Null VaLue) 함수는 NULL을 0 또는 다른 값으로 변환하기 위해서 사용한다.
SELECT ENAME, SAL, JOB, COMM, SAL*12, SAL*12+NVL(COMM, 0) FROM EMP;
-- NVL(COMM, 0) : COMM의 값이 NULL이면 COMM값을 0으로 넣어줘라 라고 한것임
[ 7 ] 컬럼 이름에 별칭 지정하기
- SQL에서 쿼리문의 결과가 출력될 때, 컬럼 이름이 컬럼에 대한 헤딩(heading)으로 출력된다.
1. AS로 컬럼에 별칭 부여하기
- 컬럼 이름 대신 별칭을 출력하고자 하면 컬럼을 기술한 바로 뒤에
AS 라는 키워드를 쓴 후 별칭을 적는다.
- AS 키워드는 생략이 가능하다.
SELECT ENAME, SAL*12+NVL(COMM, 0) AS ANNSAL
-- SAL*12+NVL(COMM, 0) 이름을 ANNSAL로 바꾸겠다.
FROM EMP;
-- AS 키워드는 생략이 가능하다.
SELECT ENAME, SAL*12+NVL(COMM, 0) ANNSAL
FROM EMP;
2. " " 로 별칭 부여하기
- 별칭을 부여할 때 대소문자를 섞어서 기술해도 출력해서 결과를 보면
일괄적으로 모두 대문자로 출력된다.
- 대소문자를 구별하고 싶으면 " " 을 사용해주면 된다.
- " " 을 사용해서 별칭을 부여하면
별칭에 공백문자나 $, _ , # 등 특수문자를 포함시킬 수 있다.
SELECT ENAME, SAL*12+NVL(COMM, 0) "A N N S A L"
FROM EMP;
3. 별칭으로 한글 사용하기
- 오라클에서 한글을 지원해준다.
별칭이 아닌 테이블을 생성할 때도 컬럼을 설정해주면 컬럼 이름도 한글로 부여할 수 있다.
* 하지만 컬럼은 보통 한글보단 영어로 많이 적는다.
SELECT ENAME, SAL*12+NVL(COMM, 0) "연봉"
FROM EMP;
[ 8 ] Concatenation 연산자의 정의와 사용
- Concatenation 의 사전적인 의미는 연결 이다.
- 여러개의 컬럼을 연결할 때 사용하는데 Concatenation 연산자로 " | | " (파이프) 수직바를 사용한다.
-- Concatenation 연산자
SELECT ENAME, JOB FROM EMP;
SELECT ENAME || ' IS A ' || JOB FROM EMP;
[ 9 ] DISTINCT 키워드
- 동일한 데이터 값들이 중복되지 않도록 즉, 한 번씩만 출력되도록 하기 위해 사용된다.
-- DISTINCT 키워드
SELECT * FROM EMP;
SELECT DEPTNO FROM EMP;
-- DEPNO 컬럼에 중복된 값이 존재한다.
SELECT DISTINCT DEPTNO FROM EMP;
-- DEPNO 컬럼에서 값이 중복되지 않게 한번씩만 값 출력된다.
'DataBase' 카테고리의 다른 글
06_그룹 쿼리와 집합 연산자 (2) | 2022.12.14 |
---|---|
05_SQL 주요 함수 (0) | 2022.12.13 |
04_SELECT로 특정 데이터 추출하기 (0) | 2022.12.13 |
03_SQL*Plus 명령어 (1) | 2022.12.13 |
01_데이터베이스(DB) 개념 및 오라클 설치 (0) | 2022.12.10 |