HAVING
GROUP BY 문과 함께 사용하여 필터링을 구현할 수 있다.
퀴즈문제
SELECT customer_id, SUM(amount) FROM payment
WHERE staff_id = 2
GROUP BY customer_id
HAVING SUM(amount) > 100
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);
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
데이터베이스
데이터베이스 관리시스템, 실질적인 데이터베이스를 구현할수있는 것으로,
(종류로는 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이 각광받게된 이유다.
⇒ 비정형 데이터를 다룰때 편하다.
대규모 분산 데이터 센터에서의 빅데이터 및 실시간 웹애플리케이션 위해 설계됨.
MongoDB, CouchDB에서 사용하는 쿼리 언어는 서로 다르다.
⇒ 하지만 SQL이 아니므로 그냥 묶어서 NoSQL이라고 부른다고한다.
=> 구체적인 정의는 없다고한다.
관계 vs 비관계 차이점
각각 예시를들어
mySQL vs MongoDB
RDBMS | NoSQL | |
---|---|---|
구조 | 레코드 - 테이블 - 데이터베이스(MongoDB) | 도큐먼트 - 컬렉션 - 데이터베이스 |
스키마 | 엄격 | 유연 |
데이터 저장방식 | 테이블 | 문서, 키-값, 그래프 등 |
쿼리언어 | SQL | 각 솔루션마다 다르다. |
확장성 | 수직적 | 수평적 |
활용 | 정합성이 요구되는 애플리케이션 | 대규모 분산 처리, 비정형 데이터 다룰떄 |