602SQL-┌plnß dokumentace Index   Tisk  

Zobecn∞nß tabulka (SQL)

zobecn∞nß tabulka ::= { identifikßtor_tabulky [ specifikace_indexu ] | identifikßtor_ulo₧enΘho_dotazu | ( dotazov²_v²raz ) | join } [ p°ejmenovßnφ ]
specifikace_indexu ::= INDEX jmΘno_indexu
join ::= zobecn∞nß_tabulka druh_joinu zobecn∞nß_tabulka [ specifikace_joinu ]
druh_joinu ::= CROSS JOIN | [ NATURAL ] [ INNER | { LEFT | RIGHT | FULL } [ OUTER ] ] JOIN 
specifikace_joinu ::= ON podmφnka | USING ( nßzev_sloupce { , nßzev_sloupce }à)
p°ejmenovßnφ ::= [ AS ] jmΘno [( jmΘno_sloupce { , jmΘno_sloupce }à)]

Pojem zobecn∞nß tabulka definuje, kterΘ objekty mohou v jazyce SQL plnit funkci tabulky. Krom∞ skuteΦnΘ tabulky nebo dotazu ulo₧enΘho v databßzi (VIEW) to m∙₧e b²t i dotazov² v²raz v zßvorkßch nebo join.

Pojem join vyjad°uje vytvo°enφ spojen²ch zßznam∙ ze dvou tabulek z°et∞zenφm hodnot sloupc∙ z jednoho zßznamu prvnφ tabulky a jednoho zßznamu druhΘ tabulky. Druh joinu a specifikace joinu urΦujφ, kter² zßznam s kter²m se takto spojφ:

Specifikace indexu u jmΘna tabulky vnutφ pou₧itφ konkrΘtnφho indexu bez ohledu na volbu optimalizßtoru.

P°φpadnΘ p°ejmenovßnφ na konci zobecn∞nΘ tabulky dovoluje zadat jmΘno, jim₧ se bude mo₧no na tuto tabulku dßle odkazovat, a p°φpadn∞ takΘ jmΘna sloupc∙ tΘto tabulky. PoΦet uveden²ch jmen sloupc∙ musφ b²t stejn² jako poΦet sloupc∙ v zobecn∞nΘ tabulce.

Odchylky od Intermediate level sm∞rem k Full level nebo k SQL 3

RozÜφ°enφ jazyka SQL proti norm∞

Viz takΘ:

Dotazy v SQL

Sbφrka dotaz∙

P°φklad pou₧itφ dotazov²ch v²raz∙ a join∙ na mφst∞ zobecn∞nΘ tabulky (z aplikace eSupport - zjednoduÜeno):

SELECT *
FROM Kb_topics 
   LEFT OUTER JOIN 
     (SELECT topic_id,un_reports+un_answers AS unanswered 
      FROM (SELECT topic_id,Count(*) AS un_reports 
            FROM Kb_reports WHERE all_answer_count=0 GROUP BY topic_id
           ) 
         JOIN 
           (SELECT Kb_reports.topic_id,Count(*) AS un_answers 
            FROM Kb_reports JOIN Kb_answers ON (Kb_reports.id=Kb_answers.report_id) 
            WHERE (NOT EXISTS(SELECT * 
                              FROM Kb_answers answ 
                              WHERE Kb_answers.id=answ.question_id)) 
            GROUP BY Kb_reports.topic_id
            ) 
         USING (topic_id)) 
      ON (Kb_topics.id=topic_id) 
ORDER BY Kb_topics.pos