abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 02:33 | Nová verze

    Byla vydána nová verze 6.1 linuxové distribuce Lakka (Wikipedie), jež umožňuje transformovat podporované počítače v herní konzole. Nejnovější Lakka přichází s RetroArchem 1.22.2.

    Ladislav Hagara | Komentářů: 0
    dnes 02:11 | Nová verze

    Matematický software GNU Octave byl vydán ve verzi 11.1.0. Podrobnosti v poznámkách k vydání. Vedle menších změn rozhraní jsou jako obvykle zahrnuta také výkonnostní vylepšení a zlepšení kompatibility s Matlabem.

    |🇵🇸 | Komentářů: 0
    včera 21:44 | Nová verze

    Weston, referenční implementace kompozitoru pro Wayland, byl vydán ve verzi 15.0.0. Přehled novinek v příspěvku na blogu společnosti Collabora. Vypíchnout lze Lua shell umožňující psát správu oken v jazyce Lua.

    Ladislav Hagara | Komentářů: 0
    včera 21:11 | Nová verze

    Organizace Apache Software Foundation (ASF) vydala verzi 29 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.

    Ladislav Hagara | Komentářů: 3
    včera 18:22 | IT novinky

    Ústavní soud na svých webových stránkách i v databázi NALUS (NÁLezy a USnesení Ústavního soudu) představil novou verzi chatbota využívajícího umělou inteligenci. Jeho posláním je usnadnit veřejnosti orientaci v rozsáhlé judikatuře Ústavního soudu a pomoci jí s vyhledáváním informací i na webových stránkách soudu, a to i v jiných jazycích. Jde o první nasazení umělé inteligence v rámci webových stránek a databází judikatury českých soudů.

    Ladislav Hagara | Komentářů: 13
    včera 13:00 | Nová verze

    Byla vydána nová verze 10.1 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnuta je podpora NanoPi Zero2 a balíček WhoDB.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Komunita

    Konference Otvorený softvér vo vzdelávaní, výskume a v IT riešeniach OSSConf 2026 proběhne od 1. do 3. července 2026 na Žilinské univerzita v Žilině: "Cieľom našej konferencie je poskytnúť priestor pre informovanie o novinkách vo vývoji otvoreného softvéru a otvorených technológií, o možnostiach využitia týchto nástrojov vo vede a vzdelávaní a taktiež poskytnúť priestor pre neformálne priateľské stretnutie užívateľov a priaznivcov

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 12:22 | Pozvánky

    Korespondenční seminář z programování (KSP) pražského Matfyzu pořádá i letos jarní soustředění pro začátečníky. Zváni jsou všichni středoškoláci a starší základoškoláci, kteří se chtějí naučit programovat, lépe uvažovat o informatických úlohách a poznat nové podobně smýšlející kamarády. Úplným začátečníkům bude určen kurz základů programování a kurz základních algoritmických dovedností, pokročilejším nabídneme různorodé

    … více »
    skywalqer | Komentářů: 1
    22.2. 04:11 | Komunita

    Fedora je od 10. února dostupná v Sýrii. Sýrie vypadla ze seznamu embargovaných zemí a Fedora Infrastructure Team mohl odblokovat syrské IP adresy.

    Ladislav Hagara | Komentářů: 22
    22.2. 03:44 | Zajímavý projekt

    Ministerstvo zahraničí Spojených států amerických vyvíjí online portál Freedom.gov, který umožní nejenom uživatelům v Evropě přístup k obsahu blokovanému jejich vládami. Portál bude patrně obsahovat VPN funkci maskující uživatelský provoz tak, aby se jevil jako pocházející z USA. Projekt měl být původně představen již na letošní Mnichovské bezpečnostní konferenci, ale jeho spuštění bylo odloženo.

    NUKE GAZA! 🎆 | Komentářů: 29
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (11%)
     (27%)
     (2%)
     (5%)
     (1%)
     (12%)
     (26%)
    Celkem 946 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Dotaz: RDBMS - jsou vygenerované dotazy ekvivalentní?

    4.11.2010 00:02 rdbms
    RDBMS - jsou vygenerované dotazy ekvivalentní?
    Přečteno: 533×
    Zdravím místní guru. Musel jsem si napsat jednoduchou php aplikaci na generování dotazů pro různé sql databázové stroje. Po několikahodinovém studování manuálů jsem to napsal. Odzkoušel jsem to v MySQL a Oracle, ale nemám k dispozici ostatní databáze. Mohl by prosím někdo zasvěcený kouknout na následující dotazy a zkontrolovat jestli jsou zápisy pro SELECT ekvivalentní a hlavně funkční? (ibm = DB2, dblib = MSSQL, oci = ORACLE)
    ///// mysql \\\\\
    SELECT `UZIVATELE`.`CISLO` AS `CISLO`,`UZIVATELE`.`JMENO` AS `JMENO`,`SKUPINY`.`JMENO` AS `SKUPINY_JMENO` FROM `UZIVATELE` LEFT JOIN `SKUPINY` ON `UZIVATELE`.`CISLO` = `SKUPINY`.`CISLO` WHERE (`UZIVATELE`.`CISLO`>4 AND `UZIVATELE`.`JMENO`<>'PEPA' AND `UZIVATELE`.`JMENO`<>'JOSEF') ORDER BY `UZIVATELE`.`CISLO` LIMIT 4 OFFSET 1
    
    ///// pgsql \\\\\
    SELECT "UZIVATELE"."CISLO" AS "CISLO","UZIVATELE"."JMENO" AS "JMENO","SKUPINY"."JMENO" AS "SKUPINY_JMENO" FROM "UZIVATELE" LEFT JOIN "SKUPINY" ON "UZIVATELE"."CISLO" = "SKUPINY"."CISLO" WHERE ("UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA' AND "UZIVATELE"."JMENO"<>'JOSEF') ORDER BY "UZIVATELE"."CISLO" LIMIT 4 OFFSET 1
    
    ///// firebird \\\\\
    SELECT "UZIVATELE"."CISLO" AS "CISLO","UZIVATELE"."JMENO" AS "JMENO","SKUPINY"."JMENO" AS "SKUPINY_JMENO" FROM "UZIVATELE" LEFT JOIN "SKUPINY" ON "UZIVATELE"."CISLO" = "SKUPINY"."CISLO" WHERE ("UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA' AND "UZIVATELE"."JMENO"<>'JOSEF') ORDER BY "UZIVATELE"."CISLO" ROWS 2 TO 5
    
    ///// oci \\\\\
    SELECT "CISLO","JMENO","SKUPINY_JMENO" FROM (SELECT "UZIVATELE"."CISLO" AS "CISLO","UZIVATELE"."JMENO" AS "JMENO","SKUPINY"."JMENO" AS "SKUPINY_JMENO",ROW_NUMBER() OVER (ORDER BY "UZIVATELE"."CISLO") AS RN FROM "UZIVATELE" LEFT JOIN "SKUPINY" ON "UZIVATELE"."CISLO" = "SKUPINY"."CISLO" WHERE ("UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA' AND "UZIVATELE"."JMENO"<>'JOSEF')) WHERE RN <= 5 AND RN > 1
    
    ///// ibm \\\\\
    SELECT "CISLO","JMENO","SKUPINY_JMENO" FROM (SELECT "UZIVATELE"."CISLO" AS "CISLO","UZIVATELE"."JMENO" AS "JMENO","SKUPINY"."JMENO" AS "SKUPINY_JMENO",ROW_NUMBER() OVER (ORDER BY "UZIVATELE"."CISLO") AS RN FROM "UZIVATELE" LEFT JOIN "SKUPINY" ON "UZIVATELE"."CISLO" = "SKUPINY"."CISLO" WHERE ("UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA' AND "UZIVATELE"."JMENO"<>'JOSEF')) WHERE RN <= 5 AND RN > 1
    
    ///// dblib \\\\\
    SELECT "CISLO","JMENO","SKUPINY_JMENO" FROM (SELECT "UZIVATELE"."CISLO" AS "CISLO","UZIVATELE"."JMENO" AS "JMENO","SKUPINY"."JMENO" AS "SKUPINY_JMENO",ROW_NUMBER() OVER (ORDER BY "UZIVATELE"."CISLO") AS RN FROM "UZIVATELE" LEFT JOIN "SKUPINY" ON "UZIVATELE"."CISLO" = "SKUPINY"."CISLO" WHERE ("UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA' AND "UZIVATELE"."JMENO"<>'JOSEF')) WHERE RN <= 5 AND RN > 1
    
    ///// sqlite \\\\\
    SELECT "UZIVATELE"."CISLO" AS "CISLO","UZIVATELE"."JMENO" AS "JMENO","SKUPINY"."JMENO" AS "SKUPINY_JMENO" FROM "UZIVATELE" LEFT JOIN "SKUPINY" ON "UZIVATELE"."CISLO" = "SKUPINY"."CISLO" WHERE ("UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA' AND "UZIVATELE"."JMENO"<>'JOSEF') ORDER BY "UZIVATELE"."CISLO" LIMIT 4 OFFSET 1
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    ///// mysql \\\\\
    SELECT `CISLO` AS `CISLO`,COUNT(`JMENO`) AS `JMENO` FROM `UZIVATELE` WHERE (`CISLO`>4) GROUP BY `CISLO` ORDER BY `CISLO` LIMIT 4 OFFSET 1
    
    ///// pgsql \\\\\
    SELECT "CISLO" AS "CISLO",COUNT("JMENO") AS "JMENO" FROM "UZIVATELE" WHERE ("CISLO">4) GROUP BY "CISLO" ORDER BY "CISLO" LIMIT 4 OFFSET 1
    
    ///// firebird \\\\\
    SELECT "CISLO" AS "CISLO",COUNT("JMENO") AS "JMENO" FROM "UZIVATELE" WHERE ("CISLO">4) GROUP BY "CISLO" ORDER BY "CISLO" ROWS 2 TO 5
    
    ///// oci \\\\\
    SELECT "CISLO","JMENO" FROM (SELECT "CISLO" AS "CISLO",COUNT("JMENO") AS "JMENO",ROW_NUMBER() OVER (ORDER BY "CISLO") AS RN FROM "UZIVATELE" WHERE ("CISLO">4) GROUP BY "CISLO") WHERE RN <= 5 AND RN > 1
    
    ///// ibm \\\\\
    SELECT "CISLO","JMENO" FROM (SELECT "CISLO" AS "CISLO",COUNT("JMENO") AS "JMENO",ROW_NUMBER() OVER (ORDER BY "CISLO") AS RN FROM "UZIVATELE" WHERE ("CISLO">4) GROUP BY "CISLO") WHERE RN <= 5 AND RN > 1
    
    ///// dblib \\\\\
    SELECT "CISLO","JMENO" FROM (SELECT "CISLO" AS "CISLO",COUNT("JMENO") AS "JMENO",ROW_NUMBER() OVER (ORDER BY "CISLO") AS RN FROM "UZIVATELE" WHERE ("CISLO">4) GROUP BY "CISLO") WHERE RN <= 5 AND RN > 1
    
    ///// sqlite \\\\\
    SELECT "CISLO" AS "CISLO",COUNT("JMENO") AS "JMENO" FROM "UZIVATELE" WHERE ("CISLO">4) GROUP BY "CISLO" ORDER BY "CISLO" LIMIT 4 OFFSET 1
    
    Ještě bych potřeboval vědět jak se tyto databáze perou s velkými/malými písmeny. V Oraclu jsem musel názvy sloupců převést do velkých písem protože s tím měl problémy, mysql zvládá malá i velká. Jak jsou na tom ostatní. Předem děkuji za reakce.

    Odpovědi

    4.11.2010 07:30 jeleniste | skóre: 13 | blog: Prokustovo lože
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?

    K MSSQL, ekvivalent k limit o MSSQL je

    Select top 5 * from tbl

    Nicméně to tam nedostaneš ten offset, tohle ti bude fungovat, ale já bych to zapsal:

    WITH CTE AS
    (
    Select
    *, row_number() over(order by neco) pid
    from tbl1
    join neco on...
    )
    Select tohle a tamto from CTE where pid between 1 and 4

    přičemž to cte není nezbytný, ale proč ho nepoužít, když je k dispozici (někdo to možná označí za syntaktickou prasárnu)

    ON "UZIVATELE"."CISLO" = "SKUPINY"."CISLO" WHERE ("UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA' AND "UZIVATELE"."JMENO"<>'JOSEF'))

    bych napsal jako: ON "UZIVATELE"."CISLO" = "SKUPINY"."CISLO"
    and UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA'
    AND "UZIVATELE"."JMENO"<>'JOSEF'

    Nejsem blbý, jen se hloupě ptám
    4.11.2010 10:21 rdbms
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?
    Podle dokumentací by měl zápis pro DB2, MSSQL a ORACLE v tomto případě být shodný. Jestli jsem to pochopil tak ten můj zápis bude pro mssql fungovat? Jestli ano tak to mi víceméně stačí protože je to sql standard. Ten zápis s where mi ulehčí v programu několik desítek řádků kódu a budou se v tom lépe hledat chyby - pokud to chápu tak zápis s where se aplikuje po spojení tabulek, ale ten druhý zápis je rovnou omezení při spojování tabulek (...možná si to db optimalizuje?).
    4.11.2010 14:45 jeleniste | skóre: 13 | blog: Prokustovo lože
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?

    Nebude to fungovat

    Protože vnořený Select musí mít alias

    SELECT 
      "CISLO","JMENO","SKUPINY_JMENO" 
     FROM 
      (
        SELECT 
          "UZIVATELE"."CISLO" AS "CISLO","UZIVATELE"."JMENO" AS "JMENO","SKUPINY"."JMENO" AS "SKUPINY_JMENO"
          ,ROW_NUMBER() OVER (ORDER BY "UZIVATELE"."CISLO") AS RN 
         FROM 
         "UZIVATELE" 
          LEFT JOIN 
         "SKUPINY" 
         ON 
           "UZIVATELE"."CISLO" = "SKUPINY"."CISLO" 
         WHERE 
          ( 
            "UZIVATELE"."CISLO">4 
        AND "UZIVATELE"."JMENO"<>'PEPA' 
        AND "UZIVATELE"."JMENO"<>'JOSEF'
           )
       ) dta
    WHERE RN <= 5 AND RN > 1 

    tohle bude fungovat, nevim, esli to bude vracet to, co to vracet má (protože nevim, co to vracet má), ale fungovat to bude

    Nejsem blbý, jen se hloupě ptám
    4.11.2010 17:57 rdbms
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?
    Děkuju. Tady je úplně jedno co to bude vracet, ale musí to vracet stejné hodnoty pod všemi RDBMS. S tím aliasem to funguje i pod Oracle takže to je ok. Ještě bych potřeboval aby mi někdo napsal, zda jsou syntakticky v pořádku dotazy i pro ostatní databáze (i s přihlédnutím na limitování výstupních hodnot - jde o to, že mysql má offset od 0, firebird má rows od 1 apod.).
    4.11.2010 19:03 jekub
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?
    musí to vracet stejné hodnoty pod všemi RDBMS

    bez šance. zkuste nějaký update bez dokončení transakce a v jiném spojení select z opravovaných dat. někde select skončí chybou (mssql - tady ale myslím záleží na stránkování datového souboru), někde bude čekat ma dokončení (db2, informix) a oracle prostě vrátí hodnoty platné (konzistentní čtení) dokud nebude transakce opravující data potvrzena.
    4.11.2010 20:02 rdbms
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?
    Dobrá tedy: pokud nepředpokládám nějakou předchozí modifikaci nebo použití transakce tak to musí vrátit stejná data.
    5.11.2010 08:53 jeleniste | skóre: 13 | blog: Prokustovo lože
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?
    No, ono tomu tak nutně nemusí bejt, protože jinak IMHO funguje row_number + podmínka a jinak limit. Jednak je třeba ošetřit collation u toho order by (pokud to nebudou jen čísla, ale i nějaký to písmenko) a potom by se ti mohlo stát, že výsledek nebude totožnej, pokud budeš mít v tom podle čeho je to řazené dvě stejné hodnoty.
    Nejsem blbý, jen se hloupě ptám
    5.11.2010 11:03 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?
    ad oracle a velikost písmen v identifikátorech:

    jde to. Porovnej:

    select 1 from dual;
    select 1 from "dual";
    select 1 from "DUAL";
    

    jde o ty uvozovky kolem.

    jinak už mám jen takovou poznámku. K oraclu samozřejmě:

    ... WHERE ("UZIVATELE"."CISLO">4 AND "UZIVATELE"."JMENO"<>'PEPA' AND "UZIVATELE"."JMENO"<>'JOSEF')) WHERE RN <= 5 AND RN > 1

    máš nějaký konkrétní důvod, proč používáš v podmínkách hodnoty místo bindovaných proměnných? Pár důvodů existuje, ale jsem si téměř jistý, že to není tvůj případ.
    Kuolema Kaikille (Paitsi Meille).
    5.11.2010 15:51 rdbms
    Rozbalit Rozbalit vše Re: RDBMS - jsou vygenerované dotazy ekvivalentní?
    máš nějaký konkrétní důvod, proč používáš v podmínkách hodnoty místo bindovaných proměnných? Pár důvodů existuje, ale jsem si téměř jistý, že to není tvůj případ.
    Důvod nemám. Dřív než jsem předělal aplikaci aby striktně používala pro všechny sloupce "AS", což jak jsem zjistil u vnořeých dotazů je nutnost, jsem měl where napsaný tahle a už jsem where část dotazu nepředělal.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.