sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2016:Vytvořte zobrazení

V SQL Server můžete dotazy jako pohledy. Zobrazení jsou přínosná z mnoha důvodů, včetně zabezpečení, použitelnosti a pohodlí.

Na serveru SQL Server zobrazení je virtuální tabulka, jejíž obsah je definován dotazem. Je to v podstatě předem napsaný dotaz, který je uložen v databázi.

Pohled se skládá z SELECT a když spustíte dotaz proti pohledu, uvidíte jeho výsledky jako při otevírání tabulky. Pohledy se označují jako virtuální tabulky, protože mohou shromažďovat data z více tabulek i agregovaná data a prezentovat je, jako by šlo o jedinou tabulku.

Výhody zobrazení

Zobrazení může být užitečné, když existuje více uživatelů s různými úrovněmi přístupu, kteří všichni potřebují vidět části dat v databázi (ale ne nutně všechna data). Pohledy mohou provádět následující:

  • Omezit přístup ke konkrétním řádkům v tabulce
  • Omezit přístup ke konkrétním sloupcům v tabulce
  • Spojte sloupce z více tabulek a prezentujte je, jako by byly součástí jedné tabulky
  • Předložte souhrnné informace (jako jsou výsledky COUNT() funkce)

Jak vytvořit zobrazení

Pohled vytvoříte pomocí CREATE VIEW za ním následuje SELECT prohlášení.

CREATE VIEW ViewName 
AS
SELECT ...

Nyní vytvoříme pohled z našeho předchozího dotazu.

  1. Navrhněte zobrazení

    Vezměte dotaz z našeho předchozího příkladu a předponu mu přidejte CREATE VIEW RecentAlbums AS .

    Odstraňte také ORDER BY klauzuli, protože pohledy tuto klauzuli nepodporují (pokud není TOP , OFFSET nebo FOR XML je také specifikováno).

    Také přidejte středník na konec příkazu jako ukončení příkazu (více o tom níže).

    Ukázkový kód

    Níže je kód z našeho příkladu s ORDER BY byla odstraněna klauzule a přidán středník jako terminátor příkazu.

    Také jsem ho trochu přeformátoval, aby byl čitelnější).

    CREATE VIEW RecentAlbums 
    AS
    SELECT  Albums.ReleaseDate, 
            Albums.AlbumName, 
            Genres.Genre, 
            Artists.ArtistName
    FROM Albums 
    INNER JOIN
            Artists ON 
            Albums.ArtistId = Artists.ArtistId 
            INNER JOIN
                Genres ON 
                Albums.GenreId = Genres.GenreId
    WHERE   (Albums.ReleaseDate > DATEADD(year, - 10, GETDATE()));

    V tomto příkladu jsem přidal středník na konec pohledu. Návrhář dotazů to nezahrnul, ale je dobré to zahrnout.

    Středník je součástí standardu ANSI SQL-92. Je to znak ukončení příkazu.

    Společnost Microsoft také oznámila, že příkazy Transact-SQL bez středníků jsou v SQL Server 2016 zastaralé a v budoucí verzi nebudou podporovány (SQL Server historicky používal GO klíčové slovo jako ukončovací znak příkazu namísto středníku).

  2. Spustit zobrazení

    Nyní spusťte zobrazení stejně, jako byste spustili jakýkoli jiný dotaz.

    Klikněte na Provést na panelu nástrojů.

    Nyní můžete přejít na zobrazení v Průzkumníku objektů. Rozbalte ji a uvidíte sloupce a jejich datové typy a vlastnosti – jako by to byla tabulka.

  3. Dotaz na zobrazení

    Nyní, když je pohled vytvořen, můžete se na pohled dotazovat spuštěním SELECT prohlášení proti.

    Takže se můžete dotazovat na náš nově vytvořený pohled pomocí SELECT * FROM RecentAlbums; .

  4. Filtrovat zobrazení

    Jednou z dobrých věcí na zobrazeních je, že na ně můžete použít vlastní kritéria filtrování – další filtrování výsledků.

    Můžete například přidat WHERE Genre = 'Pop' , takže zobrazení vrátí pouze pop alba za posledních 10 let.

Změnit zobrazení

Svůj pohled můžete upravit pomocí ALTER VIEW místo příkazu CREATE VIEW prohlášení.

  1. Navrhněte změněné zobrazení

    Zde upravíme náš pohled na návrat alb za ​​posledních 20 let namísto pouhých 10.

    Je to docela stará sbírka, takže každé album vydané za posledních 20 let je klasifikováno jako "nedávné" :)

    Vrátíme také další sloupec:Artists.ActiveFrom

    Ukázkový kód

    Zde je kód, který používáme pro příklad:

    ALTER VIEW RecentAlbums 
    AS
    SELECT  Albums.ReleaseDate, 
            Albums.AlbumName, 
            Genres.Genre, 
            Artists.ArtistName,
            Artists.ActiveFrom
    FROM Albums 
    INNER JOIN
            Artists ON 
            Albums.ArtistId = Artists.ArtistId 
            INNER JOIN
                Genres ON 
                Albums.GenreId = Genres.GenreId
    WHERE   (Albums.ReleaseDate > DATEADD(year, - 20, GETDATE()));
  2. Dotaz na zobrazení

    Nyní dotazování pohledu vrátí alba za 20 let. Zobrazí se také datum, od kterého byl umělec aktivní.


  1. Úvod do typů grafů

  2. SQLite UNIQUE omezení

  3. Jak vytvořit VARRAY jako člena bloku PL/SQL v databázi Oracle

  4. Časový limit připojení pro DriverManager getConnection