The A :

728x90
반응형

Today I Lean

관계형 데이터베이스 _ SQL

 

 

기대된다..!

쿼리 배워보고 싶었어서 오늘은 기대되는 날이다 ㅎㅎ

 

 

 

학습목표 및 개념정리

# Database & SQL

- SQL의 주요 문법을 이해할 수 있다.

# SQL

- 조회, 삽입, 갱신, 삭제 구문을 자유자재로 사용할 수 있다.

- 조회 시 다양한 조건을 걸어 원하는 정보만 조회할 수 있다.

- 통계를 위한 쿼리를 만들 수 있다.

 

# 과제 / Learn SQL

- 사용권한과 소유자에 대해 이해하고 사용권한을 변경할 수 있다.

 

 

 

 

배운 것

# Database & SQL

1. Prompt

- 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 의미

 

2. 기본 명령어

- pwd (print working directory)
 : 폴더 or 파일의 현재 위치를 출력

 → pwd

 

 

 

 

 

# SQL

1. 데이터 베이스의 필요성

- In - Memory
 : Java에서 데이터를 다룰 때에는 프로그램이 실행될 때만 존재하는 데이터가 있음

  • 예기치 못한 상황에서 데이터를 보호할 수 없음
  • 프로그램이 종료된 상태라면 데이터를 원하는 시간에 받아올 수 없음
  • 데이터의 수명이 프로그램의 수명에 의존

 → 이 데이터는 프로그램이 종료되면 사라짐

 

 

- File I/O

 : 파일을 읽는 방식으로 작동하는 형태 (엑셀시트, CSV 파일 등)

  • 데이터가 필요할 때 마다 전체 파일을 매번 읽어야 함 → 파일의 크기가 커질수록 비효율적
  • 파일이 손상되거나 여러개의 파일을 동시에 다뤄야 할때 불편 → 데이터양이 많고 복잡할수록 비효율적

 

- 관계형 데이터베이스

 : 하나의 CSV파일이나 엑셀시트의 한 개의 테이블로 저장 가능

 → 한 번에 여러개의 테이블을 가지기 때문에 데이터를 불러오기 편함 (대용량 데이터 저장)

 

 

 

2. SQL

- SQL 이란?
 : SQL (Structured Query Language)

  • 데이터베이스 언어
  • 주로 관계형 데이터베이스에서 사용
  • MySQL, Oracle, SQLite, PostgreSQL 등

 → SQL은 구조화된 쿼리 언어

 

 

- 쿼리 란?

 : 쿼리(Query)  → "질의문" 이라는 뜻을 가짐 (검색할때 입력하는 "검색어")

  • 데이터베이스 용 프로그래밍 언어
  • 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있음
  • SQL은 데이터가 구조화된 테이블을 사용하는 데이터베이스에서 활용가능

 → SQL을 사용하기 위해서는 데이터의 구조가 고정되어 있어야 함

 

 

- SQL vs NoSQL

 : 데이터베이스는 관계형 데이터베이스(SQL)와 비관계형 데이터베이스(NoSQL)로 구분

이 둘은 만들어진 방식, 저장하는 정보의 종류, 저장방법 등에 차이가 있음

  SQL NoSQL
데이터 저장
(Storage)
▪ SQL을 이용해서 데이터를 테이블에 저장
(스키마를 기반으로 정해진 형식에 맞게 데이터를 저장)

▪ 테이블의 구조와 데이터 타입을 사전에 정의

▪ 정의된 형태와 맞는 데이터만 삽입 가능

▪ 행(row)과 열(column)로 구성된 테이블에 데이터를 저장

▪ 열은 하나의 속성, 행은 열의 데이터형식에 맞는 데이터가 저장됨

▪ 특정한 형식을 지키기 때문에 데이터를 정확히 입력했다면 사용이 매우 용이
▪ key-value, document, wide-column, graph 등의 방식으로 저장

▪ 데이터가 고정되어있지 않음

▪ 데이터를 읽어올 때 특정한 형식에 따라 읽어옴
스키마
(Schema)
▪ 고정된 형식의 스키마가 필요

▪ 처리하는 데이터 속성별 열에 대한 정보를 미리 지정

▪ 나중에 변경 가능
(데이터베이스 전체를 수정 or 오프라인으로 전환)

▪ 테이블 간의 관계를 직관적으로 파악할 수 있음
▪ 동적으로 스키마의 형태 관리

▪ 행추가 즉시 새로운 열 추가가능

▪ 개별 속성에 대해 모든 열에 대한 데이터를 반드시 입력하지 않아도 됨

쿼리
(Querying)
▪ 테이블의 형식, 테이블 간의 관계에 맞춰 데이터를 요청해야 함 ▪ 데이터 그룹 자체를 조회
확장성
(Scalability)
▪ 수직 확장 (높은 메모리, CPU 사용)

▪ 여러 서버에 걸쳐 데이터베이스의 관계 정의 가능

▪ 복잡하고 시간이 많이 소요됨
▪ 수평 확장

▪ 서버를 추가로 구축 → 많은 트래픽 처리가 편리

▪ SQL보다 상대적으로 저렴
대표적인
데이터베이스
MySQL, Oracle, SQLite, PostgresSQL, MariaDB 몽고DB, Casandra
사용 케이스 ▪ 데이터베이스의 ACID 성질을 준수해야 하는 경우
(전자상거래 or 모든 금융 서비스 소프트웨어 개발)

▪ 소프트웨어에 사용되는 데이터가 구조적, 일관적인 경우
(많은 서버가 필요없고, 일관된 데이터 사용시)
▪ 데이터의 구조가 거의(전혀) 없는 대용량의 데이터를 저장하는 경우
(정형화 되지 않은 많은 양의 데이터가 필요할 때)

▪ 클라우드 컴퓨팅 or 저장공간을 최대한 활용하는 경우
(데이터베이스의 확장성이 중요할 때)

▪ 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우
(스키마를 미리 정하지 않아도 됨)

 

 

 

 

 

3. SQL Basics

- 데이터베이스 관련 명령어

▪ 데이터베이스 생성(SQL Create DB)
CREATE DATABASE 디렉토리명;

▪ 데이터베이스 사용
USE 디렉토리명; → 해당 디렉토리로 이동
-----------------------------------------------------------------------------------------------
▪ 테이블 생성(SQL Create Table)
CREATE TABLE user (
	id int PRIMARY KEY AUTO_INCTEMENT,
    name varchar(255),
    email varvhar(255)
);

▪ 테이블 정보 확인
DESCRIBE user;

SQL Drop DB
SQL Drop Table - TRUNCATE - DROP COLUMN
SQL Alter Table
SQL Not Null
SQL Unique
SQL Primary Key
SQL Foreign Key
SQL Default
SQL Auto Increment
SQL Dates

 

 

- 기본 쿼리문

▪ SELECT → 데이터셋에 포함 될 특성을 정의

SELECT 'hello world' 	 → 일반 문자열
SELECT 2		 → 숫자
SELECT 10+5		 → 간단한 연산
SELECT *		 → 전부선택
SELECT 특성1, 특성2	 → 여러개 선택

▪ DISTINCT → 특성에서 유니크한 값을 받고 싶을때

SELECT DISTINCT 특성1
FORM 테이블명 → 특성1을 기준으로 유니크한 값만 선택
-----------------------------------------------------------------------------------------------
SELECT 
	DISTINCT 
    	특성1
        ,특성2
        ,특성3
FORM 테이블명 → 특성1, 특성2, 특성3의 유니크한 '조합' 값을 선택

▪ FORM → 테이블 관련 작업을 할 때는 반드시 입력(결과를 도출해 낼 테이블명 입력)

SELECT 특성
FORM 테이블명 → 선택 특성을 테이블에서 사용
-----------------------------------------------------------------------------------------------
SELECT *
FORM 테이블명 → 테이블의 모든 특성 선택

▪ WHERE → 필터역할 (선택적 사용 가능)

SELECT 특성1, 특성2
FORM 테이블명
WHERE 특성1 = '특정 값' → 특성1에서 특정 값과 동일한 데이터 찾기
-----------------------------------------------------------------------------------------------
SELECT 특성1, 특성2
FORM 테이블명
WHERE 특성2 <> '특정 값' → 특성2를 제외한 값 찾기
-----------------------------------------------------------------------------------------------
SELECT 특성1, 특성2
FORM 테이블명
WHERE 특성1 > '특정 값' → 특성1보다 작은 값 찾기
WHERE 특성2 <= '특정 값' → 특성2와 같거나 큰 값 찾기
-----------------------------------------------------------------------------------------------
SELECT 특성1, 특성2
FORM 테이블명
WHERE 특성1 LIKE '%특정 문자열%' → 특성1에서 특정 문자열이 포함된 값 반환
WHERE 특성1 LIKE '특정 문자열%' → 특성1에서 특정 문자열로 시작되는 값 반환
WHERE 특성1 LIKE '%특정 문자열' → 특성1에서 특정 문자열로 끝나는 값 반환
WHERE 특성1 LIKE '문자열B%문자열B' → 특성1에서 문자열A로 시작하고 B로 끝나는 값 반환
WHERE 특성1 LIKE '%_a%' → 특성1에서 두번째로 a가 포함된 값 반환
-----------------------------------------------------------------------------------------------
SELECT 특성1, 특성2
FORM 테이블명
WHERE 특성2 IN ('특정값1', '특정값2') → 특성2에서 리스트의 값과 일치하는 데이터 필터링
-----------------------------------------------------------------------------------------------
SELECT *
FORM 테이블명
WHERE 특성1 IS NULL → 값이 없는 경우 NULL 지정
WHERE 특성1 IS NOT NULL → 값이 없는 경우 제외

▪ ORDER BY → 돌려받는 데이터의 결과를 정렬하여 출력 (정렬기준 선택, 선택적 사용 가능)

SELECT 특성1, 특성2
FORM 테이블명
ORDER BY 특성1 	    → 오름차순 정렬
ORDER BY 특성2 DESC → 내림차순 정렬

▪ LIMIT → 결과로 출력할 데이터 개수 지정 (선택적 사용가능, 쿼리문 사용시 가장 마지막에 추가)

SELECT *
FORM 테이블명
LIMIT 200 → 데이터의 결과를 200개만 출력

▪ JOIN (INNER JOIN) → JOIN과 INNER JOIN은 기본적으로 같은 역할을 수행

SELECT *
FROM 테이블1
JOIN 테이블2 ON 테이블1.특성A = 테이블2.특성B → 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결

▪ OUTER JOIN → → 기준이 되는 테이블의 데이터는 모두 반환, 만약 비교하는 테이블에 일치하는 행이 없을 경우 NULL값 반환 (선택지가 다양함)

SELECT *
FORM 테이블명
LEFT OUTER JOIN 테이블2 ON 테이블1.특성A = 테이블2.특성B
→ 테이블1.특성A의 모든 데이터 + 테이블1.특성A의 데이터와 일치하는 테이블2.특성B의 데이터 반환
→ 왼쪽 테이블의 모든 행과 열을 포함하여 오른쪽 테이블과 조인
-----------------------------------------------------------------------------------------------
SELECT *
FORM 테이블명
RIGHT OUTER JOIN 테이블2 ON 테이블1.특성A = 테이블2.특성B
→ 테이블2.특성B의 모든 데이터 + 테이블2.특성B의 데이터와 일치하는 테이블1.특성A의 데이터 반환
→ 오른쪽 테이블의 모든 행과 열을 포함하여 왼쪽 테이블과 조인

▪ 여러 쿼리문 한 번에 써보기

 : Brizil에서 온 고객을 도시별로 묶은 뒤, 각 도시수에 따라 내림차순 정렬, CustomerId에 따라 오름차순으로 정렬한 3개의 결과만 요청

SELECT c.CistonmerID, c.FirstName, count(c.City) as 'City Count'
FROM customers AS c
JOIN employees AS e ON c.SUpportRepId = e.EmployeeID
WHERE c.Country = 'Brazil'
GROUP BY c.City
ORDER BY 3 DESC, c.CustomerID ASC
LIMIT 3

// 같은 결과를 여러가지 다른 방법으로 표현 가능
    
    
-----------------------------------------------------------------------------------------------
▪ And, Or, Not
▪ Insert Into
▪ Null Values (IS NULL, IS NOT NULL)
▪ Update - SET
▪ Delete
▪ Count
▪ Wildcards
▪ Aliases
▪ Group By

 

 

4. ACID

- 트랜잭션 (Transaction)
 : 여러 개의 작업을 하나로 묶은 실행 유닛

  • 각 트랜잭션은 하나의 특정 작업으로 시작 → 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료 됨
  • 트랜잭션에 속해있는 여러 작업 중 하나의 작업이라도 실패할 경우 → 이 트랜잭션에 속한 모든 작업을 실패한 것으로 판단

 → 성공과 실패, 두개의 결과만 존재하기 때문에 미완료된 작업 없이 모든 작업을 성공해야 함

 

 

- ACID

 : 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해 필요한 성질

 

▪ 원자성 (Atomicity)

 : 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공 or 전부 실패 해서 결과를 예측할 수 있어야 함

  • 묶여있는 작업이 부분실행된다면, 데이터가 오염될 수 있음

 → 따라서 하나의 작업이 실패한다면 모든 작업이 실패로 간주되어야 함

 

▪ 일관성 (Consistency)

 : 하나의 트랜잭션 이전과 이후에 데이터베이스의 상태는 이전과 같이 유효해야 함

  • 트랜잭션이 일어난 일어난 이후에도 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 함

 → 데이터베이스에서 데이터의 상태에 대한 일관성은 변하지 않아야 함

 

 

▪ 격리성, 고립성 (Isolation)

 : 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 함

  • 10 - 6 - 5 을 한다고 할 때 -6과 -5는 서로 다른 트랜잭션
  • 이 때 결과는 -1이 되는 것이 아니라 10-6을 하고 4-5을 하는 식으로 연속으로 실행 됨

 → 동시에 여러 개의 트랜잭션이 수행될 때, 각 트랜잭션은 고립(격리)되어 있어 연속으로 실행된 것과 동일한 결과를 냄

 

 

▪ 지속성 (Duravility)

 : 하나의 트랜잭션이 성공했다면, 해당 트랜잭션에 대한 로그가 남아 있어야 함

  • 런타임 오류 or 시스템 오류가 발생하더라도 해당 기록은 영구적으로 남아있음

 → 만약 로그가 기록되기 전에 시스템이 종료된다면, 해당 작업은 실패하고 실행 이전 상태로 돌아감

 

 

 

 

5. SQL vs NoSQL

- 쿼리 란?

 : 쿼리(Query)  → "질의문" 이라는 뜻을 가짐 (검색할때 입력하는 "검색어")

데이터베이스 용 프로그래밍 언어
데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있음
SQL은 데이터가 구조화된 테이블을 사용하는 데이터베이스에서 활용가능
 → SQL을 사용하기 위해서는 데이터의 구조가 고정되어 있어야 함

 

 

 

 

# 과제 / Learn SQL

1. SQL Quiz

With SQL, how do you select a column named "FirstName" from a table named "Persons"?

 
SELECT Persons.FirstName    Your answer  
SELECT FirstName FROM Persons    Correct answer  
EXTRACT FirstName FROM Persons

 

 

With SQL, how do you select all the records from a table named "Persons" where the value of the column "FirstName" starts with an "a"?

 
SELECT * FROM Persons WHERE FirstName='%a%'    Your answer  
SELECT * FROM Persons WHERE FirstName LIKE '%a'
SELECT * FROM Persons WHERE FirstName='a'
SELECT * FROM Persons WHERE FirstName LIKE 'a%'  

 

 

How can you change "Hansen" into "Nilsen" in the "LastName" column in the Persons table?

 
UPDATE Persons SET LastName='Hansen' INTO LastName='Nilsen'    Your answer  
MODIFY Persons SET LastName='Nilsen' WHERE LastName='Hansen'
MODIFY Persons SET LastName='Hansen' INTO LastName='Nilsen
UPDATE Persons SET LastName='Nilsen' WHERE LastName='Hansen'  

 

 

2. SQL Practice

Use the NOT keyword to select all records where City is NOT "Berlin".

SELECT * FROM Customers
WHERE NOT City = 'Berlin';

Select all records from the Customers table, sort the result alphabetically, first by the column Country, then, by the column City.

SELECT * FROM Customers
ORDER BY Country, City;

Insert a new record in the Customers table.

INSERT INTO Customers ( 
CustomerName, 
Address, 
City, 
PostalCode,
Country)
VALUES (
'Hekkan Burger',
'Gateveien 15',
'Sandnes',
'4306',
'Norway');

Select all records from the Customers where the PostalCode column is empty.

SELECT * FROM Customers
WHERE PostalCode IS NULL  ;

Update the City value and the Country value.

UPDATE Customers
SET City = 'Oslo',
Country = 'Norway'
WHERE CustomerID = 32;

Delete all the records from the Customers table where the Country value is 'Norway'.

DELETE FROM Customers
WHERE Country = 'Norway';

Use the MIN function to select the record with the smallest value of the Price column.

SELECT MIN(Price)
FROM Products;

Use the correct function to return the number of records that have the Price value set to 18.

SELECT COUNT(*)
FROM Products
WHERE Price = 18;

Use an SQL function to calculate the average price of all products.

SELECT AVG(Price)
FROM Products;

Select all records where the first letter of the City is an "a" or a "c" or an "s".

SELECT * FROM Customers
WHERE City LIKE '[acs]%';

 

 

 

 

 

 

*****

 

 

 

 

 

Tomorrow Chapter

# 버전 관리 시스템 - Git

# Git 설치

# Git Workflow

# Pair - Simple Git Workflow

# Checkpoint - Git Command

 

 

 


 

 

↓ 이전 글 ↓

 

[코드스테이츠] 05_23_TIL : 네트워크 _ HTTP

Today I Lean 네트워크 _ HTTP 일단... 이게 뭔말이지 싶다 가면갈수록 알다가도 모르겠는 아이들이 너무나도 많아서 어디서 부터 공부해야하는지 감이 안온다 일단 해보긴 하지만.. 아직까진 자신이

theflower01.tistory.com

 

↓ 코트스테이츠 부트캠프 관련 글 한번에 보기 ↓

 

'IT/코드스테이츠 부트캠프' 카테고리의 글 목록

Flower, Plant, Study

theflower01.tistory.com

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading