본문 바로가기
Database/데이터베이스

자주 사용하는 SQL Query 1

by happy coding! 2018. 11. 9.
반응형


[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();


반응형

'Database > 데이터베이스' 카테고리의 다른 글

[데이터베이스] RDBMS vs NoSQL  (0) 2022.10.09
자주 사용하는 SQL Query 2  (0) 2018.12.01
SQL  (0) 2018.10.24
[Oracle] select, insert, delete, update(DML) 기본 쿼리  (0) 2018.01.29

댓글