음 아마 비둘기보단 똑똑할꺼야
준돌 Jundol / 2016.05.19 18:02 / SQL

SQL 변수 선언 및 사용

1. 변수의 선언

1
DECLARE @변수이름 데이터형식
cs


2. 변수에 값 대입

1
SET @변수이름 = 변수의 값
cs

@ 와 변수이름 사이에는 공백이 있으면 안 된다.


3. 변수의 값 출력

1
SELECT @변수이름
cs


4. 변수 사용 실습

1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE @myVar1 INT
DECLARE @myVar2 SMALLINT,    @myVar3    DECIMAL(5,2)
DECLARE @myVar4 NCHAR(20)
 
SET @myVar1 = 5
SET @myVar2 = 3
SET @myVar3 = 4.25
SET @myVar4 = 'CARD TYPE==> '
 
SELECT @myVar1
SELECT @myVar2 + @myVar3
 
SELECT @myVar4 , * FROM Sales.CreditCard WHERE ExpMonth = 12
cs


top 구문의 내부에 변수를 사용해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE @myVar1 INT
DECLARE @myVar2 SMALLINT,    @myVar3    DECIMAL(5,2)
DECLARE @myVar4 NCHAR(20)
 
SET @myVar1 = 5
SET @myVar2 = 3
SET @myVar3 = 4.25
SET @myVar4 = 'CARD TYPE==> '
 
SELECT @myVar1
SELECT @myVar2 + @myVar3
 
SELECT TOP(@myVar2) * FROM Sales.CreditCard WHERE ExpMonth = 12
cs


준돌 Jundol / 2016.05.19 16:44 / SQL

1. GROUP BY

말 그대로 그룹으로 묶어주는 역할을 한다.
한 테이블에서 사용자(userid)가 구매한 물품의 개수(amount)를 보려면 각각의 행이 출력된다.

하지만 해당 사용자가 총 구매한 물품의 개수로 묶어서 출력해 보이고 싶다면 sum 함수를 사용하면 된다.

1
SELECT userid, SUM(amount) FROM buyTbl GROUP BY userid
cs

이렇게 되면 열 이름 없음으로 나오는데 이럴때는 별칭(alias)를 사용해서 결과를 보기 편하도록 한다.

1
SELECT userid AS [사용자 아이디], SUM(amount) AS [총 구매 개수] FROM buyTbl GROUP BY userid
cs

구매액의 총 합을 출력해 본다. 구매액은 가격 * 개수이므로 총 합은 SUM()을 사용한다.

1
SELECT userid AS [사용자 아이디], SUM(amount * price) AS [총 구매 액] FROM buyTbl GROUP BY userid
cs


2. 집계함수

함수명 

설명 

AVG() 

평균 

MIN() 

최소값 

MAX() 

최대값 

COUNT() 

행의 개수 

COUNT_BIG() 

행의 개수. 단, 결과값이 bigint형 

STDEV() 

표준편차 



3. HAVING

위의 구매액의 총 합을 구하는 쿼리문에서 총 구매액이 1000 이상인 사용자만 출력하려고 한다.

그러면 보통 지금까지 학습했을 경우 WHERE절을 이용해서 출력하려고 할 것이다.

1
2
3
4
SELECT userid as [사용자], SUM(price * amount) as [총 구매액]
FROM buyTbl
WHERE SUM(price * amount) > 1000
GROUP BY userid
cs

위와같이 오류가 발생한다.

이럴 때 사용하는게 HAVING 이다. HAVING은 WHERE와 비슷한 개념으로 조건을 제한하는 것으로 집계 함수에 대해서 조건을 거는 것이라고 생각하면 된다. 그리고 HAVING 절은 꼭 GROUP BY 절 다음에 나와야 한다!!

1
2
3
4
SELECT userid as [사용자], SUM(price * amount) as [총 구매액]
FROM buyTbl
GROUP BY userid
HAVING SUM(price*amount) > 1000
cs


준돌 Jundol / 2016.05.19 15:38 / SQL

1. 테이블에서 전체의 100분의 1 즉, 1%만 보겠다는 쿼리문

1
2
3
4
5
6
SELECT TOP(SELECT COUNT(*)/100 FROM Sales.CreditCard)
CreditCardID
FROM Sales.CreditCard
WHERE CardType = 'Vista'
ORDER BY ExpYear, ExpMonth
 
cs


COUNT(*)는 행의 개수를 반환하는 함수이다.


2. 다른 예로 전체 상위 건수의 0.1%만 출력하는 쿼리문이다.

그럴경우 TOP(N)PERCENT 를 사용하면 된다.

1
2
3
4
SELECT TOP(0.1)PERCENT CreditCardID FROM Sales.CreditCard
WHERE CardType = 'Vista'
ORDER BY ExpYear, ExpMonth
 
cs


3. WITH TIES 옵션

마지막 출력값과 동일한 값이 있는데 N%가 넘더라도 출력하는 옵션에는 WITH TIES 옵션이 있다.
만약 내가 출력하고싶은 조건에 해당하는 값이 5개인데 0.1프로가 4개라면 5개째는 출력되지않을 것이다. 그럴때 사용한다.

1
2
3
4
SELECT TOP(0.1)PERCENT WITH TIES CreditCardID, ExpMonth, ExpYear FROM Sales.CreditCard
WHERE CardType = 'Vista'
ORDER BY ExpYear, ExpMonth
 
cs



준돌 Jundol / 2016.05.19 02:53 / SQL

MSSQL 의 예제 데이터베이스 AdventureWorks 연결하기!

필자는 2008을 이용하여 학습, 사용합니다.


1. AdventureWorks 데이터베이스 파일 다운

http://msftdbprodsamples.codeplex.com/ 접속

빨간색 네모박스를 클릭합니다.



본인에게 맞는 버전의 데이터베이스.zip 파일을 다운받습니다.

용량은 약 30mb 중반정도입니다.

다운이 완료되면 C드라이브 바로 밑에 압축을 풀어 놓습니다.


2. 데이터베이스 연결

압축해제 해놓았던 폴더의 mdf 파일을 연결합니다.

데이터베이스 폴더에서 마우스 우클릭하여 연결을 클릭합니다.


연결할 데이터베이스에서 추가를 클릭합니다.



압축해제 해놓았던 mdf 파일을 확인을 누릅니다.


그러면 아래사진과 같이 연결된 데이터베이스를 확인할 수 있습니다.





© 2015 Jundol in 음 아마 비둘기보단 똑똑할꺼야
Designed by DH / Powered by Tistory
207 / 12 / 106,105