본문 바로가기

SQL

SQL 첫걸음 7~8장

교재: SQL 첫걸음

 

7장. 복수의 테이블 다루기

31강. 집합연산

 

-UNION 합집합

UNION으로 두 개의 SELECT 명령을 하나로 연계해 합집합 결과를 얻을 수 있다.

단, 열 개수와 자료형이 같아야지 사용 가능하다

UNION에서 ORDER BY는 마지막 SELECT 명령에 지정한다. 지정하는 열은 별명을 붙여 이름을 일치시킨다.

SELECT a AS c FROM sample71_a
UNION
SELECT b AS c FROM sample71_b ORDER BY b;

 

UNION ALL 사용 시 중복값 표시된다

-INTERSECT 교집합

-EXCEPT 차집합 ( Oracle의 경우 MINUS)

 

32강. 테이블 결합

 -곱집합

예를 들어, 집합 A와 집합 B의 곱집합은 집합 A의 요소에 집합 B의 각 요소를 붙여 계산하는것

 

-교자집합(Cross Join)

From 구에 복수의 테이블을 지정한다.

SELECT * FROM sample72_z, sample72_y;

 

*UNION으로 합집합을 구했을 경우 행(세로)방향으로 확대되고, From구로 교차집합을 구했을 경우 열(가로)방향으로 확대된다.

 

-내부결합

결합할 테이블 수가 많은 경우 사용한다.

기본키를 사용한다.

-- 상품 테이블 작성하기
CREATE TABLE 상품 (
상품코드 CHAR(4) NOT NULL,
상품명 VARCHER(30),
메이커명VARCHAR(30),
가격 INTEGER,
상품분류 VARCHER(30),
PRIMARY KEY(상품코드)
);

-- 재고수 테이블 작성하기
CREATE TABLE 재고수 (
상품코드 CHAR(4),
입고날짜 DATE,
재고수 INTEGER
);

참조할 테이블의 기본키와 동일한 이름과 자료형으로 열을 만들어 행 연결하는 경우가 많다.

-- 상품 테이블과 재고수 테이블을 교차결합하기
SELECT * FROM 상품, 재고수;

 

WHRER 조건 - 상품코드가 같은 행 검색하기

SELECT * FROM 상품, 재고수
WHERE 상품.상품코드 = 재고수.상품코드;

 

검색할 행과 반환할 열 제한하기

SELECT 상품.상품명, 재고수.재고수 FROM 상품, 재고수
WHERE 상품.상품코드 = 재고수.상품코드
AND 상품.상품분류 = '식료품';

 

-INNER JOIN으로 내부결합

두 개 테이블을 가로로 결합

SELECT * FROM 테이블명1 INNER JOIN 테이블명2 ON 결합조건

 

-내부결합으로 데이터관리하기

 외부키: 다른 테이블의 기본키를 참조하는 열

자가결합(Self Join): 같은 테이블끼리 결합

SELECT S1.상품명, S2.상품명
FROM 상품 S1 INNER JOIN 상품 S2
ON S1.상품코드=S2.상품코드;

 

-외부결합

:어느 한 쪽에만 존재하는 데이터행을 어떻게 다룰지 변경할 수 있는 결합 방법

결합하는 테이블 중에 어느 쪽을 기준으로 할지 결정할 수 있다. (LEFT JOIN, RIGHT JOIN)

SELECT 상품3.상품명, 재고수.재고수
FROM 상품3 LEFT JOIN 재고수
ON 상품3.상품코드 = 재고수.상품코드
WHERE 상품3.상품분류 = '식료품';

 

33강. 관계형 모델

릴레이션(Relation): 관계형 모델(Relational Model)의 기본적인 요소=테이블, 튜플의 집합

릴레이션의 속성(attribute): 속성이름과 형 이름으로 구성

관계형 모델에서 튜플(tuple): SQL에서의 행

 

관계대수: 릴레이션의 연산이 집합의 대한 연산에 대응된다는 이론

관계대수의 규칙

  • 하나 이상의 관계를 바탕으로 연산
  • 연산한 결과, 반환되는 것 또한 관계
  • 연산을 중첩 구조로 실행해도 상관X

-관계형 모델과 SQL

합집합(union): 릴레이션의 덧셈 -UNION

차집합(diggerence): 릴레이션의 뺄셈 -EXCEPT

교집합(intersection): 릴레이션의 공통부분 -INTERSECT

곱집합(cartesian product): 릴레이션끼리의 대전표 조합하는 연산 -CROSS JOIN

선택(selection): 튜플의 추출 -WHERE구에 조건을 지정해 데이터 검색하는 것

투영(projection): 속성의 추출

결합(join): 릴레이션끼리의 교차결합해 계산된 곱집합에서 결합조건을 만족하는 튜플 추출하는 연산(내부결합)

 

 

8강. 데이터베이스 설계

34강. 데이터베이스 설계

DB설계: DB의 스키마 내에 테이블, 인텍스, 뷰 등의 데이터베이스 객체를 정의하는 것, 스키마 설계

 

물리명: DB에서 사용될 이름으로, CTEATE TABLE에 지정하는 테이블 이름이나 열 이름

DB System 규칙에 따라 길이 제한, 공백문자 사용불가 등 제약이 있다.

논리명: 테이블의 '설계상 이름'

 

-자료형

수치형, 문자열형

문자열형->수치형 변환 시 에러 발생하기도

 

-고정길이와 가변길이

열에 저장할 수 있는 크기, VARVHER형의 경우 최대 수천 바이트

->큰 데이터는 LOB형 사용

 

-기본키

자동증가 열: INSERT할 경우 번호를 자동으로 증가시켜 저장해주는 편리한 열, 

MySQL의 경우 AUTO_INCREMENT를 지정 ->지정한 열은 PRIMARY KEY 또는 UNIQUE로 유일성 지정

 

-ER다이어그램

: 테이블 설계할 때 테이블 간의 관계를 명확히 하기 위해 작성하는 설계도(도식),

Entity(개체): 테이블 또는 뷰, 사각형 상단에는 개체이름, 사각형 안에는 개체 속성 표기

ER다이어그램의 개체

개체와 개체의 연계는 선으로 이어서 표현(1:1, 1:n, n:n)

 

35강. 정규화

DB의 테이블을 규정된 올바른 형태로 개선해나가는 것, 설계 단계에서 진행ㅇ

단계적으로 실시한다

 

-제1정규형

제1단계

-- 반복되는 데이터를 가로(열 방향)가 아닌 세로(행 방향)로 늘리는 것

-- 테이블 분할과 기본키 지정이 이루어진다

 

-제2정규형

-- 함수종속성을 찾아내서 테이블을 분할하는것, 기본키에 중복이 없는지

-- 부분 함수 종속 제거

-- 복합키 테이블에서, 일부 키에만 종속된 속성이 있으면 → 분리해야 함

 

-제3정규형

기본키 이외의 부분에서 중복 없는지 조사

 

-정규화의 목적

: 정규화로 데이터 구조를 개선하는 것은 하나의 데이터가 한 곳에 저장되도록 하기 위함이다

 

36강. 트랜잭션

 

-롤백: 트랜잭션을 롤백하면 변경한 내용이 적용되지 않는다

-자동커밋: UPDATE, DELAATE, INSERT가 처리될 때마다 트랜잭션은 맘묵적으로 자동커밋 상태로 되어 있다.

-- 트랜잭션 시작
START TRANSATION

-- 트랜잭션 내에서 실행한 명령을 적용한 후 종료
COMMIT

-- 트랜잭션 내에서 실행한 명령을 파기한 후 종료
ROLLBACK

 

예시)

-- 트랜잭션 내에서의 발주처리
START TRANSACTION;
INSERT INTO 주문 VALUES(4, '2014-16-01', 1);
INSERT INTO 주문상품 VALUES(4, '0003', 1);
INSERT INTO 주문상품 VALUES(4, '0004', 2);
COMMIT;

 

-- 트랜잭션 사용법

세트로 실행하고 싶은 SQL명령은 트랜잭션 내에서 실행한다.

 

-끝-

@ㅅ@

 

'SQL' 카테고리의 다른 글

SQL 첫걸음 5~6장  (0) 2025.04.05
SQL 첫걸음 3장~4장  (0) 2025.03.30
SQL 첫걸음 1장~2장  (0) 2025.03.22