IM _ SQL

jungeundelilahLEE·2020년 12월 2일
0

JS_심화

목록 보기
14/17

SQL (Structured Query Language)

  • 데이터베이스와 대화하기 위해 디자인된 언어 (구조화된 query 언어)

  • 데이터베이스에 query를 보내 원하는 데이터를 추출할 수 있음

  • 데이터의 구조가 엄격


데이터베이스

  • 데이터베이스는 우리가 데이터를 저장하는 곳

  • 어플리케이션에서 사용할 데이터들을 체계적으로 디스크에 담도록 만들어진 데이터 저장 전용 프로그램

  • 스프레드시트와 매우 비슷하게 생김

    • 필터링 (스프레드시트) : query (데이터베이스)
    • 아래와 같은
  • 관계형 데이터베이스의 종류

    1. Relational Database // SQL
      • MySQL, PostgreSQL, SQLite 등
    2. Non-Relational Database // Non-SQL
      • mongoDB, DynamoDB, CouchDB 등
  • SQL은 테이블이 있으며, 행(row)과 열(column)로 이루어짐

    • table : 일관적인 특징을 가진, 중복되지 않는 데이터를 담기 위한 하나의 데이터 집단
    • record : (=row) 여러가지 속성(attribute (= column))으로 이루어짐
    • table에서 특정한 record의 내용을 찾기 위해서는, "column"의 내용을 기준으로 찾음 -> 이때 record를 구분하는 기준이 되는 column을 "Primary key(기준키)"라고함
    • column의 기준을 한정시키는 것을 -> constraints(제약)이라고함
    • Primary key : 다른 record와 중복될 수 없음 / 비어있을 수 없음 (is not null) /
  • 관계형 데이터베이스는 sql이라는 언어로, 데이터베이스 파일안에 구조를 만들고, 자료를 출력함

  • 데이터베이스는 왜 필요한가?

    • In-memory의 한계
      : 끄면 데이터가 없어짐
    • File I / O
      : 원하는 데이터만 가져올 수 없으며, 항상 모든 데이터를 가져온 뒤 서버에서 필터링 해야 하는 번거로움
    • Database
      : 필터링 이외에도 File I/O로 구현이 힘든 관리를 위한 여러가지 기능들을 가지고 있는 데이터에 특화된 서버
  • 어떻게 작동하는가?

    • 작동 순서
      • client : "남자 직원들 목록 보여줘"
      • server : clinet의 요청을 처리하기 위해서, SELECT*FROM employee WHERE gender = 'M'과 같은 '쿼리문'을 database에 보냄
      • database : server가 보내준 쿼리문을 필터링함
      • database : 결과값을 server에 보냄 (json, xml등의 형식으로)
      • server : 따로 가공할 필요없이 그대로 client에 보여줌

  • 데이터 간 다양한 관계를 알아본다.
  • 합리적이고, 효율적인 방법으로 데이터베이스를 구성하는 방법을 이해한다.

Schema

: 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 entity(테이블로 표현되는 정의의 단위) 간 의 관계에 대한 설명

  • 데이터를 정의하는 방법에 필요한 내용 (데이터가 어떻게 보여질 것인지)

  • 데이터베이스의 청사진

  • fields 들은 행과 열로 표현하면 "열"에 해당하는 것들

    • entities : 테이블로 표현되는 정의의 단위
    • fields : Teachers에서 - Name, Department, Classes
      Classes에서 - Name, Room NUmber, Teacher, Students 와 같이 "열"에 해당되는 것들
    • record : Teachers에서 각 fields에 해당하는 정보(?)

  • 1 : N (일대다의 관계)

    • 각 테이블에는 고유한 ID라는 field가 있는데, 이는 각 테이블의 record 하나를 가리키는 숫자로, 자동적으로 그 값이 증가함 / ID field는 테이블의 기본키(Primary key) 역할을 함
    • 다른 테이블에서 테이블의 기본키(primary key)를 참조할 때, 해당 값을 외래키(Foreign key)라고 함 / 위 예시에서 ClassID라는 field는 Classes 테이블에서 특정 레코드를 고유하게 식별하는 외래키
    • .
      .
      .
      .
      .
      .
      다시... 존나 못알아듣겠네...


NoSQL

  • SQL보다 훨씬 크고 각자 다른 종류로 이루어짐

  • 데이터의 구조가 자유로움

  • 3가지 카테고리

    1. Document DB
      • 대표 : mongoDB
        • 데이터를 json document 형태로 저장
        • 보통의 SQL처럼 행, 열이 존재하지 않으며, 종류와 모양에 구애받지 않고, any 데이터의 형태로도 저장할 수 있음
    2. Key - Value
      • 대표 : CassandraDB
        • column wide database 유형
        • 읽고 쓰는 속도가 매우 빠름
      • 대표 : DynamoDB
        • 서버리스
        • 분산된 key value DB
        • 데이터를 저장하기 전에 미리, 어떻게 데이터를 사용할 것인지에 대해서 고민해야 (SQL과 반대)
    3. GraphDB
      • 소셜 네트워크
      • column이나 document가 필요없지만 각 노드사이의 관계를 알아야할 때

SQL

1. SELECT

  • 데이터를 선택할 때 사용
  • 데이터는 result-set이라는 result table에 저장됨
  • SELECT CustomerName, City FROM Customers;
// 부분
SELECT column1, column2, ...
FROM table_name;

// 전체
SELECT * FROM table_name;

2. WHERE

  • records을 필터링할 때 사용
  • 저장된 조건을 충족하는 records만 추출하는데 사용됨
  • SELECT * FROM Customers WHERE Country='Mexico';
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • Operators

3. And, Or, Not

  • WHERE과 결합할 수 있음
  • SELECT * FROM Customers WHERE Country = "Germany" AND City = "Berlin"
  • SELECT * FROM Customers WHERE Country='Germany' AND (City='Berlin' OR City='München');
  • SELECT * FROM Customers WHERE NOT Country='Germany' AND NOT Country='USA';
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
--
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
-- 
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;

4. Order By

  • result-set을 오름차순(ascend) or 내림차순(descend)으로 정렬(sort)하기 위해 사용
  • 기본적으로는 오름차순으로 정렬 / 내림차순은 DESC 사용
  • SELECT * FROM Customers ORDER BY Country, CustomerName; : 기본적으로 Country에 따라 정렬한 후, 각 나라 안에서 CustomerName 오름차순으로 정렬
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

5. Insert Into

  • 새로운 recodes를 삽입할 때 사용
  • 2가지 방법
  • 특정 열에만 데이터를 삽입하면, 각 column에 해당하는 값은 추가되고, 지정하지 않은 열에는 null
  1. 삽입할 열 이름과 값을 모두 지정
  INSERT INTO table_name (column1, column2, column3, ...)
  VALUES (value1, value2, value3, ...);
  1. 테이블의 모든 열에 대한 값을 추가하는 경우, 쿼리에서 열 이름을 지정할 필요 X
  INSERT INTO table_name
  VALUES (value1, value2, value3, ...);

6. Null Values

  • 값이 없는 field
  • ZERO VALUES와는 따름
  • 연산자를 사용해서 null values를 확인할 수 있음
// IS NULL - null값을 찾기 위해 사용한다 (null이 있는지 여부 파악)
SELECT column_names
FROM table_name
WHERE column_name IS NULL;

// IS NOT NULL - 비어있지 않은 값을 확인하기 위해 사용한다
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;

7. Update

  • 기존의 recodes를 수정하기 위해 사용
  • UPDATE Customers SET ContactName = 'Alfred Schmidt', City= 'Frankfurt' WHERE CustomerID = 1; : 하나씩 수정
  • UPDATE Customers SET ContactName='Juan' WHERE Country='Mexico'; : 여러개 수정
  • UPDATE Customers SET ContactName='Juan'; : WHERE을 생략하면, 전체를 대상으로 수정
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

8. Delete

  • 테이블에서 recodes를 삭제하기 위해 사용
  • WHERE 절을 생략하면 테이블의 모든 레코드가 삭제되므로 주의할 것
  • DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste'; : 조건삭제
  • DELETE FROM table_name; : 전체삭제
DELETE FROM table_name WHERE condition;

9. Count

  • COUNT : 지정된 기준과 일치하는 행 수를 반환
  • AVG : 숫자 열의 평균 값을 반환
  • SUM : 숫자 열의 총합을 반환
SELECT COUNT/AVG/SUM(column_name)
FROM table_name
WHERE condition;

10. Like

  • WHERE 절의 열에서 지정된 패턴을 검색하기위해 사용
  • %-백분율 기호는 0, 1 또는 여러 문자를 나타냅니다.
  • _-밑줄은 단일 문자를 나타냅니다.
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
  • LIKE 연산자
    • 'a%' : a로 시작하는 모든 값을 찾음
    • '%a' : a로 끝나는 모든 값을 찾음
    • '%or%' : any position에 or이 있는 모든 값을 찾음
    • '_r%' : 두번째 위치에 r이 있는 모든 값을 찾음
    • 'a_%' : a로 시작하고 길이가 2자 이상인 모든 값을 찾음
    • 'a__%' : a로 시작하고 길이가 3자 이상인 모든 값을 찾음
    • 'a%o' : a로 시작하고 o로 끝나는 모든 값을 찾음

11. Wildcards

  • 문자열에서 하나 이상의 문자를 대체하기 위해 사용
  • LIKE연산자와 함께 사용
  • MS Access의 와일드카드 문자
  • SQL Server의 와일드 카드 문자

12. Aliases

  • 테이블 or 테이블 열에 임시로 별명을 제공하기 위해 사용
  • 별명은 쿼리 기간 동안만 존재함
// Alias Column syntax
SELECT column_name AS alias_name
FROM table_name;

// Alias Table syntax
SELECT column_name(s)
FROM table_name AS alias_name;


// 여러개도 가능
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers

// 별칭에 공백이 포함된 경우, 큰 따옴표 or 대괄호가 필요함
SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;

// 여러 개의 열을 결합해서, 새로운 별칭(Adress)을 만듦
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;

// etc... 여러가지가 있음

13. Join

  • 둘 이상의 테이블 사이의 관련 column을 기반으로 row를 결합하기 위해 사용
profile
delilah's journey

0개의 댓글