SELECT
    customer, quantity,
    IF(
        quantity > 5, "Yes", "No"
    ) AS novelty
FROM
    delivery;

IF 함수 안의 인수

  • 첫 번째 : 조건
  • 두 번째 : TRUE
  • 세 번째 : FALSE

 

IF 함수 중첩

SELECT
    customer, quantity,
    IF(
        quantity > 5, "Yes",
        IF(
            quantity > 3, "Next Time", "No"
        )
    ) AS novelty
FROM
    delivery;

첫 번째 IF 함수의 FALSE 자리에 또 다른 IF 함수를 작성함으로써 중첩시킬 수 있다.

첫 번째 IF 함수가 TRUE일 경우 해당 값으로 진행되고, FALSE일 경우 안 쪽의 IF 함수를 확인한다.

 

 


CASE 또는 IF 함수는 주로 SELECT절에서 사용하지만,

WHERE절(조건 분기)과 ORDER BY절(분류 기준 재정의)에서도 사용할 수 있다.

 

'IT > Database' 카테고리의 다른 글

[RDBMS] IFNULL, NULLIF 함수  (0) 2021.10.06
[RDBMS] CASE 함수  (0) 2021.10.06
[RDBMS] WHERE와 HAVING의 차이  (0) 2021.10.05
MySQL Workbench Tips (Updating)  (0) 2021.10.05
[RDBMS] 문자열에 %가 포함되었을 때의 LIKE 검색  (0) 2021.10.01

모든 SELECT 쿼리는 위의 순서도를 따른다.

아래의 예시 쿼리문 두 개를 통해 WHERE구와 HAVING구가 각각 어느 시점에서 필터링을 하는지 확인해보았다.

(패드에 글씨 쓰는 게 아직 익숙치 않아 처참하게 널부러진 글씨들은 이해 바람.)


WHERE


HAVING


요약하자면 WHERE는 테이블을 선택한 후 바로 필터링 작업을 하는 반면

HAVING은 그룹핑까지 끝낸 후에 하나의 그룹을 제외하는 방식으로 필터링을 거친다는 것인데

둘 중 어느 방식이 효율적인가는 상황에 따라 다를 것 같다.

 

한 가지 알 수 있는 사실은 WHERE구로 필터링을 하면 WHERE의 필터링 과정에서 처리할 데이터가 많아지는 것이고,

HAVING구로 필터링을 하면 GROUP BY로 그룹핑하는 과정에서 처리할 데이터의 양이 늘어난다는 것이다.

실무에서는 시뮬레이션 과정을 거쳐 코스트가 더 적은 방법을 찾는다고 한다.

주석

단일 줄 주석 (Double Hyphen)

-- remark

 

다중 줄 주석 (Slash & Asterisk)

/*

remark

remark

remark

*/

 

빠른 쿼리 실행

1. shift + 방향키(+ Home, End)로 쿼리문 범위 선택

2. Ctrl + Enter로 실행

SELECT
	*
FROM
	product
WHERE
	product_name LIKE "%100\%%";

\%로 %의 기능을 무력화시켜 일반 문자처럼 사용할 수 있다 (Escape).

 

위의 구조로 된 테이블이 있다. id가 3인 데이터의 val은 "A  "이다 (뒤에 공백 2칸).

SELECT
	*
FROM
	search
WHERE
	val = "A";

위와 같이 SELECT 하면 결과는 id가 1, 2, 3인 데이터가 모두 검색된다.

공백과 대소문자를 판독할 수 없기 때문에 모든 a를 가져온 것이다.

SELECT
	*
FROM
	search
WHERE
	val = BINARY "A";

하지만 앞에 BINARY를 붙여 SELECT 한다면 완벽하게 구분해서 id가 1인 데이터만 출력된다.

DATA WAREHOUSE

  • 데이터에 대한 스키마를 만든다.
  • 스키마에 따라 쿼리를 보내 데이터를 얻는 방식
  • 데이터를 스키마로 변환하는 과정이 중요함.
  • 사용할 수 없는 데이터를 걸러 내기 때문에 시간이 많이 걸림.
  • 추출 및 트랜스폼을 미리 다 해 놓는다(ETL: Extract, Transform and Load).

DATA LAKE

  • 스토리지처럼 데이터를 있는 그대로(Raw) 가지고 있음.
  • 데이터를 용도에 따라 변환을 해줌.
  • 추출해 뒀다가 필요할 때 로딩하고 트랜스폼한다(ELT: Extract, Load and Transform).

No-SQL이란?

기존의 정형화(Structured) 되어 있는 데이터 뿐만 아니라 비정형화(Unstructured) 데이터도 모두 저장 가능한 DB 서비스.

No-SQL의 종류 및 제품

1. Key-Value Database

  • Amazon DynamoDB
  • Redis DB(구축 실습)

2. Document Database

  • Google Cloud Firestore
  • MongoDB(구축 실습)
  • CougchDB

3. Column Family Database

  • Google BigTable
  • Hbase
  • Cassandra

4. Graph Database

  • Allegro Database
  • Neo4J

No-SQL의 장점

  • 오픈 소스와 엔터프라이즈 두 가지의 라이선스를 제공.
  • 클라우드 컴퓨팅에서의 새로운 저장 기술이 필요하게 되었는데 No-SQL이 가장 적합.
  • 소스를 직접 수정할 수 있기 때문에 유연성 있는 개발 가능.
  • 관계형 데이터베이스와는 달리 틀(Schema)을 만들 필요가 없고, 2~300개의 테이블이 생성되는 비즈니스 환경에서 시간과 비용적 측면에서 이점이 있다.
  • 빅데이터를 빠르게 처리할 수 있으며 No-SQL 기술을 잘 이해하고 분석, 설계, 구축한다면 관계형 데이터베이스 대비3배 이상의 성능을 기대할 수 있다.

Key-Value DB (Redis DB)

In-Memory 기반의 데이터 저장 구조로 DRAM에 빅데이터를 받아 처리할 수 있으며, 휘발성 메모리를 사용하므로 예기치 못한 오류 발생 시 데이터 유실의 위험이 존재하고 저장의 목적보다는 데이터의 처리를 위해 사용한다.

메인 DB로 사용하는 대부분의 제품들은 파일 저장 방식이기 때문에 디스크 IO 문제로 인해 발생하는 성능 지연 문제를 해결하기 위해 Key-Value DB를 같이 사용한다.

Document DB (MongoDB)

MongoDB는 SQL 대신 JavaScript를 활용할 수 있어 기술을 처음 배우는 사람들의 부담을 덜어주었다.

MongoDB는 RDBMS에서 테이블을 이용해 정보를 저장하는 방식과는 달리 웹 서버와 통신할 때 자주 쓰이는 JSON(JavScript Object Notation)과 유사한 형태로 저장하는 방식을 채용하고 있다.

MongoDB의 또 하나의 큰 장점은 *복제(Replicate)*샤딩(Sharding)을 기본적인 DBMS의 기능으로 제공하고 있다는 점이다.

RDBMS는 스키마를 자주 바꾸기 힘들지만 NoSQL은 가능하기에 자주 바꿔야 하는 환경 또는 분산 컴퓨팅 환경에서 사용했을 때 이점이 있다.

 

*Replicate : 데이터베이스를 복제해서 저장해 뒀다가 기존 데이터베이스에 문제가 생겨 연결이 끊기면 복제본을 이용해서 서비스를 지속할 수 있다.

 

*Sharding : 데이터베이스에 저장된 정보의 양이 많아지고, 읽고 쓰는 양이 많아지면 필연적으로 데이터베이스가 주어진 작업을 수행하는 속도가 느려진다. 데이터를 읽고 쓰는 속도를 향상시키는 방식 중 하나가 바로 정보를 분산해서 여러 대의 서버 데이터베이스에 저장하는 샤딩이다.

Column Family DB

RDBMS는 블록 단위로 읽기 때문에 데이터의 양이 많을 경우 처리 속도가 느리지만 Column Family는 하나의 Column 안에서 검색하기 때문에 처리 속도가 훨씬 빠르다. 테이블 간 조인을 지원하지 않기 때문에 하나의 row에 아주 많은 column이 들어가게 된다. 다음과 같은 경우에 활용을 고려하면 좋다.

  • 데이터베이스에 쓰기 작업이 많은 애플리케이션
  • 지리적으로 여러 데이터 센터에 분산되어 있는 애플리케이션
  • 복제본 데이터가 단기적으로 불일치하더라도 큰 문제가 없는 애플리케이션
  • 동적 필드를 처리하는 애플리케이션
  • 수백만 테라바이트 정도의 대용량 데이터를 처리할 수 있는 애플리케이션

 


No-SQL 정보 사이트 : https://hostingdata.co.uk/nosql-database/

 

NoSQL Databases List by Hosting Data - Updated 2021

The ultimate reference for NOSQL Database Management Systems. Includes Events, Links, Tools, News, Forums, Books, and much more...

hostingdata.co.uk

 

SQL 용어 관계형 데이터베이스 용어 설명
튜플 또는 레코드 하나의 항목을 대표하는 데이터
컬럼 속성(attribute) 또는 필드 튜플의 이름 요소(ex: name, useq)
테이블 관계 또는 기초 관계변수 같은 속성을 공유하는 튜플의 모임
뷰 또는 결과 집합 파생 관계변수 튜플들의 모임(질의어에 응답하는
RDBMS의 데이터 보고서

 

+ Recent posts