이 글에서는 SQL Server 테이블에서 데이터를 검색하기 위해 SQL SELECT 문을 사용하는 기본 사항을 다룰 것입니다. 또한 SQL WHERE 및 HAVING 절을 사용하여 행을 필터링하는 방법과 함께 선택한 열을 검색하는 방법을 자세히 설명할 것입니다.
이 글의 예제는 모두 AdventureWorksLT2019 샘플 데이터베이스를 사용합니다. 이 시리즈의 이전 글에서는 INSERT, UPDATE 및 DELETE 문을 사용하여 SQL Server 테이블을 채우는 방법에 대해 설명했습니다. 이러한 구조화된 질의 언어(SQL) 문은 테이블의 내용을 수정하지만 SQL SELECT 문은 다른 목적을 가지고 있습니다.
간단한 SQL SELECT 문 사용 방법
SQL SELECT 문은 테이블에서 데이터를 쿼리하는 데 사용됩니다. 다음 코드는 SELECT 문의 가장 기본적인 구문을 보여줍니다.
SELECT columns FROM schema_name.table_name;
알다시피, 테이블 데이터는 행과 열 형식으로 구성되어 있습니다. 각 행은 테이블의 고유한 레코드를 나타내고, 각 열은 데이터 세트의 필드를 나타냅니다.
SELECT 문의 첫 번째 규약은 검색할 열 이름 목록입니다. 여기서 데이터를 검색하려는 쉼표로 구분된 열 목록을 지정합니다.
다음으로, FROM 절은 소스 테이블과 필요한 경우 스키마 이름을 지정합니다. SQL Server는 테이블 및 기타 데이터베이스 개체를 논리적으로 그룹화하는 데 스키마를 사용합니다. 데이터베이스의 기본 스키마는 dbo이며, 여기서 사용되는 스키마이므로 생략할 수 있습니다.
다음 목록은 간단한 SELECT 문의 예를 보여줍니다.
- 첫 번째 USE 명령은 현재 데이터베이스를 AdventureWorksLT2019로 설정합니다.
- SELECT 문은 SalesLT.Customer 테이블에서 검색될 결과 집합을 위한 열 목록을 제공합니다.
- 이 경우, AdventureWorksLT2019 샘플 데이터베이스는 ‘SalesLT’ 스키마 이름을 사용하므로 스키마 이름, 점(.) 및 테이블 이름 ‘Customers’를 포함해야 합니다.
- ‘FirstName’ 및 ‘LastName’ 열은 고객의 이름과 성을 검색합니다.
USE AdventureWorksLT2019 SELECT FirstName, LastName from SalesLT.Customer

간편하게 모든 열을 검색하려면 별표(*)를 사용할 수 있습니다. 열의 수에 관계없이 테이블의 모든 열을 검색합니다. 아래에 그 예제를 볼 수 있습니다:
USE AdventureWorksLT2019 SELECT * from SalesLT.Customer

SELECT * 문은 즉석 쿼리나 익숙하지 않은 테이블의 열과 데이터를 검사할 때 유용합니다. 그러나 제품 코드에는 이 문을 사용하지 않아야 합니다 – 일반적으로 응용 프로그램이 필요로 하는 것보다 더 많은 데이터를 검색하며 SQL Server 작업량을 늘리고 싶지 않습니다.
SQL WHERE 절을 사용하여 행을 필터링하는 방법
SELECT 문의 실제 강점은 필터링 및 조인 기능에 있습니다. SELECT 쿼리는 반환될 데이터를 필터링하는 데 선택적인 WHERE 절을 사용할 수 있습니다.
WHERE 절은 하나 이상의 부울 조건을 사용하여 원하는 테이블 데이터를 선택합니다. WHERE 절은 항상 FROM 절 뒤에 있고 GROUP BY, HAVING, ORDER BY 절 앞에 위치합니다.
SQL WHERE 절을 사용한 예제를 아래에서 볼 수 있습니다. 여기서 WHERE 절은 ‘CompanyName’ 열에 ‘Sharp Bikes’ 값을 포함하는 행을 필터링하는 데 사용됩니다.
USE AdventureWorksLT2019 SELECT FirstName, LastName, Phone, CompanyName FROM SalesLT.Customer WHERE CompanyName = 'Sharp Bikes';

문자열의 일부로 값을 포함하는 행 필터링
SELECT 문과 WHERE 절을 함께 사용하는 것의 장점은 그 유연성에 있습니다. WHERE 절은 단순한 동등성, “크다” 및 “작다” 비교 연산자를 넘어서는데, WHERE 절로 할 수 있는 일에 대해 자세히 살펴보겠습니다. 먼저 SQL LIKE 연산자를 사용하는 방법부터 살펴보겠습니다.
LIKE 연산자는 특정 문자열이 지정된 패턴과 일치하는지를 결정하는 데 사용됩니다. 아래 예에서는 ‘CompanyName’ 열에 ‘Bike’라는 단어가 어디에 있든지 포함된 Customer 테이블의 모든 행을 검색합니다. 여기서는 ‘Bike’ 단어 앞뒤에 %와일드카드 문자를 사용해야 합니다.
USE AdventureWorksLT2019 SELECT SalesPerson, CompanyName FROM SalesLT.Customer WHERE CompanyName LIKE('%Bike%');

세 가지 조건 중 하나를 충족하는 행 필터링
여러 다른 값을 기준으로 행을 필터링하려면 WHERE 절을 사용할 수도 있습니다. 다음 코드 목록은 WHERE 절을 사용하여 Product 테이블에서 세 가지 다른 값을 선택하는 방법을 보여줍니다. 이 예에서는 WHERE 절이 OR 연산자와 함께 사용되어 ‘ProductID’가 680, 711 또는 722인 행을 선택합니다.
USE AdventureWorksLT2019 SELECT Name, ProductID, ProductNumber FROM SalesLT.Product WHERE ProductID = 680 OR ProductID = 711 OR ProductID = 722;

값 목록에 있는 행 필터링
마찬가지로, WHERE 절을 사용하여 IN 연산자를 사용하여 정의된 목록에 포함된 행을 선택할 수 있습니다. 다음 예에서 SELECT 문은 SalesLT.Address 테이블의 ‘City’ 열에 ‘Bothell’, ‘Bellevue’ 또는 ‘Renton’ 값을 포함하는 행을 반환합니다.
USE AdventureWorksLT2019 SELECT AddressID, AddressLine1, City FROM SalesLT.Address WHERE City IN ('Bothell', 'Bellevue', 'Renton');

두 값 사이에있는 값을 가진 행 필터링
또한 SELECT 문의 WHERE 절을 BETWEEN 연산자와 함께 사용하여 특정 열의 특정 사전 정의 범위 내의 행 값을 선택할 수 있습니다. 다음 예에서는 BETWEEN을 사용하여 ‘ListPrice column’에서 값이 10보다 크고 50보다 작은 Product 테이블의 행만 반환하는 방법을 보여줍니다.
USE AdventureWorksLT2019 SELECT ProductID, Name FROM SalesLT.Product WHERE ListPrice Between 10 AND 50;

HAVING 절로 행 필터링
결과 집합에서 HAVING 절을 사용하여 행을 필터링할 수도 있습니다. WHERE 키워드는 GROUP BY와 같은 집계 함수와 함께 사용할 수 없기 때문에 SQL Server에 HAVING 절이 추가되었습니다. 이는 하나 이상의 조건이 참인 여러 레코드 그룹을 위한 검색 조건을 지정하는 데 사용됩니다.
HAVING 절은 항상 GROUP BY 절 다음에 오며 ORDER BY 절 앞에 옵니다. 다음 SQL 문에서 확인할 수 있듯이 결과 집합은 ‘SalesOrderID’와 열 별칭 ‘SubTotal’로 구성됩니다. 순서는 오름차순이며 행은 ‘SalesOrderID’로 그룹화된 집계입니다.
USE AdventureWorksLT2019 ; SELECT SalesOrderID, SUM(LineTotal) AS SubTotal FROM SalesLT.SalesOrderDetail GROUP BY SalesOrderID HAVING SUM(LineTotal) > 5000.00 ORDER BY SalesOrderID ;

요약
이 튜토리얼에서는 T-SQL SELECT 문을 사용하여 다양한 방법으로 행을 필터링하는 기본 내용을 설명했습니다. WHERE 절은 다양한 조건에 따라 행을 선택할 수 있도록 매우 유연한 연산자 세트를 제공합니다. 마찬가지로, HAVING 절은 특정 조건을 충족하는 행 그룹을 선택할 수 있도록 합니다. 읽어 주셔서 감사합니다. 다음 SQL Server Essential 시리즈의 다음 기사를 기대해 주세요.
관련 기사: