[TIL] JOINS 와 고급 SQL 명령 (24.01.03 - 14일차)

배고픈 배극곰·2024년 1월 3일
0

학습내용


HAVING

HAVING

GROUP BY 문과 함께 사용하여 필터링을 구현할 수 있다.

퀴즈문제

  1. ID가 2인 직원에게서 최소 100달러를 쓴 고객의 ID를 찾으십시오.
SELECT customer_id, SUM(amount) FROM payment
WHERE staff_id = 2
GROUP BY customer_id
HAVING SUM(amount) > 100
  1. 이름이 ‘E’로 시작하는 동시에 주소 ID가 500 미만인 고객 중, ID 번호가 가장 높은 고객은 누구입니까?
SELECT first_name, last_name from customer
WHERE first_name Like 'E%' AND address_id < 500
ORDER BY customer_id DESC
LIMIT 1;

AS

AS로 지어진 별칭들은 제일 마지막에 할당되기 때문에 별칭으로는 필터링을 할 수 없다.

SELECT customer_id, SUM(amount) AS total_spent
FROM payment
GROUP BY customer_id
HAVING SUM(amount) > 100
ORDER BY SUM(amount);

JOIN

inner join

두 테이블에 모두 있는 데이터만 남는다.

SELECT payment_id, payment.customer_id, first_name
FROM payment
INNER JOIN customer
ON payment.customer_id = customer.customer_id

FULL OUTER JOIN

합집합

또, 한 테이블에만 있는 이름들이 있다.
아래는 합집합에서 교집합 부분을 제외한 부분

SELECT * 
FROM TableA
FULL OUTER JOIN TableB
ON TableA.key = TableB.key
WHERE TableA.key IS null 
OR TableB.key IS null

UNION


팀스터디


SQL과 NoSQL의 정의와 차이점

데이터베이스

DBMS

데이터베이스 관리시스템, 실질적인 데이터베이스를 구현할수있는 것으로,

(종류로는 mySQL, postgreSQL, mongoDB 등이 있다.)

하지만 편의상 DBMS솔루션, 데이터베이스, 데이터 등을 묶어서 데이터베이스라고 혼용한다고 한다.

데이터베이스의 필요성

⇒ 데이터를 조직화하면 더 효율적으로 관리할수있다.

그리고 이 데이터를 조직화하는 방식은 여러가지가 있고 방식에 따라 데이터베이스 유형을 구분할 수 있다.

관계형 데이터베이스 vs 비관계형 데이터베이스

관계형 데이터베이스

등장배경

1970년대에 빠른 IT의 발달로 대규모 데이터 처리와 효율적인 관리의 필요성.
IBM의 연구원인 에드거 F.codd 라는 사람이 처음으로 제안했다고 함.

“테이블형태로 조직화하고, 테이블간 관계를 통해 데이터를 관리하자!”

⇒ 데이터 중복 감소, 무결성 유지

+테이블간의 관계를 직관적으로 파악할수있다.

RDBMS
사전에 엄격하게 정의된 스키마가 있어, 행과 열로 구성된 테이블 기반으로 데이터의 관계를 관리하는 데이터베이스
⇒ MySQL, Oracle, SQLite, mariaDB, PostgreSQL

관계형 DB를 SQL이라고 부르는 이유는?

=> 테이블의 관계가 구조화된 데이터 모음이라 SQL 즉, 구조화된 쿼리 언어를 쓸수있어서 대충 그렇게 부름.

비관계형 데이터베이스

등장배경

기존의 SQL기반 관계형 DB는 데이터의 양과 복잡해지는 데이터 구조를 처리할 수 있는 능력이 줄었다..

RDBMS의 한계점

  • 수직적확장(서버의 하드웨어 성능향상 만으로 처리능력 늘리려는 방법) ⇒ 비용면에서 감당X

  • 조인연산 ⇒ 복잡하고, 비용면에서 어려움

  • 스키마 ⇒ 유연성X, 데이터 구조가 자주바뀌는 경우 관리 어렵다.

    사전에 엄격하게 정의된 스키마가 없어서 유연하고, 확장가능한 NoSQL이 각광받게된 이유다.

⇒ 비정형 데이터를 다룰때 편하다.
대규모 분산 데이터 센터에서의 빅데이터 및 실시간 웹애플리케이션 위해 설계됨.

NoSQL 특징

  • 수평적 확장 (필요할 때마다 서버를 추가하여 분산시킴으로써 성능 향상) ⇒ 비용 저렴하다

    종류
    • 문서지향 (MongoDB)⇒ document자체가 schema가 되어 값을 문서로 저장한다. JSON, XML형태로.
    • 키-값 (Redis)
    • 컬럼기반 (Cassandra)
    • 그래프 (Neo4j)


MongoDB, CouchDB에서 사용하는 쿼리 언어는 서로 다르다.

⇒ 하지만 SQL이 아니므로 그냥 묶어서 NoSQL이라고 부른다고한다.

=> 구체적인 정의는 없다고한다.

관계 vs 비관계 차이점

각각 예시를들어
mySQL vs MongoDB

RDBMSNoSQL
구조레코드 - 테이블 - 데이터베이스(MongoDB)도큐먼트 - 컬렉션 - 데이터베이스
스키마엄격유연
데이터 저장방식테이블문서, 키-값, 그래프 등
쿼리언어SQL각 솔루션마다 다르다.
확장성수직적수평적
활용정합성이 요구되는 애플리케이션대규모 분산 처리, 비정형 데이터 다룰떄
profile
마부작침 형설지공

0개의 댓글