2014. 2. 17. 15:05

Null 값일 때다른 값으로 바꿔주는 함수로  oracle에서는 nvl()함수를 사용하고,
MS-SQL
에서는
  isnull()함수를 사용하면 됩니다.


예)


NVL(SUM(mileage),0) as mileage

'2019년 이전 정리 > DB_ORACLE' 카테고리의 다른 글

Oracle DISTINCT, GROUP BY  (1) 2014.02.07
Oracle DECODE 함수  (0) 2014.02.06
Posted by hoonihoon
2014. 2. 13. 14:56

SELECT *

FROM Orders order by CustomerID


OrderIDCustomerIDEmployeeIDOrderDateShipperID
10308271996-09-183
10365331996-11-272
10355461996-11-151
10383481996-12-163
10278581996-08-122


SELECT *

FROM Customers


CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constituci� 2222M�ico D.F.05021Mexico
3Antonio Moreno Taquer�Antonio MorenoMataderos 2312M�ico D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK



두개를 LEFT OUTER JOIN 하게 되면


SELECT *

FROM Customers a

LEFT JOIN Orders b

ON a.CustomerID=b.CustomerID

ORDER BY Customers.CustomerName;


CustomerIDCustomerNameContactNameAddressCityPostalCodeCountryOrderIDEmployeeIDOrderDateShipperID
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germanynullnullnullnull
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constituci� 2222M�ico D.F.05021Mexico1030871996-09-183
3Antonio Moreno Taquer�Antonio MorenoMataderos 2312M�ico D.F.05023Mexico1036531996-11-272


결과에서 보면  LEFT OUTER JOIN 은 


ON CustomerID 를 기준으로 Orders 테이블과 일치하는 레코드가 없으면, Orders 테이블의 모든 컬럼이 담긴 row에 NULL을 넣는다


'2019년 이전 정리 > DB_MSSQL' 카테고리의 다른 글

[MS-SQL] 실행계획 Nested Join Merge Join 문제해결  (0) 2015.02.25
[SQL] dateadd 문법  (0) 2014.02.10
Posted by hoonihoon
2014. 2. 11. 10:17


Call OpenConn_mall(conn)

Call OpenConn_ora(oraConn)


Call은 Sub, Function 을 호출 할 때 사용합니다.


w3schools 에서 의미를 찾아보면,

-> ASP 내 자바스크립트를 호출 할 수 있다.

<!DOCTYPE html>

<html>
<head>
<%
sub vbproc(num1,num2)
response.write(num1*num2)
end sub
%>
</head>
<body>

<p>Result: <%call vbproc(3,4)%></p>

</body>
</html>


attend_write.asp

Call OpenConn_mall(conn)


dbconn_mall.asp

Sub OpenConn_mall(conn)

Set conn = Server.CreateObject("ADODB.Connection")

conn.open("xxxxxxxxxxxxx");

End Sub



Posted by hoonihoon
2014. 2. 10. 17:46


dateadd( 날짜형식(yy,mm,dd,hh), 숫자, 날짜)


지정된 날짜에서 지정된 숫자만큼, 지정된 날짜형식을 변환시키겠다 라는 말이다.


dateadd(yy, 10, '2012-02-13")    결과 :  2020-02-13

dateadd(d, 10, '2012-02-13")     결과 : 2012-02-23



특정 시간이 됐을 때 이벤트가 발생하는 where 절이다.

아래 보면 2014년 1월 2일에 00시에 이벤트가 발생. 

아직 이벤트 시간이 안됐으면 발생 안함. where 절에 사용


where dateadd(hh, convert(int,evt_stime),convert(datetime,evt_sdate)) < getdate() 


해석:  dateadd(hh, 00, 2014-01-02)  < 현재시간()

Posted by hoonihoon
2014. 2. 10. 13:44


With ~ End With 문 


여러 문장에 걸쳐 동일한 객체의 문장이 있을 경우 With문을 사용하면 객체의 이름을 여러번 입력하지 않아도 된다.


. 객체의 속성이나 메서드로 구성된 하나 이상의 문장


예) 


With object

.name

.age

End With



Posted by hoonihoon
2014. 2. 10. 13:12

1. DIM (Dimension) 변수 선언 할 때 사용


Dim name;


2. Set 개체의 인스턴스를 생성할 때 사용


개체는 Object 를 의미



- 사용법


Handphone 개체의 사용 방법
1.Dim myPhone
2.Set myPhone = Server.CreateObject("Telephone.Handphone")
3.myPhone.color = "white"
4.myPhone.number = "011-9971-88XX"
5.myPhone.call("02-584-88XX")
6.myPhone.hangup()
7.Set myPhone = Nothing


1번째 줄에서는 먼저 앞으로 사용될 myPhone 이라는 변수를 선언해 놓았습니다.
그리고 2번째 줄에서는 Server.CreateObject 라는 특별한 메소드를 사용하여
'Handphone 개체의 인스턴스'를 만들어서 myPhone 이라는 변수에 저장하였습니다.
(그러므로 이제 myPhone 이라는 녀석을 Handphone 으로 사용할 수 있게 된 것입니다.)

개체(Object)는 추상적인 의미라는 말씀을 윗 부분에서 드렸습니다.
그렇기 때문에, Handphone 개체를 우리 프로그램에서 직접 가져다 사용할 수는 없고
'인스턴스(Instance)' 를 만들어서 그것을 변수에 저장하여 사용하는 것입니다.
이처럼 '개체의 인스턴스' 를 만들어서 변수에 저장할 때에 사용하는 구문이 바로 Set 구문이 되겠습니다. 

3번과 4번 줄은 속성(Property) 에 값을 할당하는 구문이 되겠습니다.
속성은 사용될 때에 이름과 값, 한 쌍으로 표현이 된다는 말씀을 위에서 드렸었는데,
그 내용이 바로 이 부분의 내용이 되는 것입니다.
보시는 것처럼 myPhone 의 color 속성에는 "white" 라는 값을 넣었으며,
myPhone 의 number 속성에는 "011-9971-88XX" 라는 값을 넣은 것입니다.
(이 구문을 통해 제 핸드폰의 색깔은 하얀 색, 그리고 번호는 "011-9971-88XX" 가 됩니다.)

그리고 5, 6번 줄은 메소드(Method) 를 실행하는 구문이 됩니다.
5번 줄은 call 이라는 메소드를 사용하여 전화를 거는 작업을 수행합니다.
전화를 걸때에는 '전화번호' 가 있어야 하므로, 인자로 "02-584-88XX" 번을 입력했으며,
이 구문을 통해 제 핸드폰은 02-584-88XX 번으로 전화를 걸기 시작합니다.
6번 줄은 전화를 끊는(hangup) 구문이 되겠습니다.
끊을 때에는 특별한 인자가 필요하지 않으므로 인자를 넘겨주지 않았습니다.

그리고 모든 작업을 완료한 다음에는 더이상 핸드폰이 필요하지 않으므로,
7번의 Set myPhone = Nothing 이라는 구문을 사용하여 개체의 인스턴스인 'myPhone' 을 메모리에서 해제합니다. 'myPhone' 을 더 이상 쓰지 않는다고 알려주는 것이지요.



3. IF ~ THEN
- IF ~ THEN 구문은 지난 강좌에서 설명드렸던 구문입니다. 반가우시죠? ^^
오늘은 단지 참과 거짓만이 아닌, 조금 더 많은 경우를 생각해 보려고 합니다.
한가지 예를 들어볼까요? intNumber 라는 변수에 어떤 숫자가 들어있다고 가정하고요.
이중에서 1,2,3 에 대한 경우의 처리가 달라야 한다면 어떻게 할까요?
네. 아마도 다음과 같이 하면 될 것 같습니다.

IF intNumber = 1 THEN
    Response.Write "intNumber 에 들어있는 수는 1입니다!"
ELSEIF intNumber = 2 THEN
    Response.Write "intNumber 에 들어있는 수는 2입니다!"
ELSEIF intNumber = 3 THEN
    Response.Write "intNumber 에 들어있는 수는 3입니다!"
ELSE
    Response.Write "intNumber 에 들어있는 수는 1,2,3 이 아닌 다른 숫자입니다!"
END IF

갑자기 Response.Write 라는 녀석이 나와서 깜짝 놀라셨을 것 같은데요.
이것은 현재 화면에 문자열을 보여주라는(출력하라는) 함수가 되겠습니다.
(지금은 우선 이 정도로만 알아두시고, 다음 기회에 조금 더 자세히 알아보도록 하겠습니다.)

위의 조건절이 이해가 가시나요?
intNumber 에 들어있는 숫자가 1이라면 가장 위의 조건을 만족하게 되고, 화면에는 두번째 라인에 있는 "intNumber 에 들어있는 수는 1입니다!" 라는 문자열이 출력되게 됩니다.
만약 2라면? 그렇다면 세번째 라인에 있는 조건을 만족하게 되고 화면에는 "intNumber 에 들어있는 수는 2입니다!" 라는 문자열이 출력되게 됩니다.
마찬가지로 3이면 다섯번째 라인에 있는 조건을 만족하게 되고 "intNumber 에 들어있는 수는 3입니다!" 라는 문자열이 화면에 출력되게 됩니다.
그런데.. 1, 2, 3 이 아닌 그 외의 수라면 어떨까요?
그때에는 어느 경우에도 해당되지 않으므로 7번째 라인에 있는 ELSE 조건에 걸리게 되고,
화면에는 "intNumber 에 들어있는 수는 1,2,3 이 아닌 다른 숫자입니다!" 가 보여집니다.

이처럼 몇가지의 조건이 있을 때, 각각의 조건에 따라 다른 과정을 거치게 하고 싶을 때 사용하는 구문이 바로 IF ~ THEN 구문이 되겠습니다.

4. SELECT CASE
- 'SELECT CASE' 문 역시 IF ~ THEN 구문과 마찬가지로 '조건 구문' 이 되겠습니다.
하지만 SELECT CASE 는 '조건이 많을 때' 주로 사용합니다. 예를 들어 볼까요?
위에서는 intNumber 라는 변수에 1,2,3 의 숫자가 들어가는 경우에만 다른 처리를 했습니다.
그런데 이번엔 3까지가 아닌 10까지 다른 처리를 하고 싶어 졌습니다. 그러면 어떻게 할까요?

물론 IF ~ THEN 으로도 가능합니다.
하지만 이렇게 조건이 많은 경우에는 보통 SELECT CASE 문을 사용합니다.
다음의 내용처럼 말이지요.

SELECT CASE intNumber
CASE 1
    Response.Write "intNumber 에 들어있는 수는 1입니다!"
CASE 2
    Response.Write "intNumber 에 들어있는 수는 2입니다!"
CASE 3
    Response.Write "intNumber 에 들어있는 수는 3입니다!"
CASE 4
    Response.Write "intNumber 에 들어있는 수는 4입니다!"
CASE 5
    Response.Write "intNumber 에 들어있는 수는 5입니다!"
CASE 6
    Response.Write "intNumber 에 들어있는 수는 6입니다!"
CASE 7,8,9
    Response.Write "intNumber 에 들어있는 수는 7,8,9 중 하나입니다!"
CASE 10
    Response.Write "intNumber 에 들어있는 수는 10입니다!"
CASE ELSE
    Response.Write "intNumber 에 들어있는 수는 1부터 10 사이의 정수가 아닙니다."
END SELECT

SELECT CASE 문의 사용법은 위와 같습니다.
SELECT CASE 다음에 조건을 검사할 변수를 위치시키고,
CASE 1, CASE 2, CASE 3... 와 같은 방법으로 조건을 확인하는 것입니다.
보시다시피 IF 문보다 훨씬 간결하고 사용이 편리합니다. (별로 어렵지 않지요?)
중간에 나오는 CASE 7,8,9 처럼 콤마(,) 를 사용하여 조건을 중복할 수도 있습니다.

IF ~ THEN 과 SELECT CASE 는 자주 사용되는 구문이므로, 잘 알아두시면 좋습니다.
(써놓고 나니까 무슨 전문 입시 학원의 강사같은 발언이군요. ^^)

5. FOR ~ NEXT
- FOR ~ NEXT 구문은 동일한 형식의 작업을 반복하려 할 때 주로 사용하는 구문입니다.
예를 들어 1부터 100까지의 숫자를 화면에 보여지게 하라는 명령이 떨어졌을 때,
'좋아, 뭐.. 그정도라면' 이라고 생각하며 빠른 타자로 1부터 100까지 입력할 수 있겠습니다.
그런데 만약 1부터 10000까지의 숫자를 화면에 보여지게 하라는 명령이 떨어졌다면...
이제부터는 더이상 농담이 아닌 상황이 발생하는 것입니다.
(계산해보니 1초에 숫자 하나씩 입력한다고 해도 얼추 3시간 정도 걸리는 군요.)

이럴 때 유용하게 사용되는 것이 바로 FOR ~ NEXT 구문입니다.

만약에 1부터 10000까지의 숫자를 화면에 출력하라는 명령이 떨어졌을 때,
FOR ~ NEXT 구문을 이용하면 다음과 같이 쓸 수 있습니다.

DIM intLoop
FOR intLoop = 1 TO 10000 STEP 1
    Response.write intLoop & "<BR>"
NEXT

이렇게 작성한 후 ASP 페이지를 실행시키면 - 직접 테스트 해보는 것도 재미있습니다 -
1부터 10000까지의 (1씩 증가하는) 숫자들의 나열을 보실 수가 있습니다.
숫자의 뒤에 <BR> 태그를 추가한 것은 '다음 줄로 바꾸기' 위해서입니다.
만약 <BR> 태그가 없다면 한줄로 주욱~ 나열된 - 보기가 꽤 어려운 - 형태가 출력됩니다.

FOR ~ NEXT 구문의 형식은 다음과 같습니다.

FOR 시작 TO  STEP 증가
    반복되어 실행될 구문
NEXT

일반적으로 많이 쓰이는 방식은..
시작 부분에 작은 수, 끝 부분에 큰 수를 넣은 다음 1씩 증가하면서 실행하는 방식입니다.
(여기서 STEP 부분은 생략할 수 있고, 생략하게 되면 기본적으로 1씩 증가하게 됩니다.)

그렇게 되면 이 조건(끝 부분)이 만족될 때까지 실행 구문이 반복적으로 실행되는 것이지요.
이처럼 FOR ~ NEXT 구문은 반복 실행해야 하는 횟수를 알고 있을 때 사용하면 편리합니다.

5. DO WHILE
- DO WHILE 문도 FOR ~ NEXT 문과 마찬가지로 동일한 형식의 반복 작업시에 사용합니다.
하지만 FOR ~ NEXT 문이 반복 실행 횟수를 정확하게 알고 있을 때 주로 사용한다면,
DO WHILE 문은 실행 횟수를 정확하게 모르고 있을 때, 또는 순환할 때마다 조건을 검사해서 계속 순환할 지 여부를 체크해야 할 때 사용하는 것이 유리합니다.

위에서 FOR ~ NEXT 문에서 사용한 예제를 DO WHILE 로 변경해 볼까요?
(참고로 아래의 내용은 FOR ~ NEXT 예제의 결과와 완전히 일치합니다.)

DIM intLoop
intLoop = 1
DO WHILE intLoop <= 10000
    Response.write intLoop & "<BR>"
    intLoop = intLoop + 1
LOOP

FOR ~ NEXT 문보다는 약간 복잡해 보이나요? 간단하게 설명을 드리도록 하겠습니다.
두번째 줄에서, 우선 DO WHILE 문을 시작하기 전에 intLoop 변수에 초기값 1을 대입합니다.
세번째 줄이 가장 중요한 부분이 되겠는데요.
DO WHILE intLoop <= 10000 이라는 부분의 의미는
'intLoop 변수에 담긴 숫자가 10000보다 같거나 작은 동안에는 계속 실행해라'
는 뜻이 됩니다. (이 내용은 순환할 때마다 매번 검사합니다.)

그리고 5번째 줄에 intLoop = intLoop + 1 이라는 구문이 있는데,
이 부분은 프로그램을 처음 공부하시는 분들께서 가장 혼동하기 쉬운 부분 중에 하나입니다.

이것은 'intLoop 와 intLoop + 1 이 같다' 는 'equal' 의 의미가 아닙니다. (말이 안되죠?)
이 구문의 의미를 해석하면, '왼쪽에 있는 intLoop 라는 변수에다가, 오른쪽에 있는 intLoop 변수의 현재 값에 1을 더한 결과 값을 대입해라' 라는 뜻이 됩니다.
('=' 은 '오른쪽에서 계산된 값'을 '왼쪽의 변수에 대입' 하라는 의미를 가지고 있습니다.
이때 사용되는 '=' 를 '대입 연산자' 라고 부릅니다. 상식으로 알아두시면 좋겠지요?)

두번째 줄에 나온 intLoop = 1 도 마찬가지입니다.
왼쪽에 있는 intLoop 라는 변수에 오른쪽에 있는 숫자 1을 대입하라는 뜻이지요.
그리하여 6번째 줄에 있는 LOOP 를 만나게 되면 다시 3번째 줄로 돌아간 다음,
조건을 다시 검사하고, 조건과 일치하면 구문을 반복하게 되는 것입니다.

순환문을 사용하실 때, 여러분들께서 주의하셔야 할 점이 있습니다.

만약 위의 DO WHILE 문에서.. 5번째 줄을 깜빡 잊고 입력하지 않았다면 어떻게 될까요?
intLoop 변수는 증가하지 않으므로 항상 1이 될 것이고..
때문에 DO WHILE intLoop <= 10000 구문은 항상 참이 되어서 계속 실행될 것입니다.
즉, 이 순환문은 절대로 종료되지 않는 것이지요.

이것을 '무한 루프' 라고 합니다. '무한하게 계속되는 순환문' 이라는 뜻이지요.
무한 루프에 빠지게 되면 컴퓨터를 강제 종료해야 하는 등, 심각한 사태가 발생할 수 있습니다.
(권장하고 싶지는 않지만, 궁금하신 분들께서는 위의 DO WHILE 문에서 5번째 줄을 생략하고 실행해 보시기 바랍니다. 아마 컴퓨터 CPU 사용률이 급격히 증가하여 컴퓨터가 느려지고, 심지어 심한 경우에는 먹통이 되어버리는 경우를 목격하실 수도 있습니다.)



출저:  태요 asp

Posted by hoonihoon
2014. 2. 7. 15:17

안녕하세요.

오늘은 VS2010에서 스타일(태마)를 바꾸는 방법에 대해서 알아보겠습니다.

VS2010에서는 기본적으로 흰색 배경에 검은색 글자 혹은 푸른색 계열의 색상으로 태마가 설정되어 있습니다.

하지만 이것들은 여러가지 색상으로 변경 하실수 있습니다.

(C#기준 태마입니다. 다른언어에는 적합하지 않을 수도 있습니다.)

 

일단 아래 주소로 이동해보세요.

주소 : http://studiostyl.es/schemes

 

이동해보시면 여러가지 스타일을 미리 보여 줍니다.

다운로드 횟수나 View한 횟수도 나오는군요.(참고)

 

마음에 드는 스티일(태마)를 아무곳에나 다운 받으세요.

그리고 VS2010을 실행합니다.

 

스타일 적용 전 화면 입니다.

 

 

 

스타일을 적용하시려면 메뉴 -> 도구 -> 설정 가져오기 및 내보내기를 선택하세요.

* 선택한 환결 설정 가져오기 선택 후 다음 버튼 클릭

 

 

* 아니요, 설정을 가져와 현재 설정을 덮어씁니다.(0)를 선택 후 다음 버튼 클릭

 

 

* [찾아보기]버튼을 이용하여 이전에 다운받은 설정 파일을 선택 후 다음 버튼 클릭

 

 

* 마침 버튼 클릭

 

* 닫기 버튼 클릭

 

 

 

설정이 모두 완료 되었습니다.

비하인드 코드 화면을 보시면 아까 설정하려고 했던 화면이 표시 됩니다.

 

 

개인적으로 검은색 배경의 작업화면을 매우 좋아합니다.

VS2010이나 EditPlus, Total Commander 등 모두 검은색 배경으로 변경하여 이용하고 있습니다.

이유는 눈에 부담이 덜하단거조. 제가 느끼기에는요.

검은색 배경에서 작업하다가 흰색 배경에서 작업하려고 하면 눈에 상당한 부담을 느끼 실수 있을 겁니다.

뭐 개인견해입니다. ^^


 

이상입니다.


출저: http://blog.uphs.co.kr/57

Posted by hoonihoon
2014. 2. 7. 10:32

DISTINCT 는 중복제거에 사용


SELECT COUNT(DISTICNT team) as cnt 

FROM tbName;


그러나 DISTINCT 는 집합함수에 사용불가


SELECT id, COUNT(DISTICNT team) as cnt

 FROM tbName;


위에 DISTINCT 문을 GROUP BY 로 고치면


SELECT id, COUNT(team)

FROM tbName

GROUP BY id;


Group By를 사용해서 해야한다. Group By는 정렬이 들어가므로 성능이 DISTINCT 보다 느릴 수 있다.


'2019년 이전 정리 > DB_ORACLE' 카테고리의 다른 글

오라클 nvl  (0) 2014.02.17
Oracle DECODE 함수  (0) 2014.02.06
Posted by hoonihoon