분류 전체보기 287

[MySQL] UNION을 사용해서 SUM 구하기

UNION이란 무엇인가? UNION은 두 개 이상의 쿼리를 합쳐 하나의 쿼리로 만들어 주는 역할을 한다. 이 때 각 컬럼명은 같아야하며 데이터타입 역시 동일해야한다. 만일 컬럼명이 다른 경우엔 AS 를 사용해 컬럼명을 통일시켜주어야 한다. UNION VS UNION ALL 우선 기본적으로 UNION은 UNIONDistinct를 줄여서 쓰는 개념이다. 즉, 중복을 허락하지 않는다. 예를 들어 EX_TABLE1 에서 select 한 값이 'test1', 'test2' 이고 EX_TABLE2에서 select 한 값이 'test1', 'test3'이라고 가정해보자. 이때 UNION을 써서 두 sql을 합쳐주면 결과는 'test1', 'test2', 'test3'으로 중복을 제거한 결과값을 돌려준다. 하지만 Un..

DB/MySQL 2022.04.18

[MySQL] UNION, UNION ALL

MySQL 등의 RDBMS에서 사용하는 Union 연산자는 여러 테이블에 존재는 같은 성격의 값을 한 번의 쿼리로 추출할 수 있도록 돕는다. 예를 들어 Member 테이블에 회원 이메일이 있고, Newsletter 테이블에 구독자 이메일이 있는데, 모든 이메일로 메일을 보내고자 할 경우 두 번의 쿼리와 병합 프로그램을 만들어야 할 것이다. 이럴 때 union 연산자를 사용하면 한 번의 쿼리로 간단하게 정보를 추출할 수 있다. 예제 테이블 정보 * Member seq u_name u_email etc 1 홍길동 aa@aa.co.kr ... 2 이순신 bb@bb.co.kr ... 3 세종대왕 cc@cc.co.kr ... * Newsletter letter_ seq letter_name letter_email..

DB/MySQL 2022.04.06

[SQL 첫걸음] 36강. 트랜잭션

트랜잭션 데이터베이스는 트랜잭션(Transaction)이라는 기능을 제공합니다. INSERT, UPDATE 명령에도 트랜잭션 기능을 사용하는 데 별도로 신경쓰지 않았던 이유는 자동 커밋(Auto Commit)이라 불리는 기능이 동작했기 때문입니다. 트랜잭션 앞서 정규화에서 사용했던 테이블 주문과 주문상품의 관계를 생각해보겠습니다. 이때 테이블 주문과 주문상품 사이에는 의존관계가 존재합니다. 주문 테이블에 행이 존재한다면 반드시 주문상품 테이블에도 행이 존재해야 합니다. 그렇지 않으면 주문한 상품이 없는데 주문이 된 상태이기 때문입니다. 따라서 주문 테이블에 행을 추가할 때 주문상품 테이블에도 행이 추가되어야 합니다. 발주처리 주문이 발생하면 기존 주문과 구분되는 주문번호를 발행해야 합니다. 보통은 AUT..

자격증/SQLD 2022.04.04

[SQL 첫걸음] 35강. 정규화

정규화 정규화(Normalization)는 데이터베이스의 테이블을 규정된 올바른 형태로 개선해나가는 걸 의미합니다. 보통 설계 단계에서 행해지지만 기존 시스템을 바꿔야할 때도 정규화하는 경우가 있습니다. 정규화에는 순서가 존재하는데 이를 참고하여 관계형 데이터베이스가 효율적으로 동작하도록 만들 수 있습니다. 물론 최적의 설계란 상황에 따라 다르기 때문에 반드시 모든 걸 따라야하는 것은 아닙니다. 정규화 예를 들어 아래와 같은 주문 데이터가 저장된 주문 테이블이 존재한다고 가정해봅시다. 제1정규형 관계형 데이터베이스의 테이블에는 하나의 셀에 하나의 값만 저장할 수 있다는 제약이 있습니다. 따라서 아래와 같이 기존 주문상품열을 아래와 같이 상품코드, 상품명, 개수라는 열로 가지고 있는 주문상품이라는 테이블로..

자격증/SQLD 2022.04.04

[SQL 첫걸음] 34강. 데이터베이스 설계

데이터베이스 설계 데이터베이스 설계는 곧 데이터베이스 스키마 내의 테이블, 인덱스, 뷰 등의 객체를 정의하는 것을 의미합니다. 스키마 내에 정의하기 때문에 스키마 설계라 불리기도 합니다. 이때 설계의 주된 내용은 테이블의 이름이나 열, 자료형을 결정하는 것입니다. 그리고 테이블 간의 관계를 생각하면서 여러 테이블을 정의하고 작성하게 됩니다. 논리명과 물리명 테이블을 설계할 때는 테이블 정의서나 설계도 등의 문서를 작성하는 경우가 많습니다. 일반적으로 그 양식은 DESC 명령을 수행한 것과 유사합니다. +--------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---..

자격증/SQLD 2022.04.04

[SQL 첫걸음] 33강. 관계형 모델

관계형 모델 관계형 데이터베이스는 관계형 모델(Relational Model)을 기반으로 작성된 데이터베이스입니다. 그러나 관계형 모델에서 사용하는 용어와 SQL의 용어가 완벽하게 일치하지는 않습니다. 관계형 모델 관계형 모델(Relational Model)의 기본적인 요소는 관계, 릴레이션(Relation)입니다. 관계형 모델에서 이 릴레이션은 약간 다른 의미를 가집니다. 관계형 모델의 릴레이션은 SQL에서 말하는 테이블(Table)에 해당합니다. 관계형 모델의 릴레이션에는 몇 가지 속성(Attribute)이 있습니다. 이 속성은 속성 이름과 형 이름으로 구성됩니다. 속성은 SQL에서 말하는 열(Column)에 해당합니다. 그리고 튜플(Tuple)이 곧 SQL에서 말하는 행(Row)을 의미합니다. 튜플..

자격증/SQLD 2022.04.04

[SQL 첫걸음] 32강. 테이블 결합

테이블 결합 보통 데이터베이스는 하나의 테이블에 많은 데이터를 저장하지 않고 몇 개의 테이블로 나누어 저장합니다. 이처럼 여러 개로 나뉜 데이터를 하나로 묶어 결과를 내는 방법이 바로 테이블 결합이며 이 개념이 집합론에서는 곱집합입니다. 곱집합과 교차결합 곱집합은 두 개의 잡합을 곱하는 연산 방법으로 적집합 또는 카티전곱(Cartesian Product)라고도 불립니다. 교차결합(Cross Join) 데이터베이스 테이블은 집합의 한 종류이기 때문에 SELECT 명령에서 FROM 구에 두 개의 집합, 다시 말해 두 개의 테이블을 지정하면 이들은 곱집합으로 계산이 됩니다. 만약 아래와 같은 테이블 sample72_x와 sample72_y가 존재한다고 가정해봅시다. --sample72_x +------+ | ..

자격증/SQLD 2022.04.04

[SQL 첫걸음] 31강. 집합 연산

집합 연산 관계형 모델을 채택한 데이터베이를 관계형 데이터베이스라 부릅니다. 이때 관계형 모델에서의 관계형은 수학 집합론의 관계형 이론에서 유래했습니다. 쉽게 설명하면 관계형 데이터베이스는 결국 데이터를 집합으로 간주해 다루기 쉽게 하는 목적에서 나온 개념입니다. SQL과 집합 SQL에서 하나의 행을 하나의 요소, 그리고 복수의 행을 반환한 결과 전체를 하나의 집합이라 생각하면 됩니다. UNION으로 합집합 구하기 합집합이란 집합 연산에서 집합끼리 서로 더한 것을 의미합니다. UNION SQL에서는 합집합을 계산하기 위해 UNION 키워드를 사용합니다. 아래와 같이 테이블 sample71_a과 sample71_b가 존재한다고 가정해봅시다. --sample71_a +------+ | a | +------+..

자격증/SQLD 2022.04.04

[SQL 첫걸음] 30강. 뷰 작성과 삭제

뷰 작성과 삭제 FROM 구에 서브쿼리를 사용할 수 있다는 걸 서브쿼리 부분에서 알 수 있었습니다. 이때 서브쿼리에 이름을 붙여 데이터베이스 객체화하여 쓰기 쉽게 한 것을 뷰(View)라고 합니다. -- 뷰 생성 > CREATE VIEW 뷰_테이블명 AS SELECT * FROM 테이블명; -- 뷰 생성 (열 지정) > CREATE VIEW 뷰_테이블명(컬럼명, 컬럼명, 컬럼명) AS SELECT 컬럼명, 컬럼명, 컬럼명 FROM 테이블명; -- 뷰 삭제 > DROP VIEW 뷰_테이블명; 뷰 본래 객체로 사용할 수 없는 SELECT 명령을 객체로서 이름을 붙여 관리할 수 있도록 한 것이 바로 뷰입니다. 따라서 뷰를 참조하면 정의된 SELECT 명령의 실행결과를 테이블처럼 사용할 수 있습니다. 예를 들어..

자격증/SQLD 2022.04.04

[SQL 첫걸음] 29강. 인덱스 작성과 삭제

인덱스 작성과 삭제 인덱스(Index)는 DDL(Data Definition Language)을 사용하여 작성하거나 삭제합니다. 사실 표준 SQL에서는 인덱스 자체가 데이터베이스 제품에 의존하는 선택적인 항목으로 취급되어 CREATE INDEX 명령이 존재하지 않습니다. 하지만 대부분의 유명한 데이터베이스 제품에는 인덱스 구조가 도입되어 있고 비슷한 방법으로 이를 관리할 수 있습니다. 인덱스 작성 CREATE INDEX 명령으로 인덱스를 만들 수 있습니다. 이때 인덱스에 이름을 붙여 관리하는데, 인덱스가 데이터베이스 객체가 될지 아니면 테이블의 열처럼 취급될지는 데이터베이스 제품에 따라 다릅니다. Oracle, DB2 등에서 인덱스는 스키마 객체가 됩니다. 따라서 스키마 내에서 이름이 중복되지 않게 관리..

자격증/SQLD 2022.04.04