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í
×
    včera 14:00 | Zajímavý článek

    Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie).

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

    V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 12.0 (Mastodon). Forgejo je fork Gitei.

    Ladislav Hagara | Komentářů: 0
    17.7. 18:44 | Zajímavý článek

    Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 155 (pdf) a Hello World 27 (pdf).

    Ladislav Hagara | Komentářů: 1
    17.7. 16:11 | Nová verze

    Hyprland, tj. kompozitor pro Wayland zaměřený na dláždění okny a zároveň grafické efekty, byl vydán ve verzi 0.50.0. Podrobný přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 2
    17.7. 15:55 | Komunita

    Patrick Volkerding oznámil před dvaatřiceti lety vydání Slackware Linuxu 1.00. Slackware Linux byl tenkrát k dispozici na 3,5 palcových disketách. Základní systém byl na 13 disketách. Kdo chtěl grafiku, potřeboval dalších 11 disket. Slackware Linux 1.00 byl postaven na Linuxu .99pl11 Alpha, libc 4.4.1, g++ 2.4.5 a XFree86 1.3.

    Ladislav Hagara | Komentářů: 5
    16.7. 21:22 | IT novinky

    Ministerstvo pro místní rozvoj (MMR) jako první orgán státní správy v Česku spustilo takzvaný „bug bounty“ program pro odhalování bezpečnostních rizik a zranitelných míst ve svých informačních systémech. Za nalezení kritické zranitelnosti nabízí veřejnosti odměnu 1000 eur, v případě vysoké závažnosti je to 500 eur. Program se inspiruje přístupy běžnými v komerčním sektoru nebo ve veřejné sféře v zahraničí.

    Ladislav Hagara | Komentářů: 19
    16.7. 16:22 | IT novinky

    Vláda dne 16. července 2025 schválila návrh nového jednotného vizuálního stylu státní správy. Vytvořilo jej na základě veřejné soutěže studio Najbrt. Náklady na přípravu návrhu a metodiky činily tři miliony korun. Modernizovaný dvouocasý lev vychází z malého státního znaku. Vizuální styl doprovází originální písmo Czechia Sans.

    Ladislav Hagara | Komentářů: 26
    16.7. 15:33 | Upozornění

    Vyhledávač DuckDuckGo je podle webu DownDetector od 2:15 SELČ nedostupný. Opět fungovat začal na několik minut zhruba v 15:15. Další služby nesouvisející přímo s vyhledáváním, jako mapyAI asistent jsou dostupné. Pro některé dotazy během výpadku stále funguje zobrazování například textu z Wikipedie.

    bindiff | Komentářů: 8
    16.7. 13:33 | Bezpečnostní upozornění

    Více než 600 aplikací postavených na PHP frameworku Laravel je zranitelných vůči vzdálenému spuštění libovolného kódu. Útočníci mohou zneužít veřejně uniklé konfigurační klíče APP_KEY (např. z GitHubu). Z více než 260 000 APP_KEY získaných z GitHubu bylo ověřeno, že přes 600 aplikací je zranitelných. Zhruba 63 % úniků pochází z .env souborů, které často obsahují i další citlivé údaje (např. přístupové údaje k databázím nebo cloudovým službám).

    Ladislav Hagara | Komentářů: 5
    16.7. 00:11 | Nová verze

    Open source modální textový editor Helix, inspirovaný editory Vim, Neovim či Kakoune, byl vydán ve verzi 25.07. Přehled novinek se záznamy terminálových sezení v asciinema v oznámení na webu. Detailně v CHANGELOGu na GitHubu.

    Ladislav Hagara | Komentářů: 0
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (27%)
     (7%)
     (3%)
     (0%)
     (1%)
     (4%)
    Celkem 410 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Dotaz: RDBMS - jsou vygenerované dotazy ekvivalentní?

    4.11.2010 00:02 rdbms
    RDBMS - jsou vygenerované dotazy ekvivalentní?
    Přečteno: 487×
    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.