« » , 03, 2007 2948
SQL
, , . : , , , , - , , , .
«—», «—», «—». , .
, , . Microsoft SQL Server 2005, , , , .
: ( ), . 1.
, , i- j- 1, () i j (, ), 0 . .
() (, ) : — , — .
(NULL) , « ».
. , , . .
( MS SQL Server 2005):
WITH ([ ], [ ], , ) AS
(
SELECT [ ], [ ], , 1
FROM
WHERE [ ] = 40288000 — IS NULL
UNION ALL
SELECT .[ ], .[ ], ., + 1
FROM
INNER JOIN ON .[ ] = .[ ]
WHERE .[ ] IS NOT NULL
)
SELECT [ ], [ ], ,
FROM
( ):
WITH ([ ], [ ], , ) AS
(
SELECT [ ], [ ], , 1
FROM
WHERE [ ] = 40288000 —
UNION ALL
SELECT .[ ], .[ ], ., + 1
FROM
INNER JOIN ON .[ ] = .[ ]
)
SELECT [ ], [ ], , (SELECT MAX() FROM ) —
FROM
, , (, , «» « »):
WITH ([ ], [ ], , ) AS
(
SELECT [ ], [ ], , 1
FROM
WHERE [ ] = 40288000 — ,
UNION ALL
SELECT .[ ], .[ ], ., + 1
FROM
INNER JOIN ON .[ ] = .[ ]
)
SELECT result =
CASE
WHEN EXISTS(
SELECT 1 FROM
WHERE [ ] = 40260000 /* */)
THEN ‘ ’
ELSE ‘ ’
END
: , (Joe Celko) nested sets ( ), . , , « » .
: — , , , .. , . 2.
. 3.
. , . ( ), .
, , , , ( ). .
, , : .
:
SELECT [ ],
FROM
WHERE [ ] = 123 —
ORDER BY
( ):
SELECT [ ],
FROM
WHERE [ ] = 345 —
ORDER BY
:
SELECT result =
CASE
WHEN EXISTS(
SELECT 1 FROM
WHERE [ ] = 345 /* */
AND [ ] = 211 /* */)
THEN ‘ ’
ELSE ‘ ’
END
, : , . : , , , . ? . 4, .
, ( ), , « » (nested sets). , . 4 , . .
, , — , .. . , , . (. 5), , .
— ( ). . , , , , «» «», .
.
:
SELECT T1.*
FROM [ 3] as T1, [ 3] as T2
WHERE T1. BETWEEN T2. AND T2.
AND T2.[ ] = 123 —
ORDER BY T1.
BETWEEN:
SELECT T1.*
FROM [ 3] as T1, [ 3] as T2
WHERE T2. BETWEEN T1. AND T1.
AND T2.[ ] = 345 —
ORDER BY T1.
:
SELECT result =
CASE
WHEN EXISTS(
SELECT 1 FROM [ 3] as T1, [ 3] as T2
WHERE T1.[ ] = 456 /* */
AND T2.[ ] = 123 /* */
AND T1. BETWEEN T2. AND T2.)
THEN ‘ ’
ELSE ‘ ’
END
: «»
-, ( Visual Basic), . , , -, , -, (GOTO, ) - . , .
, . 1, 2, 3, 10, 20, 30. .
, : , 100 1000, .
. , :
, , .
: , . , , (), (, NAICS), ( — ) .
. , , .
:
SELECT *
FROM [ 4]
WHERE LIKE ‘1.2%’ —
ORDER BY
:
SELECT *
FROM [ 4]
WHERE ‘1.2.1’ /* */ LIKE + ‘%’
ORDER BY
SELECT T1.*
FROM [ 4] T1, [ 4] T2
WHERE T2. LIKE T1. + ‘%’
AND T2. like ‘ ’
:
SELECT result =
CASE
WHEN EXISTS(
SELECT 1 FROM [ 4] as T1, [ 4] as T2
WHERE T1. = ‘ ’ /* */
AND T2. = ‘ ’ /* */
AND T1. LIKE T2. + ‘%’)
THEN ‘ ’
ELSE ‘ ’
END
, , . .
, ( - ) NAICS (North American Industry Classification System — ).
. , .
, «» «» : , .
, , , . , , , .
- Joe Celko. Trees in SQL. Some answers to some common questions about SQL trees and hierarchies. http://www.intelligententerprise.com/001020/celko.jhtml?_requestid=1266295
- Vadim Tropashko. Trees in SQL: Nested Sets and Materialized Path. http://www.dbazine.com/oracle/or-articles/ tropashko4
- . SQL. . . .: , 2006.
— , e-mail: serge@arbinada.com.








