NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze: sql except

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
Adam Matis
Člen
Avatar
Adam Matis:24.11.2017 14:25

Ahoj potřeboval bych poradit. Potřebuji udělat dotaz nad jednou tabulkou, kde potřebuji vyfiltrovat všechny zaznamy z druhého dotazu. Myslel jsem, že když udělám except, tak dostanu v prvním dotazu jen záznamy které nejsou v tom druhém.

SELECT * FROM objednavka
except
SELECT * FROM objednavka WHERE cenaPolozky=0 OR KodObjednavky like 'Z%'
 
Odpovědět
24.11.2017 14:25
Avatar
Alexej Haman
Člen
Avatar
Alexej Haman:24.11.2017 14:40

Moc SQL nerozumím ale co použít něco jako

SELECT * FROM objednavka WHERE cenaPolozky!=0 OR KodObjednavky NOT LIKE  'Z%'
 
Nahoru Odpovědět
24.11.2017 14:40
Avatar
Adam Matis
Člen
Avatar
Odpovídá na Alexej Haman
Adam Matis:24.11.2017 15:05

Takovy dotaz už mě taky napadl, jenže toto vrátí všechny výsledky.

 
Nahoru Odpovědět
24.11.2017 15:05
Avatar
Alexej Haman
Člen
Avatar
Alexej Haman:24.11.2017 16:19

Tak v SQL se prý používá taky místo "!=" "<>"

SELECT * FROM objednavka WHERE cenaPolozky<>0 OR KodObjednavky NOT LIKE  'Z%'
SELECT * FROM objednavka WHERE cenaPolozky!="0" OR KodObjednavky NOT LIKE  'Z%'¨
SELECT * FROM objednavka WHERE cenaPolozky<>"0" OR KodObjednavky NOT LIKE  'Z%'

Zkus všechny tři :D

 
Nahoru Odpovědět
24.11.2017 16:19
Avatar
plelovsky
Člen
Avatar
plelovsky:26.11.2017 20:05
SELECT * FROM objednavka WHERE NOT (cenaPolozky = 0 OR KodObjednavky LIKE 'Z%')

nebo

SELECT * FROM objednavka WHERE cenaPolozky <> 0 AND KodObjednavky NOT LIKE 'Z%'
 
Nahoru Odpovědět
26.11.2017 20:05
Avatar
Ondřej Crha
Člen
Avatar
Ondřej Crha:27.11.2017 14:03
SELECT * FROM objednavka
WHERE Id not in (SELECT Id FROM objednavka WHERE cenaPolozky=0 OR KodObjednavky like 'Z%')

... bych napsal já :-D

 
Nahoru Odpovědět
+1
27.11.2017 14:03
Avatar
Odpovídá na Ondřej Crha
Michal Štěpánek:28.11.2017 9:54

Dá se to tak napsat, ale v tomto případě mi to přijde zbytečné, když jde o dotaz v té samé tabulce... Takto bych to použil v případě, že by se podmínka týkala údajů v jiné tabulce. Tady stačí, jak psal plelovsky

SELECT * FROM objednavka WHERE NOT (cenaPolozky = 0 OR KodObjednavky LIKE 'Z%')
Nahoru Odpovědět
+1
28.11.2017 9:54
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
plelovsky
Člen
Avatar
Odpovídá na Ondřej Crha
plelovsky:28.11.2017 16:20

Já ne, protože bych tím naprosto zbytečně degradoval výkon.
Samozřejmě záleží na databázi, indexech atd., ale složitější dotaz nemůže být efektivnější než jednodušší.

 
Nahoru Odpovědět
+2
28.11.2017 16:20
Avatar
Ondřej Crha
Člen
Avatar
Ondřej Crha:30.11.2017 10:41

Pravda, pravda. Přiznávám.

(50063 row(s) affected)

 SQL Server Execution Times:
   CPU time = 313 ms,  elapsed time = 2153 ms.

(50063 row(s) affected)

 SQL Server Execution Times:
   CPU time = 250 ms,  elapsed time = 3743 ms.
 
Nahoru Odpovědět
30.11.2017 10:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.