안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, 2-1. T-SQL SQL Server 언어에 대한 간단한 소개를 진행 하겠습니다.
SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록
이번에 소개해드릴 내용은 이제부터 저와 함께 학습할 SQL입니다. 여러 내용을 포함하고 있는데요, 일부 내용이 어렵다면 다음 강좌로 넘어가셔도 전혀 문제없습니다.
TL;DR
SQL은 데이터베이스와 커뮤니케이션을 하기 위한 언어로 구조화된 질의(Query)를 수행할 수 있습니다. SQL로 데이터 관리 및 조작을 수행할 수 있고, 여러 프로그래밍 기능도 포함하고 있습니다.
SQL - 데이터를 조작하기 위한 언어
이전 강좌를 통해 DBMS를 왜 만들고 사용하는지 간략히 소개해 드렸습니다.
잠시 SQL이 없는 세상을 상상해 볼까요? 처음 데이터베이스를 배우는 김대우는 "SQL Server! 김대우는 잘생겼다를 저장해!"
그럼 SQL서버는 저장 안 할 겁니다. 거짓말이기 때문이지요. 중요한 건 SQL서버는 이런 구문 규칙을 알아듣지 못합니다. 그래서 사람과 데이터베이스가 커뮤니케이션하기 위한 언어의 필요성이 생긴 것이지요.
SQL은 이렇게 탄생하게 됩니다.
여담으로, SQL은 Structured Query Language(구조화된 질의 언어)입니다. 많은 분들이 SQL을 SELECT Query Language로 알고 있기도 합니다.
ANSI 표준 SQL
ANSI SQL은 ANSI와 ISO가 표준으로 지정한, “관계형(Relational) DBMS에 접근에 데이터를 처리하기 위한 언어”입니다. ANSI SQL은 지속적으로 표준을 업데이트 & 발표하고 있습니다.
참고링크: SQL - Wikipedia
☑️ 챗GPT 활용: 관계형(Relational) 데이터베이스에 대해서 알려줘
중요한 건, 이제부터 공부할 SQL Server의 SQL입니다. 마이크로소프트에서 만든 SQL Server는 “T-SQL(Transact-SQL)”이라는 확장된 SQL을 사용합니다. 이제 T-SQL이 무엇인지 조금 알 듯합니다. 바로, 마이크로소프트에서 ANSI 표준 SQL에 기능을 더 추가해 만든 녀석이 바로 T-SQL입니다.
SSMS와 같은 GUI 도구 vs SQL 구문
많은 분들이 SSMS(SQL Server Management Studio)의 GUI 기능만 사용하며, 어렵고 프로그래밍 언어 같은 SQL 구문을 배우지 않는 경우가 있습니다. 네 맞습니다. GUI 도구만 사용하는 것 역시 DBMS를 사용하는 한 방법입니다.
하지만, SQL 학습이나 개발 직군을 목표로 하신다면 GUI만 사용하는 방법은 권장하지 않습니다. 웹사이트를 만들거나, 애플리케이션을 개발할 때 데이터베이스에 접근하기 위해서는 이 SQL을 이용해야 합니다.(ORM 프레임워크를 사용하기도 합니다)
☑️ 챗GPT 활용: ORM 프레임워크에 대해서 알려줘
SSMS GUI 기능으로는 할 수 없는 작업입니다. 혹시 이 글을 보시는 분들 중에서 아직 SSMS GUI만 사용하는 개발자분이 계시다면 꼭 시간을 내셔서 SQL을 배우길 권장합니다.
프로그래밍 언어에 생소하신 분들은 SQL을 배우는 과정이 어렵고 힘든 과정이 될 수도 있습니다. 반대로 아주 약간의 프로그래밍 경험이 있다면 쉽게 배울 수 있을 겁니다.
혹시, 프로그래밍이 처음이고, 공부할 강좌를 찾으신다면 SQLER의 Python 강좌를 강력 추천해 드립니다. 무료 강좌로, 유튜브 영상 강좌가 함께 제공됩니다. 이 강좌와 SQL 강좌를 같이 공부하면 큰 도움 되실 거에요.
- Python 무료 초급강좌/중급강좌/머신러닝(2023년 6월 업데이트)
SQL 구문 카테고리
SQL 구문을 DDL, DML과 같은 카테고리로 나눠 구별하는 경우가 있습니다. 이런 게 있구나 정도로만 알고 넘어가셔도 좋습니다.
카테고리
|
SQL 명령 |
데이터 제어어(Control Language) | GRANT, DENY |
데이터 조작어(Manipulation Language) | SELECT, INSERT, DELETE, UPDATE |
데이터 정의어(Definition Language) | CREATE, ALTER, DROP |
SQL을 잘 모르시는 분도 아마 저 데이터 조작어 중, SELECT 구문은 익숙하실 거에요.
T-SQL의 확장기능
잠시 T-SQL을 소개해 드리면서 기존의 ANSI SQL보다 확장된 기능을 제공한다라고 말씀드렸어요. 어떤 것들이 가능한지 간략히 살펴보겠습니다. 큰 그림에서는 데이터를 조작하기 위한 SQL 구문 + 프로그래밍 기능 대부분이라고 생각하시면 됩니다.
DB를 구축하는 가장 큰 이유인 한번 데이터를 쌓아둔 후 데이터를 쉽고 편하게 검색하고자 할 때 더 발전된 SQL 구문을 이용하여 다양한 검색이 가능하게 하는 것이지요.
T-SQL 프로그래밍 기능
변수 선언기능
@@ 전역변수(시스템 함수)와 @ 지역변수 제공. 지역변수는 세션이 연결된 동안 사용하기 위해 만들어지는 임시 변수이며 전역변수는 SQL Server에 내장된 값
자료형(data type) 제공
int, float, varchar 등의 자료형을 사용 가능
연산자(Operator) 기능
산술연산자( +, -, *, /)와 비교연산자(=, <, >, <>), 논리연산자(and, or, not) 사용 가능
흐름제어 기능
IF-ELSE와 WHILE, CASE-THEN 구문 사용 가능
주석기능
- 한 줄 주석 -- 뒤의 내용은 주석
- 범위주석 /* 주석으로 여러 줄도 주석 처리 가능 */
다양한 시스템 함수 제공
- 문자열 조작 함수
- 데이터 형 변환 함수
- 날짜 데이터 조작 함수
많은 분들이 잘못 생각하시는 것 중 하나로, SQL Server 역시 프로그래밍 언어 내장 함수처럼 많은 데이터 처리를 위한 함수를 제공합니다.
기타 특수 집계 등 쿼리 구문 제공
- CUBE, ROLLUP
- 데이터 분석 서비스의 집계함수(Aggregate Function) 지원
비용 기반 쿼리 최적화(Cost based Query Optimization) 기능
SQL Server의 쿼리 최적화 기능으로 실행되는 쿼리를 자동 최적화합니다. 즉, 쿼리 작성 후 개발자의 개입이 없어도 지속적으로 쿼리를 최적화합니다.
데이터를 접근하는 최선의 방안을 결정
SQL Server 쿼리 최적화기는 여러 통계 데이터와 인덱스 등을 계산해 실행 계획을 지속적으로 최적화합니다.
쿼리 최적화에 진심인 이유는 - 아예 QTA(Query Tuning Assistant)와 자동튜닝(Automatic tuning)을 제공해 다양한 쿼리 최적화 방안을 선택할 수도 있습니다. 엄밀하게 말하면, T-SQL의 기능이라기보다는 SQL Server의 기능에 더 가깝겠네요.
쿼리 최적화 힌트의 제공
쿼리 최적화기의 동작을 조절 가능
데이터의 양과 분포에 대한 통계 데이터의 유지
쿼리 작업에 가장 적절한 것으로 판단되는 같은 계획을 평가하는 데 사용
☑️ 챗GPT 활용: 데이터베이스 인덱스와 테이블 통계간 관계에 대해서 알려줘
저장 프로시저 지원
데이터베이스 개발자의 업무인 SQL 쿼리 작성과 애플리케이션 개발자의 개발 업무를 분리할 수 없을까요? 스파게티 코드처럼 개발자의 코드 중간에 길게 SQL 구문과 함께 파라미터를 넘기는 작업은 에러 발생 가능성과 여러 보안문제(SQL Injection 등)를 유발할 수 있습니다.
☑️ 챗GPT 활용: SQL Injection 보안 취약점에 대해서 알려줘
일반적인 저장 프로시저를 사용하는 이유
개발자가 함수를 호출하듯 SQL 쿼리를 모듈화해 호출할 수 없을까요? SQL Server에서 SQL구문을 실행할 경우, 파싱(Parsing - SQL구문에 오류가 있는지 검사하는 작업) 및 실행 계획을 생성할 때 역시 적지만 부하가 발생합니다. 이런 부하를 줄일 수 없을까요?
저장 프로시저
저장 프로시저는 SQL서버 데이터베이스에 저장된 SQL 문장들의 집합입니다. 저장 프로시저는 복잡한 SQL 쿼리를 코드화하고 애플리케이션에서 직접 호출할 수 있어서, 데이터베이스 처리 루틴을 캡슐화할 수 있습니다.
동적인 ad-hoc SQL 쿼리보다 빠르게 처리
수행될 때마다 여러 번 파싱 되고 최적화되는 과정이 없어서 즉시 실행 가능한 상태로 데이터베이스 서버에 존재합니다.
저장 프로시저 매개 변수 처리 가능
프로그래밍 함수처럼 매개변수를 전달해 루틴 처리가 가능합니다.
애플리케이션 코드 변경 최소화
애플리케이션을 개발할 때 하나의 저장 프로시저에 데이터 처리 로직을 넣어 애플리케이션에서 코드 변경 범위를 최소화할 수 있습니다.
보안 기능 제공
데이터에 대한 권한을 제공해 저장 프로시저를 통해 접근할 수 있도록 컨트롤할 수 있어 데이터에 대한 보안성을 높일 수 있습니다.
저장 프로시저는 이어지는 SQLER 강좌에서 아주 자세하게 다룹니다. 지금은 T-SQL의 훌륭한 확장 기능이며, 여러 장점이 있다는 것 정도만 기억해 주세요.
CLR(Common Language Runtime) 기능으로 쿼리 기능 확장
개발자라면, 마이크로소프트 .NET Framework CLR을 이용해 코드를 생성한 다음, SQL Server에서 실행할 수 있어 다양한 확장 기능을 추가할 수 있습니다. CLR 기능 전까지는 확장 저장 프로시저(Extended Stored Procedure)가 이런 역할을 하였으나, SQL Server 프로세스 안정성 등을 고려해 CLR을 사용하시는 게 좋습니다. T-SQL의 프로그래밍 기능을 한 차원 높여 더 많은 기능을 SQL에 추가할 수 있습니다.
☑️ 챗GPT 활용: 마이크로소프트 .NET Framework CLR(Common Language Runtime)에 대해서 알려줘
JSON 및 XML 지원
T-SQL의 JSON 함수를 사용해 NoSQL 데이터와 관계형 데이터 동시에 사용 가능합니다. 하나의 테이블에서 JSON 텍스트 형식이 지정된 문서를 포함하는 컬럼과 결합해 관계형 구조로 JSON 문서를 분석하고 가져오거나, 관계형 데이터를 JSON 텍스트 형식으로 지정할 수도 있습니다.
XML 데이터도 지원해 XML 문서를 테이블로 로드하거나 XML 데이터형 컬럼에 인덱스를 추가하는 것도 가능합니다. XML 데이터 처리 기능 역시 T-SQL에 완전히 통합되어 있습니다.
서론이 길어졌군요. 이제 많은 분들이 관심 있어하는 관심사를 말 드리고 싶군요.
T-SQL 배우면, 다른 데이터베이스 배울 때 새로 배워야 하나요?
"마이크로소프트의 T-SQL은 다른 DBMS인 오라클, MySQL이나 PostgreSQL과 호환성이 없지 않나요? 그런 거 배워도 나중에 취업할 회사에서 오라클을 쓰면 새로 배워야 하는 거 아닌가요?"
답변 먼저 드리면, 아닙니다.
이전 강좌에서도 여러 번 말씀드린 대로 마이크로소프트 SQL Server의 T-SQL은 ANSI SQL 표준을 따르며 확장된 기능을 제공합니다. 오라클의 SQL 역시 마찬가지로 ANSI 표준을 확장해 만들어진 SQL입니다.
SQL 구문은 어느 DBMS나 비슷합니다. SQL Server의 T-SQL을 배우고 오라클의 SQL을 배우려면? 그 차이점만 쉽게 공부하면 됩니다. 다른 DBMS도 마찬가지입니다. MySQL이나 PostgreSQL 역시 차이점만 공부하면 되니까요.
하나만 잘 알아두면 어떤 데이터베이스도 두렵지 않고, SQL을 두고두고 써먹는다는 것만 기억해 주세요.
그럼 다음 강좌는 실제 데이터를 조회하는 SELECT 쿼리를 소개해 드리겠습니다.
SQL 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.
책구매 링크: 챗GPT와 함께하는 마이크로소프트 SQL Server 2022