ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL
    Note 2020. 12. 2. 12:59

    Database & SQL

    - SQL: Structured Query Language, 구조화된 Query 언어

    - Qurery : "질의문", 가장 친숙한 예시로는 검색창에 적는 검색어도 쿼리의 일종, 저장되어있는 정보를 필터 하기 위한 질문

    - SQL: 데이터베이스 용 프로그래밍 언어, 데이터베이스에 쿼리를 보내 원하는 데이터를 뽑아올 수 있다.

     

     

     

     

    SQL 키워드는 대소 문자를 구분하지 않고 select는 SELECT와 동일하고, 일부 데이터베이스 시스템에서는 각 SQL 문 끝에 세미콜론이 필요하다. 세미콜론은 서버에 대한 동일한 호출에서 둘 이상의 SQL 문을 실행할 수 있도록 데이터베이스 시스템에서 각 SQL 문을 분리하는 표준 방법이다.

     

    중요한 SQL 명령 중 일부

    SELECT 데이터베이스에서 데이터 추출
    UPDATE 데이터베이스의 데이터를 업데이트
    DELETE 데이터베이스에서 데이터를 삭제
    INSERT INTO 데이터베이스에 새 데이터를 삽입
    CREATE DATABASE 새 데이터베이스 생성
    ALTER DATABASE 데이터베이스 수정
    CREATE TABLE 새 테이블 생성
    ALTER TABLE 테이블 수정
    DROP TABLE 테이블 삭제
    CREATE INDEX 색인 생성 (검색 키)
    DROP INDEX  인덱스 삭제

     

    1. SELECT

    SELECT * FROM Customers; "Customers"테이블에서 모든 열을 선택
    SELECT CustomerName, City FROM Customers; "Customers"테이블에서 "CustomerName"및 "City"열을 선택 
    SELECT * FROM table_name; 테이블에서 사용 가능한 모든 필드를 선택
    SELECT Country FROM Customers; "Customers"테이블의 "Country"열에서 ALL (중복 포함) 값을 선택
    SELECT DISTINCT Country FROM Customers; "Customers"테이블의 "Country"열에서 DISTINCT 값
    SELECT COUNT(DISTINCT Country) FROM Customers; SQL 문은 서로 다른 (고유 한) 고객 국가의 수를 나열

     

    2. WHERE

    레코드를 필터링하는 데 사용되고, 지정된 조건을 충족하는 레코드만 추출하는 데 사용된다.

    SELECT * FROM Customers
    WHERE Country='Mexico';
    "Customers"테이블에서 "Mexico"국가의 모든 고객을 선택

    SQL은 텍스트 값을 작은따옴표로 묶어야 한다. (대부분의 데이터베이스 시스템에서는 큰 따옴표도 허용).

    그러나 숫자 필드는 따옴표로 묶어서는 안 된다.

     

    WHERE 절의 연산자

    <> 다름  
    BETWEEN 범위 지정하여 조회 SELECT * FROM Products WHERE Price
    BETWEEN 10 AND 50
    LIKE 특정 문자열이 포함된 데이터를 조회 SELECT * FROM Customers WHERE City
    LIKE 's%';
    IN 특정 문자열 여러개를 조회 SELECT * FROM Customers WHERE City
    IN ('Paris','London');

     

    3. AND, OR, NOT

    AND 및 OR 연산자는 둘 이상의 조건에 따라 필터링하는 데 사용된다.

    - AND 연산자는 AND로 구분된 모든 조건이 TRUE 인 경우 표시

    - OR 연산자는 OR로 구분된 조건이 TRUE 인 경우 표시

    - NOT 연산자는 조건이 TRUE가 아닌 경우 표시

     

    4. ORDER BY

    결과 집합을 오름차순 또는 내림차순으로 정렬하는 데 사용, 기본적으로 오름차순으로 정렬한다.
    (내림차순으로 정렬하려면 DESC 키워드를 사용)

    SELECT * FROM Customers ORDER BY Country; "국가"열을 기준으로 정렬된 "고객"테이블에서 모든 고객을 선택
    SELECT * FROM Customers ORDER BY Country DESC; "국가"열을 기준으로 내림차순으로 정렬된 "고객"테이블에서 모든 고객을 선택
    SELECT * FROM Customers ORDER BY Country, CustomerName; "Country"및 "CustomerName"열을 기준으로 정렬된 "Customers"테이블에서 모든 고객을 선택. 즉, 국가별로 정렬하지만 일부 행에 동일한 국가가 있는 경우 CustomerName별로 정렬
    SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC; "국가"를 기준으로 오름차순으로 정렬하고 "CustomerName"열을 기준으로 내림차순으로 정렬된 "고객"테이블에서 모든 고객을 선택

     

    5. INSERT INTO

    테이블에 새 레코드를 삽입하는 데 사용, CustomerID 열은 자동 증가 필드이며 새 레코드가 테이블에 삽입될 때 자동으로 생성

    INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
    VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
    "Customers"테이블에 새 레코드를 삽입

     

     

    6. NULL Values

    NULL 값이 있는 필드는 값이 없는 필드

    테이블의 필드가 선택 사항인 경우에 필드에 값을 추가하지 않고 새 레코드를 삽입하거나 레코드를 업데이트할 수 있다. 그러면 필드가 NULL 값으로 저장된다.

    SELECT CustomerName, ContactName, Address
    FROM Customers
    WHERE Address IS NULL;
    "주소"필드에 NULL 값이 있는 모든 고객을 나열

     

    7. UPDATE

    테이블의 기존 레코드를 수정하는 데 사용.

    WHERE 절은 업데이트해야 하는 레코드를 지정한다. WHERE 절을 생략하면 테이블의 모든 레코드가 업데이트된다.

    UPDATE Customers
    SET ContactName='Juan'
    WHERE Country='Mexico';
    Country가 "Mexico"인 모든 레코드에 대해 연락처 이름을 "Juan"으로 업데이트

     

    8. DELETE

    테이블의 기존 레코드를 삭제하는 데 사용

    DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste'; "Customers"테이블에서 "Alfreds Futterkiste"고객을 삭제
    DELETE FROM Customers; 테이블을 삭제하지 않고 "Customers"테이블의 모든 행을 삭제

     

    9. COUNT

    지정된 기준과 일치하는 행 수를 반환

     

    10. LIKE

    WHERE 절에서 열에서 지정된 패턴을 검색하는 데 사용

    LIKE 연산자와 함께 자주 사용되는 두 개의 와일드카드가 있다.

    - %-백분율 기호는 0, 1 또는 여러 문자를 나타냄

    - _-밑줄은 단일 문자를 나타냄

     

    LIKE 연산자

    WHERE CustomerName LIKE 'a%' "a"로 시작하는 CustomerName
    WHERE CustomerName LIKE '%a' "a"로 끝나는
    WHERE CustomerName LIKE '%or%' 임의의 위치에 있는 "or"
    WHERE CustomerName LIKE '_r%' 두번째 위치에 "r"이 있는
    WHERE CustomerName LIKE 'a_%' "a"로 시작하고 길이 2
    WHERE CustomerName LIKE 'a__%' "a"로 시작하고 길이 3
    WHERE ContactName LIKE 'a%o' "a"로 시작하고 끝이"o"

     

    11. WILDCARDS

    와일드카드 문자는 문자열에서 하나 이상의 문자를 대체하는 데 사용된다.

    SELECT * FROM Customers
    WHERE City LIKE 'L_n_on';
    도시가 "L"로 시작하고 그 뒤에 임의의 문자, "n", 임의의 문자, "on"이 차례로 오는 모든 고객을 선택
    SELECT * FROM Customers
    WHERE City LIKE '[bsp]%';
    도시가 "b", "s"또는 "p"로 시작하는 모든 고객을 선택
    SELECT * FROM Customers
    WHERE City LIKE '[a-c]%';
    도시가 "a", "b"또는 "c"로 시작하는 모든 고객을 선택
    SELECT * FROM Customers
    WHERE City LIKE '[!bsp]%';
    도시가 "b", "s"또는 "p"로 시작하지 않는 모든 고객을 선택

     

    12. ALIASES

    테이블 또는 테이블의 열에 별칭을 만들어 더 읽기 쉽게 만드는 데 사용된다.

    SELECT CustomerID AS ID, CustomerName AS Customer
    FROM Customers;
    CustomerID 열과 CustomerName 열에 각각 하나씩 두 개의 별칭을 만듦
    SELECT CustomerName AS Customer, ContactName AS [Contact Person]
    FROM Customers;
    CustomerName 열과 ContactName 열에 각각 하나씩 두 개의 별칭을 만듦
    (별칭 이름에 공백이 포함된 경우 큰 따옴표 또는 대괄호가 필요)
    SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
    FROM Customers;
    4 개의 열 (Address, PostalCode, City 및 Country)을 결합하는 "Address"라는 별칭을 만듦
    SELECT o.OrderID, o.OrderDate, c.CustomerName
    FROM Customers AS c, Orders AS o
    WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;
    CustomerID = 4 (Around the Horn)인 고객의 모든 주문을 선택 "Customers"및 "Orders"테이블을 사용하고 각각 "c"및 "o"의 테이블 별칭을 제공 (여기서는 별칭을 사용하여 SQL을 더 짧게 만듦)
    SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
    FROM Customers, Orders
    WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;
    별칭 없이 사용

     

    13. JOIN

    JOIN 절은 둘 이상의 테이블 사이의 관련 열을 기반으로 행을 결합하는 데 사용

    "Orders"테이블의 "CustomerID"열은 "Customers"테이블의 "CustomerID"를 참조

    위의 두 테이블 간의 관계는 "CustomerID"열

    그런 다음 두 테이블에서 일치하는 값이 있는 레코드를 선택하는 다음 SQL 문 (INNER JOIN 포함)을 만들 수 있다.

     

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

     

    - (INNER) JOIN : 두 테이블의 값이 일치하는 레코드를 반환

    - LEFT (OUTER) JOIN : 왼쪽 테이블에서 모든 레코드를 반환하고 오른쪽 테이블에서 일치하는 레코드를 반환

    - RIGHT (OUTER) JOIN : 오른쪽 테이블에서 모든 레코드를 반환하고 왼쪽 테이블에서 일치하는 레코드를 반환

    - FULL (OUTER) JOIN : 왼쪽 또는 오른쪽 테이블에 일치하는 항목이 있으면 모든 레코드를 반환

      

      

      

     

    14. GROUP BY

    GROUP BY 문은 "각 국가의 고객 수 찾기"와 같이 동일한 값을 가진 행을 요약 행으로 그룹화한다.

    GROUP BY 문은 종종 집계 함수 (COUNT, MAX, MIN, SUM, AVG)와 함께 사용되어 결과 집합을 하나 이상의 열로 그룹화한다.

    SELECT column_name(s)
    FROM table_name
    WHERE condition
    GROUP BY column_name(s)
    ORDER BY column_name(s);
    각 국가의 고객 수를 나열
    SELECT COUNT(CustomerID), Country
    FROM Customers
    GROUP BY Country;
    각 국가의 고객 수를 높은 순으로 정렬하여 나열

     

    'Note' 카테고리의 다른 글

    서버 사이드 렌더링, 클라이언트 사이드 렌더링  (0) 2020.12.06
    React Router(v4)  (0) 2020.12.06
    MVC, Flux  (0) 2020.11.23
    CSS basic box model  (0) 2020.11.21
    JSX 조건부 렌더링  (0) 2020.11.20

    댓글