Přechod z ER diagramu na tabulkový model

Práce s databázemi přímo souvisí s měnícími se tabulkami a daty, které obsahují. Než ale začnete, je třeba vytvořit tabulky. Pro automatizaci tohoto procesu existuje speciální - „CREATE TABLE“.

První věc!

Než pochopíte proces vytváření tabulek pomocí příkazu MS SQL "CREATE TABLE", stojí za to se pozastavit nad tím, co potřebujete vědět před použitím funkce.

Nejprve je potřeba vymyslet název tabulky – musí být unikátní ve srovnání s ostatními v databázi a dodržovat několik pravidel. Název musí začínat písmenem (a-z), za nímž následují jakákoli písmena, čísla nebo podtržítka a výsledná fráze nesmí být vyhrazené slovo. Délka názvu tabulky by neměla přesáhnout 18 znaků.

Poté, co jste se rozhodli pro název, měli byste vytvořit strukturu: vymyslet názvy sloupců, přemýšlet o tom, jaký datový typ je v nich použit a která pole musí být vyplněna. Zde stojí za to okamžitě definovat pole cizího a primárního klíče a také možná omezení datových hodnot.

Zbývající nuance tabulky lze poměrně snadno opravit, takže ve fázi vytváření tabulky nemusí být plně promyšlené.

Syntax

Po vytvoření struktury tabulky můžete přistoupit k jejímu vytvoření. To lze provést zcela jednoduše pomocí SQL funkce "CREATE TABLE". V něm je uživatel povinen zadat dříve vynalezený název tabulky a seznam sloupců s uvedením typu a názvu pro každý z nich. Syntaxe funkce je následující:

CREATE TABLE název_tabulky
((datový typ název_sloupce …| omezení_tabulky)
[,(název_sloupce datový typ …| omezení_tabulky)]…)

Argumenty použité v konstrukci funkce znamenají následující:

  • table_name - název tabulky
  • column_name - název sloupce
  • datový typ - datový typ použitý v tomto poli
  • DEFAULT je výchozí výraz použitý ve sloupci.

Je také možné použít další dva argumenty funkce:

  • column_constraint - parametry sloupce
  • table_constraint - parametry tabulky

V nich může uživatel specifikovat omezení potřebná pro práci nebo podmínky pro vyplnění tabulky.

Funkce vytváření tabulek

Při psaní dotazu s funkcí je někdy potřeba nastavit pravidla pro vyplňování polí. Chcete-li to provést, musíte přidat speciální atributy funkcí, které definují konkrétní sadu podmínek.

Chcete-li určit, zda buňka může obsahovat prázdnou hodnotu, po zadání názvu a typu sloupce byste měli zadat jedno z klíčových slov: NULL (mohou být prázdné hodnoty) nebo NOT NULL (pole musí být vyplněno).

Při vytváření tabulky je ve většině případů potřeba sjednotit každý záznam, abyste neměli dva stejné. K tomu se nejčastěji používá číslování řádků. A aby uživatel nemusel vědět poslední vydání existující v tabulce, ve funkci "CREATE TABLE" stačí zápisem specifikovat sloupec primárního klíče klíčové slovo"Primární klíč" za odpovídající pole. Nejčastěji se tabulky spojují pomocí primárního klíče.

Pro zajištění zřetězení s primárním klíčem se používá vlastnost cizího klíče "FOREIGN KEY". Zadáním této vlastnosti pro sloupec můžete zajistit, že toto pole bude obsahovat hodnotu, která odpovídá jedné z hodnot ve sloupci primárního klíče stejné nebo jiné tabulky. Tímto způsobem lze zajistit konzistenci dat.

Chcete-li provést kontrolu proti zadané sadě nebo definici, měli byste použít atribut CHECK. Je zapsán jako poslední v seznamu argumentů funkcí a má nějaký osobní parametr logický výraz. S jeho pomocí můžete omezit seznam možných hodnot, například pomocí pouze písmen „M“ a „F“ v poli tabulky „Gender“.

Kromě uvedených má funkce mnohem více specifických atributů, ale v praxi se používají mnohem méně často.

Příklady

Pro úplné pochopení principu fungování funkce stojí za zvážení v praxi, jak CREATE TABLE (SQL) funguje. Níže uvedený příklad vytvoří tabulku zobrazenou na obrázku:

VYTVOŘIT TABULKU Vlastní
(ID CHAR(10) NOT NULL Primární klíč,
Custom_name CHAR(20),
Vlastní_adresa CHAR(30),
Custom_city CHAR(20),
Custom_Country CHAR(20),
ArcDate CHAR(20))

Jak vidíte, parametr možná nepřítomnost hodnoty v buňce (NULL) lze vynechat, protože je výchozí.

Po vytvoření prázdných tabulek je dalším logickým krokem jejich naplnění daty a aktualizace těchto dat. V Transact-SQL pro to existuje několik příkazů: VLOŽIT - AKTUALIZOVAT.

Často je však v pozdní fázi návrhu potřeba změnit samotné schéma tabulky. Pokud se například změnil primární klíč nebo datový typ sloupce. Aby se staré tabulky nemazaly a nevytvářely znovu pomocí CREATE TABLE se správnými parametry, používá se příkaz ALTER TABLE. Aplikace těchto tří konstruktů je diskutována níže.

Plnění tabulek

Tabulku můžete naplnit daty pomocí příkazu CREATE TABLE, ale efektivnější přístup je oddělit vytváření tabulek a jejich plnění, zejména pro začátečníky v SQL, protože:

  • vizuálně jasnější;
  • Výhodnější je, když se tabulky vyplňují po etapách.

Chcete-li získat následující zobrazení tabulky:

ID. Nájemce

Datum narození

Číslo bytu

Emailová adresa

Aleksin. V.V.

Gorbunov D.D.

[e-mail chráněný]

Šimonová K.R.

Dormitotová K.S.

[e-mail chráněný]

Budete jej muset vytvořit pomocí VYTVOŘIT TABULKU a vyplňte jej pomocí příkazu INSERT. Další pokyny přidá jeden řádek do tabulky spolubydlících, kterou jsme již vytvořili:

Vymazat předchozí verze stoly DROP TABLE spolubydlící; -- Vytvořte tabulku. CREATE TABLE housemates(housemeateID int NOT NULL CONSTRAINT primary_id PRIMARY KEY, housemateName nvarchar(30) NOT NULL, BithDate date NOT NULL, apartment number int NOT NULL, Email nvarchar(30)); -- Vložte data do tabulky USE GO INSERT INTO ( , , , ,) VALUES (100,"Aleksin V.V.","19721122",11," [e-mail chráněný]"), (101,"Gorbunov D.D.","19220525",25," [e-mail chráněný]"), (102," Simonová K.R. "," 19560211 ", 13," [e-mail chráněný]"), (103,"Dormitotova K.S.","19770815",9," [e-mail chráněný]")

Ve výše uvedeném příkladu musíme rozlišovat mezi dvěma bloky konstrukce INSERT:

DO- ukazující na tabulku, do které se přidávají data

HODNOTY- inicializace linkového vstupu.

V parametrech (v závorkách) bloku DO Sloupce jsou uvedeny v pořadí, v jakém se zobrazují. Záznam bez parametrů je přijatelný, pokud je pořadí sloupců při vytváření tabulky a při jejím vyplňování stejné. Následující kód je identický s předchozím:

INSERT INTO VALUES (100,"Aleksin. V.V.","19721122",11," [e-mail chráněný]"), (101,"Gorbunov D.D.","19220525",25," [e-mail chráněný]"), (102," Simonová K.R. "," 19560211 ", 13," [e-mail chráněný]"), (103,"Dormitotova K.S.","19770815",9," [e-mail chráněný]")

Pokud potřebujete změnit objednávku plnění, musí to být výslovně uvedeno:

INSERT INTO (,,, ,) VALUES ("Alexin. V.V.",101,"19721122"," [e-mail chráněný]",11), ("Gorbunov D.D.",102,"19220525"," [e-mail chráněný]",25), ("Simonova K.R",103,"19560211"," [e-mail chráněný]",13) ("Dormitotova K.S.",104,"19770815"," [e-mail chráněný]",9)

V bloku VALUES se provádí inicializace řádek po řádku v pořadí sloupců bloku INTO. Odsazení řádků je seznam hodnot buněk v závorkách. Hodnoty jsou uvedeny oddělené čárkami a řádky jsou od sebe odděleny.

Konstrukt INSERT můžete použít pouze na ty sloupce, které ještě neobsahují data. V opačném případě dojde k chybě při provádění požadavku.

Aktualizace tabulky

Potřeba aktualizace tabulek vzniká v případě, že je nutné změnit údaje již zadané do tabulky. Provádí se pomocí návodu AKTUALIZACE. Pokud INSERT funguje pouze s prázdnými tabulkami, pak UPDATE funguje pouze s vyplněnými. Pokud je požadavek adresován prázdným buňkám, dojde k chybě.

Následující kód přiřadí nový Poštovní schránka na obyvatele domu s identifikačním číslem 103.

AKTUALIZOVAT SADA spolubydlících Email = " [e-mail chráněný]"WHERE housemeateID = 103

Blok SOUBOR- toto je blok změn. Pokud potřebujete aktualizovat hodnotu několika buněk, jsou uvedeny oddělené čárkami.

AKTUALIZOVAT SADA spolubydlících Email = " [e-mail chráněný]", housemateName = "Rurik S.S." WHERE housemeateID = 103

Výměna stolu

V pozdějších fázích návrhu nebo po vývoji základny často vyvstává potřeba:

  • přidat nebo odebrat sloupec;
  • změnit typ sloupce;
  • určit sloupec nebo skupinu sloupců jako primární nebo cizí klíč nebo tato omezení odstranit.

Pro všechny tyto operace existuje přepisovací instrukce. ATER STŮL.

K přidání sloupce se používá příkaz ALTER TABLE s klauzulí ADD. Pojďme přidat nový sloupec do tabulky spolubydlících z předchozí sekce:

ALTER TABLE spolubydlící ADD PhoneNumber nvarchar(12) NULL;

Musíte na to aplikovat větu ALTER SLOUPEK uvnitř ALTER TABLE:

ALTER TABLE spolubydlící ALTER COLUMN PhoneNumber char(25) NOT NULL;

Odstraní sloupec pomocí PUSTI SLOUPEK uvnitř ALTER TABLE:

ALTER TABLE spolubydlící DROP COLUMN PhoneNumber;

Primární nebo cizí klíč se odstraní a přidá pomocí konstruktů ALTER TABLE ADD CONSTRAINT/DROP CONSTRAINT, v tomto pořadí:

Odeberte omezení primárního klíče ze sloupce housemeateID ALTER TABLE spolubydlící DROP CONSTRAINT primární_id; --Přiřaďte sloupec housemeateID jako primární klíč ALTER TABLE housemates ADD CONSTRAINT PK_ID PRIMARY KEY (housemeateID);

Pokud se pokusíte přiřadit primární klíč k tabulce, která již existuje, překladač dotazů vrátí chybu. Pokud tedy tabulka již má primární klíč, měli byste jej odebrat a určit skupinu sloupců jako primární klíč. Například takto:

ALTER TABLE spolubydlící DROP CONSTRAINT PK_ID; ALTER TABLE spolubydlící ADD CONSTRAINT PK_ID, PK_AN PRIMÁRNÍ KLÍČ (ID domu, číslo bytu);

SQL - Lekce 3. Vytváření tabulek a jejich plnění informacemi

Takže jsme se seznámili s datovými typy, nyní vylepšíme tabulky pro naše fórum. Nejprve se na ně podíváme. A začněme tabulkou uživatelů. Máme v něm 4 sloupce:

Id_user jsou celočíselné hodnoty, což znamená, že typ bude int, omezme to na 10 znaků - int (10).
name je hodnota řetězce varchar, omezme jej na 20 znaků - varchar(20).
email je hodnota řetězce varchar, omezme ji na 50 znaků - varchar(50).
heslo je hodnota řetězce varchar, omezíme jej na 15 znaků - varchar(15).

Všechny hodnoty polí jsou povinné, což znamená, že musíte přidat typ NOT NULL.

Id_user int (10) NOT NULL
jméno varchar(20) NOT NULL
email varchar(50) NOT NULL

První sloupec, jak si pamatujete z konceptuálního modelu naší databáze, je primární klíč (to znamená, že jeho hodnoty jsou jedinečné a jednoznačně identifikují záznam). Samostatně je možné sledovat jedinečnost, ale není to racionální. V SQL pro to existuje speciální atribut - AUTO_INCREMENT, který při přístupu k tabulce pro přidání dat vypočítá maximální hodnotu tohoto sloupce, výslednou hodnotu zvýší o 1 a zapíše ji do sloupce. V tomto sloupci se tedy automaticky generuje jedinečné číslo, a proto je typ NOT NULL nadbytečný. Pojďme tedy ke sloupci s primárním klíčem přiřadit atribut:


jméno varchar(20) NOT NULL
email varchar(50) NOT NULL
heslo varchar(15) NOT NULL

Nyní musíme určit, že pole id_user je primární klíč. K tomu SQL používá klíčové slovo PRIMÁRNÍ KLÍČ(), název klíčového pole je uveden v závorkách. Pojďme provést změny:

Id_user int (10) AUTO_INCREMENT
jméno varchar(20) NOT NULL
email varchar(50) NOT NULL
heslo varchar(15) NOT NULL
PRIMÁRNÍ KLÍČ (id_user)

Tabulka je tedy hotová a její finální verze vypadá takto:

Vytvořit uživatele tabulky (
id_user int (10) AUTO_INCREMENT,
jméno varchar(20) NOT NULL,
email varchar(50) NOT NULL,
heslo varchar(15) NOT NULL,
PRIMÁRNÍ KLÍČ (id_user)
);

Nyní se podíváme na druhou tabulku – témata. Pokud argumentujeme podobně, máme následující pole:



id_author int (10) NOT NULL
PRIMÁRNÍ KLÍČ (id_topic)

Ale v našem databázovém modelu je pole id_author cizí klíč, tzn. může mít pouze hodnoty, které jsou v poli id_user tabulky users. Aby to bylo v SQL uvedeno, existuje klíčové slovo CIZÍ KLÍČ(), který má následující syntaxi:

CIZÍ KLÍČ (jméno_sloupce_který_je_cizí_klíč) REFERENCE název_nadřazené_tabulky (název_nadřazeného_sloupce);

Ukažme, že id_author je cizí klíč:

Id_topic int (10) AUTO_INCREMENT
topic_name varchar(100) NOT NULL
id_author int (10) NOT NULL
PRIMÁRNÍ KLÍČ (id_topic)
CIZÍ KLÍČ (id_author) REFERENCE uživatelé (id_user)

Tabulka je hotová a její finální verze vypadá takto:

Vytvořte témata tabulek (
id_topic int (10) AUTO_INCREMENT,
topic_name varchar(100) NOT NULL,

PRIMÁRNÍ KLÍČ (id_topic),
CIZÍ KLÍČ (id_author) REFERENCE uživatelé (id_user)
);

Poslední zbylá tabulka jsou příspěvky. Všechno je zde podobné, pouze dva cizí klíče:

Vytvořit příspěvky ke stolu (
id_post int (10) AUTO_INCREMENT,
text zprávy NOT NULL,
id_author int (10) NOT NULL,
id_topic int (10) NOT NULL,
PRIMÁRNÍ KLÍČ (id_post),
CIZÍ KLÍČ (id_author) REFERENCE uživatelé (id_user),
CIZÍ KLÍČ (id_topic) REFERENCE topics (id_topic)
);

Vezměte prosím na vědomí, že tabulka může mít několik cizích klíčů, ale v MySQL může být pouze jeden primární klíč. V první lekci jsme smazali naši databázi fóra, je čas ji znovu vytvořit.

Pojďme spustit MySQL server(Start - Programy - MySQL - MySQL Server 5.1 - Klient příkazového řádku MySQL), zadejte heslo, vytvořte databázové fórum (vytvořit databázové fórum;), vyberte jej k použití (použít fórum;) a vytvořte naše tři tabulky:

Vezměte prosím na vědomí, že jeden příkaz lze napsat na několik řádků pomocí klávesy Enter (MySQL automaticky nahradí symbol nový řádek->) a teprve za oddělovačem (středníkem) stisknutím klávesy Enter provedete dotaz.

Pamatujte, že pokud jste něco udělali špatně, vždy můžete tabulku nebo celou databázi zrušit pomocí příkazu DROP. Opravte něco příkazový řádek extrémně nepohodlné, takže někdy (zejména v počáteční fázi) je snazší napsat dotazy v některém editoru, například Poznámkový blok, a poté je zkopírovat a vložit do černého okna.

Takže tabulky jsou vytvořeny, abychom se o tom ujistili, připomeňme si tým zobrazit tabulky:

A nakonec se podívejme na strukturu naší tabulky posledních příspěvků:

Nyní jsou významy všech polí struktury jasné, kromě pole DEFAULT. Toto je pole výchozí hodnoty. Mohli bychom zadat výchozí hodnotu pro některý sloupec (nebo všechny). Pokud bychom například měli pole s názvem „Ženatý“ a zadali ENUM („ano“, „ne“), pak by dávalo smysl nastavit jednu z hodnot jako výchozí. Syntaxe by byla:

Manželský výčet ("ano", "ne") NENÍ NULL výchozí ("ano")

Tito. toto klíčové slovo se zapisuje za datovým typem mezerou a výchozí hodnota je uvedena v závorkách.

Ale vraťme se k našim stolům. Nyní musíme zadat data do našich tabulek. Na webech většinou zadáváte informace do nějakých html formulářů, pak skript v nějakém jazyce (php, java...) tato data z formuláře vytáhne a vloží do databáze. Dělá to pomocí SQL dotazu pro zadávání dat do databáze. Ještě nevíme, jak psát skripty v PHP, ale nyní se naučíme, jak posílat SQL dotazy pro zadávání dat.

K tomuto účelu slouží operátor VLOŽIT. Můžete použít dva typy syntaxe. První možnost se používá k zadání dat do všech polí tabulky:

INSERT INTO název_tabulky VALUES ("hodnota_prvního_sloupce","hodnota_druhého_sloupce", ..., "hodnota_posledního_sloupce");


Zkusme přidat do tabulky uživatelů následující hodnoty:

INSERT INTO users VALUES ("1","sergey", " [e-mail chráněný]", "1111");

Druhá možnost se používá k zadávání dat do některých polí tabulky:

INSERT INTO název_tabulky ("název_sloupce", "název_sloupce") VALUES ("hodnota_prvního_sloupce","hodnota_druhého_sloupce");


V naší tabulce uživatelů jsou všechna pole povinná, ale naše první pole má klíčové slovo AUTO_INCREMENT (tj. je vyplněno automaticky), takže tento sloupec můžeme přeskočit:

INSERT INTO users (jméno, email, heslo) VALUES ("valera", " [e-mail chráněný]", "2222");

Pokud bychom měli pole s typem NULL, tzn. volitelné, mohli bychom je také ignorovat. Pokud se ale pokusíte ponechat pole s hodnotou NOT NULL prázdné, server zobrazí chybovou zprávu a požadavek nedokončí. Při zadávání dat navíc server kontroluje vztahy mezi tabulkami. Proto nebudete moci přidat hodnotu do pole, které je cizím klíčem, který neexistuje v související tabulce. To si ověříte zadáním údajů do zbývajících dvou tabulek.

Nejprve však přidáme informace o několika dalších uživatelích. Chcete-li přidat několik řádků najednou, stačí uvést závorky s hodnotami oddělenými čárkami:

Nyní zadáme údaje do druhé tabulky - témata. Všechno je stejné, ale musíme si uvědomit, že hodnoty v poli id_author musí být přítomny v tabulce uživatelů:

Nyní zkusme přidat další téma, ale s id_author, které není v tabulce uživatelů (protože jsme do tabulky uživatelů přidali pouze 5 uživatelů, id=6 neexistuje):

Server vyvolá chybu a řekne, že nemůže zadat takový řádek, protože pole, které je cizím klíčem, obsahuje hodnotu, která není v tabulce souvisejících uživatelů.

Nyní do tabulky příspěvků přidáme pár řádků, přičemž si pamatujme, že v ní máme 2 cizí klíče, tzn. id_author a id_topic, které zadáme, musí být přítomny v tabulkách s nimi spojených:

Máme tedy 3 tabulky, ve kterých jsou data. Nabízí se otázka – jak vidět, jaká data jsou v tabulkách uložena. To je to, co budeme dělat v příští lekci.

Pokud jste potřebovali uložit výslednou sadu dat, která byla vrácena dotazem SQL, bude vás tento článek zajímat, protože se v něm podíváme na příkaz SELECT DO, s jehož pomocí Microsoft SQL Server, můžete vytvořit novou tabulku a vyplnit ji výsledkem SQL dotaz.

Začneme samozřejmě popisem samotného příkazu SELECT INTO a poté přejdeme k příkladům.

Příkaz SELECT INTO v Transact-SQL

VYBERTE DO– instrukce v jazyce T-SQL, která vytvoří novou tabulku a vloží do ní výsledné řádky z SQL dotazu. Struktura tabulky, tzn. počet a názvy sloupců, stejně jako datové typy a vlastnosti umožňující nulování, budou založeny na sloupcích ( výrazy) zadaný v seznamu výběru zdroje v příkazu SELECT. Příkaz SELECT INTO se obvykle používá ke spojení dat z několika tabulek a pohledů, včetně některých dat výpočtu, do jedné tabulky.

Chcete-li použít příkaz SELECT INTO, musíte mít oprávnění CREATE TABLE v databázi, ve které bude nová tabulka vytvořena.

Příkaz SELECT INTO má dva argumenty:

  • new_table - name nový stůl;
  • skupina souborů – skupina souborů. Pokud není zadán žádný argument, použije se výchozí skupina souborů. Tato příležitost k dispozici od Microsoft SQL Server 2017.

Důležité body o příkazu SELECT INTO

  • Instrukci lze použít k vytvoření tabulky na aktuálním serveru, vytvoření tabulky na vzdáleném serveru není podporováno;
  • Novou tabulku můžete vyplnit daty buď z aktuální databáze a aktuálního serveru, nebo z jiné databáze nebo ze vzdáleného serveru. Například uveďte celé jméno databáze ve formuláři schéma_databáze.název_tabulky nebo v případě vzdáleného serveru, propojený_server.databáze.schéma.název_tabulky;
  • Sloupec identity v nové tabulce nedědí vlastnost IDENTITY, pokud: příkaz obsahuje spojení (JOIN, UNION), klauzuli GROUP BY, agregační funkce, také pokud je sloupec identity součástí výrazu, je získán ze vzdáleného zdroje dat nebo se ve výběrovém seznamu vyskytuje více než jednou. Celkově podobné případy sloupec identity nedědí vlastnost IDENTITY a je vytvořen jako NOT NULL;
  • Příkaz SELECT INTO nelze použít k vytvoření dělené tabulky, i když je zdrojová tabulka dělená;
  • Jako novou tabulku můžete zadat běžnou tabulku i dočasnou tabulku, ale nemůžete zadat proměnnou tabulky ani parametr s hodnotou tabulky;
  • Vypočítaný sloupec, pokud je ve výběrovém seznamu příkazu SELECT INTO, se v nové tabulce stane normálním, tzn. nevypočteno;
  • SELECT INTO nelze použít s klauzulí COMPUTE;
  • Pomocí SELECT INTO se indexy, omezení a spouštěče nepřenesou do nové tabulky, musí být vytvořeny dodatečně po provedení příkazu, pokud jsou potřeba;
  • Klauzule ORDER BY nezaručuje, že řádky v nové tabulce budou vloženy v určeném pořadí.
  • Atribut FILESTREAM se do nové tabulky nepřenese. Objekty BLOB FILESTREAM v nové tabulce budou objekty BLOB typu varbinary(max) a budou mít limit 2 GB;
  • Množství dat zapsaných do transakčního protokolu během operací SELECT INTO závisí na modelu obnovy. V databázích, které používají hromadně protokolovaný model obnovy, a jednoduchý model, hromadné operace, které zahrnují SELECT INTO, jsou protokolovány minimálně. Z tohoto důvodu může být příkaz SELECT INTO efektivnější než samostatné příkazy k vytvoření tabulky a příkazy INSERT k jejímu naplnění daty.

Příklady použití SELECT INTO

Všechny příklady spustím v Microsoft SQL Server 2016 Express DBMS.

Počáteční údaje

Nejprve si vytvoříme dvě tabulky a naplníme je daty, v příkladech tyto tabulky zkombinujeme.

CREATE TABLE TestTable( IDENTITY(1,1) NOT NULL, NOT NULL, (100) NOT NULL, NULL) ON GO CREATE TABLE TestTable2( IDENTITY(1,1) NOT NULL, (100) NOT NULL) ON GO VLOŽIT DO TestTable VALUES (1,"Klávesnice", 100), (1, "Myš", 50), (2, "Telefon", 300) VLOŽIT DO Testovací tabulky 2 HODNOTY (" Počítačové komponenty"), ("Mobilní zařízení") GO SELECT * FROM TestTable SELECT * FROM TestTable2

Příklad 1 - Vytvoření tabulky pomocí SELECT INTO se spojováním dat

Představme si, že potřebujeme sloučit dvě tabulky a výsledný výsledek uložit do nové tabulky ( například potřebujeme získat produkty s názvem kategorie, do které patří).

Operace SELECT INTO SELECT T1.ProductId, T2.CategoryName, T1.ProductName, T1.Price INTO TestTable3 FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId --Výběr dat z nové tabulky SELECTTable3 * FROM


V důsledku toho jsme vytvořili tabulku nazvanou TestTable3 a naplnili ji kombinovanými daty.

Příklad 2 - Vytvoření dočasné tabulky pomocí SELECT INTO se seskupením dat

Nyní řekněme, že potřebujeme seskupená data, například informace o počtu produktů v určité kategorii, a potřebujeme tato data uložit do dočasné tabulky, například tyto informace použijeme pouze v příkazech SQL, takže není třeba vytvářet plnohodnotný stůl.

Vytvořte dočasnou tabulku (#TestTable) pomocí příkazu SELECT INTO SELECT T2.CategoryName, COUNT(T1.ProductId) AS CntProduct INTO #TestTable FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId.Category GROUP -Category BY T - Načítání dat z dočasné tabulky SELECT * FROM #TestTable


Jak můžete vidět, dokázali jsme vytvořit dočasnou tabulku #TestTable a naplnit ji seskupenými daty.

Podívali jsme se tedy na příkaz SELECT INTO v jazyce T-SQL; ve své knize „The T-SQL Programmer’s Way“ mluvím podrobně o všech konstrukcích jazyk T-SQL (Doporučuji přečíst), a to je prozatím vše!

Než budete moci vytvořit tabulku SQL, musíte definovat model databáze. Navrhněte ER diagram, ve kterém definujete entity, atributy a vztahy.

Základní pojmy

Entity jsou objekty nebo skutečnosti, o kterých musí být uloženy informace. Například zaměstnanec firmy nebo projekty realizované firmou. Atributy jsou komponenty, které popisují nebo kvalifikují entitu. Například atribut entity „zaměstnanec“ je mzda a atributem entity „projekt“ jsou odhadované náklady. Spojení jsou asociace mezi dvěma prvky. Může být obousměrný. Existuje také rekurzivní spojení, tedy spojení entity se sebou samým.

Je také nutné určit klíče a podmínky, za kterých bude zachována integrita databáze. Co to znamená? Jinými slovy omezení, která pomohou udržet databáze ve správné a konzistentní podobě.

Přechod z ER diagramu na tabulkový model

Pravidla pro přechod do tabulkový model:

  1. Převeďte všechny entity na tabulky.
  2. Převeďte všechny atributy na sloupce, to znamená, že každý atribut entity se musí objevit v názvu sloupce tabulky.
  3. Převeďte jedinečné identifikátory na primární klíče.
  4. Převeďte všechny vztahy na cizí klíče.
  5. Vytvořte tabulku SQL.

Vytvoření databáze

Nejprve musíte spustit MySQL server. Chcete-li jej spustit, přejděte do nabídky Start, poté na Programy, poté na MySQL a MySQL Server a vyberte MySQL-Command-Line-Client.

Chcete-li vytvořit databázi, použijte příkaz Vytvořit databázi. Tato funkce má následující formát:

VYTVOŘIT DATABÁZI jméno databáze.

Omezení týkající se názvu databáze jsou následující:

  • délka je až 64 znaků a může obsahovat písmena, čísla, symboly "" a "";
  • jméno může začínat číslicí, ale musí obsahovat písmena.

Musíte si zapamatovat obecné pravidlo: jakýkoli požadavek nebo příkaz končí oddělovačem. V SQL je běžné používat jako oddělovač středník.

Server musí uvést, se kterou databází bude potřebovat pracovat. K tomu existuje příkaz USE. Tento operátor má jednoduchou syntaxi: USE n jméno databáze.

Vytvoření tabulky SQL

Takže je navržen model, vytvořena databáze a serveru je přesně řečeno, jak s ní pracovat. Nyní můžete začít vytvářet SQL tabulky. Existuje jazyk DDL (Data Definition Language). Slouží k vytváření MS SQL tabulky, stejně jako k definování objektů a práci s jejich strukturou. DDL obsahuje sadu příkazů.

Vytvoření tabulky serveru SQL

Pomocí jediného příkazu DDL můžete vytvářet různé databázové objekty změnou jeho parametrů. Používá se příkaz Vytvořit tabulku. Formát tt vypadá takto:

VYTVOŘIT TADLE název_tabulky,(název_sloupce1 název _sloupec2 datový typ [column_constraint], [table_constraints]).

Syntaxe tohoto příkazu by měla být popsána podrobněji:

  • Název tabulky musí být dlouhý až 30 znaků a začínat písmenem. Jsou povoleny pouze abecední znaky, písmena a symboly "_", "$" a "#". Použití azbuky je povoleno. Je důležité si uvědomit, že názvy tabulek by neměly být stejné jako názvy jiných objektů nebo vyhrazená slova databázového serveru, jako je sloupec, tabulka, index atd.
  • Pro každý sloupec musíte zadat datový typ. Existuje standardní sada, kterou používá většina. Například Char, Varchar, Číslo, Datum, Typ Null atd.

  • Parametr Výchozí umožňuje nastavit výchozí hodnotu. Tím zajistíte, že v tabulce nebudou žádné hodnoty null. Co to znamená? Výchozí hodnotou může být symbol, výraz, funkce. Je důležité si pamatovat, že tento výchozí datový typ musí odpovídat vstupnímu datovému typu sloupce.
  • Omezení na každém sloupci se používají k vynucení podmínek integrity pro data na úrovni tabulky. Existují další nuance. Je zakázáno smazat tabulku, pokud jsou na ní závislé jiné tabulky.

Jak pracovat s databází

Velké projekty často vyžadují vytvoření více databází, z nichž každá vyžaduje mnoho tabulek. Samozřejmě je nemožné, aby si uživatelé uchovali všechny informace v hlavě. K tomu je možné zobrazit strukturu databází a tabulek v nich. Existuje několik příkazů, konkrétně:

  • ZOBRAZIT DATABÁZE - zobrazí na obrazovce všechny vytvořené SQL databáze;
  • SHOW TABLES - zobrazí seznam všech tabulek pro aktuální databázi, které jsou vybrány příkazem USE;
  • POPSAT název_tabulky- zobrazí popis všech sloupců tabulky.
  • ALTER TABLE - umožňuje změnit strukturu tabulky.

Poslední příkaz umožňuje:

  • přidat sloupec nebo omezení do tabulky;
  • změnit existující sloupec;
  • odstranit sloupec nebo sloupce;
  • odstranit integritní omezení.

Syntaxe tohoto příkazu je: ALTER TABLE název_tabulky( | | | | [(ZAPNOUT | ZAKÁZAT) KONSTANTNÍ omezení_název ] | }.

Existují další příkazy:

  • PŘEJMENOVAT - přejmenuje tabulku.
  • ZKRÁTIT TABULKU - odstraní všechny řádky z tabulky. Tato funkce může být potřebná, když je nutné znovu vyplnit tabulku, ale není potřeba ukládat předchozí data.

Existují také situace, kdy se struktura databáze změnila a tabulka by měla být smazána. K tomu existuje příkaz DROP. Samozřejmě je nejprve potřeba vybrat databázi, ze které chcete tabulku smazat, pokud se liší od aktuální.

Syntaxe příkazu je poměrně jednoduchá: DROP TABLE název_tabulky.

V SQL Access vytváření tabulek a jejich úprava se provádí pomocí stejných příkazů uvedených výše.

Pomocí CREATE TABLE můžete vytvořit prázdnou tabulku a poté ji vyplnit daty. Ale to není vše. Můžete také přímo vytvořit tabulku z jiné tabulky. Takhle? To znamená, že je možné definovat tabulku a naplnit ji daty z jiné tabulky. K tomu existuje speciální klíčové slovo AS.

Syntaxe je velmi jednoduchá:

  • VYTVOŘIT TABULKU název_tabulky[(definice_sloupce)] AS dílčí dotaz;
  • definice_sloupce - názvy sloupců, pravidla integrity pro nově vytvořené sloupce tabulky a výchozí hodnoty;
  • subquery - vrací řádky, které je třeba přidat do nové tabulky.

Takový příkaz tedy vytvoří tabulku s určitými sloupci, vloží do ní řádky, které se vrátí v dotazu.

Dočasné tabulky

Dočasné tabulky jsou tabulky, jejichž data jsou vymazána na konci každé relace nebo dříve. Používají se k záznamu mezihodnot nebo výsledků. Lze je použít jako pracovní listy. Dočasné můžete definovat v jakékoli relaci, ale jejich data můžete použít pouze v aktuální relaci. Vytváření dočasných tabulek SQL je podobné jako u běžných tabulek pomocí příkazu CREATE TABLE. Chcete-li systému ukázat, že tabulka je dočasná, musíte použít parametr GLOBAL TEMPORARY.

Klauzule ON COMMIT nastavuje životnost dat v takové tabulce a může provádět následující:

  • ODSTRANIT ŘÁDKY - po každém dokončení transakce vymaže dočasnou tabulku (smaže všechna data relace). Toto je obvykle výchozí hodnota.
  • ZACHOVAT ŘÁDKY - ponechat data pro použití v další transakci. Kromě toho můžete stůl vyčistit až po skončení relace. Ale jsou tu některé zvláštnosti. Pokud je transakce vrácena zpět (ROLLBACK), tabulka se vrátí do stavu na konci předchozí transakce.

Syntaxe pro vytvoření dočasné tabulky může být reprezentována následovně: CREATE TABLE název_tables,(názevsloupec_1 datový typ [column_constraint], název _sloupec2 datový typ [column_constraint], [table_constraints]).