TIL (today I learned)

2019-10-15 [DB, SQL]

grin-quokka 2019. 10. 15. 19:16
  • w3school 튜토리얼 정리
  • sql은 언어인데, 데이터베이스에 데이터를 저장하거나 원하는 것만 골라서 가져오거나 삭제하거나 등등의 작업을 하려고 쓴다. 엑셀이라고 생각하면 된다.
  • 관계형 데이터베이스 : 개체 간의 관계에 따라서 테이블을 구성한..?
  • 테이블은 쉽게 생각해서 엑셀에서 하나의 스프레드 시트와 비슷하다. 연관된 데이터들을 모아서 하나의 테이블을 구성한다.
  • sql 명령어(키워드)는 대소문자 구분이 없다, 그럼에도 보통 대문자로 쓰긴한다.. 다른 데이터명 같은거랑 구분하려고 그런걸까..? 컨벤션인것 같다.
    • 기본적인 명령어들
      • 테이블 관련
        • CREATE TABLE - creates a new table
        • ALTER TABLE - modifies a table
        • DROP TABLE - deletes a table
      • 데이터 관련
        • SELECT - extracts data from a database
        • UPDATE - updates data in a database
        • DELETE - deletes data from a database
        • INSERT INTO - inserts new data into a database

명령어 정리

  • SELECT

    • 특정 테이블에서 원하는 데이터 가져오기

        SELECT 이름, 성별
        FROM 학생_테이블;
    • 따로 속성을 지정하지 않고 모든 속성을 다 가져오고 싶다면 *을 쓴다.

        SELECT * FROM 학생_테이블;
    • SELECT DISTINCT : 중복되지 않는 데이터만 원할 때

        SELECT DISTINCT 성별
        FROM 학생;
    • Count() : 추출된 데이터의 갯수를 알고 싶을 때 → 결과에서 속성명이 Count()이 된다. 다르게 이름 짓고 싶으면 뒤에 AS를 붙이고 원하는 이름을 쓴다.

  • WHERE : 조건을 주고 싶을 때 사용. SELECT에서 뿐만아니라, UPDATE, DELETE에서도 씀

      SELECT * 
      FROM Customers
      WHERE Country='Mexico';
    • AND, OR, NOT : where에서 세부 조건으로 사용

        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;
  • ORDER BY : select해서 나온 결과를 정렬하고 싶을 때 사용. select 아닐 때도 쓸 수 있으려나

    • ASC는 오름차순, DESC는 내림차순. 이걸 적지 않으면 기본으로 ASC라고 생각한다.

    • 여러 기준을 적으면 column1을 기준으로 정렬을 하고, 중복된 데이터가 있으면 그 안에서는 column2을 기준으로 정렬한다.

      SELECT column1, column2, ...
      FROM table_name
      ORDER BY column1, column2, ... ASC 또는 DESC;

  • INSERT INTO : 테이블에 데이터를 삽입

    • 특정 칼럼만 지정해서 값을 넣을 수도 있고(그럼 나머지에는 디폴트로 지정한게 들어가던지 null로 들어감), 칼럼 다 값을 적어줄 수도 있다.

      INSERT INTO Customers (CustomerName, City, Country)
      VALUES ('Cardinal', 'Stavanger', 'Norway');

  • NULL : 앞서 말했듯이 값을 지정해주지 않으면 NULL 값이 들어간다.

    • where 조건을 줄 때 null인 데이터는 제외할 건지 등을 지정할 수 있다.

        SELECT column_names
        FROM table_name
        WHERE column_name IS NULL;
      
        SELECT column_names
        FROM table_name
        WHERE column_name IS NOT NULL;
  • Wildcards

    • 정규식이랑 비슷하다고 해야하나.. WHERE에서 LIKE 키워드를 쓸 때 사용할 수 있다.
      • WHERE CustomerName LIKE 'a%' ⇒ a로 시작하는 단어 모두
  • Aliases : 결과 테이블에서 칼럼명을 원하는 대로 줄 수 있다. 또는 결과 테이블명을 원하는 대로 줄 수 있다. 이렇게 하는 이유는 이 결과를 보기 편하게 하는 것도 있지만, 이 결과를 가지고 또 다른 조작을 할 때 그 이름을 이용하려고..

      SELECT CustomerID AS ID, CustomerName AS Customer
      FROM Customers;

조인

  • Join : 여러개의 테이블을 합칠 때

    • Inner Join : 교집합

      • Orders 테이블의 CustomerID와 Customers 테이블의 CustomerID가 같은 데이터들을 가져오는데, 그 중에서도 Orders테이블의 OrderID 속성과 Customers 테이블의 CustomerName 속성에 해당하는 데이터만 보여준다.

        SELECT Orders.OrderID, Customers.CustomerName
        FROM Orders
        INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

    • Left Join 또는 LEFT OUTER JOIN: 왼쪽 테이블의 데이터는 다 가지고 오는데, 오른쪽 테이블 중에서 기준에 맞으면 그 값을 보여주고, 안맞는건 null로 보여준다.

        SELECT Customers.CustomerName, Orders.OrderID
        FROM Customers
        LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
      • Customers에 있는 데이터는 다 보여줄거다. 그러니까 select의 첫번째인 Customers.CustomerName는 그대로 보여줄텐데, 두번째인 Orders.OrderID의 경우에는 Customers.CustomerID = Orders.CustomerID 이 조건에 해당되는 데이터만 Orders.OrderID를 보여주고 조건에 맞지 않으면 NULL값
    • Right Join : Left Join 반대..!

Mysql