ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스, SQL, ACID, Schema, Query
    Topic/Database 2022. 1. 20. 22:10
    반응형

    SQL Basics ✔️  

     

    SQL ☑️

    SQL: Structured Query Language / 데이터베이스 언어로, 주로 관계형 데이터베이스에서 사용한다.
    ex) MySQL, Oracle, SQlite, PostgreSQL ... 다양한 데이터베이스에서 SQL 구문을 사용할 수 있다.

    SQL이란 데이터베이스 용 프로그래밍 언어이다.
    데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽일할 수 있다.
    이름에서 보듯이, 데이터가 구조화된(Structured) 테이블을 사용하는 데이터베이스에서 활용할 수 있다.

    SQL을 사용할 수 있는 데이터베이스와 달리, 데이터의 구조가 고정되어 있지 않은 데이터베이스를 NoSQL이라고 한다.
    관계형 데이터베이스와는 달리, 테이블을 사용하지 않고 데이터를 다른 형태로 저장한다.
    ex) MongoDB와 같은 문서 지향 데이터베이스가 있다.

    데이터베이스 세계에서 SQL은 데이터베이스 종류를 SQL이라는 언어 단위로 분류할 정도로 중요한 자리를 차지하고 있다.
    그리고 SQL을 사용하기 위해서는 데이터의 구조가 고정되어 있어야 한다.

    SQL은 구조화된 쿼리 언어이다!

     

    쿼리 ☑️

    쿼리(query): '질의문'이란 뜻을 가지고 있다.
    ex) 검색할 때 입력하는 검색어가 일종의 쿼리이다. / 검색할 때, 기존에 존재하는 데이터를 검색어로 필터링한다.
    따라서 쿼리는 저장되어 있는 데이터를 필터하기 위한 질의문으로 볼 수 있다.

     

    기본 쿼리문 알아보기  ☑️

     

    데이터베이스 생성

    CREATE DATABASE 데이터베이스_이름;​

     

    데이터베이스 사용
    : 데이터베이스를 이용해 테이블을 만들거나 수정하거나 삭제하는 등의 작업을 하려면, 먼저 데이터베이스를 사용하겠다는 명령을 
      전달해야 한다.

    USE 데이터베이스_이름;​

     

    테이블 생성
    : USE를 이용해 데이터베이스를 선택했다면, 이제 테이블을 만들 수 있다.
      테이블을 필드(표의 열)와 함께 만들어야 한다. 👇🏻 아래와 같은 필드 조건이 있다고 가정해봅시다. 

    필드 이름 필드 타입 그 외의 속성
    id 숫자 Primary key이면서 자동 증가하도록 설정 (이후에 천천히 배웁니다)
    name 문자열 (최대 255개의 문자)  
    email 문자열 (최대 255개의 문자)  
    CREATE TABLE user (
      id int PRIMARY KEY AUTO_INCREMENT,
      name varchar(255),
      email varchar(255)
    );​

     

    테이블 정보 확인

    DESCRIBE user;​

     

     


     

    SQL 명령어

    SELECT
    : SELECT는 데이터셋에 포함될 특성을 특정한다.

    SELECT 'hello world'​
    SELECT 15 + 3​

     

    FROM
    : 테이블과 관련한 작업을 할 경우 반드시 입력해야 한다. FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블을 명시한다.

    SELECT 특성_1
    FROM 테이블_이름​
    SELECT 특성_1, 특성_2
    FROM 테이블_이름​
    SELECT *
    FROM 테이블_이름​

     

    WHERE
    : 필터 역할을 하는 쿼리문입니다. WHERE은 선택적으로 사용할 수 있습니다.

    [코드] 특정 값과 동일한 데이터 찾기 👇🏻

    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 = "특정 값"​

     

    [코드] 특정 값을 제외한 값을 찾기 👇🏻

    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_2 <> "특정 값"

     

    [코드] 특정 값보다 크거나 작은 데이터를 필터할 때에는 '<', '>', 비교하는 값을 포함하는 '이상', '이하' 값은 '<=', '>=' 을 사용합니다.  👇🏻

    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 > "특정 값"
    
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 <= "특정 값"

     

    [코드] 문자열에서 특정 값과 비슷한 값들을 필터할 때에는 'LIKE'와 '\%' 혹은 '\*' 를 사용합니다. 👇🏻

    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_2 LIKE "%특정 문자열%"

     

    [코드] 리스트의 값들과 일치하는 데이터를 필터할 때에는 'IN' 을 사용합니다. 👇🏻

    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_2 IN ("특정값_1", "특정값_2")

     

    [코드] 값이 없는 경우를 제외할 때에는 'NOT' 을 추가해 이용합니다. 👇🏻

    SELECT *
    FROM 테이블_이름
    WHERE 특성_1 IS NOT NULL

     

    ORDER BY
    : 돌려받는 데이터 결과를 어떤 기준으로 정렬하려 출력할지 결정한다. / ORDER BY는 선택적으로 사용할 수 있다.
    [코드] 기본 정렬은 오름차순입니다. 👇🏻

    SELECT *
    FROM 테이블_이름
    ORDER BY 특성_1

     

    [코드] 내림차순으로도 정렬할 수 있습니다. 👇🏻

    SELECT *
    FROM 테이블_이름
    ORDER BY 특성_1 DESC

     

    LIMIT
    : 결과로 출력할 데이터의 개수를 정할 수 있다. LIMIT은 선택적으로 사용할 수 있으며 쿼리문에서 사용 시 가장 마지막에 추가한다.

    [코드] 데이터 결과를 200개만 출력합니다. 👇🏻

    SELECT *
    FROM 테이블_이름
    LIMIT 200

    DISTINCT
    : 유니크한 값을 받고 싶을 때에는 SELECT DISTINCT를 사용할 수 있다.

    [코드] 특성_1을 기준으로 유니크한 값들만 선택합니다. 👇🏻

    SELECT DISTINCT 특성_1
    FROM 테이블_이름​

     

    [코드] 특성_1, 특성_2, 특성_3의 유니크한 '조합' 값들을 선택합니다.👇🏻

    SELECT
      DISTINCT
        특성_1
        ,특성_2
        ,특성_3
    FROM 테이블_이름

     

    INNER JOIN
    : INNER JOIN이나 JOIN으로 실행할 수 있다.

    [코드] 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결합니다. 👇🏻

    SELECT *
    FROM 테이블_1
    JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

    OUTER JOIN
    : OUTER JOIN은 다양한 선택지가 있습니다. (LEFT, RIGHT)

    [코드] 'LEFT OUTER JOIN'으로 LEFT INCLUSIVE을 실행합니다.👇🏻

    SELECT *
    FROM 테이블_1
    LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

     

    [코드] 'RIGHT OUTER JOIN'으로 RIGHT INCLUSIVE을 실행합니다.👇🏻

    SELECT *
    FROM 테이블_1
    RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

     

    INNER JOIN & OUTER JOIN 이해를 돕기 위한 그림

     

    여러 쿼리문 한 번에 써보기 
    : 다음은 Brazil에서 온 고객을 도시별로 묶은 뒤, 각 도시 수에 따라 내림차순 정렬합니다.
      그리고 CustomerID에 따라 오름차순으로 정렬한 3개의 결과만 요청하는 예시이다.

    SELECT c.CustomerId, 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​

     


     

    SCHEMA  ✔️

     

    Schema ☑️

    : 스키마(Schema)는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명이다
      즉, "데이터베이스의 청사진"과 같다.
    -> 여기서 엔티티(Entity)는 고유한 정보의 단위이다.( 아직 어색한 단어지만 익숙해지면 된다! )
         엔티티는 데이터베이스에서 테이블로 표시할 수 있다.

     

    SQL More  ✔️

     

    SQL 내장함수 ☑️

    집합연산 
    : 레코드를 조회하고 분류한 뒤, 특정 작업을 하는 연산

    GROUP BY
    : 데이터를 조회할 때 그룹으로 묶어 조회한다. 

    [커맨드] customers 테이블의 모든 레코드를 조회 👇🏻

    SELECT * FROM customers;

     

    [커맨드] customers 테이블의 모든 레코드를 State에 따라 그룹화 👇🏻

    SELECT * FROM customers
    GROUP BY State;

     

    HAVING
    : HAVING은 GROUP BY로 조회된 결과를 필터링할 수 있다.

    [커맨드] invoices 테이블을 CustomerId로 그룹화하고 그 평균이 6을 초과한 결과를 조회 👇🏻

    SELECT CustomerId, AVG(Total)
    FROM invoices
    GROUP BY CustomerId
    HAVING AVG(Total) > 6.00

     

    ** HAVING은 WHERE과는 적용하는 방식이 다르다. HAVING은 그룹화된 결과에 대한 필터이고, WHERE은 저장된 레코드를 필터링한다. 따라서 실제로 그룹화 전에 데이터를 필터해야 한다면, WHERE를 사용한다.
    ** 이어서 그룹에 대해 어떤 작업을 할 수 있는지 확인해봅시다.

    COUNT()
    : COUNT 함수는 레코드의 개수를 헤아릴 때 사용한다. 

    [커맨드] 모든 레코드에 대한 COUNT 함수 사용 예시 👇🏻

    SELECT *, COUNT(*) FROM customers
    GROUP BY State;

     

    [커맨드] 각 State에 해당하는 레코드의 개수를 확인하는 COUNT 함수 예시👇🏻

    SELECT State, COUNT(*) FROM customers
    GROUP BY State;

     

    SUM
    : SUM 함수는 레코드의 합을 리턴한다. 

    [커맨드] SUM 함수 사용 예시 👇🏻

    SELECT InvoiceId, SUM(UnitPrice)
    FROM invoice_items
    GROUP BY InvoiceId;

     

    AVG
    : AVG 함수는 레코드의 평균값을 계산하는 함수다.

    [커맨드] AVG 함수 사용 예시 👇🏻

    SELECT TrackId, AVG(UnitPrice)
    FROM invoice_items
    GROUP BY TrackId;

     

    MAX(), MIN()
    : MAX 함수와 MIN 함수는 각각 레코드의 최댓값과 최솟값을 리턴한다.

    [커맨드] MIN 함수 사용 예시 👇🏻

    SELECT CustomerId, MIN(Total)
    FROM invoices
    GROUP BY CustomerId

     

    SELECT 실행 순서 **
    : 데이터를 조회하는 SELECT 문은 정해진 순서대로 동작한다. FWGHSO

    FROM
    WHERE
    GROUP BY
    HAVING
    SELECT
    ORDER BY

    [커맨드] SELCT 문의 실행 순서 예시 👇🏻

    SELECT CustomerId, AVG(Total)
    FROM invoices
    WHERE CustomerId >= 10
    GROUP BY CustomerId
    HAVING SUM(Total) >= 30
    ORDER BY 2

     

    반응형

    'Topic > Database' 카테고리의 다른 글

    [ MongoDB ] 몽고DB 컬렉션 내 필드 전체에 update하는 방법  (0) 2022.09.01
    NoSQL이란?  (0) 2022.06.22
    MVC 파트, Short.ly  (0) 2022.01.26
    MVC, Database 구현  (0) 2022.01.25
    SQL 데이터베이스 연결, 스키마, Schema  (0) 2022.01.21
Designed by LEO.