블로그 이미지
progh2
지루한 것에서 벗어나 재미난 것 속으로 풍덩~☆

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Recent Post

Recent Comment

Archive

2008. 10. 21. 22:09 기술문서창고/windows tip
textupdate인가 updatetext인가 하는 방법을 쓰는 법도 있지만,
여러모로 복잡한 고로 간단히 varchar 필드를 추가한 후, 여기에 text 필드의 값을
넣은 후 이 값을 replace로 치환, 다시 text 필드로 덮어쓰는 script를 만들어 보았습니다.

최근 악성코드때문에 고생하시는 분들은 있는데, 유용히 쓰였으면 좋겠네요.

아래 소스는 authors 라는 테이블에 text 속성인 desc1 칼럼이 있고 이 필드에 있는
<script url='http://'>악성코드</script>' 를 '<br>' 으로 변경할 경우를 가정한 것입니다.
적절히 수정해서 쓰세요~


-- 변수 선언
declare @target_column varchar(100)
declare @replace_source_string varchar(100)
declare @replace_target_string varchar(100)
declare @temp_column varchar(100)
declare @table_name varchar(100)
declare @sql varchar(1000)
declare @temp_column_size varchar(5)
set @temp_column='temp_column'
--//////////////////////////////////////////////
--
-- 경우에 맞게 적절하게 수정해서 사용
--
--//////////////////////////////////////////////
set @table_name='authors'
set @target_column='desc1'
set @replace_source_string='<script url=''''http://''''>악성코드</script>'
set @replace_target_string='<br>'
set @temp_column_size=4000
-- varchar형식의 임시 칼럼 추가
set @sql='alter table ' + @table_name + ' add ' + @temp_column + ' varchar('+ @temp_column_size +');'
exec (@sql)
-- 임시 칼럼으로 데이터 복사
set @sql='update ' + @table_name + ' set ' + @temp_column + '=' + @target_column
exec (@sql)
-- 원하는 문자열 제거
set @sql='update ' + @table_name + ' set ' + @temp_column + '=replace(' +@temp_column + ', ''' + @replace_source_string + ''', ''' + @replace_target_string +''')'
exec (@sql)
-- 임시 칼럼에서 원본 칼럼으로 데이터 덮어쓰기
set @sql='update ' + @table_name + ' set ' +  @target_column + '=' + @temp_column
exec (@sql)
-- 임시칼럼 삭제
set @sql='alter table ' + @table_name + ' drop column ' + @temp_column + ';'
exec (@sql)
-- 결과 조회
set @sql='select * from ' + @table_name;
exec (@sql)

posted by progh2
2008. 6. 8. 17:07 기술문서창고
클리앙에서 올라온 질문에 답변한 글입니다.
사실 나름 길게 썼는데 아까워서(...)

ms Access 수업에서 SQL을 좀 배우는데,
SELECT 에 대한 설명을 잘 이해하지 못해서 질문드립니다.

교재에 보면 SELECT structure 를 설명한다 그러면서

SELECT [DISTINCT] column(s)
    FROM table(s)
    [WHERE condition] <general condition>
    [GROUP BY item(s)]
    [HAVING condition] <group condition>
    [ORDER BY columns] <sorting option>

이라고 써 있습니다.
근데 저는 DISTINCT도,, column도 나머지 행들도 무슨 소린지 잘 모르겠습니다 ㅠ_
교수님이 만드신 교재라 설명이 제대로 된 부분도 없구요 ;;

혹시 대강이라도 설명해 주실 수 있는 분이 계실까요?

대강 설명을 하면 select는 db table에서 어떤 자료를 빼와라! 하는 명령입니다.
"어이, 전화번호부에서 짜장면집 전화번호 좀 가져와라~" 같은 것이지요.

[]는 추가적인 옵션입니다.
<>는 []를 사용하면 추가적으로 넣어줘야 하는 조건입니다.

예를 들어 앞의 짜장면집 전화번호.. 라고 하면
select 짜장면집이름, 전화번호 from 전화번호부
같이 되겠지요.

그런데 이렇게 하면 전국의 짜장면집-_- 전화번호가 나열되겠죠?
그럴 때 쓰는 옵션이 where 입니다.
사용법은where 지역="종로구" 같이 사용합니다. 즉
select 짜장면집이름, 전화번호 from 전화번호부 where 지역="종로구"
가 됩니다.

그런데 그냥 가져오기 하면.. 미리 설정된 특정 컬럼(=필드)의 순서대로 자료를
가져오게 됩니다. 그런데 나는 짜장면집 이름순서대로 보고 싶습니다.
그때 사용하는 것이 order by 입니다.
사용법은 order by 짜장면집이름 ASC
이렇게 하면 가나다,abc 같이 순서대로 정렬해서 가져옵니다.
ASC 대신 DESC 를 넣으면 역순으로 가져오고요. 그래서
select 짜장면집이름, 전화번호 from 전화번호부
where 지역="종로구" order by 짜장면집이름 ASC
라고 하면 종로구 지역에 있는 짜장면집 이름과 전화번호를
짜장면집이름 순서대로 정렬해서 가져와라! 가 됩니다.

그런데 어떤 이유로 해서 짜장면집 이름만 가져와 보기로 했다고 합시다.
그래서 select 짜장면집이름 from 전화번호부
where 지역="종로구" order by 짜장면집이름
라고 했더니만, 어이쿠.. 홍콩반점이 10개나 나오는 둥 같은 이름이 잔뜩
나와서 괴롭습니다. 이걸 하나하나 지우기도 귀찮고..
이걸 해결해주는 옵션이 distinct 입니다. 즉 가져오는 결과가 같은 것들이
여럿 있으면 하나만 남기고 지워줍니다. (앞에서처럼 이름과 전화번호가
같이 있는 상태면 전화번호는 다를 것이기에 소용이 없겠죠?)
select distinct 짜장면집이름 from 전화번호부
where 지역="종로구" order by 짜장면집이름 ASC
이러면 깔끔하게 짜장면집 이름들만 중봅없이 가져오게 됩니다.

group by 는 특정 필드 기준으로 나눠서 출력해줍니다.
예를 들어서 앞에서처럼 각 지역마다 존재하는 짜장면집이름을
가져오게 하고 싶다고 합시다.
그러면 group by 지역 이라 해주면 지역별로 출력해줍니다.
select distinct 짜장면집이름 from 전화번호부
order by 짜장면집이름 ASC
group by 지역

그런데 지역 중에서 종로구와 구로구만 가져와서 보고 싶습니다.
이럴 때 group by에 조건을 거는 것이(즉 group by에 대한 where 역할)
having 입니다.
select distinct 짜장면집이름 from 전화번호부
order by 짜장면집이름 ASC
group by 지역
having 지역 = "종로구" or 지역="구로구"

대강 써봤지만.. 역시 책을 보고 실습하시면서 익히시는게
최고일 것 같네요.. ^^;

posted by progh2
prev 1 next