Prehod z ER diagrama na tabelarni model

Delo z zbirkami podatkov je neposredno povezano s spreminjanjem tabel in podatkov, ki jih vsebujejo. Toda preden začnete, je treba ustvariti tabele. Za avtomatizacijo tega postopka obstaja poseben - "USTVARI TABELO".

Prva stvar!

Preden razumete postopek ustvarjanja tabel z ukazom MS SQL "CREATE TABLE", se je vredno poglobiti v to, kar morate vedeti, preden uporabite funkcijo.

Najprej morate pripraviti ime za tabelo - mora biti edinstveno v primerjavi z drugimi v bazi podatkov in upoštevati več pravil. Ime se mora začeti s črko (a–z), ki ji sledijo morebitne črke, številke ali podčrtaji, končna fraza pa ne sme biti rezervirana beseda. Dolžina imena tabele ne sme presegati 18 znakov.

Ko se odločite za ime, morate razviti strukturo: domislite se imen za stolpce, razmislite o vrsti podatkov, uporabljenih v njih, in o tem, katera polja je treba izpolniti. Tukaj je vredno takoj določiti polja tujih in primarnih ključev ter morebitne omejitve vrednosti podatkov.

Preostale nianse tabele je mogoče enostavno popraviti, zato v fazi izdelave tabele morda niso v celoti premišljene.

Sintaksa

Ko ste razvili strukturo tabele, lahko nadaljujete z njenim ustvarjanjem. To lahko storite povsem preprosto z uporabo SQL funkcije "CREATE TABLE". V njem mora uporabnik določiti predhodno izumljeno ime tabele in seznam stolpcev, pri čemer navede vrsto in ime za vsakega od njih. Sintaksa funkcije je naslednja:

CREATE TABLE ime_tabele
((ime_stolpca podatkovni tip …| omejitev_tabele)
[,(column_name datatype …| table_constraint)]…)

Argumenti, uporabljeni pri konstrukciji funkcije, pomenijo naslednje:

  • table_name - ime tabele
  • column_name - ime stolpca
  • datatype - podatkovni tip, uporabljen v tem polju
  • DEFAULT je privzeti izraz, uporabljen v stolpcu.

Možno je uporabiti tudi dva dodatna argumenta funkcije:

  • column_constraint - parametri stolpca
  • table_constraint - parametri tabele

V njih lahko uporabnik določi omejitve, potrebne za delo ali pogoje za izpolnjevanje tabele.

Značilnosti ustvarjanja tabel

Pri pisanju poizvedbe s funkcijo je včasih treba nastaviti pravila za izpolnjevanje polj. Če želite to narediti, morate dodati posebne atribute funkcij, ki določajo določen nabor pogojev.

Če želite ugotoviti, ali lahko celica vsebuje prazno vrednost, potem ko določite ime in vrsto stolpca, morate vnesti eno od ključnih besed: NULL (lahko so prazne vrednosti) ali NOT NULL (polje mora biti izpolnjeno).

Ko ustvarjate tabelo, morate v večini primerov poenotiti vsak zapis, da ne bi imeli dveh enakih. Za to se najpogosteje uporablja oštevilčenje vrstic. In da ne bi zahtevali, da uporabnik ve zadnja številka ki obstaja v tabeli, je v funkciji "CREATE TABLE" dovolj, da določite stolpec primarnega ključa tako, da napišete ključna beseda"Primarni ključ" za ustreznim poljem. Najpogosteje so tabele med seboj povezane s primarnim ključem.

Za zagotovitev veriženja s primarnim ključem se uporablja lastnost tujega ključa "FOREIGN KEY". Če določite to lastnost za stolpec, lahko zagotovite, da bo to polje vsebovalo vrednost, ki se ujema z eno od tistih v stolpcu primarnega ključa iste ali druge tabele. Na ta način je mogoče zagotoviti konsistentnost podatkov.

Če želite zagotoviti preverjanje podanega nabora ali definicije, morate uporabiti atribut CHECK. Zapisan je zadnji na seznamu funkcijskih argumentov in ima nekaj osebnih parametrov logično izražanje. Z njegovo pomočjo lahko omejite seznam možnih vrednosti, na primer z uporabo samo črk "M" in "F" v polju tabele "Spol".

Poleg predstavljenih ima funkcija še veliko več specifičnih atributov, ki pa se v praksi uporabljajo precej redkeje.

Primeri

Za popolno razumevanje načela delovanja funkcije je vredno v praksi razmisliti, kako deluje CREATE TABLE (SQL). Spodnji primer ustvari tabelo, prikazano na sliki:

USTVARI TABELO po meri
(ID CHAR(10) NOT NULL Primarni ključ,
Ime_po meri CHAR(20),
Naslov_po meri CHAR(30),
Mesto_po meri CHAR(20),
Država_po meri CHAR(20),
ArcDate CHAR(20))

Kot lahko vidite, parameter morebitna odsotnost vrednosti v celici (NULL) lahko izpustite, ker je privzeta.

Ko ustvarite prazne tabele, je naslednji logični korak, da jih napolnite s podatki in posodobite te podatke. Za to obstaja nekaj izjav v Transact-SQL: VSTAVI - POSODOBI.

Vendar je pogosto v pozni fazi načrtovanja treba spremeniti samo shemo tabele. Na primer, če se je spremenil primarni ključ ali tip podatkov stolpca. Da ne brišemo starih tabel in jih ne ustvarjamo znova s ​​pomočjo CREATE TABLE s pravilnimi parametri, se uporablja stavek ALTER TABLE. Spodaj je obravnavana uporaba teh treh konstruktov.

Polnilne mize

Tabelo lahko izpolnite s podatki s stavkom CREATE TABLE, vendar je učinkovitejši pristop ločiti ustvarjanje tabele in njeno polnjenje, zlasti za začetnike v SQL, ker:

  • vizualno jasnejši;
  • Bolj priročno je, če se tabele polnijo postopoma.

Če želite dobiti naslednji pogled tabele:

ID. Najemnik

Datum rojstva

Številka stanovanja

Email naslov

Aleksin. V.V.

Gorbunov D.D.

[e-pošta zaščitena]

Simonova K.R.

Dormitotova K.S.

[e-pošta zaščitena]

Ustvariti ga boste morali z uporabo USTVARI TABELO in ga izpolnite s stavkom INSERT. Naslednja navodila doda eno vrstico v tabelo sostanovalcev, ki smo jo že ustvarili:

Izbriši prejšnja različica mize DROP TABLE sostanovalci; -- Ustvari tabelo. CREATE TABLE housemates(housemeateID int NOT NULL CONSTRAINT primary_id PRIMARY KEY, housemateName nvarchar(30) NOT NULL, BitDate date NOT NULL, apartmentnumber int NOT NULL, Email nvarchar(30)); -- Vnesite podatke v tabelo USE GO INSERT INTO ( , , , ,) VALUES (100,"Aleksin V.V.","19721122",11," [e-pošta zaščitena]"), (101,"Gorbunov D.D.","19220525",25," [e-pošta zaščitena]"), (102," Simonova K.R. "," 19560211 ", 13," [e-pošta zaščitena]"), (103,"Dormitotova K.S.","19770815",9," [e-pošta zaščitena]")

V zgornjem primeru moramo razlikovati med dvema blokoma konstrukcije INSERT:

INTO- kaže na tabelo, v katero so dodani podatki

VREDNOTE- inicializacija vrstičnega vnosa.

V parametrih (v oklepajih) bloka INTO Stolpci so navedeni v vrstnem redu, kot so prikazani. Zapis brez parametrov je sprejemljiv, če je vrstni red stolpcev pri ustvarjanju in izpolnjevanju tabele enak. Naslednja koda je enaka prejšnji:

VSTAVI V VREDNOSTI (100,"Aleksin. V.V.","19721122",11," [e-pošta zaščitena]"), (101,"Gorbunov D.D.","19220525",25," [e-pošta zaščitena]"), (102," Simonova K.R. "," 19560211 ", 13," [e-pošta zaščitena]"), (103,"Dormitotova K.S.","19770815",9," [e-pošta zaščitena]")

Če morate spremeniti vrstni red polnjenja, morate to izrecno navesti:

VSTAVI V (,,, ,) VREDNOSTI ("Alexin. V.V.",101,"19721122"," [e-pošta zaščitena]",11), ("Gorbunov D.D.",102,"19220525"," [e-pošta zaščitena]",25), ("Simonova K.R",103,"19560211"," [e-pošta zaščitena]",13) ("Dormitotova K.S.",104,"19770815"," [e-pošta zaščitena]",9)

V bloku VALUES se inicializacija vrstice za vrstico izvede v vrstnem redu stolpcev bloka INTO. Oblazinjenje vrstic je seznam vrednosti celic v oklepajih. Vrednosti so navedene ločene z vejicami, vrstice pa med seboj ločene.

Konstrukt INSERT lahko uporabite samo za tiste stolpce, ki še ne vsebujejo podatkov. V nasprotnem primeru bo prišlo do napake pri izvedbi zahteve.

Posodabljanje tabele

Potreba po posodobitvi tabel se pojavi, če je treba spremeniti podatke, ki so že vneseni v tabelo. Izvedeno po navodilih NADGRADNJA. Če INSERT deluje samo s praznimi tabelami, potem UPDATE deluje samo s polnimi. Če je zahteva naslovljena na prazne celice, bo prišlo do napake.

Naslednja koda bo dodelila novo Poštni nabiralnik stanovalcu hiše z matično številko 103.

POSODOBITE sostanovalci NASTAVI E-pošta = " [e-pošta zaščitena]" WHERE housemeateID = 103

Blokiraj NASTAVI- to je blok sprememb. Če morate posodobiti vrednost več celic, so te navedene ločene z vejicami.

POSODOBITE sostanovalci NASTAVI E-pošta = " [e-pošta zaščitena]", housemateName = "Rurik S.S." WHERE housemeateID = 103

Menjava mize

V poznejših fazah načrtovanja ali po razvoju baze se pogosto pojavi potreba:

  • dodajte ali odstranite stolpec;
  • spremenite vrsto stolpca;
  • določite stolpec ali skupino stolpcev kot primarni ali tuji ključ ali odstranite te omejitve.

Za vse te operacije obstaja navodilo za preglasitev. ZA MIZO.

Za dodajanje stolpca se uporabi stavek ALTER TABLE s klavzulo ADD. Dodajmo nov stolpec v tabelo sostanovalcev iz prejšnjega razdelka:

ALTER TABLE housemates ADD PhoneNumber nvarchar(12) NULL;

Zanj morate uporabiti stavek SPREMENI STOLPEC znotraj ALTER TABLE:

ALTER TABLE housemates ALTER COLUMN PhoneNumber char(25) NOT NULL;

Odstrani stolpec z uporabo SPUSTI STOLPEC znotraj ALTER TABLE:

ALTER TABLE housemates DROP COLUMN PhoneNumber;

Primarni ali tuji ključ se odstrani in doda z uporabo konstruktov ALTER TABLE ADD CONSTRAINT/DROP CONSTRAINT:

Odstranite omejitev primarnega ključa iz stolpca housemeateID ALTER TABLE housemates DROP CONSTRAINT primary_id; --Dodelite stolpec housemeateID kot primarni ključ ALTER TABLE housemates ADD CONSTRAINT PK_ID PRIMARY KEY (housemeateID);

Če poskušate dodeliti primarni ključ tabeli, ki že obstaja, bo prevajalnik poizvedbe vrnil napako. Če torej tabela že ima primarni ključ, ga morate odstraniti in kot primarni ključ določiti skupino stolpcev. Na primer takole:

ALTER TABLE sostanovalci DROP CONSTRAINT PK_ID; ALTER TABLE housemates ADD CONSTRAINT PK_ID,PK_AN PRIMARY KEY (housemeateID,apartmentnumber);

SQL - Lekcija 3. Ustvarjanje tabel in njihovo polnjenje z informacijami

Tako smo se seznanili s tipi podatkov, zdaj bomo izboljšali tabele za naš forum. Poglejmo si jih najprej. In začnimo s tabelo uporabnikov. V njem imamo 4 stolpce:

Id_user so celoštevilske vrednosti, kar pomeni, da bo tip int, omejimo ga na 10 znakov - int (10).
ime je vrednost niza varchar, omejimo ga na 20 znakov - varchar(20).
email je vrednost niza varchar, omejimo jo na 50 znakov - varchar(50).
geslo je vrednost niza varchar, omejili ga bomo na 15 znakov - varchar(15).

Vse vrednosti polja so obvezne, kar pomeni, da morate dodati tip NOT NULL.

Id_user int (10) NI NULL
name varchar(20) NOT NULL
email varchar(50) NOT NULL

Prvi stolpec, kot se spomnite iz konceptualnega modela naše baze podatkov, je primarni ključ (to pomeni, da so njegove vrednosti edinstvene in enolično identificirajo zapis). Unikatnost je možno spremljati samostojno, ni pa racionalno. Za to obstaja poseben atribut v SQL - SAMODEJNO POVEČANJE, ki ob dostopu do tabele za dodajanje podatkov izračuna največjo vrednost tega stolpca, dobljeno vrednost poveča za 1 in jo vnese v stolpec. Tako se v tem stolpcu samodejno ustvari edinstvena številka, zato je tip NOT NULL odvečen. Torej, dodelimo atribut stolpcu s primarnim ključem:


name varchar(20) NOT NULL
email varchar(50) NOT NULL
geslo varchar(15) NI NULL

Zdaj moramo določiti, da je polje id_user primarni ključ. Za to SQL uporablja ključno besedo PRIMARNI KLJUČ(), ime ključnega polja je navedeno v oklepajih. Naredimo spremembe:

Id_user int (10) AUTO_INCREMENT
name varchar(20) NOT NULL
email varchar(50) NOT NULL
geslo varchar(15) NI NULL
PRIMARNI KLJUČ (id_user)

Tako je tabela pripravljena in njena končna različica izgleda takole:

Ustvari uporabnike tabele (
id_user int (10) AUTO_INCREMENT,
name varchar(20) NOT NULL,
email varchar(50) NOT NULL,
geslo varchar(15) NOT NULL,
PRIMARNI KLJUČ (id_user)
);

Zdaj pa poglejmo drugo tabelo – teme. Če trdimo podobno, imamo naslednja polja:



id_author int (10) NI NULL
PRIMARNI KLJUČ (id_tema)

Toda v našem modelu zbirke podatkov je polje id_author tuji ključ, tj. lahko ima samo vrednosti, ki so v polju id_user tabele uporabnikov. Za označevanje tega v SQL obstaja ključna beseda TUJI KLJUČ(), ki ima naslednjo sintakso:

TUJI KLJUČ (ime_stolpca_ki_je_tuji_ključ) REFERENCE ime_nadrejene_tabele (ime_nadrejenega_stolpca);

Označimo, da je id_author tuji ključ:

Id_topic int (10) AUTO_INCREMENT
ime_teme varchar(100) NI NULL
id_author int (10) NI NULL
PRIMARNI KLJUČ (id_tema)
TUJI KLJUČ (id_author) REFERENCE uporabniki (id_user)

Tabela je pripravljena in njena končna različica izgleda takole:

Ustvari teme tabel (
id_topic int (10) AUTO_INCREMENT,
ime_teme varchar(100) NI NULL,

PRIMARNI KLJUČ (id_tema),
TUJI KLJUČ (id_author) REFERENCE uporabniki (id_user)
);

Zadnja tabela, ki ostane, so objave. Tukaj je vse podobno, samo dva tuja ključa:

Ustvari objave za tabele (
id_post int (10) AUTO_INCREMENT,
besedilo sporočila NOT NULL,
id_author int (10) NI NULL,
id_topic int (10) NI NULL,
PRIMARNI KLJUČ (id_post),
TUJI KLJUČ (id_author) REFERENCE uporabniki (id_user),
TUJI KLJUČ (id_topic) REFERENCE teme (id_topic)
);

Upoštevajte, da ima tabela lahko več tujih ključev, v MySQL pa je lahko samo en primarni ključ. V prvi lekciji smo izbrisali bazo podatkov foruma, čas je, da jo znova ustvarimo.

Zaženimo strežnik MySQL(Start - Programi - MySQL - MySQL Server 5.1 - MySQL Command Line Client), vnesite geslo, ustvarite forum baze podatkov (create database forum;), ga izberite za uporabo (use forum;) in ustvarite naše tri tabele:

Upoštevajte, da lahko en ukaz zapišete v več vrsticah s tipko Enter (MySQL samodejno nadomesti simbol nova vrstica->), šele za ločilom (podpičjem) pa pritisk na tipko Enter izvede poizvedbo.

Zapomnite si, če ste naredili kaj narobe, lahko vedno izbrišete tabelo ali celotno zbirko podatkov s stavkom DROP. Nekaj ​​popravi ukazna vrstica zelo neprijetno, zato je včasih (zlasti v začetni fazi) lažje napisati poizvedbe v kakšnem urejevalniku, na primer Beležnici, in jih nato kopirati in prilepiti v črno okno.

Torej, tabele so ustvarjene, da se prepričamo o tem, spomnimo se ekipe pokaži mize:

In končno, poglejmo strukturo tabele naših zadnjih objav:

Zdaj postanejo jasni pomeni vseh polj strukture, razen polja DEFAULT. To je privzeto polje vrednosti. Lahko bi določili privzeto vrednost za nekatere stolpce (ali vse). Na primer, če bi imeli polje z imenom "Poročen" in tip ENUM ("da", "ne"), bi bilo smiselno, da bi bila ena od vrednosti privzeta vrednost. Sintaksa bi bila:

Poročen enum ("da", "ne") NOT NULL privzeto ("da")

Tisti. ta ključna beseda je za podatkovnim tipom ločena s presledkom, privzeta vrednost pa je navedena v oklepaju.

Toda vrnimo se k našim mizam. Zdaj moramo vnesti podatke v naše tabele. Na spletnih straneh običajno vnesete podatke v neke html obrazce, potem skripta v nekem jeziku (php, java...) te podatke izvleče iz obrazca in jih vnese v bazo. To naredi s poizvedbo SQL za vnos podatkov v bazo podatkov. Ne znamo še pisati skriptov v PHP, zdaj pa se bomo naučili pošiljati SQL poizvedbe za vnos podatkov.

V ta namen se uporablja operater VSTAVI. Uporabite lahko dve vrsti sintakse. Prva možnost se uporablja za vnos podatkov v vsa polja tabele:

INSERT INTO table_name VALUES ("prvi_stolpec_vrednost","drugi_stolpec_vrednost", ..., "zadnji_stolpec_vrednost");


Poskusimo v tabelo uporabnikov dodati naslednje vrednosti:

VSTAVI V VREDNOSTI uporabnikov ("1","sergey", " [e-pošta zaščitena]", "1111");

Druga možnost se uporablja za vnos podatkov v nekatera polja tabele:

INSERT INTO table_name ("ime_stolpca", "ime_stolpca") VALUES ("vrednost_prvega_stolpca","vrednost_drugega_stolpca");


V naši tabeli uporabnikov so vsa polja obvezna, vendar ima naše prvo polje ključno besedo AUTO_INCREMENT (tj. izpolnjeno je samodejno), zato lahko ta stolpec preskočimo:

INSERT INTO uporabniki (ime, e-pošta, geslo) VREDNOSTI ("valera", " [e-pošta zaščitena]", "2222");

Če bi imeli polja s tipom NULL, tj. neobvezno, bi jih lahko tudi prezrli. Toda če poskusite pustiti polje z vrednostjo NOT NULL prazno, bo strežnik prikazal sporočilo o napaki in ne bo dokončal zahteve. Poleg tega strežnik pri vnosu podatkov preverja relacije med tabelami. Zato ne boste mogli dodati vrednosti v polje, ki je tuji ključ, ki ne obstaja v povezani tabeli. To boste preverili z vnosom podatkov v preostali dve tabeli.

Najprej pa dodajmo informacije o še nekaj uporabnikih. Če želite dodati več vrstic hkrati, morate samo navesti oklepaje z vrednostmi, ločenimi z vejicami:

Zdaj vnesemo podatke v drugo tabelo – teme. Vse je enako, vendar se moramo spomniti, da morajo biti vrednosti v polju id_author prisotne v tabeli uporabnikov:

Zdaj pa poskusimo dodati še eno temo, vendar z id_author, ki ga ni v tabeli uporabnikov (ker smo v tabelo uporabnikov dodali le 5 uporabnikov, potem id=6 ne obstaja):

Strežnik vrže napako in pravi, da ne more vnesti takšne vrstice, ker polje, ki je tuji ključ, vsebuje vrednost, ki je ni v povezani tabeli uporabnikov.

Zdaj pa dodamo nekaj vrstic v tabelo objav, pri čemer ne pozabimo, da imamo v njej 2 tuja ključa, tj. id_author in id_topic, ki ju bomo vnesli, morata biti prisotna v tabelah, povezanih z njima:

Imamo torej 3 tabele s podatki. Postavlja se vprašanje - kako videti, kateri podatki so shranjeni v tabelah. To bomo storili v naslednji lekciji.

Če ste morali shraniti nabor rezultatov podatkov, ki jih je vrnila poizvedba SQL, vas bo ta članek zanimal, saj si bomo v njem ogledali Izjava SELECT INTO, s pomočjo katerega Microsoft SQL Server, lahko ustvarite novo tabelo in jo izpolnite z rezultatom SQL poizvedba.

Začeli bomo seveda z opisom samega stavka SELECT INTO, nato pa prešli na primere.

Izjava SELECT INTO v Transact-SQL

IZBERI V– navodilo v jeziku T-SQL, ki ustvari novo tabelo in vanjo vstavi nastale vrstice iz SQL poizvedbe. Struktura tabele, tj. število in imena stolpcev ter tipi podatkov in lastnosti ničelnosti bodo temeljili na stolpcih ( izrazi) določen na izvornem izbirnem seznamu v stavku SELECT. Običajno se stavek SELECT INTO uporablja za združevanje podatkov iz več tabel in pogledov, vključno z nekaterimi računskimi podatki, v eno tabelo.

Če želite uporabiti stavek SELECT INTO, morate imeti dovoljenje CREATE TABLE za bazo podatkov, v kateri bo ustvarjena nova tabela.

Stavek SELECT INTO ima dva argumenta:

  • nova_tabela - ime nova tabela;
  • filegroup – skupina datotek. Če argument ni podan, se uporabi privzeta datotečna skupina. Ta priložnost na voljo od Microsoft SQL Server 2017.

Pomembne točke o stavku SELECT INTO

  • Navodilo je mogoče uporabiti za ustvarjanje tabele na trenutnem strežniku; ustvarjanje tabele na oddaljenem strežniku ni podprto;
  • Novo tabelo lahko izpolnite s podatki iz trenutne baze podatkov in trenutnega strežnika ali iz druge baze podatkov ali oddaljenega strežnika. Na primer, navedite polno ime baze podatkov v obliki shema_baze podatkov.ime_tabele ali v primeru oddaljenega strežnika, linked_server.database.schema.table_name;
  • Stolpec identitete v novi tabeli ne podeduje lastnosti IDENTITY, če: stavek vsebuje združevanje (JOIN, UNION), klavzulo GROUP BY, agregatna funkcija, tudi če je stolpec z identiteto del izraza, je pridobljen iz oddaljenega vira podatkov ali se večkrat pojavi na izbirnem seznamu. V vsem podobnih primerih stolpec identitete ne podeduje lastnosti IDENTITY in je ustvarjen kot NOT NULL;
  • Za ustvarjanje particionirane tabele ne morete uporabiti stavka SELECT INTO, tudi če je izvorna tabela particionirana;
  • Kot novo tabelo lahko podate običajno tabelo in tudi začasno tabelo, vendar ne morete podati spremenljivke tabele ali parametra z vrednostjo tabele;
  • Izračunani stolpec, če obstaja na izbirnem seznamu stavka SELECT INTO, v novi tabeli postane običajen, tj. ni izračunano;
  • SELECT INTO ni mogoče uporabiti s klavzulo COMPUTE;
  • Z uporabo SELECT INTO se indeksi, omejitve in sprožilci ne prenesejo v novo tabelo, temveč jih je treba dodatno ustvariti po izvedbi stavka, če so potrebni;
  • Klavzula ORDER BY ne zagotavlja, da bodo vrstice v novi tabeli vstavljene v podanem vrstnem redu.
  • Atribut FILESTREAM se ne prenese v novo tabelo. Objekti BLOB FILESTREAM v novi tabeli bodo objekti BLOB tipa varbinary(max) in imajo omejitev 2 GB;
  • Količina podatkov, zapisanih v dnevnik transakcij med operacijami SELECT INTO, je odvisna od modela obnovitve. V bazah podatkov, ki uporabljajo model obnovitve z množičnim beleženjem, in preprost model, se množične operacije, ki vključujejo SELECT INTO, minimalno beležijo. Zaradi tega je lahko stavek SELECT INTO učinkovitejši od ločenih stavkov za ustvarjanje tabele in stavkov INSERT za njeno zapolnitev s podatki.

Primeri uporabe SELECT INTO

Vse primere bom izvajal v Microsoft SQL Server 2016 Express DBMS.

Začetni podatki

Najprej ustvarimo dve tabeli in ju napolnimo s podatki; ti tabeli bomo združili v primerih.

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 INSERT INTO TestTable VREDNOSTI (1, "Keyboard", 100), (1, "Mouse", 50), (2, "Phone", 300) POJDI INSERT INTO TestTable2 VALUES (" Računalniške komponente"), ("Mobilne naprave") POJDI SELECT * FROM TestTable SELECT * FROM TestTable2

Primer 1 - Ustvarjanje tabele z uporabo SELECT INTO z združevanjem podatkov

Predstavljajmo si, da moramo združiti dve tabeli in dobljeni rezultat shraniti v novo tabelo ( na primer, pridobiti moramo izdelke z imenom kategorije, ki ji pripadajo).

Operacija 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 --Izbira podatkov iz nove tabele SELECT * FROM TestTable3


Kot rezultat smo ustvarili tabelo z imenom TestTable3 in jo napolnili s kombiniranimi podatki.

Primer 2 - Ustvarjanje začasne tabele z uporabo SELECT INTO z združevanjem podatkov

Zdaj pa recimo, da potrebujemo združene podatke, na primer informacije o številu izdelkov v določeni kategoriji, in te podatke moramo shraniti v začasno tabelo, na primer, te informacije bomo uporabili samo v stavkih SQL, tako da ni treba ustvariti polnopravne tabele.

Ustvarite začasno tabelo (#TestTable) s stavkom SELECT INTO SELECT T2.CategoryName, COUNT(T1.ProductId) AS CntProduct INTO #TestTable FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId GROUP BY T2.CategoryName - - Pridobivanje podatkov iz začasne tabele SELECT * FROM #TestTable


Kot lahko vidite, smo lahko ustvarili začasno tabelo #TestTable in jo napolnili z združenimi podatki.

Tako smo pogledali stavek SELECT INTO v jeziku T-SQL; v moji knjigi "Način programiranja T-SQL" podrobno govorim o vseh konstrukcijah jezik T-SQL (Priporočam v branje), in to je zaenkrat vse!

Preden lahko ustvarite tabelo SQL, morate definirati model baze podatkov. Oblikujte diagram ER, v katerem boste definirali entitete, atribute in odnose.

Osnovni pojmi

Entitete so predmeti ali dejstva, o katerih morajo biti shranjene informacije. Na primer zaposleni v podjetju ali projekti, ki jih izvaja podjetje. Atributi so komponente, ki opisujejo ali kvalificirajo entiteto. Na primer, atribut entitete "zaposleni" je plača, atribut entitete »projekt« pa je ocenjeni strošek. Povezave so asociacije med dvema elementoma. Lahko je dvosmerno. Obstaja tudi rekurzivna povezava, torej povezava entitete s samo seboj.

Prav tako je treba določiti ključe in pogoje, pod katerimi se bo ohranila celovitost baze podatkov. Kaj to pomeni? Z drugimi besedami, omejitve, ki bodo pomagale ohranjati baze podatkov v pravilni in dosledni obliki.

Prehod z ER diagrama na tabelarni model

Pravila za prehod na tabelarni model:

  1. Pretvori vse entitete v tabele.
  2. Pretvorite vse atribute v stolpce, kar pomeni, da se mora vsak atribut entitete pojaviti v imenu stolpca tabele.
  3. Pretvorite edinstvene identifikatorje v primarne ključe.
  4. Pretvori vse odnose v tuje ključe.
  5. Ustvarite tabelo SQL.

Ustvarjanje baze podatkov

Najprej morate zagnati strežnik MySQL. Če ga želite zagnati, pojdite v meni Start, nato Programi, nato MySQL in MySQL Server, izberite MySQL-Command-Line-Client.

Če želite ustvariti bazo podatkov, uporabite ukaz Create Database. Ta funkcija ima naslednjo obliko:

USTVARITE BAZO PODATKOV ime_baze podatkov.

Omejitve glede imena baze podatkov so naslednje:

  • dolžina je do 64 znakov in lahko vključuje črke, številke, simbole "" in "";
  • ime se lahko začne s številko, vendar mora vsebovati črke.

Zapomniti si morate splošno pravilo: vsaka zahteva ali ukaz se konča z ločilom. V SQL je običajno uporabiti podpičje kot ločilo.

Strežnik mora navesti, s katero bazo podatkov bo moral delati. Za to obstaja izjava USE. Ta operator ima preprosto sintakso: USE n ime_baze podatkov.

Ustvarjanje tabele SQL

Torej, model je zasnovan, baza podatkov ustvarjena in strežniku je natančno povedano, kako naj dela z njo. Zdaj lahko začnete ustvarjati tabele SQL. Obstaja jezik za definicijo podatkov (DDL). Uporablja se za ustvarjanje tabele MS SQL, kot tudi za definiranje objektov in delo z njihovo strukturo. DDL vključuje nabor ukazov.

Izdelava tabele SQL Server

Z uporabo samo enega ukaza DDL lahko ustvarite različne objekte baze podatkov s spreminjanjem njenih parametrov. Uporabi se ukaz Ustvari tabelo. Format tt izgleda takole:

USTVARI TADLE ime_tabele,(ime_stolpca1 Ime _stolpec2 podatkovni tip [omejitev_stolpca],[omejitve_tabele]).

Sintakso tega ukaza je treba podrobneje opisati:

  • Ime tabele mora biti dolgo do 30 znakov in se mora začeti s črko. Dovoljeni so samo abecedni znaki, črke in simboli "_", "$" in "#". Dovoljena je uporaba cirilice. Pomembno je upoštevati, da imena tabel ne smejo biti enaka drugim imenom objektov ali rezerviranim besedam strežnika baze podatkov, kot so stolpec, tabela, indeks itd.
  • Za vsak stolpec morate določiti vrsto podatkov. Obstaja standardni niz, ki ga uporablja večina. Na primer Char, Varchar, Number, Date, Null type itd.

  • Parameter Privzeto vam omogoča nastavitev privzete vrednosti. To zagotavlja, da v tabeli ni ničelnih vrednosti. Kaj to pomeni? Privzeta vrednost je lahko simbol, izraz, funkcija. Pomembno si je zapomniti, da se mora ta privzeti podatkovni tip ujemati z vhodnim podatkovnim tipom stolpca.
  • Omejitve za vsak stolpec se uporabljajo za uveljavljanje pogojev celovitosti podatkov na ravni tabele. Obstajajo še druge nianse. Prepovedano je brisanje tabele, če so od nje odvisne druge tabele.

Kako delati z bazo podatkov

Veliki projekti pogosto zahtevajo ustvarjanje več baz podatkov, od katerih vsaka zahteva veliko tabel. Seveda je nemogoče, da bi uporabniki obdržali vse informacije v svojih glavah. Za to si je mogoče ogledati strukturo baz podatkov in tabel v njih. Obstaja več ukazov, in sicer:

  • PRIKAŽI PODATKOVNE BAZE - prikaže vse ustvarjene baze podatkov SQL na zaslonu;
  • PRIKAŽI TABELE - prikaže seznam vseh tabel za trenutno zbirko podatkov, ki so izbrane z ukazom USE;
  • OPIŠI ime_tabele- prikazuje opis vseh stolpcev tabele.
  • ALTER TABLE - omogoča spreminjanje strukture tabele.

Zadnji ukaz omogoča:

  • dodajte stolpec ali omejitev v tabelo;
  • spremenite obstoječi stolpec;
  • izbrišite stolpec ali stolpce;
  • odstraniti omejitve celovitosti.

Sintaksa za ta ukaz je: ALTER TABLE ime_tabele( | | | | [(OMOGOČI | ONEMOGOČI) KONST ime_omejitve ] | }.

Obstajajo še drugi ukazi:

  • RENAME - preimenujte tabelo.
  • TRUNCATE TABLE - odstrani vse vrstice iz tabele. Ta funkcija bo morda potrebna, ko bo treba ponovno izpolniti tabelo, vendar prejšnjih podatkov ni treba shranjevati.

Obstajajo tudi situacije, ko se struktura baze podatkov spremeni in je treba tabelo izbrisati. Za to obstaja ukaz DROP. Seveda morate najprej izbrati bazo podatkov, iz katere želite izbrisati tabelo, če je drugačna od trenutne.

Sintaksa ukaza je precej preprosta: DROP TABLE Ime_table.

IN SQL Access ustvarjanje tabel in njihovo spreminjanje poteka z istimi zgoraj navedenimi ukazi.

Z uporabo CREATE TABLE lahko ustvarite prazno tabelo in jo nato napolnite s podatki. A to še ni vse. Tabelo lahko ustvarite tudi neposredno iz druge tabele. Všečkaj to? To pomeni, da je mogoče definirati tabelo in jo napolniti s podatki iz druge tabele. Za to obstaja posebna ključna beseda AS.

Sintaksa je zelo preprosta:

  • USTVARI TABELO Ime_table[(definicija_stolpca)] podpoizvedba AS;
  • definicija_stolpca - imena stolpcev, pravila celovitosti za novo ustvarjene stolpce tabele in privzete vrednosti;
  • podpoizvedba - vrne vrstice, ki jih je treba dodati v novo tabelo.

Tako tak ukaz ustvari tabelo z določenimi stolpci, vanjo vstavi vrstice, ki se vrnejo v poizvedbi.

Začasne mize

Začasne tabele so tabele, katerih podatki se izbrišejo na koncu vsake seje ali prej. Uporabljajo se za beleženje vmesnih vrednosti ali rezultatov. Uporabljajo se lahko kot delovni listi. Začasne lahko določite v kateri koli seji, vendar lahko njihove podatke uporabite samo v trenutni seji. Ustvarjanje začasnih tabel SQL je podobno običajnim tabelam z uporabo ukaza CREATE TABLE. Če želite sistemu pokazati, da je tabela začasna, morate uporabiti parameter GLOBAL TEMPORARY.

Klavzula ON COMMIT nastavi življenjsko dobo podatkov v taki tabeli in lahko naredi naslednje:

  • DELETE ROWS - počistite začasno tabelo (izbrišite vse podatke o seji) po vsakem zaključku transakcije. To je običajno privzeta vrednost.
  • OHRANITE VRSTICE - pustite podatke za uporabo v naslednji transakciji. Poleg tega lahko mizo počistite šele po koncu seje. Je pa nekaj posebnosti. Če se transakcija povrne nazaj (ROLLBACK), bo tabela vrnjena v stanje ob koncu prejšnje transakcije.

Sintakso za ustvarjanje začasne tabele lahko predstavimo na naslednji način: CREATE TABLE Ime_tabele,(Imestolpec_1 podatkovni tip [omejitev_stolpca], Ime _stolpec2 podatkovni tip [omejitev_stolpca], [omejitve_tabele]).