📋

1회차

 
 

0. 바로 실습으로 가세요.

이론적인 부분을 건너뛰시고, 나중에 보세요. (실습)이라고 되어있는 부분으로 바로 가셨다가 나중에 이론이 궁금하시다면 다시 돌아오세요.

1. DB

데이터베이스(영어: database, DB)는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다. - Wikidipia
읽어도 무슨 뜻인지 잘 모르시겠죠? 이렇게 기억해주세요!
데이터를 저장하는 공간!

2. DB, RDB, DBMS, RDBMS

  • DB → DBMS
  • RDB → RDBMS
RDBMS(stands for Relational Database Management System)는 DB를 관리하는 시스템입니다. TOP3 오픈소스 RDBMS는 MySQL, PostgreSQL, SQLite입니다. 오픈소스가 아닌 것에서는 Oracle이 독보적입니다.

3. 관계형 데이터베이스의 구성 요소

여기서부터는 전문 용어가 들어갑니다. 혹시 실습을 안하고 오셨다면 꼭 실습을 하고 이 챕터를 보시기 바랍니다.
  • TABLE(행, 열), VIEW(데이터를 선택하여 만든 가상의 부분 집합), INDEX(주소), SEQUENCE(시퀀스, 고유번호 자동생성), SYNONYM(시노임, 객체의 별칭) 등의 객체로 구성
  • ENTITY, RELATIONE들의 집합
출처 : 제주코딩베이스캠프 SQL 강좌출처 : 제주코딩베이스캠프 SQL 강좌
출처 : 제주코딩베이스캠프 SQL 강좌
  • 튜플(Tuple)은 테이블의 행입니다.
  • 속성(Attribute)은 HTML로 따지자면 Table Heading 입니다. 여기서는 학번, 이름, 주소, 전화번호가 속성이죠.
  • 도메인(Domain)은 하나의 속성에서 취할 수 있는 값의 범위를 말합니다. 예를 들어 위에서는 신청 과목에서 전체 과목의 범위를 얘기합니다.
  • 차수(Degree)는 속성의 개수입니다. 학생 릴레이션에서는 학번, 이름, 주소, 전화번호이니 총 4개가 될 것입니다.
  • 기수(Cardinality)는 튜플의 개수입니다. 위에서는 어트리뷰트를 제외하고 총 5개의 튜플이 존재합니다.

3.1 키의 개념 및 종류

  • 기본키는 메인으로 사용할 키를 말합니다. 고유한(유일한) 주민등록번호나, 계좌번호, 전화번호 등을 기본키로 사용할 수 있습니다. 기본키는 NULL을 사용할 수 없습니다.
  • 후보키는 기본키를 제외하고 고유한 키들을 말합니다.
  • 외래키는 관계되어 있는 테이블에서 참고하고 있는 키를 얘기합니다. 여기서 학생 릴레이션과 수강신청 과목 릴레이션은 서로 학번으로 연결되어 있죠.

3.2 데이터베이스의 종류

  • 계층형 데이터베이스(1:N)
  • 망형 데이터베이스(N:M)
  • 관계형 데이터베이스(단순한 표 형태의 상호 관계, 1:1, 1:N, N:M관계 표현)
  • 객체 지향형 데이터베이스

4. SQL(Structured Query Language)

SQL은 스토리지 언어의 표준입니다. 여러분이 만약 MySQL, MsSQL, Oracle, Postgres 등의 DB를 사용하여 어떤 프로젝트를 한다면 SQL을 다루실 수 있어야 합니다.
하지만 대부분의 강좌들이 '설치'부터 SQL 강의를 시작하는데, 설치하다가 지치시는 분들이 많으십니다. 이 수업은 본질에 집중합니다. SQL만 배워봅시다. 그렇다고 이론을 전혀 안하는 것은 아니고, 가장 마지막 챕터에서 다뤄보도록 하겠습니다.
 
SELECT * FROM Customers;

5. SQL 명령어의 분류

중요한 것은 굵은 글씨로 해두었으니, 충분히 숙련되도록 연습해보세요.
  • 데이터 조작어(DML)
    • SELECT
    • INSERT
    • UPDATE
    • DELETE
  • 데이터 정의어(DDL)
    • CREATE DATABASE
    • CREATE TABLE
    • CREATE INDEX
    • ALTER DATABASE
    • ALTER TABLE
    • DROP TABLE
    • DROP INDEX
    • RENAME
    • TRUNCATE
  • 데이터 제어어(DCL)
    • GRANT : 권한 부여
    • REVOKE : 권한 제거
  • 트랜젝션 제어어(TCL)
    • COMMIT
    • ROLLBACK
    • SAVEPOINT

6. Data 분석 과정

출처 : 제주코딩베이스캠프 데이터분석 강좌출처 : 제주코딩베이스캠프 데이터분석 강좌
출처 : 제주코딩베이스캠프 데이터분석 강좌
  • 사전에 데이터 분석 기획을 합니다.
  • 1번에서 3번까지의 단계가 전체 과정에 70% ~ 80%를 차지하고 있습니다.
  • 기업에 모든 데이터를 누구나 조회 가능하도록 BigQuery같은 곳에 모아두기도 합니다. 이러한 시스템이 갖춰진 회사라면 누구나 간단한 조회가 가능한 SQL 구문을 습득하실 필요가 있습니다.
  • 기업에 들어가도 데이터가 없거나 쓸 수 없는 경우도 있습니다. 또는 의미없는 데이터이거나 추가 데이터가 필요할 수도 있습니다. 이 경우에는 공공데이터 포털이나 다른 기관의 데이터를 참고하여 데이터를 만들어야 합니다.
  • 데이터 수집부터, 가공하는 것까지 SQL을 사용할 수 있습니다. 물론 분석에도 쓸 수 있지만 분석에는 더 좋은 도구들이 많죠. R, Python 등의 언어가 있고, Tableau와 같은 시각화 솔루션이 있습니다.

7. 정형 데이터와 비정형 데이터

  • 정형데이터는 RDBMS에서 사용하는 테이블 안에 들어가 있는 형식이 잡혀 있는 데이터를 말합니다.
  • 비정형 데이터(unstructured data, unstructured information, 비정형 정보), 비구조화 데이터, 비구조적 데이터는 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보를 말한다.(출처 : WIKI)

8. CRUD

  • Create
  • Read
  • Update
  • Delete

9. 홈페이지를 제작한다면!

  • HTML/CSS + PHP + MySQL로 홈페이지 게시판 한 번 만들어보세요. 최대한 간소하게 만들어보십시오. (실 서비스는 보안 이슈로 인해 Framework를 사용하시길 권해드립니다.)
    • 서버 세팅하는 부분을 어려워 하시는 분이 많으셔서 아래 영상으로 녹화해 두었습니다.
      Video preview
       

10. 다음 무료 강의 추천

다음 강의를 순서대로 추천해드립니다.
  1. PHP와의 연동을 먼저 추천해드립니다.
  1. 간단하게 이론을 살펴보세요.
  1. MySQL을 좀 더 살펴보세요.

(실습) 환경설정

앞서 말씀드린 것처럼, 설치하는 작업과 데이터를 세팅하는 것 자체가 우리에게 큰 허들이 되므로, 우리는 설치 없이 아래 사이트에서 바로 실습을 하도록 하겠습니다.
notion imagenotion image
 
Try it Yourself를 클릭해주세요. 한번만 누르시면 됩니다. 나머지는 이 강의를 보시면서 따라가시면 됩니다.
notion imagenotion image

(실습) SELECT Statement

select는 데이터를 조회하거나 산술식, 함수 등을 실행할 때 사용합니다. SQL은 대소문자를 가리지 않지만, 구문에 해당되는 것은 대문자로만 적도록 하겠습니다.
*(에스터리스크, 별표)는 모든 항목을 다 출력할 때 사용합니다.
SELECT * FROM Customers;
여기서 원하는 컬럼만 출력하고 싶을 때에는 아래와 같이 사용합니다.
SELECT CustomerName, City FROM Customers;
아래와 같이 대괄호로 묶어줄 수도 있지만, 여기서는 묶어주지 않고 사용하도록 하겠습니다.
SELECT [Address], [City] FROM Customers;
아래 보이시는 것처럼 일반 수식을 출력할 때에도 Select 구문을 사용합니다. 함수도 사용할 수 있지만 아직 함수를 배우지 않았으므로 뒤에게서 해보도록 하겠습니다.
SELECT 1+1;
오른쪽에 있는 Customers, Categories 등을 하나씩 클릭해보고 데이터를 파악해보세요. 여러개의 열을 SELECT문을 사용해 직접 출력해보세요. 기억하세요. 타이핑을 친 만큼만 내 실력입니다.
notion imagenotion image

(실습) SELECT DISTINCT Statement

DISTINCT는 중복값을 제거합니다.
SELECT DISTINCT Country FROM Customers;

(실습) ORDER BY

출력 결과 정렬합니다. 아래처럼 개행을 하여도 괜찮습니다. 마지막에 세미콜론 잊지마세요.
  • 오름차순 : ASC(기본, 작은 수에서 큰 수로, Ascending)
  • 내림차순 : DESC(큰 수에서 작은 수로, Descending)
SELECT * FROM Customers ORDER BY CustomerID DESC;
SELECT * FROM Customers ORDER BY CustomerName ASC;
SELECT * FROM Customers ORDER BY CustomerID DESC;
SELECT * FROM Customers ORDER BY CustomerID ASC;

(실습) AS

별칭을 정합니다. 기존 Table의 값은 변하지 않습니다.
SELECT CustomerID AS 회원이름 FROM Customers;
SELECT CustomerID AS 회원이름, Country AS 나라 FROM Customers;
SELECT CustomerID 회원이름, CustomerName 이름 FROM Customers;

(실습) 산술연산

더하고 빼고 나누고 곱하는 것이 가능합니다.
SELECT (CustomerID / 3) + 5 FROM Customers;
SELECT (CustomerID / 3) % 2 FROM Customers;
각각 컬럼끼리 연산도 가능합니다.
SELECT CustomerID + CustomerID FROM Customers;
해당 값은 0, 나누기를 하면 null로 반환합니다. 이어붙이려면 아래 있는 연결 연산자를 사용해야 합니다.
SELECT CustomerName + CustomerName FROM Customers;
SELECT ProductName AS 제품이름, Price AS 기존가, Price*0.2 AS 할인된가격, Price*0.8 AS 최종가 FROM Products

(실습) 연결 연산자

Oracle에서는 ||, MsSQL은 +, MySQL은 공백으로 연결 가능. CONCAT함수는 공통으로 사용 가능합니다. 하지만 초급자 단계에서 이런 것들을 구분지어 기억하는 것은 크게 의미있지 않으니, 문법이 조금 상이하다 정도로 기억해주세요.
SELECT Country || ' ' || City || ' ' || Address AS 주소 FROM Customers
SELECT ProductName AS 제품이름, Price || '가 ' || (Price*0.2) || '할인되어 ' || (Price*0.8) || '에 판매합니다!' AS 홍보문구 FROM Products;
다양한 쿼리를 만들어 다른 table에서도 여러분 만에 문장을 만들어보세요.

(실습) 논리 연산

우선순위는 NOT, AND, OR입니다. True는 1로, False는 0으로, and는 곱으로, or는 덧셈으로 이해하시면 계산이 쉽습니다. 뒤에서 나올 비교 연산자, WHERE 조건 절을 미리 사용하였습니다. 비교 연산자는 같다(=), 다르다(!=), 크다(>), 작다(<)를 표현하는 연산자입니다.
  • 기본실습
    • SELECT 1 AND 0;
      SELECT 1 OR 0;
      SELECT NOT 0;
  • AND
    • SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND City = 'London';
  • OR
    • SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND City = 'London' OR City = 'Berlin';
      SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND (City = 'London' OR City = 'Berlin');
  • NOT
    • SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND NOT(City = 'London' OR City = 'Berlin');
      SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND (City != 'London' AND City != 'Berlin');
  • <>같지 않다.(IOS 표준)
    • SELECT * FROM Customers WHERE CustomerID LIKE '1%' AND (City <> 'London' AND City <> 'Berlin');

(실습) BETWEEN 연산

A AND B : A와 B를 포함한 사이의 값
SELECT CustomerID, CustomerName FROM Customers WHERE CustomerID BETWEEN 30 AND 50;
SELECT CustomerID, CustomerName FROM Customers WHERE CustomerID >= 30 AND CustomerID <= 50;

(실습) IN 연산

IN A : A안에 값과 일치하는 값을 조회
SELECT CustomerID, CustomerName FROM Customers WHERE CustomerID IN (10, 20, 30);

(실습) LIKE 연산

  • LIKE '비교문자'
      1. 비교 문자와 형태가 일치(%(모든 문자), _(한 글자) 사용)
      1. 대소문자를 안가림
      1. %는 와일드카드
      SELECT CustomerID, CustomerName FROM Customers WHERE CustomerName LIKE 'Paul%';
      만약 데이터가 Paullab, Paultest, Paulcode가 있다면 모두 검색
       
      SELECT CustomerID, CustomerName FROM Customers WHERE CustomerName LIKE 'Paul___';
      만약 언더바가 3개라면 위 데이터 중 Paullab 만 출력합니다. 이런 문자열들은 와일드카드라고 부르며 다양한 예제가 있습니다.
 
  • 자주쓰는 예제
    • Paul이 들어가는 모든 값
      SELECT CustomerID, CustomerName FROM Customers WHERE CustomerName LIKE '%Paul%';
      아래 코드를 실습해보세요.
      SELECT CustomerID, CustomerName FROM Customers WHERE CustomerID LIKE '1%';

(실습) IS NULL

  • NULL 값을 갖는 값(0은 값이 있는 것입니다.)
SELECT CustomerID, CustomerName FROM Customers WHERE CustomerID IS NULL;

(실습) bit 단위 논리연산자

차례대로 AND, OR, XOR입니다.
SELECT 1 & 0;
SELECT 1 | 0;
SELECT 1 ^ 0;

(실습) WHERE

  • 조회하려는 데이터에 조건 부여
  • 여러 연산자를 결합하여 사용 가능
  • 결합 가능한 연산자의 종류 : 비교연산자(=, <, >, !=, >=, <=), SQL연산자(BETWEEN), 논리 연산자(AND, OR) 등
SELECT CustomerID FROM Customers WHERE CustomerID > 80;
SELECT * FROM Customers WHERE CustomerID > 80 AND Country='France';
SELECT CustomerID, CustomerName FROM Customers WHERE CustomerID=30;
SELECT CustomerID, CustomerName FROM Customers WHERE CustomerName='Godos Cocina Típica';

(실습) INSERT

아래 코드를 사용한 후 다시 한 번 전체 컬럼을 조회해보세요. 나머지 값은 null로 들어가게 됩니다. 클릭을 3번 하면 3개의 데이터가 들어가게 됩니다.
INSERT INTO Customers (CustomerName, City, Country) VALUES ('leehojun', 'jejusi', 'korea');
SELECT * FROM Customers;
 
  • 문제 1번
    • 국적이 한국이면서, 제주시에 살고 있는 사람을 구해주세요. 기본 데이터에 해당 데이터가 없다면, 위에 코드(INSERT)를 다시 실행시켜 주세요.
      SELECT * FROM Customers WHERE Country='korea' AND City='jejusi';
  • 문제 2번
    • PostalCode값이 null 값인 사람을 구해주세요.
      /* SELECT * FROM Customers WHERE PostalCode=''; */ SELECT * FROM Customers WHERE PostalCode IS NULL;
      비어있는 문자열과 NULL값은 다른 값입니다.

(실습) Null Values 찾아내기

위 실습에서 일부러 몇 개의 값을 입력하지 않고 null값을 찾아보세요. 위에서 데이터를 삽입한 것 중 명시하지 않은 것들은 null 값으로 들어갔기 때문에 ContactName에 조회가 가능합니다.
SELECT * FROM Customers WHERE ContactName IS NULL;
is not 구문도 가능하답니다.
SELECT * FROM Customers WHERE ContactName IS NOT NULL;

(실습) UPDATE

값을 바꿉니다. 이 행위는 되돌릴 수 없습니다. where로 여러개를 select하여 바꿀 수 있습니다.
UPDATE Customers SET CustomerName='하르방', City='한라산', Country='선계' WHERE CustomerID = 1;
SELECT * FROM Customers;

(실습) DELETE

주의하세요. WHERE 안적으면 다 삭제 됩니다. 이런일이 실무에서도 종종 발생됩니다.
DELETE FROM Customers WHERE CustomerName='hojun';
SELECT * FROM Customers;

(실습) TOP과 LIMIT

최 상단 3개의 행(row)을 보는 방법입니다.
SELECT TOP 3 * FROM Customers;
SELECT TOP 10 PERCENT * FROM Customers;
SELECT * FROM Customers LIMIT 3;

(실습 안함) CREATE, DROP

해당 실습은 여기서 하지 않습니다. 영상강의 마지막 수업에서 클라우드 서버에 DB를 설치하고 생성할 때 사용합니다.
CREATE DATABASE sampledata_db; CREATE TABLE sampledata_table; DROP DATABASE sampledata_db; DROP TABLE sampledata_table;

(실습 안함) SHOW, DESC

실습은 안하지만 자주 쓰는 명령어를 정리해드립니다.
mysql> SHOW databases; mysql> SHOW tables; mysql> DESC table_name;