For job interview, about DB 면접 공부하기-데이터베이스
1. SQL basic query 기본 쿼리문
SELECT [ALL/DISTINCT/DISTICTROW] [table name] [attribute name] FROM [table name] WHERE [condition] GROUP BY [attribute name] HAVING [condition] ORDER BY [attribute name] [ASC/DESC];
INSERT INTO [table name] [attribute name] VALUES [data];
DELETE FROM [table name] WHERE [condition];
UPDATE [table name] SET [attribute name] = [data] WHERE [condition];
CREATE VIEW [view name]([attribute name]) AS SELECT ....;
DROP VIEW [view name] {[RESTRICT/CASCADE]};
2. Join 조인
|customer_id|first_name|last_name |state|
|———–|———-|——— |—–|
|1 |George |Washington|VA |
|2 |John |Adams |MA |
|3 |Thomas |Jefferson |VA |
|4 |James |Madison |VA |
order_id | order_date | amount | customer_id |
---|---|---|---|
1 | 07/04/1776 | $234.56 | 1 |
2 | 03/14/1760 | $78.50 | 3 |
3 | 05/23/1784 | $124.00 | 2 |
4 | 09/03/1790 | $65.50 | 3 |
5 | 07/21/1795 | $25.50 | 10 |
1. (Inner) Join : returns records that have matching values in both tables
SELECT first_name, last_name, order_date, order_amount FROM customers c INNER JOIN orders o ON c.customer_id = o.customer_id;
> result
first_name | last_name | order_date | order_amount |
---|---|---|---|
George | Washington | 07/4/1776 | $234.56 |
John | Adams | 05/23/1784 | $124.00 |
Thomas | Jefferson | 03/14/1760 | $78.50 |
Thomas | Jefferson | 09/03/1790 | $65.50 |
2. Left (Outer) Join : returns all records from the left table, and the matched records from the right table
SELECT first_name, last_name, order_date, order_amount FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id
> result
first_name | last_name | order_date | order_amount |
---|---|---|---|
George | Washington | 07/04/1776 | $234.56 |
John | Adams | 05/23/1784 | $124.00 |
Thomas | Jefferson | 03/14/1760 | $78.50 |
Thomas | Jefferson | 09/03/1790 | $65.50 |
James | Madison | NULL | NULL |
3. Right (Outer) Join : returns all records from the right table, and the matched records from the left table
SELECT first_name, last_name, order_date, order_amount FROM customers c RIGHT JOIN orders o ON c.customer_id = o.customer_id
> result
first_name | last_name | order_date | order_amount |
---|---|---|---|
George | Washington | 07/04/1776 | $234.56 |
Thomas | Jefferson | 03/14/1760 | $78.50 |
John | Adams | 05/23/1784 | $124.00 |
Thomas | Jefferson | 09/03/1790 | $65.50 |
NULL | NULL | 07/21/1795 | $25.50 |
4. Full (Outer) Join : retruns all records when there is a match in either left or right table
SELECT first_name, last_name, order_date, order_amount FROM customers c FULL JOIN orders o ON c.customer_id = o.customer_id
> result
first_name | last_name | order_date | order_amount |
---|---|---|---|
George | Washington | 07/04/1776 | $234.56 |
Thomas | Jefferson | 03/14/1760 | $78.50 |
John | Adams | 05/23/1784 | $124.00 |
Thomas | Jefferson | 09/03/1790 | $65.50 |
NULL | NULL | 07/21/1795 | $25.50 |
James | Madison | NULL | NULL |
3. Stored Procedure 저장 프로시저
- Definition 정의 : a prepared SQL code that you can save, so the code can be reused over and over again.
- Example 예시
CREATE PROCEDURE [procedure_name] AS [sql_statement] GO;
EXEC [procedure_name];
4. DB 무결성
- 개체 무결성 : 릴레이션에서 기본키를 구성하는 속성은 NULL 값이나 중복값을 가질 수 없다. (유일한 식별자!)
- 참조 무결성 : 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 한다. 즉, 참조되는 테이블의 행을 이를 참조하는 참조키가 존재하는 한 삭제할 수 없고, 기본키를 변경할 수 없다.
- 도메인 무결성 : 특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 한다. (ex. 성별 속성의 도메인은 ‘남’과 ‘여’로, 그 외의 값은 입력할 수 없다. 자료형, 값의 범위 등 제한!)
5. NoSQL (Not Only SQL) vs RDBMS (Relational DataBase Management System)
1. RDBMS 관계형 데이터베이스 관리 시스템
- 관계형 데이터 모델 : 테이블을 이용해서 데이터 상호 관계를 정의하는 DB 구조로, 데이터 간의 관계를 기본키(Primary Key)와 이를 참조하는 외래키(Foreign Key)로 표현한다.
- Features 특징 : SQL 사용, 데이터 무결성, 트랜잭션
- 대표적인 DBMS : Oracle, MySQL, DB2, …
@ Primary Key 기본키 : 특정 튜플을 유일하게 구별할 수 있는 속성
@ Foreign Key 외래키 : 릴레이션 R1(테이블 1)이 릴레이션 R2(테이블2)를 참조하고 있을 때 R2의 기본키와 같은 값인 R1의 키가 외래키이다.
2. NoSQL
- HBase, MongoDB, Redis, …
- 2000년 후반 인터넷이 활성화되고 소셜네트워크 서비스 등이 등장하면서 관계형 데이터 또는 정형데이터가 아닌 데이터, 즉 비정형 데이터라는 것을 보다 쉽게 담아서 저장하고 처리할 수 있는 구조를 가진 데이터 베이스들이 관심을 받게 되면서 NoSQL 데이터베이스가 각곽을 받게 되었다.
- 비관계형 데이터베이스 : 단순 검색 및 추가 작업을 위한 매우 최적화된 키 값 저장 공간으로, 상당한 성능 이익을 내는 것이 목적이다. 빅데이터와 실시간 웹 애플리케이션의 상업적 이용에 널리 쓰인다.
- Features 특징
- 테이블간의 조인 기능이 없음
- 직접 프로그래밍을 하는 등의 비SQL 인터페이스를 통한 데이터 접근
- 대부분 여러 대의 데이터베이스 서버를 묶어서 하나의 데이터베이스를 구성 (클러스터링)
- 관계형 데이터베이스에서는 지원하는 데이터 처리 완결성(Transaction ACID) 미보장
- 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의
- 데이터베이스의 중단 없는 서비스와 자동 복구 기능 지원
- 다수가 오픈소스
- 확장성, 가용성, 고성능
6. MySQL vs MariaDB
1. MySQL
- Definition 정의 : 오픈소스 관계형 데이터베이스 관리 시스템 (RDBMS) - Oracle 라이센스
- Features 특징
- 크로스 플랫폼 cross-platform 지원 (Linux, Unix, Windows 등에서 사용 가능)
- 도구 : MySQL Workbench, DBeaver, HeidiSQL(MariaDB 사용시 편리) 등
2. MariaDB
- Definition 정의 : 오픈소스 관계형 데이터베이스 관리 시스템 (RDBMS)
- Features 특징
- 사용방법, 구조 모두 MySQL과 동일
- MySQl보다 가볍고 빠르며 라이센스가 더 자유로움
- MySQL과 달리, Javascript와 Python을 위한 스크립팅 기능을 제공하지 않음
- MySQL과 달리, 비밀번호를 검사하여 보안을 향상시키기 위한 validate_password 플러그인을 지원하지 않음
※ 참고 사이트 : http://www.sql-join.com/sql-join-types, https://www.w3schools.com/sql/sql_join.asp, https://aws.amazon.com/ko/relational-database/, https://www.samsungsds.com/global/ko/support/insights/1195843_2284.html, https://www.eversql.com/mariadb-vs-mysql/, 위키백과