- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- LEVEL 1
- 리팩터링 2판
- 에러핸들링
- First Project
- CSS
- 프로그래머스
- LEVEL 2
- TIL
- 알고리즘
- TMIL
- 코어 자바스크립트
- MariaDB
- react
- java
- TWIL
- javascript
- LEVEL1
- Refactoring
- mongodb
- Err-Handling
- Git
- 배포
- 면접을 위한 cs 전공지식 노트
- CRUD
- typescript
- sql
- 코딩테스트
- Docker
- 아고라스테이츠
- 오늘도 개발자가 안된다고 말했다
성장에 목마른 코린이
(S3W2) TIL 50일차 220411 (관계형 데이터베이스 완전 정리) 본문
오늘의 학습목표
-
- JOIN 부수기!
- SQL 문법 정리한거 다듬기!
- Self Guided Lesson 정리하기!
- MVC 예습하기!
학습내용
DB 생성, 기본 문법 (CREATE, SHOW, DESC, DROP, ALTER)
MySQL 접속 # -u(계정 접근), -p(비밀번호) mysql -u root -p DB 생성 CREATE DATABASE DB이름 DB 사용 USE DB이름 DB안에서 테이블 생성 LEARN SQL Part 3 아래있는 스키마와 테이블을 토대로 mysql안에 테이블..
mhp4718.tistory.com
1. DB 조작 (SELECT, WHERE, LIKE, IN, ORDER BY)
SELECT, FROM, SELECT DISTINCT, LIMIT, WHERE, Wildcard, LIKE, NULL, IS NULL, IS NOT NULL, IN, AS, BETWEEN _ AND _, ORDER BY, DELETE FROM _ WHERE SELECT SELECT는 데이터 베이스에서 정보를 선택하고 보여..
mhp4718.tistory.com
2. 헷갈리는 DB 조작 (INSERT, UPDATE, JOIN)
INSERT INTO _ VALUES 데이터베이스의 테이블/열에 값(VALUES)을 추가합니다. // 컬럼이름과 값을 지정해주는 방법 INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ....
mhp4718.tistory.com
데이터베이스 정규화 (Database Normalization)
데이터베이스 정규화는 데이터베이스의 설계와 관련 있습니다.
데이터베이스 설계에 따라 데이터가 어떻게 저장될지 그 구조를 결정하기 때문입니다.
이를 위해서는 크게 다음 부분들이 중요합니다.
- Data redundancy
- Data integrity
- Anomaly
Data Redundancy (데이터 중복)
실제 데이터의 동일한 복사본이나, 부분적인 복사본을 뜻합니다.
물론 이러한 중복으로 데이터를 복구할 때에 더 수월할 수도 있지만, 대체로 데이터베이스 내에서는 몇 가지 문제점을 지닙니다.
- 일관된 자료 처리의 어려움
- 저장 공간 낭비
- 데이터 효율성 감소
Data Integrity (데이터 무결성)
데이터 정규화는 데이터 무결성을 강화하는 목적도 지닙니다.
데이터 무결성은 데이터의 수명 주기 동안 정확성과 일관성을 유지하는 것을 뜻합니다.
다시 말해 입력된 데이터가 오염되지 않고, 입력된 그대로 데이터를 사용할 수 있다는 뜻입니다.
Anomaly (데이터 이상 현상)
기대한 데이터와 다른, 이상 현상을 가리킵니다.
다음과 같은 3가지 현상이 있습니다:
- 갱신 이상(update anomaly)
- 여러 행(레코드)에 걸쳐 동일한 데이터가 있을 때, 어떤 행을 갱신해야하는지 논리적 일관성이 없는 경우에 발생합니다.
- 삽입 이상(insertion anomaly)
- 데이터를 삽입하지 못하는 경우를 가리킵니다.
- 삭제 이상(deletion anomaly)
- 데이터의 특정 부분을 지울 때 의도치 않게 다른 부분도 함께 지우는, 이상 현상입니다.
SQL 종류
일반적으로 SQL 문법을 다음과 같이 분류합니다.
1. Data Definition Language(DDL) (CREATE, DROP)
데이터를 정의할 때 사용하는 언어입니다.
데이터베이스의 테이블과 같은 오브젝트를 정의할 때 사용합니다.
2. Data Manipulation Language(DML) (INSERT, DELETE, UPDATE)
데이터베이스에 데이터를 저장할 때 사용하는 언어입니다.
3. Data Control Language(DCL) (GRANT, REVOKE)
데이터베이스에 대한 접근 권한과 관련된 문법입니다.
어느 유저가 데이터베이스에 접근할 수 있는지 권한을 설정합니다.
4. Data Query Language(DQL) (SELECT)
정해진 스키마 내에서 쿼리할 수 있는 언어입니다.
이렇게 언어를 분류했지만, DQL을 DML의 일부분으로 취급하기도 합니다.
5. Transaction Control Language(TCL) (COMMIT, ROLLBACK)
DML을 거친 데이터의 변경사항을 수정할 수 있습니다.
SQL Advanced
데이터베이스에 대해 더욱 깊이 공부하기 위해 필요한 자료입니다. SQL 언어의 더욱 많은 문법을 설명합니다.
CASE 사용하기
SQL에서도 프로그래밍 언어의 if 문과 같은 기능을 사용할 수 있습니다.
CASE 를 사용하면, 특정 조건에 따라 다른 결과를 받을 수 있습니다.
실제 SQL 예시를 보면 다음과 같습니다.
SELECT CASE
WHEN CustomerId <= 25 THEN 'GROUP 1'
WHEN CustomerId <= 50 THEN 'GROUP 2'
ELSE 'GROUP 3'
END
FROM customers
이 쿼리문은 CustomerId 필드값에 따라 3개의 그룹('GROUP 1', 'GROUP 2', 'GROUP 3')으로 나뉩니다. CustomerId 필드값이 25 이하인 경우에는 'GROUP 1', 26부터 50 사이인 경우에는 'GROUP 2', 51 이상은 'GROUP 3' 으로 분류합니다.
SUBQUERY
쿼리문을 작성할 때, 다른 쿼리문을 포함할 수 있을때 포함되는 다른 쿼리문을 SUBQUERY(서브쿼리)라고 합니다.
서브쿼리는 실행되는 쿼리에 중첩으로 위치해, 정보를 전달합니다.
서브쿼리는 소괄호로 감싸야 합니다.
서브쿼리의 결과는 개별 값이나 레코드 리스트입니다. 그리고 서브쿼리의 결과를 하나의 칼럼으로 사용할 수 있습니다.
SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId = 2)
FROM customers
WHERE CustomerId < 6
IN, NOT IN
IN은 특정한 값이 서브쿼리에 있는지 확인할 수 있습니다.
// customers 테이블에서 'CustomerId'의 값이 서브쿼리에서 돌려받는 값에 속한 결과들만 조회하고 있습니다.
SELECT *
FROM customers
WHERE CustomerId IN (SELECT CustomerId FROM customers WHERE CustomerId < 10)
서브쿼리에서는 'CustomerId' 가 10 이하인 데이터를 돌려주기 때문에, 최종 조회된 데이터의 'CustomerId'도 10 이하입니다.
만약 IN 대신 NOT IN 을 사용한다면, 서브쿼리에서 조회된 10 미만을 제외한(10을 초과하는) 레코드를 조회합니다.
EXISTS
EXISTS 또는 NOT EXISTS는 돌려받은 서브쿼리에 존재하는 레코드를 확인합니다.
만약 조회하려는 레코드가 존재한다면 참(TRUE)을, 그렇지 않은 경우에는 거짓(FALSE)을 리턴합니다.
// 다음 쿼리문은 employees 테이블에서부터 'EmployeeId' 필드를 조회합니다.
// 이때 서브쿼리로 customers 테이블의 'SupportRepId' 필드값과
// employees 테이블의 'EmployeeId' 필드값을 비교해 일치하는 레코드들을 가져옵니다.
SELECT EmployeeId
FROM employees e
WHERE EXISTS (
SELECT 1
FROM customers c
WHERE c.SupportRepId = e.EmployeeId
)
ORDER BY EmployeeId
FROM
FROM에도 서브쿼리를 사용할 수 있습니다.
// 서브쿼리를 이용해 조회된 결과를 하나의 테이블이나 조회할 대상으로 지정해 사용할 수 있습니다.
SELECT *
FROM (
SELECT CustomerId
FROM customers
WHERE CustomerId < 10
)
오늘의 회고
오늘은 토요일 열심히 불태운 덕분에, 수월하게 스프린트 다시 한번 풀고,
SELF GUIDED LESSON 까지 잘 정리할 수 있었습니다.
MVC 영상도 보고, 인증/보안 영상도 조금 봤고,
MVC 스프린트도 살짝 구경하기도하고, 프로그래머스 레벨 1도 두문제 풀어,
나름 만족한 하루 였습니다.
내일부터 MVC 어렵다고하던데 집중해서 잘 해결해보겠습니다! 화이팅!
'Today I Learned' 카테고리의 다른 글
(S3W2) TIL 52일차 220413 (MVC) (0) | 2022.04.13 |
---|---|
(S3W2) TIL 51일차 220412 (MVC) (0) | 2022.04.12 |
(S3W1) TIL 49일차 220408 (관계형 데이터베이스) (0) | 2022.04.09 |
(S3W1) TIL 48일차 220407 (관계형 데이터베이스) (0) | 2022.04.07 |
(S3W1) TIL 47일차 220406 (코딩테스트 준비) (0) | 2022.04.06 |