IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

MS SQL v príkladoch: Otázky v príkladoch

Minule sme si založili databázu a naplnili ju testovacími dátami. Dnes sa zameriame na dotazovanie. Ukážeme si niekoľko otázok, niektoré budú naozaj jednoduché, niektoré budú zložitejšie cez viac tabuliek. Zoradil som je podľa obtiažnosti. Otázky sú predovšetkým výberové (SELECT), pretože vkladanie sme si precvičili minule pri tvorbe testovacích dát.

U otázok cez viac tabuliek môžeme používať JOIN alebo klauzulu WHERE. Ak je vo WHERE zložitejšia podmienka cez viac tabuliek, MS SQL server si otázku sám preloží do JOIN. Je teda v zásade jedno, ku ktorej možnosti sa prikloníme. Tá s join môže byť o niečo rýchlejší a môžeme dotaz sami lepšie optimalizovať, WHERE je ľudsky čitateľnejší. V článku používam obe možnosti.

Začnime:

Príklad 1: Vypísanie komentárov napísaných v druhom kvartáli roka 2012, zoradených podľa dátumu.

SELECT
    Obsah,
    Datum
FROM Komentar
WHERE Datum BETWEEN '2012-3-1' AND '2012-6-30'
ORDER BY Datum;

Príklad 2: Výpis používateľov, ktorých prezývka začína na určité písmeno (využíva sa na webe pre prechádzanie užívateľov).

SELECT Nick, UzivatelID FROM Uzivatel
WHERE Nick LIKE 'D%';

Príklad 3: Zistite, koľko užívateľov má email sa Zozname.

SELECT
    COUNT(*) Vysledek
FROM Uzivatel
WHERE Email LIKE '%@seznam.cz';

Príklad 4: Premenovanie sekcie (sekcie sú často premenovávanie z dôvodu SEO optimalizácia), u premenovanie sú parametre starý názov a nový názov.

UPDATE Sekce
SET Nazev = ('České hry')
WHERE Nazev = 'Hry';

Príklad 5: Zistiť celkové body (súčet jednotlivých score) výsledkov testov od určitého užívateľa, podľa jeho ID.

SELECT
    SUM(Skore) Vysledek
FROM VysledekTestu
WHERE UzivatelID = 2;

Príklad 6: Vypísanie najnovšieho článku vrátane nicku autora do widgetu na titulnej stránke.

SELECT TOP 1
    c.Perex,
    c.PrettyURL,
    c.Titulek,
    c.Publikovano,
    u.Nick
FROM Clanek c, Uzivatel u
WHERE (u.UzivatelID = c.AutorID)
ORDER BY c.Publikovano DESC;

Príklad 7: Vypísanie článku a prezývky autora podľa URI článku.

SELECT
    c.Perex,
    c.PrettyURL,
    c.Keywords,
    c.Titulek,
    c.Obsah,
    c.Publikovano,
    u.Nick
FROM Clanek c, Uzivatel u
WHERE ((c.PrettyURL = 'co-je-to-algoritmus')
    AND (c.AutorID = u.UzivatelID));

Príklad 8: Vypísanie článkov v určitej sekcii podľa názvu sekcie.

SELECT
    Clanek.PrettyURL,
    Clanek.Titulek
FROM Clanek, ClanekSekce, Sekce
WHERE
    (ClanekSekce.ClanekID = Clanek.ClanekID) AND
    (ClanekSekce.SekceID = Sekce.SekceID) AND
    (Sekce.Nazev = 'Algoritmy');

Príklad 9: Vyhľadanie v nadpise a perexu článku, ktoré vracia informácie o nájdených článkoch vrátane autora a odkazu.

SELECT
    c.Perex,
    c.PrettyURL,
    c.Titulek,
    u.Nick
FROM Clanek c
JOIN Uzivatel u
    ON (c.AutorID = u.UzivatelID)
WHERE ((c.Titulek LIKE '%je%')
    OR (c.Perex LIKE '%je%'));

Príklad 10: Vypísanie prehľadu testov a výsledkov pre jedného používateľa.

SELECT
    Titulek,
    Skore
FROM VysledekTestu, Uzivatel, Test
WHERE (Uzivatel.UzivatelID = VysledekTestu.UzivatelID) AND
      (Test.TestID = VysledekTestu.TestID) AND
      (Uzivatel.UzivatelID = 1);

Príklad 11: Vypísanie prvých 15tich komentárov k danému článku, zoradených od najnovších po najstaršie podľa URI článku a to vrátane nicku používateľa, ktorý komentár napísal.

SELECT TOP 15
    k.Obsah,
    k.Datum,
    c.PrettyURL,
    u.Nick
FROM Komentar k
    JOIN Clanek c
        ON (c.ClanekID = k.ClanekID)
    JOIN Uzivatel u
        ON (k.UzivatelID = u.UzivatelID)
WHERE (c.PrettyURL = 'cheese-mouse-oddechova-plosinovka')
ORDER BY k.Datum DESC;

Príklad 12: Vypísanie všetkých komentárov k danému článku, zoradených od najstarších po najnovšie podľa URI článku a to vrátane prezývky používateľa, ktorý komentár napísal.

SELECT
    k.Obsah,
    k.Datum,
    c.PrettyURL,
    u.Nick
FROM Komentar k
    JOIN Clanek c
        ON (c.ClanekID = k.ClanekID)
    JOIN Uzivatel u
        ON (u.UzivatelID = k.UzivatelID)
WHERE (c.PrettyURL = 'cheese-mouse-oddechova-plosinovka')
ORDER BY k.Datum;

Príklad 13: Vypísanie 15tich najnovších komentárov do widgetu na titulnej stránke vrátane názvu článku a prezývky autora. Komentáre sa týkajú všetkých Clan a sú zoradené od najnovšieho po najstaršie.

SELECT TOP 15
    k.Obsah,
    k.Datum,
    c.Titulek,
    u.Nick
FROM Komentar k
    JOIN Clanek c
        ON (c.ClanekID = k.ClanekID)
    JOIN Uzivatel u
        ON (k.UzivatelID = u.UzivatelID)
ORDER BY k.Datum DESC;

Príklad 14: Výpis tabuľky užívateľov a ich článkov tak, aby v nej boli všetci užívatelia a všetky články. Pokiaľ užívateľ žiadny článok nenapasal, bude u neho hodnota NULL.

SELECT
    u.Nick, c.Titulek
FROM Uzivatel u
    LEFT JOIN Clanek c
        ON (c.AutorID = u.UzivatelID);

Nabudúce sa pozrieme na poddotazy.


 

Všetky články v sekcii
Databázy v C # - ADO.NET
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity