-
자주 사용하는 SQL Query 1Database/데이터베이스 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_nameFROM ProductsWHERE prod_name LIKE 'Fish%';# 검색 패턴의 양 끝에 와일드카드를 하나씩 사용한 예# '%bean bag%' 검색 패턴은 bean bag을 포함한 문자열을 검색한다SELECT prod_id, prod_nameFROM ProductsWHERE prod_name LIKE '%bean bag%';# 와일드카드는 검색 패턴의 중간에도 사용할 수 있음# F로 시작하고 y로 끝나는 제품을 찾기SELECT prod_nameFROM ProductsWHERE prod_name LIKE 'F%y';# 언더라인(_) 와일드카드# % 와일드카드가 여러 문자열을 대신할 수 있는 것과는 달리 _와일드카드는 단 한 개의 문자를 대신한다SELECT prod_id, prod_nameFROM ProductsWHERE prod_name LIKE '__ inch teddy bear'; -- 12inch teddy bear는 검색되지만 8inch teddy bear는 검색안됨# N개의 문자로 대체되는 %와는 달리 _는 반드시 한 개 문자와 일치해야 한다. 더 많아도 더 적어도 안된다.SELECT prod_id, prod_nameFROM ProductsWHERE prod_name LIKE '% inch teddy bear';# [] 와일드카드# 괄호 와일드카드[] 는 문자열 집합을 지정할 때 사용한다# 괄호 와일드카드[]는 Microsoft Access 와 Microsoft SQL Server에서는 지원하지만 모든 DBMS에서 지원하지 않는다SELECT cust_contactFROM CustomersWHERE cust_contact LIKE '[JM]%'ORDER BY cust_contact;# 이 와일드카드는 맨 앞에 컨트롤 기호(^)를 사용하여 반대로 사용할 수 있다# J나 M으로 시작하지 않는 연락처를 가져오기SELECT cust_contactFROM CustomersWHERE cust_contact LIKE '[^JM]%'ORDER BY cust_contact;# NOT 연산자 사용하기SELECT cust_contactFROM CustomersWHERE NOT cust_contact LIKE '[JM]%'ORDER BY cust_contact;[계산 필드 생성하기]# SQL SELECT 문에서는 특별한 연산자를 이용하여 컬럼을 연결할 수 있다# 어떤 DBMS를 사용하는지에 따라 이 연산자는 더하기 기호(+) 또는 2개의 파이프(||)가 될 수 있다# MySQL과 MariaDB에서는 특수 함수를 사용해야 한다# 더하기 기호(+)를 사용한 예SELECT vend_name + ' (' + vend_country + ')'FROM vendorsORDER BY vend_name;# || 를 사용한 예SELECT vend_name || ' (' || vend_country || ')'FROM VendorsORDER BY vend_name;# Concat을 사용한 예SELECT Concat(vend_name, ' (', vend_country, ')')FROM VendorsORDER BY vend_name;# 대부분의 데이터베이스(모두는 아닐지라도)는 컬럼 길이에 맞춰서 공백을 추가하여 저장한다# 데이터를 형식에 맞춰서 가져오려면 공백을 삭제해야 한다# SQL RTRIM() 함수를 사용하여 공백을 제거할 수 있다SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'FROM VendorsORDER BY vend_name;SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'FROM VendorsORDER BY vend_name;# 대부분의 DBMS는 RTRIM(), LTRIM(), TRIM() 함수를 지원한다# RTRIM() 은 문자열의 오른쪽에 있는 공백을 제거# LTRIM() 은 문자열의 왼쪽에 있는 공백 문자를 제거# TRIM() 은 양쪽에 있는 공백을 제거# 별칭 사용하기SELECT RTRIM(vend_name) + ' (' + RTRIM(vend_country) + ')'AS vend_titleFROM VendorsORDER BY vend_name;# || 사용하기SELECT RTRIM(vend_name) || ' (' || RTRIM(vend_country) || ')'AS vend_titleFROM VendorsORDER BY vend_name;# Concat 사용하기 (MySQL, MariaDB 에 해당)SELECT Concat(vend_name, ' (', vend_country, ')')AS vend_titleFROM VendorsORDER BY vend_name;# 수학 계산 수행하기# 계산 필드는 가져온 데이터의 수학적 계산을 수행할 때도 주로 사용된다# 다음은 주문 번호가 20008인 모든 항목을 가져오는 SQL 문이다SELECT prod_id, quantity, item_priceFROM OrderItemsORDER BY order_num = 20008;# 항목의 최종 가격 (가격 * 주문된 수량)을 구하기SELECT prod_id,quantity,item_price,quantity * item_price AS expanded_priceFROM OrderItemsORDER BY order_num = 20008;# 계산 결과를 확인하는 방법# 수식 결과 확인하기SELECT 3 * 2;# TRIM 확인하기SELECT TRIM(' abc ');# 현재 날짜와 시간을 가져오기SELECT Now();반응형'Database > 데이터베이스' 카테고리의 다른 글
[MySQL] 스토어드 프로시저(Stored Procedure) (0) 2024.08.28 [데이터베이스] 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