안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, 2-2. 데이터 검색 - SELECT 구문을 진행 하겠습니다.
SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록
이제 SQL에서 가장 중요한 데이터 검색을 진행할 순서입니다.
SQL 개발 업무를 하신다면 80% 이상의 시간을 이 데이터 검색에 쓰게 될 겁니다. 그만큼 중요하고 많이 쓰이기 때문입니다. 그럼 시작하시죠!
TL;DR
SQL에서 가장 중요하고, 많이 사용되는 데이터 조회 구문, SELECT 구문을 직접 수행하는 과정을 처음 데이터베이스에 접속하여 단계별로 진행합니다.
SSMS 실행 및 쿼리 수행
SQL 쿼리 실행은 지난 SQL Server 설치 과정 마지막에서 잠시 진행하셨어요. 이번에는 조금 더 상세하게 설명드리겠습니다.
윈도에서 SSMS(SQL Server Management Studio)를 실행합니다.
자동으로 서버명과 인증방식이 선택됩니다. 서버명은 이후에 원격 서버 접속 시 IP 주소 등으로 변경할 수 있고, 인증 방식도 SQL 인증으로 로그인 가능합니다.
인증 방식에서 Windows 인증은 사용 중인 Windows의 계정을 SQL Server의 로그인 계정으로 사용한다는 의미입니다. SQL Server 인증은 SQL Server 자체 인증을 사용하게 됩니다. 계정 관리와 권한 등은 이후 강좌에서 상세히 다루게 됩니다.
SQL서버가 제공하는 인증은 “Windows인증”과 “SQL Server 인증” 두 가지입니다.
Windows 인증은, 적합한 Windows 사용자일 경우 SQL서버의 역할에 맞춰 권한이 부여되는 통합 인증 기능입니다. Windows 인증의 강력한 보안을 그대로 SQL서버에서도 사용 가능하고 편리합니다. 하지만, 애플리케이션에서 사용할 경우 Windows 인증은 약간 제한이 있습니다.
SQL Server 인증은 자체적으로 지원하는 인증 방식입니다. 예를 들어, “sa” 관리자 계정이 있으며, SQL Server에서 인증 및 역할을 관리할 수 있습니다. 애플리케이션에서 SQL Server에 접근할 경우 SQL 인증을 일반적으로 이용합니다.
저와 함께 SQL Server를 설치하실 때 분명 양쪽 인증을 모두 사용하는 “혼합 모드”로 설치를 하셨을 테니 SQL Server 인증도 사용 가능 합니다. sa 계정이 처음에 생성된 SQL Server 인증 계정이고 설치 시 지정한 sa 계정의 암호를 넣으면 SSMS로 SQL Server에 로그인할 수 있습니다.
바로 “연결” 버튼을 눌러 접속합니다.
앞으로 저와 함께 SQL Server를 공부하는 시간의 80% 이상은 바로 이 SSMS에서 사용하게 될 겁니다.
하나의 SQL Server 인스턴스에 여러 개의 데이터베이스가 존재
SQL Server는 여러 개의 데이터베이스로 이루어져 있으며, 하나의 데이터베이스는 여러 개의 테이블과 데이터베이스 개체(Database object)들로 이루어져 있습니다. 이 테이블에 데이터가 들어가는 것이지요. 테이블의 구조를 조금 자세히 살펴보도록 하겠습니다.
테이블 구조
이런 식으로 테이블에 데이터가 들어가 있습니다. 이 테이블의 요소들을 설명드리면,
이렇게 부릅니다.
로우(Row)나 레코드(Record)중에서 관계형 데이터베이스는 대부분 로우라고 부르며 컬럼(Column) 또는 필드(Field)중에서 컬럼을 주로 사용합니다. 한글로 로우를 “행”, 컬럼을 “열”이라고 부르기도 합니다. 앞으로 진행할 강좌에서는 컬럼, 로우라고 부릅니다.
SELECT 구문
주어진 테이블로부터 로우와 컬럼을 선택한다. 이것이 SELECT의 목적입니다.
SELECT 문의 기본구성
- SELECT : 검색할 컬럼들을 지정
- FROM : 검색할 테이블을 지정
- WHERE : 검색할 테이블 내의 행을 결정 WHERE절이 없는 경우에는 해당 테이블의 모든 행들을 검색
- GROUP BY : 결과 데이터를 그룹화하고, HAVING 절로 그룹 된 데이터를 필터링
- ORDER BY : 데이터를 정렬
식입니다. 어려우시죠? 저와 많은 예제를 수행하실 거에요. 차근차근 진행하면 됩니다.
SSMS 왼쪽 “개체 탐색기”에 서버가 보입니다. “새 쿼리”를 누르고 흰 부분에 아래와 같이 쿼리를 복사해 넣으신 후 쿼리를 실행합니다. 실행은 키보드의 F5키, 아이콘 중 “실행” 버튼 클릭, 메뉴의 “쿼리”-”실행”을 수행해도 됩니다. 원하시는 방법을 선택해 사용하세요. 저는 F5 키를 선호합니다.
select @@version; go
쿼리가 실행되고 아래 결과창에 결과가 보이면 SELECT 구문 성공입니다.
첫 번째 SQL 쿼리는 “SELECT(가져와라), SQL Server의 버전 정보를”입니다. “@@version”은 시스템 함수이고 시스템에 저장된 데이터를 조회할 때 사용 합니다.
SQL Server는 SELECT와 같은 예약어에 대해 영문 대문자나 소문자 구별을 하지 않습니다. 개인적으로는 저렇게 소문자로 적었지만 예약어의 경우 대문자로 표기하면 이후 긴 SQL 구문을 작성할 때 한눈에 보기 편하니 예약어는 대문자를 사용하시길 권장합니다.
아울러 글자 색깔이 파랗게 빨갛게 타이핑할 때마다 변합니다. SSMS의 인텔리 센스 기능으로 예약어에 대해 자동 반응 및 구문 오류를 감지합니다.
다음으로 숫자와 문자열을 출력해 보겠습니다.
SELECT 12345; SELECT 'Konan이는 잘생겼다.'; SELECT N'Konan이는 잘생겼다.';
위의 내용을 SSMS에 복사해 붙여 넣고 F5를 눌러 실행해 보세요.
이렇게 문자열이나 숫자만 SELECT도 가능합니다. 여기서 특이한 부분이 있지요? 바로 문자열 앞에 “N”을 붙였습니다. N이 없는 쿼리 결과는 깨져서 나오네요. 왜 그럴까요?
이 N의 의미는 “유니코드”를 의미합니다.
유니코드
간략히, 유니코드(Unicode)는 전 세계 언어를 지원하기 위해 설계된 문자코드입니다. SQL Server를 포함한 거의 모든 데이터베이스는 일반적으로 하나의 언어를 지원하는 설정으로 데이터베이스가 생성됩니다. 이럴 경우, 다른 언어 데이터를 이 데이터베이스에 저장하려면 데이터 관리가 어려워지죠.
☑️ 챗GPT 활용: 유니코드(Unicode)에 대해서 설명해 줘
SQL Server와 같은 데이터베이스는 다양한 애플리케이션 및 클라이언트에서 다국어 데이터가 입력될 수 있으므로, 항상 명시적으로 데이터 형식을 선언하는 것이 좋습니다. 유니코드 데이터는 다양한 문자를 저장하고 처리 가능해 데이터의 정확성을 유지할 수 있습니다.
유니코드 데이터 형식을 사용하면 데이터베이스에서 다국어 데이터를 저장하고 검색할 수 있으며, 다양한 언어로 작성된 애플리케이션과 상호 운용성을 확보할 수 있습니다.
정리하자면, SQL Server를 사용할 때는 데이터베이스 설정에서 유니코드 지원을 활성화하고, 가급적이면 유니코드 데이터 형식을 사용하여 다국어 데이터를 처리해야 합니다.
영어를 제외한 데이터를 다룰 경우 이렇게 항상 N을 붙여 사용하세요.
SQL 주석(Comment) 구문
다음은 주석(Comment)입니다.
--SELECT N'Konan이는 잘생겼다.'; SELECT 12345;
--는 한라인 주석을 의미하며, 실행이 안됩니다. SQL 구문에 대한 설명이나 주의사항 등을 넣을 수 있습니다.
/* SELECT N'Konan이는 잘생겼다.'; SELECT 12345; */
/* 문자열들 */ 로 묶인 부분 역시 실행이 안되며 주석처리 됩니다. 여러 라인에 주석을 사용할 경우 편리합니다.
구문의 일부만 실행
SSMS에서 쿼리 구문의 일부만 실행할 수 있습니다.
SELECT @@servername, @@version;
이 쿼리를 SSMS에 복붙 하시고,
이렇게 @@servername 까지만 마우스 드래그 또는 키보드에서 쉬프트키와 커서키로 선택해 실행하세요. 결과는 선택된 부분만 실행됩니다.
어렵지 않으시죠? 이제 실제 데이터를 조회해 보겠습니다.
예제 데이터베이스 설치 및 접속
이전 1-11. 예제 데이터베이스 설치 강좌에서 예제 데이터베이스를 설치했습니다. AdventureWorks 데이터베이스입니다.
이제 작업할 데이터베이스를 선택합니다. SSMS 왼쪽에 master라고 적혀 있을 겁니다. SSMS는 로그인하면 기본적으로 master database를 선택/사용하게 됩니다. 강좌에서 다룰 데이터베이스는 AdventureWorks라는 데이터베이스입니다.
데이터베이스를 AdventureWorks로 변경하려면?
이렇게 USE AdventureWorks 라고 SQL 쿼리에 적어서 바꾸거나 위와 같이 SSMS에서 여러 데이터베이스들 중 AdventureWorks로 바꾸면 됩니다.
‘어 객체가 없다는 오류가 왜 쿼리에서 발생하지?’
SQL을 처음 하면서, 많이 실수하는 부분입니다. 쿼리를 실행하기 전에, 작업할 데이터베이스가 선택되었는지 항상 확인하세요.
테이블 데이터 조회
SELECT * FROM Production.Product;
이번에는 FROM이라는 키워드가 있는 쿼리를 실행해 보겠습니다. 실행하면 아래 결과창에 많은 결과가 보일 것입니다.
위의 쿼리를 간략히 소개해 드리면 Production.Product 테이블에서(FROM) 모든 것을(*) 가져와라(SELECT)라는 의미입니다. 안되고 오류가 발생하신다고요? 차근차근 예제 데이터베이스 설치나 AdventureWorks 데이터베이스가 선택되었는지 확인하고 수행해 보세요.
저는 첫 번째 SELECT를 실행하기 위해 처음 SQL을 공부할 때 SQL Server 6.5로 3일을 고생했습니다. 저도 초보였습니다. 앗! 저보다 빨리 실행하셨나요? 축하드립니다!
성공적인 첫 번째 쿼리 수행을 축하드립니다. 천천히 저 한 줄의 SELECT 구문을 보신 후 다음 강좌에서 뵙겠습니다.
SQL 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.