1. SELECT 문이란?
우리가 데이터베이스에 정보를 저장하는 이유는 언젠가 필요할 때 다시 검색해보기 위해서입니다. 지난 데이터를 테이프에 백업 받아 영구히 보관하는 이유도 자주는 아닐 수 있지만 언젠가는 그 정보가 필요해서 보아야 할 필요성을 알기 때문입니다. 다시는 볼 필요가 없는 정보라면 데이터베이스에 보관할 필요가 없다고 생각합니다. 이렇듯 데이터베이스에서 정보를 검색할 때 사용되는 퀴리문이 SELECT 문입니다.
2. SELECT의 대상
데이터베이스의 정보를 검색하는 SELECT문의 대상이되는 객체들은 언급해 본다면 다음과 같습니다.
o 데이블(Table)
o 뷰(View)
o 함수(Function)
많은 객체들이 언급될 것 같았는데 별로 없네요. 테이블과 뷰와 함수에 대해서는 기초 강좌에서 다루어졌습니다. 뷰(View)의 경우는 테이블을 기반으로 정보를 주기 때문에 굳이 SELECT문의 대상에 언급을 하지 않아도 될것 같습니다. 이 객체를 대상으로한 SELECT의 예를 나중에 살펴보도록 하겠습니다.
※ 뷰(View)란 하나 또는 그 이상의 테이블로부터 생성된, 하지만 물리적으로 존재하지 않는 가상의 논리적인 테이블입니다. 하나의 테이블에서만 SELECT 되어진 결과를 가지고 뷰를 만들 수도 있고, 여러개의 테이블을 조인(JOIN)하여 SELECT한 결과를 가지고 뷰를 만들수 있습니다. 사용자(End User) 입장에서는 뷰를 일반적인 테이블과 똑같은 방법으로 사용하게 되므로, 이 뷰가 어떻게 만들어 졌는지 알지 못합니다.... - 뷰(View)에 대한 기초 강좌 중에서 - |
3. SELECT 문의 예
몇가지 예제를 봐 가면서 SELECT 문의 사용 방법을 확인해보도록 하겠습니다.
[예제1]
연습용 데이터베이스 중에서 pubs 데이터베이스가 있습니다. 이 데이터베이스에 포함된 테이블 중에 titles 테이블이 있는데 이 테이블의 모든 내용을 확인하고 싶으면 다음과 같이 수행하면 됩니다.
SELECT * FROM titles |
앗! 그런데 다음과 같은 오류 메세지가 표시되면서 원하는 결과가 나오지 않았습니다.
서버: 메시지 208, 수준 16, 상태 1, 줄 1 개체 이름 'titles'이(가) 잘못되었습니다. |
o 위와 같은 오류가 발생한 이유는 titles 테이블을 검색하라고 했으나 현재 연결된 데이터베이스에서 titles 테이블을 찾지 못하기 때문입니다.
o 왜냐하면 위 SELECT문에 pubs 데이터베이스를 지정하지 않았기 때문입니다.
o 다음과 같이 하면 오류가 발생하지 않습니다.
USE Pubs -- 1) |
o 1) 에서 pubs 데이터베이스를 사용한다고 지정을 했습니다.
o 2) 에서는 pubs.dbo를 테이블 앞에 붙여 titles가 pubs 데이터베이스에 있으면서 소유자가 dbo임을 명시를 했으므로 USE pubs 를 생략 할 수 있습니다.
만일 아래와 같은 오류 메세지가 표시된다면 현재 접속한 사용자 계정이 pubs 데이터베이스의 titles 테이블에 대한 SELECT 권한이 없기 때문입니다.
서버: 메시지 229, 수준 14, 상태 5, 줄 1 |
즉, 테이블의 정보를 SELECT 하기 위해서는 이에 합당한 권한이 주어져야 함을 의미합니다.
[예제2]
SELECT의 대상이 함수가 되는 경우를 보도록 하겠습니다. 다음의 예는 현재의 날짜와 시간을 확인하는 방법입니다.
SELECT getdate() |
표시되는 결과는 다음과 같습니다.
2001-09-03 22:58:46.147 |
o 현재의 날짜와 시간을 리턴해주는 getdate()함수를 SELECT 함으로써 현재의 날짜와 시간을 표시하였습니다.
o 이와 같이 SELECT의 대상이 항상 테이블이 되는 것은 아닙니다. 하지만 대부분 테이블에서 데이터를 검색할 때 사용합니다.
[예제3]
다음은 특정 컬럼만을 지정하여 검색하는 예제입니다. titles 테이블에서 title_id 컬럼과 title 컬럼만을 검색 할 경우 다음과 같이 하면 됩니다.
USE Pubs GO SELECT title_id, title FROM titles |
[예제4]
다음은 특정 컬럼만을 지정하여 검색하데 표시되는 컬럼의 타이틀을 변경하여 표시하는 예제입니다.
USE Pubs GO SELECT title_id AS 아이디, title AS 타이틀 FROM titles |
o 위와 같이 하면 표시되는 결과의 컬럼 제목이 title_id 대신에 '아이디'가, title 대신에 '타이틀' 이 표시 됩니다.
o 만일 '아이디' 대신에 '타이틀 아이디' 라고 스페이스가 포함된 제목을 주고자 한다면 어떻게 해야 할까요?
다음과 같이 하면 됩니다.
USE Pubs GO SELECT title_id AS [타이틀 아이디], title AS 타이틀 FROM titles |
o 위와 같이 컬럼명에 또는 검럼명을 대신하는 문자열에 스페이스가 포함되면 []로 묶어주면 됩니다. 또는 SQL Server의 예약어를 임의의 문자열로 취급하고 싶을 때도 []를 사용합니다.
[예제5]
이제는 테이블의 전체 데이터를 검색하는 것이 아니고 특정 조건을 만족하는 대상건만을 검색하는 예제입니다. SELECT 문에 WHERE 절을 추가하여 검색 대상을 제어 할 수 있습니다. 다음의 예제는 titles 테이블에서 title_id가 'PS2091'인 레코드만을 검색하기위해 WHERE절을 사용하고 있습니다.
USE Pubs GO SELECT * FROM titles WHERE title_id = 'PS2091' |
o 위와 같이 WHERE 절이 포함된 SELECT문이 전형적인 SELECT문입니다.
---------------------------------------------------------------------------------------
출처 : http://www.sqlworld.pe.kr
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|