Tento článek se zaměří na psaní SQL dotazů proti referenční tabulce databáze s poměrně jednoduchou strukturou, kterou lze pochopit a implementovat.
Kromě toho se chystáme objasnit koncepty psaní efektivních SQL dotazů spolu s několika tipy pro profesní život.
Před dotazem na databázové tabulky
Protože tento článek je o dotazování databázových tabulek pomocí SQL skriptů, čtenáři by měli mít určité znalosti, aby plně porozuměli konceptům a příkladům. Musíme mít dojem, jak odkazovat na tabulku. Také musí být přítomno potřebné vybavení:
Potřebujete:
- Základní znalost relačních databází a SQL.
- Databázový server SQL nainstalovaný lokálně nebo vzdáleně.
- Nástroje pro správu databáze, jako je SQL Server Management Studio nebo dbForge Studio pro SQL Server.
Měli byste být schopni vytvořit ukázkovou databázi (s pomocí poskytnutých skriptů), připojit se k SQL Serveru a spustit s touto ukázkovou databází.
Než přistoupíme ke spouštění dotazů na prázdnou databázi, možná si budete muset prostudovat předchozí článek věnovaný tomuto tématu, abyste si obnovili znalosti:
Jak psát jednoduché SQL dotazy z prázdné databáze
Psaní SQL dotazů počínaje referenčními tabulkami
Potřebujeme napsat SQL dotazy proti ukázkové databázi, která obsahuje dvě tabulky. Plán je zobrazit data z jedné z tabulek známých jako referenční tabulka SQL. Poznámka:Referenční tabulkou může být jakákoli tabulka, která nevyžaduje data z jiné tabulky.
Nejprve musíme porozumět struktuře vzorové databáze, abychom ji mohli přesně dotazovat.
Příklad referenční tabulky databáze
Používáme ukázku BookSimple2 databáze, která se skládá ze dvou tabulek, BookType a rezervovat .
BookType tabulka obsahuje typy knih, které mají být ke knize přiřazeny. Kniha tabulka obsahuje názvy, typy a sklad (počet dostupných kopií) knih.
Je snadné uhodnout, že obě tabulky jsou propojeny pomocí klíčů. Typ knihy uložený v Knize tabulka je původně definována v BookType stůl. Umožňuje udržovat data konzistentní a spolehlivá.
Proto BookType tabulka je referenční tabulka – poskytuje svůj odkaz (typ knihy) na hlavní Knihu tabulka.
Podívejte se na níže uvedený obrázek:
Pokud nepropojíme Knihu tabulka s BookType abychom získali typ knihy, musíme při každém uložení nové knihy definovat potřebný typ. V důsledku toho se brzy vyskytnou chyby, protože ukládáme stále stejný typ. Navíc můžeme skončit vytvořením mnohem více typů kvůli pravopisným chybám.
Řekněme, že pokud ignorujeme použití referenčních tabulek a vytvoříme pouze jednu hlavní tabulku, můžeme použít různé způsoby reprezentace jednoho typu, například Design , Návrh a Návrhy . Je to matoucí, zvláště při dotazování a pochopení dat.
Můžete se také podívat na minulý článek, kde najdete další informace o vzájemném vztahu tabulek v SQL:
Naučte se návrh databáze pomocí SQL Server Management Studio (SSMS) – část 2
Nyní, když vidíte pozadí používání referenčních tabulek a hlavních tabulek, můžeme přejít k příkladům.
Jak vytvořit referenční tabulku v SQL
Otevřete nástroj pro vývoj databáze (může to být SQL Server Management Studio nebo dbForge Studio pro SQL Server) a připojte se k nainstalované instanci SQL serveru.
Napište následující skript proti hlavní databázi a nastavte vzorovou databázi BookSimple2 se dvěma tabulkami:
-- Create sample database BookSimple2
USE MASTER
GO
CREATE DATABASE BookSimple2
GO
USE BookSimple2
-- Creating a reference table BookType
CREATE TABLE dbo.BookType
(
BookTypeId INT IDENTITY(1,1),
Name VARCHAR(50)NOT NULL,
Detail VARCHAR(200)NULL
CONSTRAINT PK_BookType_BookTypeId PRIMARY KEY (BookTypeId)
)
GO
-- Populating (adding rows to the) table BookType
SET IDENTITY_INSERT dbo.BookType ON
GO
INSERT INTO dbo.BookType
(
BookTypeId
,Name
,Detail
)
VALUES
(
1 -- ID - INT Primary Key
,'Designing' -- Name - varchar(50) NOT NULL
,'This is Designing' -- Detail - varchar(200)
),
(
2 -- ID - INT Primary Key
,'Testing' -- Name - varchar(50) NOT NULL
,'This is Testing' -- Detail - varchar(200)
),
(
3 -- ID - INT Primary Key
,'Coding' -- Name - varchar(50) NOT NULL
,'This is Coding' -- Detail - varchar(200)
);
GO
SET IDENTITY_INSERT dbo.BookType OFF
GO
-- Creating a table Book
CREATE TABLE dbo.Book
(
BookId INT IDENTITY(1,1),
Name VARCHAR(50),
BookTypeId INT,
Stock INT,
CONSTRAINT PK_Book_BookId PRIMARY KEY (BookId)
)
GO
Po spuštění skriptu můžete nově vytvořenou databázi zobrazit v Průzkumníku objektů SSMS nebo v části Průzkumník databáze v dbForge Studio pro SQL Server:
Jak odkazovat na dvě tabulky cizím klíčem SQL
Záměrně jsem vyloučil část skriptu, která vytváří vztah mezi referenční tabulkou (BookType ) a hlavní stůl (Kniha ) ve formě klíčů.
Chcete-li propojit referenční tabulku s hlavní tabulkou, spusťte následující skript proti ukázkové databázi:
-- Creating foreign key constraint on Book table to get BookTypeId values from BookType table
ALTER TABLE dbo.Book
ADD CONSTRAINT [FK_Book_BookType_BookTypeId]
FOREIGN KEY ([BookTypeId]) REFERENCES dbo.[BookType] ([BookTypeId]);
Rozbalte BookSimple2 databáze> Kniha tabulka> Klíče složka:
Vidíme, že tyto dvě tabulky jsou úspěšně propojeny.
Výše uvedené je snímek obrazovky z SQL Server Management Studio. Zobrazení je však úplně stejné, pokud si databázi prohlížíte v Průzkumníku databáze dbForge Studio pro SQL Server.
Důležitý tip pro výběr požadované databáze: Musíte zajistit, že spouštíte dotazy proti správné databázi – vzorové databázi. Vyberte ji proto ze seznamu dostupných databází nebo spusťte následující skript:
-- Select the sample SQL database to query it
USE BookSimple2
Důležité! Použití skriptu k výběru databáze nelze použít, pokud pracujete s cloudovou verzí databáze SQL známou jako Azure SQL Database.
Psaní prvního dotazu
Pro dotazování databázových tabulek musíme mít na paměti pouze příkaz SELECT v následujícím tvaru:
SELECT * FROM <TableName>
Nahraďte
Příkaz SELECT je mnohem flexibilnější, ale prozatím se zaměříme pouze na zobrazení všech záznamů (řádků) tabulky.
Důležitý tip ohledně SQL :Pamatujte, že SQL (zejména s odkazem na T-SQL) nerozlišuje malá a velká písmena . Týká se jak slova vyhrazeného pro SQL (SELECT je stejný jako Vybrat ) nebo uživatelem definované názvy (BookType je stejný jako booktype ) .
Zobrazit všechny řádky z referenční tabulky BookType
Napište následující skript proti ukázkové databázi:
-- View all data from the BookType table
SELECT * FROM dbo.BookType
Výstup je:
Vidíme všechny sloupce a řádky z tabulky. Je to zdaleka nejrychlejší metoda, jak získat všechna data z tabulky.
Důležitý tip k SELECT *: Měli byste použít SELECT * získat všechny řádky a sloupce z tabulky pouze při kontrole malé tabulky (například referenční tabulky). V opačném případě to může zabrat spoustu času, zatímco bychom mohli potřebovat data v několika sloupcích a řádcích z větší tabulky.
Najděte všechny řádky v tabulce BookType pomocí názvu tabulky
Existuje lepší způsob dotazování na tabulku. Pojmenujeme tabulku a svážeme ji se všemi sloupci, jak je uvedeno níže:
-- View all data from the BookType table using bt alias
SELECT bt.* FROM dbo.BookType bt
Zobrazit vybrané sloupce z referenční tabulky
Použití názvů tabulek přináší více výhod. Nejprve můžeme rychle vybrat požadovaný sloupec z tabulky. Potom je používání tabulek a omezených sloupců přehlednější, protože ve většině případů vyžadujeme pouze některé sloupce.
Zde je příklad získávání ID a jmen pouze z BookType tabulka:
-- View book type id and name columns from the reference table
SELECT bt.BookTypeId,bt.Name FROM dbo.BookType bt
Výsledek je:
Vylepšení syntaxe SELECT
Na základě výše uvedených informací tedy můžeme vylepšit syntaxi SELECT následovně:
SELECT t.<column1>,t.<column2> FROM <TableName> t
Seřadit data podle sloupce názvu pomocí klauzule Order By
Sadu výsledků můžete seřadit na základě konkrétního sloupce nebo sady sloupců. Třídění dat poskytuje jiný úhel pohledu.
Použití Objednat podle klauzule v tomto případě je:
SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1>
Chceme například vidět typy knih seřazené podle názvu typu (abecední pořadí). V tomto případě použijeme klauzuli Order By ve skriptu příkazu SELECT takto:
-- View book types (name) sorted by type name
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name
Výstup je:
Seřadit data podle sloupce názvu v sestupném pořadí
Údaje můžeme také seřadit sestupně podle požadavku. Chceme například vidět seznam všech typů knih podle sloupce Název v sestupném pořadí (Z až A). Syntaxe bude:
SELECT t.<column1>,t.<column2> FROM <TableName> t order by t.<column1> desc
Skript T-SQL je následující:
-- View book types (name) sorted by a type name in descending order (from Z to A)
SELECT bt.Name FROM dbo.BookType bt ORDER BY bt.Name desc
Sada výsledků je níže:
Zobrazit TOP N záznamů z tabulky
Nakonec můžeme pomocí klauzule TOP vybrat požadovaný počet řádků, které mají být vytaženy z databáze. Po této klauzuli musíme poskytnout požadované číslo:
SELECT Top N t.<column1>,t.<column2> FROM <TableName> t
Klauzule TOP bez jakéhokoli pořadí však není nejlepší variantou. Musíme určit pořadí sloupců, které je třeba vzít v úvahu při výběru prvních n řádků.
Zde můžeme vylepšit výše uvedenou syntaxi následovně:
SELECT Top N t.<column1>,t.<column2> FROM <TableName> t order by <column> Desc/Asc
Nezapomeňte, že musíme uvést sestupné pořadí pomocí DESC na konci. Vzestupné pořadí však není povinné uvádět – je to výchozí možnost.
Podívejme se na 2 nejlepší typy knih seřazené podle názvu v sestupném pořadí:
--View Top 2 types of the books ordered by name in descending order (from Z to A)
SELECT TOP 2 bt.Name FROM dbo.BookType bt
ORDER BY bt.Name DESC
Výstup je:
Důležitý tip k TOP N: použijte klauzuli TOP N (s pořadím podle) k zobrazení tabulky místo zobrazení všech řádků tabulky, pokud chcete rychle zkontrolovat data známá jako sneak peek.
Ve scénářích profesního života slouží klauzule Top N k aktualizaci velkých kusů dat z velké tabulky v krocích.
Nyní jsme úspěšně zadali dotaz na tabulku SQL databáze. Kromě toho jsme se seznámili s některými tipy, jak spouštět dotazy jako profesionál, a naučili jsme se některé osvědčené postupy pro psaní dotazů SQL.
Procvičování referenčních tabulek DB
Nyní můžete psát, spouštět a zvyšovat efektivitu SQL dotazů proti jakékoli tabulce. Vyzkoušejte následující cvičení ke zlepšení nových dovedností:
- Zkuste napsat skript pro zobrazení ID typu knihy (BookTypeId ) s podrobnostmi (Podrobnosti ) pouze sloupce.
- Zkuste seřadit referenci BookType tabulka podle ID (BookTypeId ) v sestupném pořadí (od 3 do 1).
- Zkuste získat 2 horní řádky z BookType tabulka obsahující pouze id (BookTypeId ) a podrobnosti (Podrobnosti ) typu knihy seřazené podle Detailu sloupec.