하루 10분씩 핵심만 골라 마스터하는 SQL (3)

Day 11


하위 쿼리의 이해

쿼리란, 모든 SQL 문을 말한다. 대개 SELECT 문을 의미한다.

예를 들면,
SELECT cust_name, cust_concat FROM Customers WHERE cust_id IN ('1000004,10000005')
대신 전에 SELECT 문을 하위 쿼리로 WHERE 절에 넣어보자.

SELECT cust_name, cust_concat FROM Customers WHERE cust_id IN (SELECT order_id FROM oderItems WHERE prod_id = 'RGAN01')
처럼 select 문 안에 또 다른 select 문을 넣을 수 있다.

하지만 많은 양의 하위 쿼리는 효율이 좋지 않다.


Day 12 


테이블 조인

같은 데이터를 여러 번 저장하는 것은 결코 좋지 않다. 이는 바로 관계형 데이터베이스 디자인의 기본 원칙이다. 이에 따라 관계형 테이블은 정보를 여러 테이블로 나누게 되며 각 데이터마다 하나씩 테이블을 만든다. 이러한 여러 테이블은 공통의 값을 통해 서로 연결된다.

왜 조인을 사용하는가?

데이터를 여러 테이블로 나누면 저장 공간을 보다 효율적으로 사용할 수 있고 조작이 간편하며, 확장하기도 편하다. 하지만 이점에 따른 대가도 있다.

데이터가 여러 테이블에 저장되어 있으면 하나의 SELECT 문으로 이 데이터를 어떻게 얻을 수 있을까?

해결책은 바로 조인이다. 간단히 말해 조인은 SELECT 문 내에서 테이블을 연결하는 메커니즘으로, 특별한 구문을 이용해 여러타이블을 하나로 연결해서 하나의 결과를 반환할 수 있으며 조인을 통해 각 테이블의 필요한 행을 연결할 수 있다.

SELECT 여러 행 FROM 여러 테이블 WHERE 조건

조인을 만드는 방법은 간단하다. 첨가할 모든 테이블을 지정하고 서로 연결될 방식을 지정하면 된다.

내부조인 

지금까지 본 조인은 동등조인으로, 두테이블을 대상으로 동일성 테스트를 하여 그 결과를 기준으로 조인하게 된다. 이러한 조인을 내부 조인이라고도 부른다.

SELECT 열 이름 FROM 테이블 이름 INNER JOIN 또 다른 테이블 ON 조건

WHERE 대신 ON이 쓰임. DBMS 마다 선호되는 방식이 다름. 테이블을 많이 조인 할 수록 성능이 떨어진다.


Day 13


테이블 별칭 사용

예를 들어,
SELECT cust_name, cust_contact FROM customers AS C, orders AS O, WHERE C.cust_id=O.cust_id
처럼 테이블에 별칭을 사용해 더 간편하게 쓸 수 있다.
(하지만 오라클에서는 AS를 사용할 수 없다.)

다른 조인 사용

자체 조인

SELECT c1.cust_id,c1.cust_name,c1.cust_contact FROM Customers AS c1, Customers AS c2 WHERE c1.cust_name = c2.cust_name AND c2.cust_contact = 'JIM JONES'

같은 테이블을 두 번 별칭을 사용한다.

자연 조인

자연 조인은 중복 항목을 제거하고 같은 열일 경우 한 번만 반환되는 조인 형태이다.
특별한 조건을 쓰지 않아도 자연적으로 중복되는 항목을 제외하고 반환된다.

외부 조인

대부분의 조인은 한 테이블의 행을 다른 테이블의 행과 연결하는 방식으로 이루어지지만 관련된 행이 없는 경우도 있다. 예를 들어

1. 아직 주문을 하지 않은 고객을 포함해서 각 고객의 주문 수를 세는 경우
2. 아무도 주문하지 않은 경우를 포함해서 모든 제푸믜 주문량을 나열하는 경우

이러한 경우는 조인을 통해 연결되는 테이블에 연결된 행이 없을 수도 있다.

SELECT 여러 열 FROM 테이블 이름 (LEFT or RIGHT)OUTER JOIN 테이블 이름 ON 조건

LEFT를 지정하면 왼쪽 테이블의 모든 행이 연결 여부에 관계없이 모두 반환되고
RIGHT를 지정하면 오른쪽 테이블의 모든 행이 연결 여부에 관계없이 모두 반환된다.


Day 14


쿼리의 결합

UNION을 사용함으로서 두 SELECT 문을 결합시킨다. UNION의 기본 특성은 중복을 제거한다. 중복을 반환하기를 바란다면 UNION ALL 키워드를 사용한다.


Day 15


데이터 삽입

INSERT 는 데이터베이스 테이블에 행을 삽입하는 데 사용된다.
INSERT 가 사용되는 용도는 몇 가지가 있다.

1. 하나의 완전한 행을 삽입
2. 하나의 부분적인 행을 삽입
3. 쿼리 결과를 삽입

1. 완전한 행 삽입

INSERT INTO Customers VALUES ('10000006','toy'.....);

열은 테이블 정의에 지정된 순서대로 채워진다. 이 구문은 아주 간단하지만 안전하지 않고 정의된 행의 순서를 그대로 지켜야 한다는 점이 문제이다.

INSERT INTO Customers(행의 이름들) VALUES (행의 이름 순으로 나열 된 값들);

이 문법이 더 안전하고 정확하다.

2. 부분 행 삽입

일부 열에만 값을 지정하고 나머지 열에는 값을 지정하지 않아도 된다.

3. 가져온 데이터 삽입

INSERT SELECT 문을 사용하여 기존의 데이터에 새로운 데이터를 삽입한다.
예를 들면,

SELECT Customers(.....) SELECT (Customers의 열과 대응되어야하는 열들) FROM CustNew;

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리