« » , 03, 2007 2948

SQL

, , . : , , , , - , , , .
«—», «—», «—». , .
, , . Microsoft SQL Server 2005, , , , .


: ( ), . 1.

. 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.

. 2.       

. 3.

. 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, .

. 4.       

, ( ), , « » (nested sets). , . 4 , . .
. 5.    , , — , .. . , , . (. 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, .


. 6.    . , :
, , .
: , . , , (), (, 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 — ).


. , .
, «» «» : , .
, , , . , , , .

  1. 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
  2. Vadim Tropashko. Trees in SQL: Nested Sets and Materialized Path. http://www.dbazine.com/oracle/or-articles/ tropashko4
  3. . SQL. . . .: , 2006.


— , e-mail: serge@arbinada.com.



28/03/2012 04


« »

:

« »

c