소개
SQL 언어
SQL은 구조적 쿼리 언어(Structured Query Language)의 약어입니다. SQL은 관계형 데이터베이스와 통신하는 데 사용됩니다. SQL 문은 데이터베이스에서 데이터를 업데이트하거나 데이터베이스에서 데이터를 검색하는 등의 작업을 수행하는 데 사용됩니다. 예를 들어 SQL SELECT 문은 데이터베이스를 쿼리하고 데이터 행 집합을 반환하는 데 사용됩니다. SQL을 사용하는 일반적인 관계형 데이터베이스 관리 시스템으로는 Microsoft SQL Server, MySQL, PostgreSQL, MariaDB, Oracle 등이 있습니다.
ANSI(American National Standards Institute)에서 정의된 SQL 언어 표준이 있습니다. 각 공급업체는 고유한 변형과 확장을 추가합니다.
이 모듈에서 학습할 내용은 다음과 같습니다.
- SQL이란 무엇이며 어떻게 사용하는지 이해
- 스키마에서 데이터베이스 개체 식별
- SQL 문 유형 식별
- SELECT 문을 사용하여 데이터베이스의 테이블을 쿼리
- 데이터 형식 사용
- NULL 처리
Transact-SQL
SELECT, INSERT, UPDATE, DELETE와 같은 기본 SQL 문은 사용 중인 관계형 데이터베이스 시스템과 관계없이 사용할 수 있습니다. SQL 문은 ANSI SQL 표준의 일부이지만 많은 데이터베이스 관리 시스템은 고유의 확장 또한 가지고 있습니다. 이러한 확장은 SQL 표준에서 다루지 않는 기능을 제공하며 보안 관리 및 프로그래밍 기능과 같은 영역을 포함합니다. SQL Server, Azure SQL Database, Microsoft Fabric 등과 같은 Microsoft 데이터베이스 시스템은 Transact-SQL 또는 T-SQL이라는 SQL 언어를 사용합니다. T-SQL은 데이터베이스에 저장된 애플리케이션 코드인 저장 프로시저 및 함수를 작성하고 사용자 계정을 관리하는 언어 확장을 포함합니다.
SQL은 ‘선언적’ 언어입니다.
프로그래밍 언어는 ‘절차적’ 또는 ‘선언적’ 언어로 분류될 수 있습니다. 절차적 언어를 사용하면 컴퓨터에서 작업을 수행할 때 따르는 일련의 명령을 정의할 수 있습니다. 선언적 언어를 사용하면 원하는 출력을 설명하고 실행 엔진에 출력을 생성하는 데 필요한 단계의 세부 정보를 남길 수 있습니다.
SQL은 몇 가지 절차적 구문을 지원하지만 SQL로 데이터를 쿼리하는 것은 일반적으로 선언적 의미 체계를 따릅니다. SQL을 사용하여 원하는 결과를 설명할 수 있으며 데이터베이스 엔진의 쿼리 프로세서는 ‘쿼리 계획’을 개발하여 쿼리를 검색합니다. 쿼리 프로세서는 데이터베이스의 데이터에 대한 통계 및 테이블에 정의된 인덱스를 사용하여 좋은 쿼리 계획을 찾아냅니다.
관계형 데이터
SQL은 (항상 그런 것은 아니지만) ‘관계형’ 데이터베이스의 데이터를 쿼리하는 데 주로 사용됩니다. 데이터가 여러 테이블(기술적으로는 관계라고 함)에 구성된 관계형 데이터베이스는 각각 특정 유형의 엔터티(예: 고객, 제품 또는 판매 주문)를 나타냅니다. 엔터티의 특성(예: 고객의 이름, 제품의 가격 또는 판매 주문의 주문 날짜)은 테이블의 열 또는 특성으로 정의되며 테이블의 각 행은 엔터티 형식의 인스턴스를 나타냅니다(예: 특정 고객, 제품 또는 판매 주문).
데이터베이스의 테이블은 표시된 특정 엔터티를 고유하게 식별하는 ‘키’ 열을 사용하여 서로 관련됩니다. ‘기본 키’는 각 테이블에 대해 정의되며 이 키에 대한 참조는 모든 관련 테이블에서 ‘외래 키’로 정의됩니다. 예제를 살펴보면 더 쉽게 이해할 수 있습니다.
다이어그램은 4개의 테이블이 포함된 관계형 데이터베이스를 보여 줍니다.
- 고객
- SalesOrderHeader
- SalesOrderDetail
- 제품
각 고객은 고유한 CustomerID 필드로 식별됩니다. 이 필드는 Customer 테이블의 기본 키입니다. SalesOrderHeader 테이블에는 각 주문을 식별하는 OrderID라는 기본 키가 있으며 Customer 테이블의 기본 키를 참조하는 CustomerID 외래 키도 포함되어 각 주문과 관련된 고객을 식별합니다. 주문의 개별 항목에 대한 데이터는 SalesOrderDetail 테이블에 저장되며 SalesOrderHeader 테이블의 OrderID와 LineItemNo 값을 결합하는 ‘복합’ 기본 키가 있습니다. 값의 조합은 품목을 고유하게 식별합니다. OrderID 필드는 품목이 속한 주문을 나타내는 외래 키로도 사용되며 ProductID 필드는 Product 테이블의 ProductID 기본 키에 대한 외래 키로 사용되어 주문된 제품을 나타냅니다.
집합 기반 처리
집합 이론은 데이터 관리 관계형 모델의 수학적 기반 중 하나이며 관계형 데이터베이스 사용의 기본입니다. 집합에 대한 철저한 이해 없이도 T-SQL에서 쿼리를 작성할 수 있지만 최적의 성능에 필요할 수 있는 좀 더 복잡한 유형의 문을 작성하는 데 어려움이 있을 수 있습니다.
집합 이론의 수학을 분석하지 않고 집합을 “전체로 간주되는 명확한 고유 개체의 컬렉션”으로 생각할 수 있습니다. SQL Server 데이터베이스에 적용되는 경우 집합을 동일한 형식의 멤버가 0개 이상 포함된 고유 개체의 컬렉션으로 간주할 수 있습니다. 예를 들어 Customer 테이블은 집합, 특히 모든 고객의 집합을 나타냅니다. SELECT 문의 결과 또한 집합을 형성하는 것을 볼 수 있습니다.
T-SQL 쿼리 문을 자세히 알아볼 때 항상 개별 멤버가 아닌 전체 집합을 생각해야 합니다. 이 사고방식은 한 번에 한 행을 생각하는 대신 집합 기반 코드를 작성하도록 도와줍니다. 집합을 사용하려면 한 번에 하나씩이 아닌 “한꺼번에” 발생하는 작업 측면에서 생각해야 합니다.
기억해야 할 집합 이론의 중요한 특징 중 하나는 집합의 멤버 순서와 관련된 사양이 없다는 것입니다. 이 순서 없음이 관계형 데이터베이스 테이블에도 해당합니다. ‘첫 번째’ 행, ‘두 번째’ 행 또는 ‘마지막’ 행이라는 개념이 없습니다. 어떤 순서로든지 요소에 액세스하고 검색할 수 있습니다. 특정 순서로 결과를 반환하려면 SELECT 쿼리에 ORDER BY 절을 사용하여 명시적으로 순서를 지정해야 합니다.