SQL SELECT 구문에 대해 알아보자.
데이터 전체검색
select * from customers
특정필드 검색
select companyname from customers
조건문 검색
select companyname from customers where companyname = 'Maison Dewey'
논리연산자 검색
select * from orders where freight > 50.00
이때 만약 freight 컬럼의 데이터 타입이 문자형이라고 해도
에러 없이 출력된다.
이는 SQL server 가 연산할때 암시적으로 변환 가능한 데이터 형식일 경우 자동으로 형변환을 해주기때문이다.논리연산자로는 다음과 같은 연산자등이 있다.
=, >, <, >=, <=, <>, !=, !>, !<
산술 연산자 검색
+, -, *, /
@DECLARE @addexam int SET @addexam = 1 SELECT '1234' + @addexam as returnvalue
하지만 앞의 더하는 값을 문자열로 바꾸면 에러가 발생한다.
@DECLARE @addexam int
SET @addexam = 1
SELECT '더하기' + @addexam as returnvalue
sql서버는 변환 불가능한 문자가 있으면 오류를 반환한다.
묵시적인 형변환은 가능한 범위에 있는 값들끼리만 가능하다.
null 검색
조건문안에 null 값을 비교할 경우 ‘=’ 연산자로 비교하면 안된다.
반드시 “is null” 로 검색하자.반대는 “is not null” 이다.select * from orders where shipregion is null
간혹 null 값을 달리 표현하고 싶은 경우에는
isNULL 함수를 이용하여 질의를 할수있다.
select shipcity, isNULL(shipregion, 'n/a') as shipregion from orders
또 이와 비슷한 함수로 nullIF 가 있는데
이것은 만약 비교하는 두 식이 같으면 null 을 리턴한다.
범위
원하는 데이터가 특정범주 안에 들어가야 한다면
두가지 방법이 있는데
하나는 between
또하나는 and, or 연산을 사용하는 것이다.and 의 경우
select * from orders where employeeID >= 3 AND employeeID <= 5
between 의 경우
select * from orders where employeeID between 3 AND 5
IN 연산자
where 조건에 한필드가 여러 값들 중 하나인 경우,
이를 다수의 OR 조건으로 표현할수도 있지만, 간단하게 IN 절로도 표현할수있다.OR 의 경우
select * from orders where employeeID = 3 OR employeeID = 5
IN 의 경우
select * from orders where employeeID IN (3, 5)
LIKE 연산자
일부의 단어만 가지고 모든 단어를 가져올수 있게 하는 연산자다.
select * from orders where customerID LIKE 'CD%'
반대로 CD 가 아닌회사를 검색하려면 LIKE 연산자 앞에 NOT을 붙이면 된다.
order by 연산자
게시판이나 특정리포트를 출력할때 날짜순 혹은 등록된 순서대로 정렬하고 싶다면
order by 연산자를 쓰자.
select * from orders order by customerID 오름차 순으로 정렬할 경우 "asc" select * from orders order by customerID ASC 내림차 순으로 정렬할 경우는 "desc" 이다. select * from orders order by customerID DESC 한개 이상의 컬럼을 정렬시킬수도 있다. select top 10 * from orders order by CustomerID ASC, EmployeeID ASC
먼저 CustomerID 로 정렬을 시킨후 중복된게 있으면, EmployeeID기준 잡아 순서대로 나열한다.
주의해야 할점은 order by 는 text, image 형의 데이터에는 사용할수 없다.
DISTINCT
보통 합계나 평균값을 구하는 집계 함수 같은것을 사용할때 쓰이는 연산자이다.
DISTINCT 문은 select 문 조회시 중복되는 행들을 제거해준다.select DISTINCT customerID from orders
이럴경우 customerID 컬럼에 중복된 값들을 제외하고 출력하게 된다.
여기서 하나더 중요한것은
select DISTINCT * from orders
이렇게 질의를 할경우에는
로우에 모든 값이 일치해야만 중복제거가 가능하다.
그리고 또 주의해야 할점은 distinct 는 text, image 형의 데이터에는 사용할수 없다.
SELECT ~ INTO
select 문은 조회결과를 사용자에게 출력만 시키는 것이 아니라
결과 값 세트를 행으로 구성되는 또 다른테이블을 만들도록 지시할수도 있다.
이것은 우리가 보통 테이블을 영구적으로 만들지 않고 프로젝트를 하다가 임시적으로 사용될 테이블을 만들려고 할때 사용될수있는 방법이다.테이블 구조는 select 문 다음에 오는 식의 특성에 의해 좌우된다.
SELECT INTO를 사용하여 여러 테이블이나 뷰의 데이터를 하나의 테이블로 결합하거나 연결된 서버에서
선택된 데이터가 포함된 새 테이블을 만들수도 있다.
결국 새로운 테이블을 하나 만든다는 것은 사용자에게 해당 데이터베이스에서 CREATE 권한을 가지고 있어야 한다는 것이다.
select * into ordersCopy from orders
이렇게 하면 orders 테이블과 똑같은 스키마와 데이터를 가지는 다른 이름의 테이블이 만들어지는것이다.
또 기존에 존재하는 테이블의 스키마만 복사하고 싶을 경우
위의 질의에서 where 절을 추가시키면 된다.
select * into ordersCopy from orders where 1 = 2
이와 같이 하면 데이터는 없고 테이블 구조만 복사된 빈 테이블이 생성된다.
상기의 내용은 손호성님의 “SQL Server 2005 완벽가이드 책”을 보며 필기한 내용입니다.
No Comments