DBMS 2
DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!
9.1이전 XML 데이터가 데이터베이스에 저장하는 방식입니다 9.1 이후, 하나의 테이블은 관계형 데이터와 계층적 데이터로 나누어서 저장됩니다 테이블 생성을 위한 샘플 XML 문장입니다. 테이블 생성 문입니다. 인덱스 생성 문입니다. XML 문의 element, attribute, 그리고 text node에 대해서 인덱 스를 생성할 수 있습니다. XML 문의 트리 구조에서 document, element, attribute, text, comment 노드별 구조입니다. SQL/Xml문과 XQuery는 각각 ISO 및 W3C에서 인증하는 언어로써, 사용법이 다릅니다. SQL/Xml문에서 사용하는 주요 함수입니다. XPath를 사용하기 위해 XML 문서 예제를 살펴보겠습니다. 위의 문서를 구조적으로 표현하면 아래와 같습니다. XPath를 사용하여 아래와 같이 결과값을 얻을 수 있습니다. XPath에서 “[]”를 사용하면 SQL문에서 where 구문을 사용하는 것처럼 조건문으로 사용할 수 있습니다. XPath에서 “.” 은 현재 위치를, “..”는 상위 정보를 알려주는 데 사용합니다. FLOWR 표현식은 아래와 같습니다. Xquery 사용 예제입니다. 조회결과) Xmlexists 사용 예입니다. Xmlquery 사용 예입니다. Xmltable 사용 예입니다. Clients 테이블의 contract xml 컬럼의 데이터 조회 클라이언트 팩스 데이터 조회 두 테이블(dept, unit)에 대해서 조인문 쿼리XML 데이터 관리
XML 데이터 관리
XML 구조 및 데이터베이스
XML 테이블 및 인덱스 생성
name>Matt Foreman/name>
addr country="Canada">
street>1596 Baseline/street>
city>Toronto/city>
state>Ontario/state>
pcode>M3Z-5H9/pcode>
/addr>
phone type="work">905-555-4789/phone>
phone type="home">416-555-3376/phone>
assistant>
name>Peter Smith/name>
phone type="home">416-555-3426/phone>
/assistant>
/customerinfo>
CREATE UNIQUE INDEX idx1 ON customer(info)
GENERATE KEY USING
xmlpattern '/customerinfo/@Cid'
AS sql DOUBLE
-- Element name에 인덱스 생성
CREATE INDEX idx2 ON customer(info) GENERATE KEY USING
xmlpattern '/customerinfo/name'
AS sql VARCHAR(40)
-- 모든 elements name에 인덱스 생성
CREATE INDEX idx3 ON customer(info)
GENERATE KEY USING
xmlpattern '//name'
AS sql VARCHAR(40);
XML 쿼리문
-- SQL : 관계형 데이터에 접근하기 위한 표준 언어입니다.
-- Xquery : XML 쿼리언어로 W3C에서 인증하는 언어입니다.
-- SQL/XML : SQL과 XML를 같이 다루는 ISO에서 인증하는 표준 언어입니다.
XML 쿼리문 - XPath
employee id=“901”>
name>John Doe/name>
phone>408 555 1212/phone>
office>344/office>
/employee>
employee id=“902”>
name>Peter Pan/name>
phone>408 555 9918/phone>
office>216/office>
/employee>
/dept>
XML 쿼리문 - XPath
XML 쿼리문 - Xquery
조회문)
for $d in db2-fn:xmlcolumn('dept.deptdoc')/dept
let $emp := $d//employee/name
where $d/@bldg > 95
order by $d/@bldg
return
EmpList>
{$d/@bldg, $emp}
/EmpList>
name>
John Doe
/name>
name>
Peter Pan
/name>
/EmpList>
XML 쿼리문 ? SQL/XML
SELECT name FROM clients
WHERE xmlexists(
'$c/Client/Address[zip="95116"]'
passing clients.contact as "c"
)
FROM clients
WHERE status = 'Gold‘
FROM items i,
xmltable('$c/Comments/Comment' passing i.comments as "c"
columns Comment# integer path 'CommentID',
CustomerID integer path 'CustomerID',
Message varchar(100) path 'Message') AS t
?위 문장의 경우 “SELECT contact FROM clients” 와 동일합니다.
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax
return $y
FROM dept d, unit u
WHERE XMLEXISTS (
‘$e//employee[name = $m]’
passing d.deptdoc as “e”, u.manager as “m”)