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:11 | Nová verze

    Google Chrome 152 byl prohlášen za stabilní. Nejnovější stabilní verze 152.0.7977.64 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 327 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    dnes 01:11 | Komunita

    Před 35 lety, 25. srpna 1991, oznámil Linus Benedict Torvalds v diskusní skupině comp.os.minix, že vyvíjí (svobodný) operační systém (jako koníček, nebude tak velký a profesionální jako GNU) pro klony 386 (486), že začal v dubnu a během několika měsíců by mohl mít něco použitelného.

    Ladislav Hagara | Komentářů: 0
    včera 16:33 | IT novinky

    Apple představil čipy M6 a M5 Ultra, Mac mini s M6 nebo M5 Pro a Mac Studio s M5 Max nebo M5 Ultra. Fedora Asahi Remix zatím podporuje jenom M1 a M2.

    Ladislav Hagara | Komentářů: 5
    včera 14:11 | Komunita

    Firefox 157 přinese zapnutou podporu rastrového grafického formátu JPEG XL. Založena je na v Rustu napsané implementaci jxl-rs používané i v Chrome a Chromiu.

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

    Vanilla OS 3 „Reunion“ byl vydán. Tato na Debianu „Sid“ založená desktopová distribuce s transakčními aktualizacemi „neměnného“ základního systému (ABRoot) nově podporuje architekturu arm64 (vedle x86-64), podporuje reprodukovatelné sestavení většiny balíčků a vylepšuje systémové nástroje. Vlastní meta-správce balíčků APX nyní používá Distrobox v2 a je dostupný i pro jiné distribuce.

    |🇵🇸 | Komentářů: 0
    24.8. 16:00 | IT novinky

    Řemínky pro Apple Watch, bezdrátová sluchátka nebo nabíjecí adaptéry. Takovou nabídku našli v uplynulých dnech příslušníci Celního úřadu v Liberci při kontrole kamenného obchodu na Náchodsku. Celkem zde zadrželi 3 035 kusů zboží podezřelého z porušování práv duševního vlastnictví. Pokud by se jednalo o originální výrobky, jejich hodnota by podle odhadu přesáhla 10,8 milionu korun.

    Ladislav Hagara | Komentářů: 11
    24.8. 14:11 | Nová verze

    Byla vydána verze 31.1 textového editoru GNU Emacs. Podrobný přehled novinek v souboru NEWS.

    Ladislav Hagara | Komentářů: 5
    24.8. 12:22 | Nová verze

    Webový prohlížeč Waterfox (Wikipedie), fork Firefoxu, byl vydán ve verzi 6.7.0. Postaven je na jádru Gecko ESR 153.

    Ladislav Hagara | Komentářů: 0
    24.8. 11:22 | Nová verze

    Multiplatformní open source voxelový herní engine Luanti byl vydán ve verzi 5.17.0. Podrobný přehled novinek v changelogu. Přidána byla základní podpora gamepadů. Opraveno bylo několik zranitelností. Původně se jedná o Minecraftem inspirovaný Minetest v říjnu loňského roku přejmenovaný na Luanti.

    Ladislav Hagara | Komentářů: 0
    24.8. 11:00 | IT novinky

    Americká technologická společnost Apple loni v Irsku na daních zaplatila 17 miliard dolarů (zhruba 350 miliard Kč). To představovalo 40 procent celkové částky, kterou firma odvedla na dani z příjmů po celém světě. Vyplývá to z účetních výkazů podniku. Platbu výrazně zvýšilo rozhodnutí Soudního dvora EU z roku 2024, podle něhož měl Apple doplatit Irsku na daních 13 miliard eur (313 miliard Kč).

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (29%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2496 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: RDBMS - jsou vygenerované dotazy ekvivalentní?

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