오브의 빛나는 별

[SQL] 과목Ⅱ. SQL 기본 및 활용(1) 본문

SQL

[SQL] 과목Ⅱ. SQL 기본 및 활용(1)

오브의 별 2023. 11. 4. 02:15
반응형

관계형 데이터베이스 개요

데이터베이스
- 넓은 의미에서의 데이터베이스는 일상적인 정보들을 모아 놓은 것 자체
- 일반적으로 데이터베이스라고 말할 때는 특정 기업이나 조직 또는 개인이 필요에 의해(부가가치가 발생하는) 데이터를 일정한 형태로 저장해 놓은 것
ex) 학교에서는 학생 관리를 목적으로 학생 개개인의 정보
ex) 기업에서는 직원들을 관리하기 위해 직원들의 이름, 부서, 월급 등의 정보
- 데이터의 약이 많아지고 많은 사용자가 동시에 접근하는 일이 빈번
-> 엑셀 등의 개인용 소프트웨어만으로 관리하기에는 한계 -> DBMS 등장

데이터베이스의 발전
- 1960년대: 플로우차트 중심의 개발 방법을 사용하였으며 파일 구조를 통해 데이터를 저장하고 관리
- 1970년대: 데이터베이스 관리 기법이 처음 태동되던 시기였으며 계층형 데이터베이스, 망형 데이터베이스 같은 제품들이 상용화
- 1980년대: 현재 대부분의 기업에서 사용되고 있는 관계형 데이터베이스가 상용화되었으며 Oracle, Sybase,DB2 같은 제품이 사용
- 1990년대: Oracle, Sybase, Infimix, DB2, Teradata, SQL server 외 많은 제품들이 보다 향상된 기능으로 정보시스템의 확실한 핵심 솔루션으로 자리잡게 되었으며, 인터넷 환경의 급속한 발전과 객체 지향 정보를 지원하기 위해 객체 관계형 데이터베이스로 발전

관계형 데이터베이스

SQL
명령어의 종류 명령어 설명
데이터 조작어(DML) SELECT 데이터베이스에 들어있는 데이터를 조회하거나 검색하기 위한 명령어로 RETRIEVE라고도 함
INSERT
UPDATE
DELETE
데이터베이스의 테이블에 들어있는 데이터에 변형을 가함. 데이터를 테이블에 새로운 행을 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정
데이터 정의어(DDL) CREATE
ALTER
DROP
RENAME
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어도 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련
데이터 제어어(DCL) GRANT
REVOKE
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수
트랜잭션 제어어(TCL) COMMIT
ROLLBACK
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어

TABLE
용어 설명
테이블 행과 칼럼의 2차원 구조를 가진 데이터의 저장 장소이며, 데이터베이스의 가장 기본적인 개념
칼럼/열 2차원 구조를 가진 테이블에서 세로 방향으로 이루어진 하나하나의 특정 송성(더이상 나눌 수 없는 특성)
2차원 구조를 가진 테이블에서 가로 방향으로 이루어진 연결된 데이터

- 데이터를 하나의 테이블에 다 모을 것인가? - 중복 문제 발생, 데이터 불일치 현상으로 확대
- 복수의 테이블로 분할하여 데이터 저장 - 중복 감소-> 이상 현상 발생 방지, 정규화

ERD

- 하나의 팀은 여러 명의 선수를 포함할 수 있다.
- 한 명의 선수는 하나의 팀에 꼭 속한다.
- 하나의 팀은 하나의 전용 구장을 꼭 가진다.
- 하나의 운동장은 하나의 홈팀을 가질 수 있다.
- 하나의 운동장은 여러 게임의 스케줄을 가질 수 있다.
- 하나의 스케줄은 하나의 운동장에 꼭 배정된다.

 

DDL

데이터 유형
데이터 유형 설명
CHARACTER(s) 고정 길이 문자열 정보(Oracle, SQL server 모두 CHAR로 표현). s는 기본 값이 1바이트, 최대 길이 Oracle 2,000바이트, SQL server 8,000바이트. s만큼 최대 길이를 갖고 고정 길이를 가지고 있으므로 할당된 변수 값의 길이가 s보다 작을 경우에는 그 차이 길이만큼 공간으로 채워짐
VARSHAR(s) - CHARACTER VARING의 약자로 가변 길이 문자열 정보(Oracle은 VARSHAR2로, SQL server는 VARSHAR로 표현)
NUMBERIC 정수, 실수 등 숫자 정보(Oracle은 NUMBER로 SQL server는 10가지 이상 숫자 타입을 가지고 있음). Oracle은 처음에 전체 자리 수를 지정하고, 그 다음 소수 부분의 자리 수를 지정. 정수 부분이 6자리고 소수점 부분이 2자리인 경우 'NUMBER(8,2)가 됨
DATETIME 날짜와 시각 정보(Oracle는 DATE로, SQL server는 DATETIME으로 표현. Oracle은 1초, SQL server는 3.33ms 단위로 관리

문자열 유의사항: CHAR vs VARCHAR
- VARCHAR: 가변 길이 저장. 10글자로 지정했는데 2글자만 데이터 들어있다면 그냥 2글자로만 저장
- CHAR: 고정 길이 저장. 10글자로 지정했는데 2글자만 데이터 드러있다면 나머지는 공백으로 채움
- CHAR : 'AA' != 'AA  '
- VARCHAR : 'AA' == 'AA  '

테이블 생성 구문
- CREATE TABLE 테이블이름
  (칼럼명1 DATATYPE [DEFAULT 형식],
  (칼럼명2 DATATYPE [DEFAULT 형식],
  (칼럼명3 DATATYPE [DEFAULT 형식]);

유의사항
- 숫자로 시작하면 안됨(문자로 시작)
- 특수문자 '-'는 허용하지 않음
- 키워드는 쓸 수 없음

테이블 생성 주의사항
- 테이블 생성시 대/소문자 구분은 하지 않는다. - 기본적으로 테이블이나 칼럼명은 대문자로 만들어진다
- DATETIME 데이터 유형에는 별도로 크기를 지정하지 않는다.
- 문자 데이터 유형은 반드시 가질 수 있는 최대 길이를 표시해야 한다.
- 칼럼과 칼럼의 구분은 콤마로 하되, 마지막 칼럼은 콤마를 찍지 않는다.
- 칼럼에 대한 제약조건이 있으면 CONSTRAINT를 이용해 추가할 수 있다.

제약조건(CONSTRAINT)
- 사용자가 원하는 조건의 데이터만 유지하기 위한 즉, 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법으로 테이블의 특정 칼럼에 설정하는 제약
- 테이블을 생성할 떄 제약조건을 반드시 기술할 필요는 없지만, 이후에 ALTER TABLE을 이용해서 추가, 수정하는 경우 데이터가 이미 입력된 경우라면 처리 과정이 쉽지 않으므로 초기 테이블 생성 시점부터 적합한 제약 조건에 대한 충분한 검토가 있어야 함
구분 설명
PRIMARY KEY(기본키) 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키를 정의. 하나의 테이블에 하나의 기본키 제약만 정의할 수 있음. 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성하며, 기본키를 구성하는 칼럼에는 NULL 입력X. 기본키 제약 = 고유키 제약 = NOT NULL 제약
UNIQUE KEY(고유키) 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키 정의. NULL은 고유키 제약의 대상이 아니므로 NULL 값을 가진 행이 여러 개가 있더라도 고유키 제역 위반X
NOT NULL NULL 값의 입력 금지. 디폴트 상태에서는 모든 칼럼에서 NULL을 허가하고 있지만, 이 제약을 지정함으로써, 해당 칼럼은 입력 필수가 됨. NOT NULL을 CHECK의 일부분으로 이해할 수도 있음
CHECK 입력할 수 있는 값의 범위 등을 제한. CHCEK 제약으로는 TRUE or FALSE로 평가할 수 있는 논리식을 지정
FOREIGN KEY(외래키) 관계형 데이터배이스에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키가 생성됨. 외래키 지정시 참조 무결성 제약 옵션 선택 가능
- 칼럼 LEVEL 정의 방식: PLAYER_NAME, TEAM_ID 칼럼의 데이터 유형 뒤에 NOT NULL을 정의한 사례
- 테이블 LEVEL 정의 방식: PLAYER_PK, PRIMARY KEY, PLAYER_FK, FOREIGN KEY 사례처럼 테이블 생성 마지막에 모든 제약조건을 기술
- 하나의 SQL 문장 내에서 두 가지 방식은 혼용해서 사용할 수 있으며, 같은 기능을 가지고 있음

SELETE 문장을 통한 테이블 생성
- 기존 테이블의 제약 조건 중에 NOT NULL만 새로운 복제 테이블에 적용이 되고, 기본키, 고유키, 외래키, CHECK 등 다른 제약 조건을 없어짐
- ALTER TABLE 기능을 사용해 제약 조건 추가 필요

ALTER TABLE
- 한 번 생성된 테이블은 특별히 사용자가 구조를 변경하기 전까지 생성 당시의 구조를 유지
- 처음의 테이블 구조를 그대로 유지하는 것이 최선이지만, 업무적인 요구사항이나 시스템 운영상 테이블을 사용하는 도중에 변경해야 할 일들이 발생할 수도 있음
- 이 경우 주로 칼럼을 추가/삭제하거나 제역조건을 추가/삭제하는 작업 진행

MODIFY COLUMN
- 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못함. 이는 기존의 데이터가 훼손될 수 있기 떄문
- 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있음. 해당 칼럼이 NULL 값만을 가지고 있으면 데이터 유형 변경 가능
- 칼럼의 DEFAULT 값을 바꾸면 변경 이후 발생하는 행 삽입에만 영향을 미침
- 칼럼에 NULL이 없을 경우에만 NOT NULL 제약조건 추가 가능

 

DML

INSERT
- 한번에 한 줄씩 넣기
- INSERT INTO 테이블명 (COLUMN_LIST)
  VALUES (COLUMN_LIST에 넣을 VALUE_LIST);
- INSERT INTO 테이블명
  VALUES (전체 COLUMN에 넣을 VALUE_LIST);
- 1:! 매핑: 순서/개수
- 문자일 경우 ''(작은 따옴표)
- 컬럼 리스트를 지정할 경우 NULL이 허용되는 컬럼은 굳이 안넣어도 됨
- 그런 칼럼은 NULL 또는 default 값 입력
- Primary Key나 NOT NULL이 걸린 칼럼은 반드시 입력되어야 함

UPDATE
- UPDATE 테이블명
  SET 수정되어야 할 칼럼명 = 수정되기를 원하는 새로운 값
  WHERE 행 선택 조건;

DELETE
- DELETE FROM 삭제를 원하는 정보가 들어있는 테이블명
  WHERE 행 선택 조건;

DDL과 DML의 차이점
- DDL: 명령어 입력 순간 AUTO COMMIT(=save)
- DML: 별도로 COMMIT 명령어를 입력해야 동작. 단, SQL SERVER에서는 AUTO COMMIT
- DELETE vs TRUNCATE TABLE: 시스템 활용 측면에서는 TRUNCATE TABLE가 좋으나 ROLLBACK 불가. 단, SQL server에서는 ROLLBACK을 이용하여 복구 가능

SELETE
- SELETE * FROM PLAYER;
- SELETE POSITION FROM PLAYER;
- 문자/날짜는 왼쪽 정렬, 숫자는 오른쪽 정렬
Alias(별명) 부여
- 칼럼명 바로 뒤에 작성
- 칼럼명과 Alias 사이에 AS, as 키워드 사용 가능
- 큰 따옴표는 Alias가 공백, 특수문자를 포함할 경우와 대소문자 구분이 필요한 경우에 사용
- SELETE PLAYER_NAME AS 선수명, POSITION AS 위치 FROM PLAYER;
- = SELETE PLAYER_NAME 선수명, POSITION 위치 FROM PLAYER;

산술 연산자
산술 연산자 설명
( ) 연산자 우선순위를 변경하기 위한 괄호. 괄호 안에 연산이 우선됨
* 곱하기
/ 나누기
+ 더하기
- 뺴기

합성 연산자
- 문자와 문자를 연결하는 경우 2개의 수직 바(||)에 의해 이루어짐(Oracle)
- 문자와 문자를 연결하는 경우 + 표시에 의해 이루어짐(SQL server)
- 두 벤더 모두 공통적으로 CONCAT (string1, string2) 함수 사용 가능
- 칼럼과 문자 또는 다른 칼럼과 연결시킴
- 문자 표현식의 결과에 의해 새로운 칼럼 생성
- SELETE PLAYER_NAME || '선수', || HEIGHT || 'cm', || WEIGHT || 'kg' 체격정보 FROM PLAYER;
반응형