ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자주 사용하는 SQL Query 1
    Database/데이터베이스 2018. 11. 9. 01:11
    반응형


    [DataBase] 자주 사용하는 SQL Query 1







    [샘플 테이블 다운로드]

    다음 SQL 실습에 사용된 모든 데이터는 http://forta.com/books/0672336073 에서 다운로드 받을 수 있다

     

    [데이터 가져오기] 


    # 단일 컬럼 가져오기

    SELECT prod_name

    FROM Products;



    # 다중 컬럼 가져오기

    SELECT prod_id, prod_name, prod_price

    FROM Products;



    # 모든 컬럼 가져오기

    SELECT * 

    FROM Products;



    # 중복행 출력 방지하기

    SELECT DISTINCT vend_id

    FROM Products;



    # 결과 제한하기

    SELECT prod_name

    FROM Products

    LIMIT 5;



    # 5번째 행부터 5개의 행을 가져오기

    SELECT prod_name

    FROM Products

    LIMIT 5 OFFSET 5;



    # 주석 사용하기  

    # 한 줄 주석

    SELECT prod_name  -- 이 줄은 주석이다

    FROM Products;



    # 이 줄은 주석이다

    SELECT prod_name

    FROM Products;



    # 다중 행 주석

    /* SELECT prod_name, vend_id

    FROM Products; */

    SELECT prod_name

    FROM Products;



    # 데이터 정렬하기 

    SELECT prod_name

    FROM Products

    ORDER BY prod_name;



    # 여러 개의 컬럼으로 정렬하기 

    SELECT prod_id, prod_price, prod_name

    FROM Products

    ORDER BY prod_price, prod_name;



    # 컬럼의 위치로 정렬하기 

    SELECT prod_id, prod_price, prod_name

    FROM Products

    ORDER BY 2, 3;



    # 정렬 순서 지정하기 (내림차순 정렬, 비싼 가격의 제품이 먼저 나옴)

    SELECT prod_id, prod_price, prod_name

    FROM Products

    ORDER BY prod_price DESC;


    SELECT prod_id, prod_price, prod_name

    FROM Products

    ORDER BY prod_price DESC, prod_name;   -- DESC 키워드는 명시된 컬럼에만 적용된다




    [데이터 필터링] 


    # WHERE 절 사용하기

    SELECT prod_name, prod_price

    FROM Products

    WHERE prod_price = 3.49;



    # 단일값 확인하기

    # 가격이 10달러보다 싼 모든 제품을 가져오기

    SELECT prod_name, prod_price

    FROM Products

    WHERE prod_price < 10;



    # 가격이 10달러 이하인 제품을 가져오기

    SELECT prod_name, prod_price

    FROM Products

    WHERE prod_price <= 10;



    # 일치하지 않는 값 확인하기

    # 판매처가 DLL01 이 아닌 모든 제품을 가져오기 -1

    SELECT vend_id, prod_name

    FROM Products

    WHERE vend_id <> 'DLL01';



    # 판매처가 DLL01 이 아닌 모든 제품을 가져오기 -2

    SELECT vend_id, prod_name

    FROM Products

    WHERE vend_id != 'DLL01';



    # 특정 범위의 값 확인하기

    # BETWEEN 연산자

    SELECT prod_name, prod_price

    FROM Products

    WHERE prod_price BETWEEN 5 AND 10;



    # 값이 없는 데이터 확인하기

    # IS NULL 연산자

    SELECT prod_name

    FROM Products

    WHERE prod_price IS NULL;


    SELECT cust_name

    FROM Customers

    WHERE cust_email IS NULL;



    # 고급 데이터 필터링 

    # AND 연산자 사용하기

    # 판매처가 DLL01 이고 가격이 4달러 이하인 제품의 ID, 제품 가격, 제품명 가져오기

    SELECT prod_id, prod_price, prod_name

    FROM Products

    WHERE vend_id = 'DLL01' AND prod_price <= 4;



    # OR 연산자 사용하기

    # 판매처가 DLL01 이거나 BRS01 인 제품의 제품명과 가격을 가져오기

    SELECT prod_name, prod_price

    FROM Products

    WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';



    # 우선순위 이해하기

    # AND 가 OR 보다 우선순위에서 좀 더 높은 우위에 있다

    # 가격이 10달러 이상이면서 판매처가 DLL01 이거나 BRS01인 모든 제품을 검색하기 - 잘못된 예

    SELECT prod_name, prod_price

    FROM Products

    WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'

      AND prod_price >= 10;



    # 괄호 사용하기

    # 가격이 10달러 이상이면서 판매처가 DLL01 이거나 BRS01인 모든 제품을 검색하기 - 올바른 예

    SELECT prod_name, prod_price

    FROM Products

    WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01')

    AND prod_price >= 10;



    # IN 연산자 사용하기

    # IN 연산자는 조건의 범위를 지정할 때 사용한다. IN 연산자의 괄호 안에는 조건이 나열되는데, 각 조건은 콤마로 구분된다.

    # 판매처가 DLL01 이거나 BRS01인 제품을 가져온다.

    SELECT prod_name, prod_price

    FROM Products

    WHERE vend_id IN ('DLL01', 'BRS01')

    ORDER BY prod_name;



    # NOT 연산자 사용하기 

    # 판매처가 DLL01 이 아닌 제품을 출력하기

    SELECT prod_name

    FROM Products

    WHERE NOT vend_id = 'DLL01'

    ORDER BY prod_name;



    # <>연산자를 사용해도 같은 결과를 얻을 수 있다

    SELECT prod_name

    FROM Products

    WHERE vend_id <> 'DLL01'

    ORDER BY prod_name;



    [와일드카드 문자를 이용한 필터링]



    # LIKE 연산자 사용하기 (% 와일드카드)
    # Fish라는 단어로 시작하는 제품을 찾기
    SELECT prod_id, prod_name
    FROM Products
    WHERE prod_name LIKE 'Fish%';


    # 검색 패턴의 양 끝에 와일드카드를 하나씩 사용한 예
    # '%bean bag%' 검색 패턴은 bean bag을 포함한 문자열을 검색한다
    SELECT prod_id, prod_name
    FROM Products
    WHERE prod_name LIKE '%bean bag%';


    # 와일드카드는 검색 패턴의 중간에도 사용할 수 있음
    # F로 시작하고 y로 끝나는 제품을 찾기
    SELECT prod_name
    FROM Products
    WHERE prod_name LIKE 'F%y';


    # 언더라인(_) 와일드카드
    # % 와일드카드가 여러 문자열을 대신할 수 있는 것과는 달리 _와일드카드는 단 한 개의 문자를 대신한다
    SELECT prod_id, prod_name
    FROM Products
    WHERE prod_name LIKE '__ inch teddy bear';  -- 12inch teddy bear는 검색되지만 8inch teddy bear는 검색안됨


    # N개의 문자로 대체되는 %와는 달리 _는 반드시 한 개 문자와 일치해야 한다. 더 많아도 더 적어도 안된다.
    SELECT prod_id, prod_name
    FROM Products
    WHERE prod_name LIKE '% inch teddy bear';


    # [] 와일드카드 
    # 괄호 와일드카드[] 는 문자열 집합을 지정할 때 사용한다
    # 괄호 와일드카드[]는 Microsoft Access 와 Microsoft SQL Server에서는 지원하지만 모든 DBMS에서 지원하지 않는다
    SELECT cust_contact
    FROM Customers
    WHERE cust_contact LIKE '[JM]%'
    ORDER BY cust_contact;


    # 이 와일드카드는 맨 앞에 컨트롤 기호(^)를 사용하여 반대로 사용할 수 있다
    # J나 M으로 시작하지 않는 연락처를 가져오기
    SELECT cust_contact
    FROM Customers
    WHERE cust_contact LIKE '[^JM]%'
    ORDER BY cust_contact;


    # NOT 연산자 사용하기
    SELECT cust_contact
    FROM Customers
    WHERE NOT cust_contact LIKE '[JM]%'
    ORDER BY cust_contact;


    [계산 필드 생성하기]  


    # SQL SELECT 문에서는 특별한 연산자를 이용하여 컬럼을 연결할 수 있다
    # 어떤 DBMS를 사용하는지에 따라 이 연산자는 더하기 기호(+) 또는 2개의 파이프(||)가 될 수 있다 
    # MySQL과 MariaDB에서는 특수 함수를 사용해야 한다
    # 더하기 기호(+)를 사용한 예
    SELECT vend_name + ' (' + vend_country + ')'
    FROM vendors
    ORDER BY vend_name;


    # || 를 사용한 예
    SELECT vend_name || ' ('  || vend_country ||  ')'
    FROM Vendors
    ORDER BY vend_name;


    # Concat을 사용한 예
    SELECT Concat(vend_name, ' (', vend_country, ')')
    FROM Vendors
    ORDER BY vend_name;


    # 대부분의 데이터베이스(모두는 아닐지라도)는 컬럼 길이에 맞춰서 공백을 추가하여 저장한다
    # 데이터를 형식에 맞춰서 가져오려면 공백을 삭제해야 한다
    # SQL RTRIM() 함수를 사용하여 공백을 제거할 수 있다
    SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
    FROM Vendors
    ORDER BY vend_name;

    SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
    FROM Vendors
    ORDER BY vend_name;


    # 대부분의 DBMS는 RTRIM(), LTRIM(), TRIM() 함수를 지원한다
    # RTRIM() 은 문자열의 오른쪽에 있는 공백을 제거
    # LTRIM() 은 문자열의 왼쪽에 있는 공백 문자를 제거
    # TRIM() 은 양쪽에 있는 공백을 제거 


    # 별칭 사용하기
    SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'
    AS vend_title
    FROM Vendors
    ORDER BY vend_name;


    # || 사용하기
    SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'
    AS vend_title
    FROM Vendors
    ORDER BY vend_name;


    # Concat 사용하기 (MySQL, MariaDB 에 해당)
    SELECT Concat(vend_name, ' (', vend_country, ')')
    AS vend_title
    FROM Vendors
    ORDER BY vend_name;


    # 수학 계산 수행하기
    # 계산 필드는 가져온 데이터의 수학적 계산을 수행할 때도 주로 사용된다
    # 다음은 주문 번호가 20008인 모든 항목을 가져오는 SQL 문이다
    SELECT prod_id, quantity, item_price
    FROM OrderItems
    ORDER BY order_num = 20008;


    # 항목의 최종 가격 (가격 * 주문된 수량)을 구하기
    SELECT prod_id,
       quantity,
                   item_price,
                   quantity * item_price AS expanded_price
    FROM OrderItems
    ORDER BY order_num = 20008;


    # 계산 결과를 확인하는 방법
    # 수식 결과 확인하기
    SELECT 3 * 2;


    # TRIM 확인하기
    SELECT TRIM(' abc ');


    # 현재 날짜와 시간을 가져오기
    SELECT Now();


    반응형
Designed by Tistory.