20201112

phj
이동: 둘러보기, 검색

use class2020
select * from sys.tables
select * from xmltable

/*테이블 생성방법 예시*/
create table xmltable1 (
id nvarchar(20) not null,
xmltxt xml,
primary key(id)
)



use s_phj
select * from sys.tables /*테이블들을 확인하고 깨끗하게 만들어놓기*/
select * from xmltable1
select * from xmltable2
drop table xmltable1
drop table xmltable2 /*xmltable3도 있으면 드랍하여 깨끗하게 유지하고 연습해보기*/


select * from Class2020.dbo.xmltable1 /*질문???*/

select * into xmltable1 from Class2020.dbo.xmltable /*class2020의 xmltable을 xmltable1에 넣어라*/

select * into xmltable2 from xmltable1 /*xmltable1으로부터 xmltable2에 넣어라*/

select * from xmltable2

select xmltxt.query('/인물정보/표제/이름') from xmltable2 /*xmltable2로부터 인물/표제/이름의 요소만 보여줘라 국문, 한자, 영어 모두 보여짐*/

/*value(xml문서의 결과값을텍스트로 돌려줌=nvarchar, 몇번째인가?[번쨰]) 와 query차이*/
select xmltxt.value('(/인물정보/표제/이름)[1]', 'nvarchar(20)') from xmltable2 /*첫번째것만*/
select xmltxt.value('(/인물정보/표제/이름)[2]', 'nvarchar(20)') from xmltable2 /*두번째 이름요소만*/
select xmltxt.value('(/인물정보/표제/이름)[3]', 'nvarchar(20)') from xmltable2 /*세번째 이름요소만*/

select xmltxt.value('(//./@id)[1]', 'nvarchar(20)') from xmltable2 /*xmltable2의 최상위 id값을 보여줌*/

/*개체들 중 id를 id에 넣는 법*/
update xmltable2
set id=xmltxt.value('(//./@id)[1]', 'nvarchar(20)') /*  //: 어디에서든, .:모든것, /@id(속성),id정보가 들어있는)*/

select * from xmltable2

/*id가 null값인 것을 지우기*/
delete xmltable2
where id is null

drop table xmltable3

use master
/*N은 ''밖에 있어야 유니코드값으로 인식됨'*/

drop table xmltable3
/*통제된 db만들기 xmltable3로 만들어줌*/
create table xmltable3 (
id nvarchar(20) not null,
xmltxt xml,
primary key(id)
)

select * from xmltable3

/*trigger 트리거*/
/*table2를 3에 넣고 다시 작업시작,자동으로 id값을 넣어줌,트리거(방아쇠, 자동으로 변환해줌)*/

create trigger xmltable3getid on xmltable3 instead of insert
as /*as 아래와같이 동작하라*/
	insert into xmltable3(id, xmltxt)
	select
		that.xmltxt.value('(//./@id)[1]', 'nvarchar(20)') as id,
		that.xmltxt as xmltxt	/* this, that 모두 상관없음 지금 입력되고 있는 그 테이블*/
	from inserted that

select * from xmltable2

insert into xmltable3 (xmltxt) values
(N'<인물정보 id="인물-최무선">
  <표제>
    <이름 표기="국문">최무선</이름>
    <이름 표기="한자">崔茂宣</이름>
    <이름 표기="영문">Choi Mu-Seon</이름>
  </표제>
  <범주>
    <프로젝트>민족기록화</프로젝트>
    <클래스>인물</클래스>
    <기여 역할="작성">김지선</기여>
  </범주>
  <속성 틀="인물정보">
    <시대>고려</시대>
    <성격>발명가</성격>
    <성별>남자</성별>
    <본관>영주(永州: 현재의 영천)</본관>
    <생몰년>1325(충숙왕 12)~1395(태조 4)</생몰년>
  </속성>
  <설명>
    <문단>우리나라에서 화약과 화약을 이용한 무기를 처음 제작, 사용하였다. 무관인 그는 고려 말기에 한창 기승을 부리던 왜구를 물리치기 위해서는 화약(火藥)이 필요하다고 생각해 <지명>중국</지명> 사람들의 왕래가 잦은 무역항 <지명>벽란도</지명>에 가서 <지명>중국</지명><지명>강남</지명> 지역에서 온 상인들에게서 정보를 수소문했다. 그리고 <인명 id="인물-이원">이원(李元)</인명>이라는 상인에게서 화약을 만드는 데 필수적인 <개념 url="http://terms.naver.com/entry.nhn?docId=102665&cid=41826&categoryId=41826">염초(焰硝)</개념> 제조법을 배워 화약 개발에 성공했다.</문단>
    <문단>그 뒤 <인명>최무선</인명>은 여러 차례 조정에 건의해 1377년(<인명>우왕</인명> 3)에 <개념 id="개념-화통도감">화통도감(火筒都監)</개념> 설치를 이끌어냈으며, 우리나라에서 화약과 화약무기에 대한 본격적인 연구를 시작하였다.</문단>
    <문단>이처럼 화약과 화기 제작을 주도한 <인명>최무선</인명>은 1380년(<인명>우왕</인명> 6)에 왜구가 <지명>금강</지명> 하구의 <지명 id="공간-진포">진포</지명>로 쳐들어오자 부원수(副元帥)로 임명되어 상원수(上元帥) <인명 id="인물-나세">나세(羅世)</인명>와 함께 각종 화기로 무장한 전함을 이끌고 나아가 싸워 격파시키는 큰 공을 세웠다. 1383년(<인명>우왕</인명> 9)에도 <사건 url="http://encykorea.aks.ac.kr/Contents/Index?contents_id=E0004988">관음포대첩</사건>에서 왜구를 물리치는 데 공을 세웠으며, 1389년(<인명>창왕</인명> 2)에는 <인명>박위(朴葳)</인명>와 함께 <사건>쓰시마 정벌</사건>에도 참여했다.</문단>
    <문단>
      <인명>최무선</인명>이 개발한 화기를 사용하면서 <개념>고려</개념>는 왜구와의 해전에서 승리할 수 있었으며, 화기를 해안 지역에 배치하면서 왜구의 침입에 대한 방어체제도 정비하였다. 이러한 공으로 고려에서는 지문하부사(知門下府事)라는 벼슬까지 올랐으며, 조선 초에는 나이가 많아 등용되지는 못하였으나, 죽은 후에 그의 공을 생각하여 의정부 우정승(議政府右政丞)과 영성부원군(永城府院君)으로 추증되었다.</문단>
    <문단>아들 <인명 id="인물-최해산">최해산</인명>과 손자 <인명>최공손</인명>도 화약과 화기 연구에 참여하였으며, 저서로는 화약의 제조법과 <개념 url="http://terms.naver.com/entry.nhn?docId=102665&cid=41826&categoryId=41826">염초(焰硝)</개념>의 채취 방법 등을 기술한 <서명>《화약수련법》</서명>을 남겼으나 전하지 않고 있다.</문단>
  </설명>
  <가족정보>
    <가족 관계="아들">
      <인명 id="인물-최해산">최해산</인명>
    </가족>
  </가족정보>
  <관련인물정보>
    <관계자>
      <대상>
        <인명 id="인물-이원">이원</인명>
      </대상>
      <관계>원(元)나라 상인으로, <인명>최무선</인명>에게 염초(焰硝) 제조법을 알려줌</관계>
    </관계자>
    <관계자>
      <대상>
        <인명 id="인물-나세">나세</인명>
      </대상>
      <관계>원나라 귀화인으로, <인명>최무선</인명>, <인명 id="인물-심덕부">심덕부</인명>와 함께 <사건 id="진포대첩">진포대첩</사건>을 이끔</관계>
    </관계자>
    <관계자>
      <대상>
        <인명 id="인물-심덕부">심덕부</인명>
      </대상>
      <관계>
        <인명>최무선</인명>, <인명 id="인물-나세">나세</인명>와 함께 <사건 id="사건-진포대첩">진포대첩</사건>을 이끔</관계>
    </관계자>
  </관련인물정보>
  <관련사물정보>
    <저작>
      <개념 id="개념-화포">화포</개념>
      <사진 url="화포" />
    </저작>
    <저작>
      <개념 id="개념-화전">화전</개념>
      <사진 url="화전" />
    </저작>
    <저작>
      <개념 id="개념-주화">주화</개념>
      <사진 url="주화" />
    </저작>
    <저작>
      <개념 id="개념-대장군포">대장군포</개념>
      <사진 url="대장군포" />
    </저작>
    <저작>
      <개념 id="개념-피령전">피령전</개념>
      <사진 url="피령전" />
    </저작>
    <저작>
      <서명>《화약수련법》</서명>
      <사진 url="화약수련법" />
    </저작>
  </관련사물정보>
  <온라인참조 url="http://encykorea.aks.ac.kr/Contents/Index?contents_id=E0057297">(출처: 최무선, ≪한국민족문화대백과사전≫)</온라인참조>
  <온라인참조 url="http://www.doopedia.co.kr/doopedia/master/master.do?_method=view&MAS_IDX=101013000741256">(출처: 최무선, ≪두산백과≫)</온라인참조>
  <시각>
    <삽도 url="최무선.jpg">최무선 영정</삽도>
  </시각>
  <연관>
    <관련항목 rel="~에 그려졌다" id="작품-화포와화약을제조하는최무선" />
    <관련항목 rel="~에게 배웠다" id="인물-이원" />
    <관련항목 rel="~의 아버지다" id="인물-최해산" />
    <관련항목 rel="~와 관련된다" id="인물-나세" />
    <관련항목 rel="~와 관련된다" id="인물-심덕부" />
    <관련항목 rel="~에 의해 찬양되었다" id="인물-권근" />
    <관련항목 rel="~에서 활동하였다" id="개념-화통도감" />
    <관련항목 rel="~를 제조했다" id="개념-화포" />
    <관련항목 rel="~을 제조했다" id="개념-화전" />
    <관련항목 rel="~를 제조했다" id="개념-주화" />
    <관련항목 rel="~를 제조했다" id="개념-대장군포" />
    <관련항목 rel="~을 제조했다" id="개념-피령전" />
    <관련항목 rel="~을 지휘하였다" id="사건-진포대첩" />
    <관련항목 rel="~에 기록되어 있다" id="기록물-고려사" />
    <관련항목 rel="~에 기록되어 있다" id="기록물-신증동국여지승람" />
    <관련항목 rel="~에 기록되어 있다" id="기록물-조선왕조실록" />
    <관련항목 rel="~에 기록되어 있다" id="기록물-양촌집" />
    <관련항목 rel="~의 소재이다" id="기록물-최무선" />
    <관련항목 rel="~의 소재이다" id="개념-드라마예성강" />
    <관련항목 rel="~와 관련된다" id="개념-최무선장군추모비" />
    <관련항목 rel="~와 관련된다" id="개념-최무선장군추모제" />
  </연관>
</인물정보>')

select * from xmltable3

delete xmltable3 where id='인물-최무선'


insert into xmltable3(xmltxt)
select xmltxt from xmltable1
--PRIMARY KEY 제약 조건 .... 개체 'dbo.xmltable3'에 중복 키를 삽입할 수 없습니다. 

select id from xmltable2

select distinct id from xmltable2 --xmltable2로부터 id요소를 뽑아서 별개로 보여줘라--

--id가 중복되는 것을 찾아서 하나로 만들기 위해 찾아보기--
select id, count(*) from xmltable2
group by id 
order by count(*) desc

/* 중복 record
개념-최무선장군추모제
개념-화포
문헌-조선왕조실록
개념-화전
*/


--중복되는 4개를 제외하고 xmltable2의 값을 xmltable3에 넣기--
insert into xmltable3(xmltxt)
select xmltxt from xmltable2
where id not in (
'개념-최무선장군추모제',
'문헌-조선왕조실록',
'개념-화포',
'개념-화전'
)

select * from xmltable3

--중복되어 넣지 못했던 4개를 개별적으로 넣기--
select top 1 * from xmltable2
where id='개념-최무선장군추모제'

insert into xmltable3(xmltxt)
select top 1 xmltxt from xmltable2
where id='개념-최무선장군추모제'

insert into xmltable3(xmltxt)
select top 1 xmltxt from xmltable2
where id='문헌-조선왕조실록'

insert into xmltable3(xmltxt)
select top 1 xmltxt from xmltable2
where id='개념-화포'

insert into xmltable3(xmltxt)
select top 1 xmltxt from xmltable2
where id='개념-화전'

select * from xmltable3


--N글자 지우기--
select xmltxt from xmltable3
where id='작가-강학태'

--N글자 지우기 방법1: update를 이용하여 새로 넣기--
update xmltable3
set xmltxt=N'<작가정보 id="작가-강학태"><기본사항><명칭><이름 표기="한글">강학태</이름></명칭><분야>서양화가</분야><생몰년><출생>1935년</출생></생몰년><생몰지><출생지>함경북도 청진시</출생지></생몰지><사진><시각 id="강학태.jpg" /></사진></기본사항><범주><프로젝트>민족기록화</프로젝트><클래스>작가</클래스><기여 역할="작성">김지선</기여></범주><설명><문단>소설가 <인명>강학태</인명>는 1935년에 <지명>함북</지명><지명>청진</지명>에서 태어났다. 어린 시절 한때 <지명>만주</지명>에서 살다가 해방과 함께 고향으로 돌아왔다. <기관>김일성 종합대학</기관> 외국문학부 중국어과를 졸업한 후 <서명>《청년문학》</서명> 편집에 종사한 바 있다고 전해진다.</문단><문단><인명>강학태</인명>는 <서명>『높새바람』</서명>, <서명>『황진이』</서명>등을 발표한 <인명>홍석중</인명>과 더불어 역사소설의 대가로 꼽힌다.</문단></설명><이력사항><학력정보><학력>김일성종합대학 외국문학부 중국어과</학력></학력정보><저서정보><저서 연도="1968">시 삼덕땅에서 타오르는 홰불</저서><저서 연도="1971">단편소설 바다의 젊은이들</저서><저서 연도="1971">단편소설 동이 터온다</저서><저서 연도="1972">단편소설 길</저서><저서 연도="1979">단편소설 공장의 주인공</저서><저서 연도="1980">단편소설 고구려사신</저서><저서 연도="1981">수필 혈맥은 이어져야 한다</저서><저서 연도="1987">역사소설 김정호</저서><저서 연도="1991">단편소설 사랑과 길</저서><저서 연도="1994">장편소설 민족의 어버이</저서><저서 연도="2000">역사소설 <서명 id="기록물-최무선">최무선</서명></저서></저서정보></이력사항><작품정보><작품 id="소설최무선.jpg">최무선</작품><작품 id="소설김정호.jpg">김정호</작품><작품 id="소설대동여지도.jpg">대동여지도</작품></작품정보><연관><관련항목 rel="~을 저술했다" id="기록물-최무선" /></연관></작가정보>'
where  id='작가-강학태'

select xmltxt from xmltable3
where id='작가-최대섭'

select xmltxt.query('/작가정보') from xmltable3
where id='작가-최대섭'
--N글자 지우기 방법2: N이후의 작가정보 아래의 것들만 취하여 업데이트--
update xmltable3
set xmltxt=xmltxt.query('/작가정보')
where id='작가-최대섭'


--정제된 table3완성--
select * from xmltable3