Selectie van materialen voor de studie van databases en SQL. SQL leren

  • zelfstudie

Waar gaat deze les over?

Deze tutorial is zoiets als een "stempel van mijn geheugen" in de SQL-taal (DDL, DML), d.w.z. dit is informatie die zich tijdens mijn professionele activiteiten heeft verzameld en voortdurend in mijn hoofd wordt opgeslagen. Dit is voor mij een voldoende minimum, dat het vaakst wordt gebruikt bij het werken met databases. Als het nodig is om completere SQL-constructies te gebruiken, wend ik me meestal tot de MSDN-bibliotheek op internet voor hulp. Alles in je hoofd houden is naar mijn mening erg moeilijk, en daar is ook geen specifieke behoefte aan. Maar het kennen van de basisconstructies is erg handig, omdat. ze zijn bijna in dezelfde vorm toepasbaar in veel relationele databases zoals Oracle, MySQL, Firebird. De verschillen zitten vooral in de datatypes, die in details kunnen verschillen. Er zijn niet zo veel elementaire SQL-taalconstructies, en met constante oefening worden ze snel onthouden. Om bijvoorbeeld objecten (tabellen, beperkingen, indexen, enz.) te maken, is het voldoende om een ​​teksteditor van de omgeving (IDE) bij de hand te hebben om met een database te werken, en het is niet nodig om een ​​visuele toolkit te leren die is aangescherpt voor werken met een specifiek type database (MS SQL, Oracle, MySQL, Firebird, …). Dit is ook handig omdat je de hele tekst voor ogen hebt en je niet talloze tabbladen hoeft te doorlopen om bijvoorbeeld een index of een restrictie aan te maken. Wanneer u constant met de database werkt, gaat het maken, wijzigen en vooral opnieuw maken van een object met behulp van scripts vele malen sneller dan wanneer het in de visuele modus wordt gedaan. Ook in scriptmodus (respectievelijk met de nodige zorgvuldigheid) is het gemakkelijker om de regels voor het benoemen van objecten in te stellen en te controleren (mijn subjectieve mening). Daarnaast zijn scripts handig in gebruik wanneer wijzigingen in de ene database (bijvoorbeeld een testdatabase) in dezelfde vorm naar een andere database moeten worden overgebracht (productief).

De SQL-taal is verdeeld in verschillende delen, hier zal ik de 2 belangrijkste delen ervan bespreken:
  • DML - Data Manipulation Language (taal voor gegevensmanipulatie), die de volgende constructies bevat:
    • SELECT - gegevensselectie
    • INSERT - nieuwe gegevens invoegen
    • UPDATE - gegevensupdate
    • VERWIJDEREN - gegevens verwijderen
    • SAMENVOEGEN - gegevens samenvoegen
Omdat Ik ben een beoefenaar, daarom zal er weinig theorie in dit leerboek staan ​​en zullen alle constructies worden uitgelegd met praktische voorbeelden. Daarnaast geloof ik dat een programmeertaal, en met name SQL, alleen in de praktijk te beheersen is, door hem zelf aan te raken en te begrijpen wat er gebeurt als je deze of gene constructie uitvoert.

Deze tutorial is gemaakt volgens het principe van Step by Step, d.w.z. het is noodzakelijk om het achtereenvolgens te lezen en bij voorkeur onmiddellijk na de voorbeelden. Maar als u onderweg meer over een opdracht wilt weten, gebruik dan een specifieke zoekopdracht op internet, bijvoorbeeld in de MSDN-bibliotheek.

Bij het schrijven van deze tutorial gebruikte ik een database van MS SQL Server versie 2014 en ik gebruikte MS SQL Server Management Studio (SSMS) om de scripts uit te voeren.

Kort over MS SQL Server Management Studio (SSMS)

SQL Server Management Studio (SSMS) is een hulpprogramma voor Microsoft SQL Server voor het configureren, beheren en beheren van databasecomponenten. Dit hulpprogramma bevat een scripteditor (die we voornamelijk zullen gebruiken) en een grafisch programma dat werkt met objecten en serverinstellingen. Het belangrijkste hulpmiddel van SQL Server Management Studio is de Object Explorer, waarmee de gebruiker serverobjecten kan bekijken, ophalen en beheren. Deze tekst is deels ontleend aan Wikipedia.

Gebruik de knop Nieuwe query om een ​​nieuwe scripteditor te maken:

Om de huidige database te wijzigen, kunt u de vervolgkeuzelijst gebruiken:

Om een ​​specifieke opdracht (of een groep opdrachten) uit te voeren, selecteert u deze en drukt u op de knop Uitvoeren of de F5-toets. Als er op dit moment maar één commando in de editor is, of als je alle commando's moet uitvoeren, dan hoef je niets te selecteren.

Na het uitvoeren van scripts, vooral degene die objecten maken (tabellen, kolommen, indexen), om de wijzigingen te zien, gebruikt u Vernieuwen in het contextmenu, waarbij u de juiste groep (bijvoorbeeld Tabellen), de tabel zelf of de groep Kolommen daarin markeert .

Eigenlijk is dit alles wat we moeten weten om de hier gegeven voorbeelden te voltooien. De rest van het SSMS-hulpprogramma is gemakkelijk zelf te leren.

Een beetje theorie

Een relationele database (RDB, of verder in de context van gewoon een database) is een verzameling onderling verbonden tabellen. Een database is grofweg een bestand waarin gegevens gestructureerd zijn opgeslagen.

DBMS - het systeem voor het beheren van deze databases, d.w.z. dit is een set tools voor het werken met een specifiek type database (MS SQL, Oracle, MySQL, Firebird, ...).

Opmerking
Omdat in het leven, in de omgangstaal, zeggen we meestal: "Oracle DB", of zelfs gewoon "Oracle", wat eigenlijk "Oracle DBMS" betekent, dan zal in de context van deze tutorial de term DB soms worden gebruikt. Uit de context denk ik dat het duidelijk zal zijn wat er precies op het spel staat.

Een tabel is een verzameling kolommen. Kolommen kunnen ook velden of kolommen worden genoemd, al deze woorden worden gebruikt als synoniemen, die hetzelfde uitdrukken.

De tabel is het hoofdobject van de RDB, alle RDB-gegevens worden regel voor regel in de kolommen van de tabel opgeslagen. Regels, records zijn ook synoniemen.

Voor elke tabel, evenals voor de kolommen, worden namen gegeven, waarmee vervolgens wordt verwezen.
De objectnaam (tabelnaam, kolomnaam, indexnaam, etc.) in MS SQL mag maximaal 128 tekens lang zijn.

Als referentie– in de ORACLE database mogen objectnamen maximaal 30 karakters lang zijn. Daarom moet u voor een bepaalde database uw eigen regels ontwikkelen voor het benoemen van objecten om aan de limiet van het aantal tekens te voldoen.

SQL is een taal waarmee u de database kunt doorzoeken via het DBMS. In een bepaald DBMS kan de SQL-taal een specifieke implementatie hebben (een eigen dialect).

DDL en DML zijn een subset van de SQL-taal:

  • De DDL-taal wordt gebruikt om de databasestructuur aan te maken en te wijzigen, d.w.z. om tabellen en relaties te maken/wijzigen/verwijderen.
  • Met de DML-taal kunt u tabelgegevens manipuleren, d.w.z. met haar lijnen. Hiermee kunt u gegevens uit tabellen selecteren, nieuwe gegevens aan tabellen toevoegen en bestaande gegevens bijwerken en verwijderen.

In SQL-taal kunt u 2 soorten opmerkingen gebruiken (enkelregelig en meerregelig):

Enkele regel opmerking
En

/* commentaar met meerdere regels */

Eigenlijk zal alles voor de theorie hiervan voldoende zijn.

DDL - Data Definition Language (taal voor gegevensbeschrijving)

Denk bijvoorbeeld aan een tabel met gegevens over werknemers, in de vorm die bekend is bij een persoon die geen programmeur is:

In dit geval hebben de tabelkolommen de volgende namen: Personeelsnummer, Volledige naam, Geboortedatum, E-mail, Functie, Afdeling.

Elk van deze kolommen kan worden gekenmerkt door het type gegevens dat het bevat:

  • Personeelsnummer - geheel getal
  • volledige naam - string
  • Geboortedatum - datum
  • E-mail - tekenreeks
  • Positie - tekenreeks
  • afdeling - string
Kolomtype is een kenmerk dat aangeeft wat voor soort gegevens deze kolom kan opslaan.

Om te beginnen is het voldoende om alleen de volgende basisgegevenstypen te onthouden die in MS SQL worden gebruikt:

Betekenis Notatie in MS SQL Beschrijving
String met variabele lengte varchar(N)
En
nvarchar(N)
Met het getal N kunnen we de maximaal mogelijke stringlengte voor de corresponderende kolom specificeren. Als we bijvoorbeeld willen zeggen dat de waarde van de kolom "Naam" maximaal 30 tekens kan bevatten, moeten we het type instellen op nvarchar (30).
Het verschil tussen varchar en nvarchar is dat je met varchar strings kunt opslaan in ASCII-formaat, waarbij één teken 1 byte in beslag neemt, terwijl nvarchar strings opslaat in Unicode-formaat, waarbij elk teken 2 bytes in beslag neemt.
Het varchar-type mag alleen worden gebruikt als u er 100% zeker van bent dat het veld geen Unicode-tekens hoeft op te slaan. Varchar kan bijvoorbeeld worden gebruikt om e-mailadressen op te slaan omdat: ze bevatten meestal alleen ASCII-tekens.
String met vaste lengte char (N)
En
nchar (N)
Dit type verschilt van een string met variabele lengte doordat als de lengte van de string kleiner is dan N tekens, deze altijd naar rechts wordt opgevuld tot de lengte van N spaties en in deze vorm in de database wordt opgeslagen, d.w.z. in de database neemt het precies N karakters in beslag (waarbij één karakter 1 byte inneemt voor char en 2 bytes voor nchar). In mijn praktijk wordt dit type zeer zelden gebruikt, en als het wordt gebruikt, wordt het voornamelijk gebruikt in het char (1)-formaat, d.w.z. wanneer het veld wordt gedefinieerd door een enkel teken.
Geheel getal int Met dit type kunnen we alleen gehele getallen, zowel positief als negatief, in de kolom gebruiken. Ter referentie (dit is nu niet zo relevant voor ons) - het bereik van getallen dat het int-type toestaat van -2 147 483 648 tot 2 147 483 647. Dit is meestal het hoofdtype dat wordt gebruikt om identifiers in te stellen.
Echt of echt getal vlot Simpel gezegd zijn dit getallen waarin een decimaalteken (komma) kan voorkomen.
datum datum Als de kolom alleen de Datum hoeft op te slaan, die uit drie componenten bestaat: Getal, Maand en Jaar. Bijvoorbeeld 15-02-2014 (15 februari 2014). Dit type kan worden gebruikt voor de kolom "Toelatingsdatum", "Geboortedatum", enz., d.w.z. in gevallen waarin het voor ons belangrijk is om alleen de datum vast te leggen, of wanneer de tijdcomponent niet belangrijk voor ons is en kan worden weggegooid of als deze niet bekend is.
Tijd tijd Dit type kan worden gebruikt als de kolom alleen tijdgegevens hoeft op te slaan, d.w.z. Uren, minuten, seconden en milliseconden. Bijvoorbeeld 17:38:31.3231603
Bijvoorbeeld de dagelijkse "Vertrektijd van de vlucht".
datum en tijd datum Tijd Met dit type kunt u zowel Datum als Tijd tegelijkertijd opslaan. Bijvoorbeeld 15-02-2014 17:38:31.323 PM
Dit kan bijvoorbeeld de datum en tijd van een evenement zijn.
Vlag beetje Dit type is handig voor het opslaan van Ja/Nee-waarden, waarbij Ja wordt opgeslagen als 1 en Nee wordt opgeslagen als 0.

Ook mag de waarde van het veld, in het geval dat het niet verboden is, niet worden gespecificeerd, hiervoor wordt het NULL-sleutelwoord gebruikt.

Laten we, om de voorbeelden uit te voeren, een testdatabase maken met de naam Test.

Een eenvoudige database (zonder aanvullende parameters op te geven) kan worden gemaakt door de volgende opdracht uit te voeren:

MAAK DATABASE-test
U kunt de database verwijderen met het commando (je moet heel voorzichtig zijn met dit commando):

DROP DATABASE-test
Om over te schakelen naar onze database, kunt u de opdracht uitvoeren:

Amerikaanse test
U kunt ook de Testdatabase selecteren in de vervolgkeuzelijst in het SSMS-menugebied. Op mijn werk gebruik ik deze manier van schakelen tussen databases vaak.

Nu kunnen we in onze database een tabel maken met de beschrijvingen zoals ze zijn, met spaties en Cyrillische tekens:

MAAK TABEL [Werknemers]([Personeelsnummer] int, [Naam] nvarchar(30), [Geboortedatum] datum, nvarchar(30), [Positie] nvarchar(30), [Afdeling] nvarchar(30))
In dit geval moeten we de namen tussen vierkante haken plaatsen […].

Maar in de database is het voor meer gemak beter om alle namen van objecten in het Latijn te specificeren en geen spaties in de namen te gebruiken. In MS SQL, meestal in dit geval, begint elk woord met een hoofdletter, bijvoorbeeld voor het veld "Personeelsnummer" zouden we de naam PersonnelNumber kunnen instellen. U kunt ook cijfers in de naam gebruiken, bijvoorbeeld Telefoonnummer1.

op een notitie
In sommige DBMS kan het volgende formaat van namen "PHONE_NUMBER" de voorkeur hebben, dit formaat wordt bijvoorbeeld vaak gebruikt in de ORACLE-database. Uiteraard is het bij het instellen van de veldnaam wenselijk dat deze niet overeenkomt met de trefwoorden die in het DBMS worden gebruikt.

Om deze reden kunt u de syntaxis van vierkante haken vergeten en de tabel [Employees] verwijderen:

DROP TABEL [Medewerkers]
Een tabel met werknemers kan bijvoorbeeld "Werknemers" worden genoemd en de velden kunnen de volgende namen krijgen:

  • ID - Personeelsnummer (Werknemers-ID)
  • Naam - volledige naam
  • Verjaardag - Geboortedatum
  • E-mail
  • Positie
  • Afdeling - Afdeling
Heel vaak wordt het woord ID gebruikt om het identificatieveld een naam te geven.

Laten we nu onze tabel maken:

MAAK TABEL Werknemers(ID int, Naam nvarchar(30), Verjaardagsdatum, E-mail nvarchar(30), Functie nvarchar(30), Afdeling nvarchar(30))
U kunt de optie NOT NULL gebruiken om de vereiste kolommen op te geven.

Voor een reeds bestaande tabel kunnen de velden opnieuw worden gedefinieerd met behulp van de volgende opdrachten:

ID-veld bijwerken ALTER TABLE Werknemers ALTER COLUMN ID int NOT NULL -- update veld Naam ALTER TABLE Werknemers ALTER COLUMN Naam nvarchar(30) NOT NULL

op een notitie
Het algemene concept van de SQL-taal voor de meeste DBMS blijft hetzelfde (tenminste, ik kan dit beoordelen aan de hand van die DBMS waarmee ik de kans heb gehad om te werken). Het verschil tussen DDL in verschillende DBMS'en zit vooral in datatypes (niet alleen hun namen kunnen hier verschillen, maar ook de details van hun implementatie), de specifieke kenmerken van de implementatie van de SQL-taal kunnen ook enigszins verschillen (dwz de essentie van de commando's is hetzelfde, maar er kunnen kleine verschillen zijn in het dialect, helaas, maar er is geen standaard). Als u de basisprincipes van SQL kent, kunt u gemakkelijk van het ene DBMS naar het andere overschakelen. in dit geval hoeft u alleen de details van de implementatie van opdrachten in het nieuwe DBMS te begrijpen, d.w.z. in de meeste gevallen is het voldoende om een ​​analogie te trekken.

Een tabel maken CREATE TABLE Employees(ID int, -- in ORACLE type int is het equivalent (wrapper) voor nummer (38) Naam nvarchar2 (30), -- nvarchar2 in ORACLE is equivalent aan nvarchar in MS SQL Verjaardagsdatum, e-mail nvarchar2 (30) , Positie nvarchar2(30), Afdeling nvarchar2(30)); -- ID- en naamvelden bijwerken (hier wordt MODIFY(...) gebruikt in plaats van ALTER COLUMN ALTER TABLE Werknemers MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- het toevoegen van een PK (in dit geval ziet de constructie eruit als in MS SQL, deze wordt hieronder getoond) WIJZIG TABEL Werknemers ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
Voor ORACLE zijn er verschillen in de implementatie van het varchar2-type, de codering is afhankelijk van de database-instellingen en de tekst kan worden opgeslagen, bijvoorbeeld in UTF-8-codering. Daarnaast kan de veldlengte in ORACLE zowel in bytes als in karakters worden ingesteld, hiervoor worden extra opties BYTE en CHAR gebruikt, die na de veldlengte worden opgegeven, bijvoorbeeld:

NAAM varchar2 (30 BYTE) -- veldcapaciteit zal 30 bytes zijn NAAM varchar2 (30 CHAR) -- veldcapaciteit zal 30 tekens zijn
Welke optie standaard wordt gebruikt BYTE of CHAR, in het geval van een eenvoudige specificatie van het type varchar2(30) in ORACLE, hangt af van de database-instellingen, het kan soms ook worden ingesteld in de IDE-instellingen. Over het algemeen kun je soms gemakkelijk in de war raken, dus in het geval van ORACLE, als het type varchar2 wordt gebruikt (en dit is hier soms gerechtvaardigd, bijvoorbeeld bij het gebruik van UTF-8-codering), geef ik er de voorkeur aan expliciet CHAR te schrijven (omdat het is meestal handiger om de lengte van een string in karakters te lezen).

Maar in dit geval, als er al wat gegevens in de tabel staan, is het voor de succesvolle uitvoering van de opdrachten noodzakelijk dat de ID- en Naam-velden in alle rijen van de tabel moeten worden ingevuld. Laten we dit met een voorbeeld demonstreren, gegevens invoegen in de tabel in de velden ID, Positie en Afdeling, dit kan met het volgende script:

INSERT Employees(ID,Position,Afdeling) VALUES (1000,N"Director",N"Administration"), (1001,N"Programmer",N"IT"), (1002,N"Accountant",N"Accounting" ), (1003,N"Senior programmeur",N"IT")
In dit geval zal het INSERT-commando ook een foutmelding geven, omdat: bij het invoegen hebben we de waarde van het vereiste veld Naam niet opgegeven.
Als we deze gegevens al in de originele tabel hadden, dan zou het commando "ALTER TABLE Employees ALTER COLUMN ID int NOT NULL" met succes zijn uitgevoerd, en het commando "ALTER TABLE Employees ALTER COLUMN Name int NOT NULL" zou een foutmelding hebben gegeven bericht dat er NULL-waarden (niet gespecificeerd) in het veld Naam staan.

Laten we waarden toevoegen voor het veld Naam en de gegevens opnieuw invullen:


Ook kan de NOT NULL-optie direct worden gebruikt bij het maken van een nieuwe tabel, d.w.z. in de context van de opdracht CREATE TABLE.

Verwijder eerst de tabel met het commando:

DROP TAFEL Medewerkers
Laten we nu een tabel maken met verplichte kolommen ID en Naam:

MAAK TABEL Werknemers(ID int NOT NULL, Naam nvarchar(30) NOT NULL, Verjaardagsdatum, E-mail nvarchar(30), Positie nvarchar(30), Afdeling nvarchar(30))
Je kunt ook NULL schrijven achter de kolomnaam, wat betekent dat NULL-waarden (niet gespecificeerd) erin zijn toegestaan, maar dit is niet nodig, omdat dit kenmerk standaard wordt geïmpliceerd.

Als u daarentegen een bestaande kolom optioneel wilt maken, gebruikt u de volgende opdrachtsyntaxis:

WIJZIG TABEL Werknemers WIJZIG KOLOM Naam nvarchar(30) NULL
Of gewoon:

WIJZIG TABEL Werknemers WIJZIG KOLOM Naam nvarchar(30)
Met deze opdracht kunnen we ook het veldtype wijzigen in een ander compatibel type of de lengte ervan wijzigen. Laten we bijvoorbeeld het veld Naam uitbreiden tot 50 tekens:

WIJZIG TABEL Werknemers WIJZIG KOLOM Naam nvarchar(50)

hoofdsleutel

Bij het maken van een tabel is het wenselijk dat deze een unieke kolom heeft of een set kolommen die uniek is voor elk van zijn rijen - een record kan uniek worden geïdentificeerd aan de hand van deze unieke waarde. Deze waarde wordt de primaire sleutel van de tabel genoemd. Voor onze tabel Werknemers kan deze unieke waarde de ID-kolom zijn (die "Personeelsnummer werknemer" bevat - zelfs als in ons geval deze waarde uniek is voor elke werknemer en niet kan worden herhaald).

U kunt een primaire sleutel voor een bestaande tabel maken met de opdracht:

WIJZIG TABEL Werknemers ADD CONSTRAINT PK_Employees PRIMAIRE SLEUTEL(ID)
Waarbij "PK_Employees" de naam is van de beperking die verantwoordelijk is voor de primaire sleutel. Gewoonlijk wordt de primaire sleutel genoemd met het voorvoegsel "PK_" gevolgd door de tabelnaam.

Als de primaire sleutel uit meerdere velden bestaat, moeten deze velden tussen haakjes worden weergegeven, gescheiden door komma's:

ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMAIRE SLEUTEL(veld1,veld2,...)
Het is vermeldenswaard dat in MS SQL alle velden die zijn opgenomen in de primaire sleutel het kenmerk NOT NULL moeten hebben.

Ook kan de primaire sleutel direct worden gedefinieerd bij het maken van een tabel, d.w.z. in de context van de opdracht CREATE TABLE. Laten we de tabel verwijderen:

DROP TAFEL Medewerkers
En maak het vervolgens met de volgende syntaxis:

MAAK TABEL Werknemers(ID int NOT NULL, Naam nvarchar(30) NOT NULL, Verjaardagsdatum, E-mail nvarchar(30), Positie nvarchar(30), Afdeling nvarchar(30), CONSTRAINT PK_Employees PRIMARY KEY(ID) -- beschrijf PK na alle velden als beperking)
Vul na het aanmaken de tabelgegevens in:

INSERT Employees(ID,Position,Department,Name) VALUES (1000,N"Director",N"Administration",N"Ivanov II.), (1001,N"Programmer",N"IT",N" Petrov PP" ), (1002,N"Accountant",N"Accounting",N"Sidorov SS"), (1003,N"Senior Programmer",N"IT",N"Andreev A. MAAR.")
Als de primaire sleutel in de tabel alleen uit de waarden van één kolom bestaat, kan de volgende syntaxis worden gebruikt:

MAAK TABEL Werknemers(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, -- specificeer als kenmerk van het veld Naam nvarchar(30) NOT NULL, Verjaardagsdatum, E-mail nvarchar(30), Positie nvarchar(30), Afdeling nvarchar(30))
In feite kan de naam van de beperking worden weggelaten, in welk geval deze een systeemnaam krijgt (zoals "PK__Employee__3214EC278DA42077"):

MAAK TABEL Werknemers (ID int NOT NULL, Naam nvarchar (30) NOT NULL, Verjaardagsdatum, E-mail nvarchar (30), Positie nvarchar (30), Afdeling nvarchar (30), PRIMAIRE SLEUTEL (ID))
Of:

MAAK TABEL Werknemers(ID int NOT NULL PRIMAIRE SLEUTEL, Naam nvarchar(30) NOT NULL, Verjaardagsdatum, E-mail nvarchar(30), Positie nvarchar(30), Afdeling nvarchar(30))
Maar ik zou aanraden dat je altijd expliciet de naam van de beperking instelt voor permanente tabellen, omdat door een expliciet gegeven en begrijpelijke naam, zal het later gemakkelijker te manipuleren zijn, u kunt het bijvoorbeeld verwijderen:

ALTER TABLE Werknemers DROP CONSTRAINT PK_Employees
Maar zo'n korte syntaxis, zonder de namen van beperkingen op te geven, is handig om te gebruiken bij het maken van tijdelijke databasetabellen (de naam van een tijdelijke tabel begint met # of ##), die na gebruik worden verwijderd.

Laten we samenvatten

Tot nu toe hebben we de volgende opdrachten behandeld:
  • MAAK TAFEL tabelnaam (opsomming van velden en hun typen, beperkingen) - gebruikt om een ​​nieuwe tabel in de huidige database te maken;
  • DROP TAFEL table_name - gebruikt om een ​​tabel uit de huidige database te verwijderen;
  • WIJZIG TABEL tafel naam WIJZIG KOLOM column_name … – wordt gebruikt om het kolomtype bij te werken of om de instellingen ervan te wijzigen (bijvoorbeeld om het NULL- of NOT NULL-kenmerk in te stellen);
  • WIJZIG TABEL tafel naam BEPERKING TOEVOEGEN constraint_name HOOFDSLEUTEL(field1, field2,…) – het toevoegen van een primaire sleutel aan een bestaande tabel;
  • WIJZIG TABEL tafel naam DROP-BEPERKING constraint_name - verwijder de beperking uit de tabel.

Een beetje over tijdelijke tafels

Knippen van MSDN. Er zijn twee soorten tijdelijke tabellen in MS SQL Server: lokaal (#) en globaal (##). Lokale tijdelijke tabellen zijn alleen zichtbaar voor hun makers totdat de verbindingssessie met het SQL Server-exemplaar wordt beëindigd zodra ze voor het eerst zijn gemaakt. Lokale tijdelijke tabellen worden automatisch verwijderd nadat een gebruiker de verbinding met een exemplaar van SQL Server heeft verbroken. Globale tijdelijke tabellen zijn zichtbaar voor alle gebruikers tijdens verbindingssessies nadat deze tabellen zijn gemaakt, en worden verwijderd wanneer alle gebruikers die naar deze tabellen verwijzen, de verbinding met het exemplaar van SQL Server verbreken.

Tijdelijke tabellen worden aangemaakt in de tempdb-systeemdatabase, d.w.z. als we ze maken, verstoppen we de hoofddatabase niet, anders zijn tijdelijke tabellen volledig identiek aan gewone tabellen, ze kunnen ook worden verwijderd met de opdracht DROP TABLE. Lokale (#) tijdelijke tabellen worden vaker gebruikt.

Om een ​​tijdelijke tabel te maken, kunt u de opdracht CREATE TABLE gebruiken:

MAAK TABEL #Temp(ID int, Naam nvarchar(30))
Aangezien een tijdelijke tabel in MS SQL vergelijkbaar is met een gewone tabel, kunt u deze ook dienovereenkomstig verwijderen met de opdracht DROP TABLE:

DROP TABEL #Temp

U kunt ook een tijdelijke tabel maken (evenals een gewone tabel) en deze onmiddellijk vullen met de gegevens die door de query worden geretourneerd met behulp van de syntaxis SELECT ... INTO:

SELECT ID,Name INTO #Temp FROM Employees

op een notitie
In verschillende DBMS kan de implementatie van tijdelijke tabellen verschillen. In de ORACLE- en Firebird-DBMS moet de structuur van tijdelijke tabellen bijvoorbeeld vooraf worden gedefinieerd door de opdracht CREATE GLOBAL TEMPORARY TABLE, waarbij de details van het opslaan van gegevens erin worden aangegeven, waarna de gebruiker deze tussen de hoofdtabellen ziet en ermee werkt zoals bij een gewone tafel.

Normalisatie van de database - opsplitsen in subtabellen (directories) en bepalen van relaties

Onze huidige medewerkerstabel heeft het nadeel dat de gebruiker in de velden Functie en Afdeling elke tekst kan invoeren, wat vooral veel fouten bevat, aangezien hij voor de ene medewerker gewoon "IT" als afdeling kan aangeven, en voor de tweede medewerker voor voer bijvoorbeeld "IT-afdeling" in, heb de derde "IT". Hierdoor zal niet duidelijk zijn wat de gebruiker bedoelde, d.w.z. Zijn deze medewerkers medewerkers van dezelfde afdeling, of heeft de gebruiker zichzelf beschreven en zijn dit 3 verschillende afdelingen? En meer nog, in dit geval kunnen we de gegevens voor een rapport niet correct groeperen, waar het nodig kan zijn om het aantal werknemers in de context van elke afdeling weer te geven.

Het tweede nadeel is de hoeveelheid opslag van deze informatie en de duplicatie ervan, d.w.z. voor elke medewerker wordt de volledige naam van de afdeling aangegeven, wat een plaats in de database vereist om elk teken uit de naam van de afdeling op te slaan.

Het derde nadeel is de moeilijkheid om deze velden bij te werken als de naam van een positie verandert, bijvoorbeeld als je de positie "Programmer" moet hernoemen naar "Junior programmeur". In dit geval moeten we wijzigingen aanbrengen in elke regel van de tabel, waarin de Positie gelijk is aan "Programmer".

Om deze tekortkomingen te voorkomen, wordt de zogenaamde normalisatie van de database gebruikt - deze wordt opgesplitst in subtabellen, referentietabellen. Het is niet nodig om in de jungle van theorie te klimmen en te bestuderen wat normale vormen zijn, het is voldoende om de essentie van normalisatie te begrijpen.

Laten we 2 referentietabellen "Posities" en "Afdelingen" maken, de eerste heet Posities en de tweede respectievelijk Afdelingen:

CREATE TABLE Positions(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL) CREATE TABLE Departments(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMARY KEY, Name nvarchar(30 ) NIET NUL)
Merk op dat we hier de nieuwe IDENTITY-optie hebben gebruikt, wat betekent dat de gegevens in de ID-kolom automatisch worden genummerd, beginnend bij 1, met een stap van 1, d.w.z. wanneer nieuwe records worden toegevoegd, krijgen deze achtereenvolgens de waarden 1, 2, 3, enzovoort. Dergelijke velden worden meestal auto-incrementing genoemd. Er kan slechts één veld met de eigenschap IDENTITY in een tabel worden gedefinieerd, en gewoonlijk, maar niet noodzakelijk, is zo'n veld de primaire sleutel voor die tabel.

op een notitie
In verschillende DBMS kan de implementatie van velden met een teller anders worden gedaan. In MySQL wordt zo'n veld bijvoorbeeld gedefinieerd met de optie AUTO_INCREMENT. In ORACLE en Firebird kon deze functionaliteit voorheen worden geëmuleerd met behulp van SEQUENCEs. Maar voor zover ik weet, heeft ORACLE nu de optie GEGENEREERD ALS IDENTITEIT toegevoegd.

Laten we deze tabellen automatisch invullen, gebaseerd op de huidige gegevens die zijn vastgelegd in de velden Positie en Afdeling van de tabel Medewerkers:

Vul het veld Naam van de tabel Posities in met unieke waarden uit het veld Positie van de tabel Werknemers INSERT Positions(Name) SELECT DISTINCT Position FROM Employees WHERE Position IS NOT NULL -- verwijder records zonder opgegeven positie
We zullen hetzelfde doen voor de tabel Afdelingen:

INSERT Afdelingen(Naam) SELECTEER AFDELING UIT Medewerkers WAAR Afdeling NIET NULL is
Als we nu de tabellen Posities en Afdelingen openen, zien we een genummerde set waarden bij het ID-veld:

KIES * UIT Posities

KIES * UIT Afdelingen

Deze tabellen zullen nu de rol spelen van mappen voor het instellen van posities en afdelingen. We zullen nu verwijzen naar taak- en afdelings-ID's. Laten we eerst nieuwe velden maken in de tabel Werknemers om de ID-gegevens op te slaan:

Veld toevoegen voor positie-ID WIJZIG TABEL Werknemers ADD PositionID int -- voeg veld toe voor afdelings-ID WIJZIG TABEL Werknemers ADD Afdelings-ID int
Het type referentievelden moet hetzelfde zijn als in de directory's, in dit geval is het int.

U kunt ook meerdere velden tegelijk aan de tabel toevoegen met één opdracht, waarbij de velden worden gescheiden door komma's:

WIJZIG TABEL Werknemers TOEVOEGEN PositionID int, DepartmentID int
Laten we nu links schrijven (referentiebeperkingen - BUITENLANDSE SLEUTEL) voor deze velden, zodat de gebruiker niet de mogelijkheid heeft om in deze velden te schrijven, waarden die niet tot de ID-waarden in de mappen behoren.

ALTER TABLE Werknemers ADD CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Posities(ID)
En we zullen hetzelfde doen voor het tweede veld:

ALTER TABLE Werknemers ADD CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENTIES Afdelingen(ID)
Nu kan de gebruiker alleen ID-waarden uit het bijbehorende naslagwerk in deze velden invoeren. Om een ​​nieuwe afdeling of functie te kunnen gebruiken, moet hij dus eerst een nieuwe vermelding toevoegen aan de overeenkomstige directory. Omdat posities en afdelingen worden nu in een enkele kopie in mappen opgeslagen, en om de naam te wijzigen, volstaat het om deze alleen in de map te wijzigen.

De naam van een referentiële beperking is meestal samengesteld, het bestaat uit het voorvoegsel "FK_", gevolgd door de tabelnaam, en na het onderstrepingsteken komt de naam van het veld dat verwijst naar de identifier van de opzoektabel.

De identifier (ID) is meestal een interne waarde die alleen voor links wordt gebruikt en welke waarde daar wordt opgeslagen, in de meeste gevallen is het absoluut onverschillig, dus het is niet nodig om te proberen gaten in de reeks getallen te verwijderen die ontstaan ​​tijdens het werken met een tabel, bijvoorbeeld na het verwijderen van records uit het handboek.

ALTER TABLE tabel ADD CONSTRAINT constraint_name FOREIGN KEY(field1,field2,...) REFERENCES opzoektabel(field1,field2,...)
In dit geval wordt in de tabel "table_reference" de primaire sleutel weergegeven door een combinatie van verschillende velden (field1, field2, ...).

Laten we nu de velden PositionID en DepartmentID bijwerken met de ID-waarden uit de mappen. Laten we hiervoor de opdracht UPDATE DML gebruiken:

UPDATE e SET PositionID=(SELECT ID FROM Positions WHERE Name=e.Position), DepartmentID=(SELECT ID FROM Departments WHERE Name=e.Department) FROM Medewerkers e
Laten we eens kijken wat er gebeurt door de query uit te voeren:

SELECTEER * VAN Medewerkers

Dat is alles, de velden PositieID en AfdelingsID worden nu gevuld met de corresponderende functies en afdelingen met benodigde ID's in de velden Positie en Afdeling in de tabel Medewerkers, u kunt deze velden verwijderen:

WIJZIG TABEL Werknemers DROP COLUMN Positie,Afdeling
De tabel ziet er nu als volgt uit:

SELECTEER * VAN Medewerkers

ID kaart Naam verjaardag E-mail Positie-ID Afdelings-ID
1000 Ivanov II NUL NUL 2 1
1001 Petrov PP NUL NUL 3 3
1002 Sidorov SS NUL NUL 1 2
1003 Andreev AA NUL NUL 4 3

Die. we zijn uiteindelijk verlost van het opslaan van overtollige informatie. Nu kunnen we aan de hand van de positie- en afdelingsnummers hun namen op unieke wijze bepalen met behulp van de waarden in de opzoektabellen:

SELECT e.ID,e.Name,p.Name PositionName,d.Name Afdelingsnaam FROM Medewerkers e LEFT JOIN Departments d ON d.ID=e.DepartmentID LEFT JOIN Posities p ON p.ID=e.PositionID

In de Object Inspector kunnen we alle objecten zien die voor een bepaalde tabel zijn gemaakt. Vanaf hier kunt u ook verschillende manipulaties met deze objecten uitvoeren - bijvoorbeeld objecten hernoemen of verwijderen.

Het is ook vermeldenswaard dat een tabel naar zichzelf kan verwijzen, d.w.z. u kunt een recursieve link maken. Laten we bijvoorbeeld nog een veld ManagerID toevoegen aan onze tabel met medewerkers, die de medewerker aangeeft aan wie deze medewerker rapporteert. Laten we een veld maken:

WIJZIG TABEL Werknemers VOEG ManagerID toe int
De NULL-waarde is toegestaan ​​in dit veld, het veld zal leeg zijn als er bijvoorbeeld geen meerderen zijn over de werknemer.

Laten we nu een BUITENLANDSE SLEUTEL maken in de tabel Werknemers:

ALTER TABLE Werknemers ADD CONSTRAINT FK_Employees_ManagerID BUITENLANDSE SLEUTEL (ManagerID) REFERENTIES Werknemers (ID)
Laten we nu een diagram maken en kijken hoe de relaties tussen onze tabellen erop staan:

Als resultaat zouden we de volgende afbeelding moeten zien (de tabel Werknemers is gerelateerd aan de tabellen Posities en Afdelingen, en verwijst ook naar zichzelf):

Ten slotte is het vermeldenswaard dat referentiesleutels extra opties kunnen bevatten ON DELETE CASCADE en ON UPDATE CASCADE, die vertellen hoe te handelen bij het verwijderen of bijwerken van een record waarnaar in de opzoektabel wordt verwezen. Als deze opties niet zijn gespecificeerd, kunnen we de ID in de directorytabel van het item dat links uit een andere tabel heeft niet wijzigen, noch kunnen we een dergelijk item uit de directory verwijderen totdat we alle rijen hebben verwijderd die naar dit item verwijzen of, laten we update deze referentieregels naar een andere waarde.

Laten we bijvoorbeeld de tabel opnieuw maken met de ON DELETE CASCADE-optie voor FK_Employees_DepartmentID:

DROP TABEL Werknemers MAAK TABEL Werknemers(ID int NOT NULL, Naam nvarchar(30), Verjaardagsdatum, E-mail nvarchar(30), Positie-ID int, Afdelings-ID int, ManagerID int, CONSTRAINT PK_Employees PRIMARY KEY (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID FOREIGN KEY(DepartmentID FOREIGN KEY(DepartmentID FOREIGN KEY) ) REFERENTIES Afdelingen(ID) ON DELETE CASCADE, CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY (ManagerID) REFERENTIES Werknemers(ID)ID,ManagerID, INSERT Werknemers (ID) )WAARDEN (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov PP","19831203",3,3,1003), (1002 ,N"Sidorov SS" ,"19760607",1,2,1000), (1003,N"Andreev AA","19820417",4,3,1000)
Laten we de afdeling met ID 3 uit de tabel Afdelingen verwijderen:

DELETE Afdelingen WHERE ID=3
Laten we eens kijken naar de gegevens in de tabel Werknemers:

SELECTEER * VAN Medewerkers

ID kaart Naam verjaardag E-mail Positie-ID Afdelings-ID Manager-ID
1000 Ivanov II 1955-02-19 NUL 2 1 NUL
1002 Sidorov SS 1976-06-07 NUL 1 2 1000

Zoals u kunt zien, zijn de gegevens voor afdeling 3 ook verwijderd uit de tabel Medewerkers.

De ON UPDATE CASCADE-optie gedraagt ​​zich op dezelfde manier, maar wordt van kracht wanneer de ID-waarde in de directory wordt bijgewerkt. Als we bijvoorbeeld de positie-ID in de functiedirectory wijzigen, wordt in dit geval de afdelings-ID in de tabel Werknemers bijgewerkt naar de nieuwe ID-waarde die we in de directory hebben ingesteld. Maar in dit geval zal het gewoon niet mogelijk zijn om dit aan te tonen, omdat. de ID-kolom in de Afdelingen-tabel heeft de IDENTITEIT-optie, waardoor we de volgende query niet kunnen uitvoeren (verander afdelings-ID 3 in 30):

UPDATE Afdelingen SET ID=30 WHERE ID=3
Het belangrijkste is om de essentie van deze 2 opties te begrijpen ON DELETE CASCADE en ON UPDATE CASCADE. Ik gebruik deze opties in zeer zeldzame gevallen, en ik raad u aan goed na te denken voordat u ze specificeert in een referentiële beperking. als u per ongeluk een record uit de referentietabel verwijdert, kan dit tot grote problemen leiden en een kettingreactie veroorzaken.

Laten we afdeling 3 herstellen:

Geef toestemming om IDENTITY-waarden toe te voegen/wijzigen SET IDENTITY_INSERT Afdelingen ON INSERT Departments(ID,Name) VALUES(3,N"IT") -- weiger toevoegen/wijzigen IDENTITY-waarden SET IDENTITY_INSERT Afdelingen UIT
Maak de tabel Werknemers volledig leeg met de opdracht TRUNCATE TABLE:

TRUNCATE TAFEL Medewerkers
En nogmaals, laad de gegevens er opnieuw in met behulp van de vorige INSERT-opdracht:

INSERT Employees (ID,Name,Birthday,PositionID,DepartmentID,ManagerID)VALUES (1000,N"Ivanov II","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3.103), (1002,N"Sidorov SS","19760607",1,2,1000), (1003,N"Andreev AA","19820417" ,4,3,1000)

Laten we samenvatten

Op dit moment zijn er voor zover wij weten nog een paar DDL-commando's toegevoegd:
  • Het toevoegen van de IDENTITY-eigenschap aan het veld - stelt u in staat om dit veld automatisch gevuld te maken (tellerveld) voor de tabel;
  • WIJZIG TABEL tafel naam TOEVOEGEN list_of_fields_with_characteristics – hiermee kunt u nieuwe velden aan de tabel toevoegen;
  • WIJZIG TABEL tafel naam DROP KOLOM list_of_fields - hiermee kunt u velden uit de tabel verwijderen;
  • WIJZIG TABEL tafel naam BEPERKING TOEVOEGEN constraint_name VREEMDE SLEUTEL(velden) REFERENTIES lookup_table(fields) – hiermee kunt u een relatie definiëren tussen een tabel en een opzoektabel.

Andere beperkingen - UNIEK, STANDAARD, CONTROLE

Met de UNIQUE-beperking kunt u zeggen dat de waarde voor elke rij in een bepaald veld of een reeks velden uniek moet zijn. In het geval van de tabel Medewerkers kunnen we een dergelijke beperking opleggen aan het veld E-mail. Vul gewoon e-mail vooraf in met waarden als deze nog niet zijn gedefinieerd:

UPDATE Werknemers SET Email=" [e-mail beveiligd]"WHERE ID=1000 UPDATE Werknemers SET Email=" [e-mail beveiligd]" WHERE ID=1001 UPDATE Werknemers SET Email=" [e-mail beveiligd]"WHERE ID=1002 UPDATE Werknemers SET Email=" [e-mail beveiligd]" WAAR ID=1003
En nu kunt u een unieke beperking opleggen aan dit veld:

ALTER TABLE Werknemers ADD CONSTRAINT UQ_Employees_Email UNIEK(E-mail)
Nu kan de gebruiker niet voor meerdere medewerkers hetzelfde e-mailadres invoeren.

De uniciteitsbeperking wordt gewoonlijk als volgt genoemd - eerst komt het voorvoegsel "UQ_", dan de naam van de tabel en na het onderstrepingsteken is de naam van het veld waarop deze beperking wordt opgelegd.

Dienovereenkomstig, als een combinatie van velden uniek moet zijn in de context van de rijen van de tabel, dan vermelden we ze gescheiden door komma's:

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(field1,field2,...)
Door een DEFAULT-beperking aan een veld toe te voegen, kunnen we een standaardwaarde instellen die wordt vervangen als het veld niet wordt vermeld in de lijst met velden van het INSERT-commando wanneer een nieuw record wordt ingevoegd. Deze beperking kan direct worden ingesteld bij het maken van een tabel.

Laten we een nieuw veld "Aanwervingsdatum" toevoegen aan de tabel Werknemers en deze de naam HireDate geven en zeggen dat de standaardwaarde voor dit veld de huidige datum is:

WIJZIG TABEL Werknemers TOEVOEGEN Huurdatum datum NIET NULL STANDAARD SYSDATETIME()
Of als de HireDate-kolom al bestaat, kan de volgende syntaxis worden gebruikt:

WIJZIG TABEL Werknemers VOEG STANDAARD SYSDATETIME() TOE VOOR HireDate
Hier heb ik de naam van de beperking niet gespecificeerd, omdat in het geval van DEFAULT was ik van mening dat dit niet zo kritisch is. Maar als je het op een goede manier doet, dan hoef je denk ik niet lui te zijn en moet je een normale naam instellen. Dit gebeurt als volgt:

ALTER TABLE Werknemers ADD CONSTRAINT DF_Employees_HireDate STANDAARD SYSDATETIME() VOOR HireDate
Aangezien deze kolom voorheen niet bestond, wordt bij het toevoegen aan elk record de huidige datumwaarde in het veld HireDate ingevoegd.

Bij het toevoegen van een nieuwe invoer wordt de huidige datum natuurlijk ook automatisch ingevoegd, als we deze niet expliciet instellen, d.w.z. niet gespecificeerd in de lijst met kolommen. Laten we dit met een voorbeeld laten zien zonder het veld HireDate op te geven in de lijst met toegevoegde waarden:

INSERT Employees(ID,Name,Email)VALUES(1004,N"Sergeev S.S."," [e-mail beveiligd]")
Laten we eens kijken wat er gebeurd is:

SELECTEER * VAN Medewerkers

ID kaart Naam verjaardag E-mail Positie-ID Afdelings-ID Manager-ID Huur datum
1000 Ivanov II 1955-02-19 [e-mail beveiligd] 2 1 NUL 2015-04-08
1001 Petrov PP 1983-12-03 [e-mail beveiligd] 3 4 1003 2015-04-08
1002 Sidorov SS 1976-06-07 [e-mail beveiligd] 1 2 1000 2015-04-08
1003 Andreev AA 1982-04-17 [e-mail beveiligd] 4 3 1000 2015-04-08
1004 Sergeev SS NUL [e-mail beveiligd] NUL NUL NUL 2015-04-08

De controlebeperking CHECK wordt gebruikt wanneer het nodig is om de in het veld ingevoegde waarden te controleren. Laten we deze beperking bijvoorbeeld opleggen aan het veld personeelsnummer, dat is onze werknemersidentificatie (ID). Laten we met behulp van deze beperking zeggen dat personeelsnummers een waarde moeten hebben van 1000 tot 1999:

WIJZIG TABEL Werknemers ADD CONSTRAINT CK_Employees_ID CHECK (ID TUSSEN 1000 EN 1999)
De beperking heeft meestal dezelfde naam, eerst met het voorvoegsel "CK_", daarna de tabelnaam en de naam van het veld waarop de beperking wordt toegepast.

Laten we proberen een ongeldige invoer in te voeren om te controleren of de beperking werkt (we zouden de bijbehorende foutmelding moeten krijgen):

INSERT Employees(ID,Email)VALUES(2000," [e-mail beveiligd]")
Laten we nu de in te voegen waarde wijzigen in 1500 en ervoor zorgen dat het record wordt ingevoegd:

INSERT werknemers(ID,e-mail) VALUES(1500," [e-mail beveiligd]")
U kunt ook UNIQUE- en CHECK-beperkingen maken zonder een naam op te geven:

WIJZIG TABEL Werknemers UNIEK TOEVOEGEN (e-mail) WIJZIG TABEL Werknemers VOEG CONTROLE TOE (ID TUSSEN 1000 EN 1999)
Maar dit is geen goede gewoonte en het is beter om de naam van de beperking expliciet te specificeren, omdat om er later achter te komen wat moeilijker is, moet je het object openen en kijken waar het verantwoordelijk voor is.

Met een goede naam kan veel informatie over een beperking direct uit de naam worden geleerd.

En dienovereenkomstig kunnen al deze beperkingen onmiddellijk worden gemaakt bij het maken van een tabel, als deze nog niet bestaat. Laten we de tabel verwijderen:

DROP TAFEL Medewerkers
En maak het opnieuw met alle gemaakte beperkingen met één CREATE TABLE-opdracht:

MAAK TABEL Werknemers (ID int NOT NULL, naam nvarchar (30), verjaardagsdatum, e-mail nvarchar (30), positie-ID int, afdelings-ID int, HireDate date NOT NULL STANDAARD SYSDATETIME(), -- voor STANDAARD gooi ik een CONSTRAINT PK_Employees PRIMARY KEY exception (ID), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT UQ_Employees_Email UNIQUEINTEmail), CONSTRAINT UQ_Employees_Email UNIQUEINTEmail),

INSERT Werknemers (ID,Naam,Verjaardag,E-mail,Positie-ID,Afdeling-ID)WAARDEN (1000,N"Ivanov I.I.","19550219"," [e-mail beveiligd]",2,1), (1001,N"Petrov P.P.","19831203"," [e-mail beveiligd]",3,3), (1002,N"Sidorov S.S.","19760607"," [e-mail beveiligd]",1,2), (1003,N"Andreev A.A.","19820417"," [e-mail beveiligd]",4,3)

Een beetje over indexen die zijn gemaakt bij het maken van PRIMARY KEY en UNIQUE-beperkingen

Zoals u kunt zien in de bovenstaande schermafbeelding, werden bij het maken van de PRIMARY KEY en UNIQUE-beperkingen automatisch indexen met dezelfde namen (PK_Employees en UQ_Employees_Email) gemaakt. Standaard wordt de index voor de primaire sleutel gemaakt als GECLUSTERD en voor alle andere indexen als NIET GECLUSTERD. Het is vermeldenswaard dat het concept van een geclusterde index niet in alle DBMS beschikbaar is. Een tabel kan slechts één CLUSTERED-index hebben. GECLUSTERD - betekent dat de records van de tabel worden gesorteerd op deze index, het kan ook worden gezegd dat deze index directe toegang heeft tot alle tabelgegevens. Het is als het ware de hoofdindex van de tabel. Om het nog ruiger te zeggen, het is een index die op de tafel is geschroefd. De geclusterde index is een zeer krachtige tool die kan helpen bij het optimaliseren van zoekopdrachten, houd daar rekening mee. Als we willen zeggen dat de geclusterde index niet in de primaire sleutel wordt gebruikt, maar voor een andere index, moeten we bij het maken van de primaire sleutel de optie NONCLUSTERED specificeren:

ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMAIRE SLEUTEL NIET GECLUSTERD(veld1,veld2,...)
Laten we bijvoorbeeld de beperkingsindex PK_Employees niet-geclusterd maken en de beperkingsindex UQ_Employees_Email geclusterd. Laten we eerst deze beperkingen verwijderen:

ALTER TABLE Werknemers DROP CONSTRAINT PK_Employees ALTER TABLE Werknemers DROP CONSTRAINT UQ_Employees_Email
En laten we ze nu maken met de opties GECLUSTERD en NIET GECLUSTERD:

ALTER TABEL Werknemers ADD CONSTRAINT PK_Employees PRIMAIRE SLEUTEL NIET-CLUSTERED (ID) ALTER TABLE Werknemers ADD CONSTRAINT UQ_Employees_Email UNIEKE CLUSTERED (E-mail)
Wanneer we nu selecteren uit de tabel Werknemers, kunnen we zien dat de records zijn gesorteerd op de geclusterde index UQ_Employees_Email:

SELECTEER * VAN Medewerkers

ID kaart Naam verjaardag E-mail Positie-ID Afdelings-ID Huur datum
1003 Andreev AA 1982-04-17 [e-mail beveiligd] 4 3 2015-04-08
1000 Ivanov II 1955-02-19 [e-mail beveiligd] 2 1 2015-04-08
1001 Petrov PP 1983-12-03 [e-mail beveiligd] 3 3 2015-04-08
1002 Sidorov SS 1976-06-07 [e-mail beveiligd] 1 2 2015-04-08

Voorheen, toen de geclusterde index de PK_Employees-index was, werden records standaard gesorteerd op het veld ID.

Maar in dit geval is dit slechts een voorbeeld dat de essentie van de geclusterde index laat zien, want. hoogstwaarschijnlijk zullen zoekopdrachten naar de tabel Werknemers worden gedaan door het ID-veld, en in sommige gevallen kan het zelf als referentie dienen.

Voor mappen is het meestal raadzaam om de geclusterde index op de primaire sleutel te bouwen, omdat: in verzoeken verwijzen we vaak naar de directory-ID om bijvoorbeeld de naam te verkrijgen (Positie, Afdeling). Hier herinneren we ons wat ik hierboven schreef, dat de geclusterde index directe toegang heeft tot de rijen van de tabel, en daaruit volgt dat we de waarde van elke kolom kunnen krijgen zonder extra overhead.

De geclusterde index is handig om toe te passen op de velden die het vaakst worden geselecteerd.

Soms creëren tabellen een sleutel door een surrogaatveld, in welk geval het handig is om de CLUSTERED index-optie te behouden voor een meer geschikte index en de NONCLUSTERED-optie op te geven bij het maken van een surrogaat-primaire sleutel.

Laten we samenvatten

In dit stadium hebben we kennis gemaakt met alle soorten beperkingen, in hun eenvoudigste vorm, die worden gemaakt door een commando als "ALTER TABLE table_name ADD CONSTRAINT constraint_name ...":
  • HOOFDSLEUTEL- hoofdsleutel;
  • VREEMDE SLEUTEL- het opzetten van koppelingen en het bewaken van de referentiële integriteit van data;
  • UNIEK- stelt u in staat om uniciteit te creëren;
  • REKENING- stelt u in staat om de juistheid van de ingevoerde gegevens uit te voeren;
  • STANDAARD– hiermee kunt u de standaardwaarde instellen;
  • Het is ook vermeldenswaard dat alle beperkingen kunnen worden verwijderd met het commando " WIJZIG TABEL tafel naam DROP-BEPERKING constraint_name".
We hebben ook gedeeltelijk het onderwerp indices aangeroerd en het concept van cluster geanalyseerd ( GECLUSTERD) en niet-geclusterd ( NIET-GECLUSTERD) inhoudsopgave.

Zelfstandige indexen maken

Zelfvoorziening verwijst hier naar indexen die niet zijn gemaakt voor een PRIMARY KEY of UNIEKE beperking.

Indexen op een veld of velden kunnen worden aangemaakt met het volgende commando:

CREATE INDEX IDX_Employees_Name ON Werknemers(Naam)
U kunt hier ook de opties CLUSTERED, NONCLUSTERED, UNIQUE specificeren, en u kunt ook de sorteerrichting specificeren voor elk afzonderlijk veld ASC (standaard) of DESC:

MAAK UNIEKE NIET-GECLUSTERDE INDEX UQ_Employees_EmailDesc ON werknemers (e-mail DESC)
Bij het maken van een niet-geclusterde index kan de optie NIET-GECLUSTERD worden weggelaten, zoals: het wordt standaard geïmpliceerd, het wordt hier eenvoudig getoond om de positie van de GECLUSTERD of NIET GECLUSTERD optie in de opdracht aan te geven.

U kunt de index verwijderen met het volgende commando:

DROP INDEX IDX_Employees_Name ON Werknemers
Eenvoudige indexen kunnen, net als beperkingen, worden gemaakt in de context van de opdracht CREATE TABLE.

Laten we de tabel bijvoorbeeld weer verwijderen:

DROP TAFEL Medewerkers
En maak het opnieuw met alle gemaakte beperkingen en indexen met één CREATE TABLE-opdracht:

MAAK TABEL Werknemers (ID int NOT NULL, naam nvarchar (30), verjaardagsdatum, e-mail nvarchar (30), positie-ID int, afdelings-ID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDate STANDAARD SYSDATETIME(), ManagerID int, CONSTRAINT PK_Employees PRIMARY ), CONSTRAINT FK_Employees_DepartmentID FOREIGN KEY(DepartmentID) REFERENCES Departments(ID), CONSTRAINT FK_Employees_PositionID FOREIGN KEY(PositionID) REFERENCES Positions(ID), CONSTRAINT FK_Employees_ManagerID FOREIGN KEY) 1999), INDEX IDX_Employees_Name(Name))
Voeg tot slot in de tabel van onze medewerkers:

INSERT Werknemers (ID,Naam,Verjaardag,E-mail,Positie-ID,DepartmentID,ManagerID)VALUES (1000,N"Ivanov II","19550219"," [e-mail beveiligd]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [e-mail beveiligd]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [e-mail beveiligd]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [e-mail beveiligd]",4,3,1000)
Bovendien is het vermeldenswaard dat waarden kunnen worden opgenomen in een niet-geclusterde index door ze op te geven in INCLUDE. Die. in dit geval zal de INCLUDE-index enigszins lijken op een geclusterde index, alleen is de index nu niet aan de tabel gekoppeld, maar zijn de benodigde waarden aan de index gekoppeld. Dienovereenkomstig kunnen dergelijke indexen de prestaties van selectiequery's (SELECT) aanzienlijk verbeteren. Als alle vermelde velden in de index staan, is het mogelijk dat het helemaal niet nodig is om de tabel te openen. Maar dit vergroot natuurlijk de grootte van de index, omdat de waarden van de vermelde velden worden gedupliceerd in de index.

Knippen van MSDN. Algemene commandosyntaxis voor het maken van indexen

MAAK [UNIEK] [GECLUSTERD | NONCLUSTERED ] INDEX indexnaam AAN (kolom [ ASC | DESC ] [ ,...n ]) [ INCLUDE (kolomnaam [ ,...n ])]

Laten we samenvatten

Indexen kunnen de snelheid van het ophalen van gegevens (SELECT) verhogen, maar indexen verminderen de snelheid van het bijwerken van tabelgegevens, omdat na elke wijziging moet het systeem alle indexen voor een bepaalde tabel opnieuw opbouwen.

Het is in elk geval wenselijk om de optimale oplossing, de gulden middenweg, te vinden, zodat zowel de bemonsteringsprestaties als de gegevensmodificatie op het juiste niveau zijn. De strategie voor het maken van indexen en hun aantal kan van veel factoren afhangen, zoals hoe vaak de gegevens in de tabel veranderen.

Conclusie over DDL

Zoals u kunt zien, is de DDL-taal niet zo ingewikkeld als het op het eerste gezicht lijkt. Hier kon ik bijna al zijn hoofdontwerpen laten zien, met slechts drie tabellen.

Het belangrijkste is om de essentie te begrijpen, en de rest is een kwestie van oefenen.

Veel succes met het beheersen van deze prachtige taal genaamd SQL.

Tegenwoordig worden SQL-cursussen "voor dummies" steeds populairder. Dit is heel eenvoudig te verklaren, omdat je in de moderne wereld steeds vaker de zogenaamde "dynamische" webservices ziet. Ze onderscheiden zich door een redelijk flexibele schaal en zijn gebaseerd op Alle beginnende programmeurs die besluiten om sites te wijden, schrijven zich allereerst in voor SQL-cursussen "voor dummies".

Waarom deze taal studeren?

Allereerst wordt SQL aangeleerd om verder een breed scala aan toepassingen te creëren voor een van de meest populaire blog-engines van vandaag - WordPress. Na een paar eenvoudige lessen te hebben doorlopen, kunt u al query's van elke complexiteit maken, wat alleen maar de eenvoud van deze taal bevestigt.

Wat is SQL?

Of Structured Query Language, is gemaakt met één enkel doel: bepalen of ze toegang krijgen en ze in vrij korte tijd verwerken. Als u de SQL-waarde kent, dan is het u duidelijk dat deze server tot de zogenaamde "niet-procedurele" talen behoort. Dat wil zeggen, de mogelijkheden bevatten alleen een beschrijving van alle componenten of resultaten die u in de toekomst op de site wilt zien. Maar wanneer geeft niet aan wat de resultaten precies gaan opleveren. Elke nieuwe aanvraag in deze taal is als het ware een extra "add-on". De zoekopdrachten worden uitgevoerd in de volgorde waarin ze in de database zijn ingevoerd.

Welke procedures kunnen worden uitgevoerd met deze taal?

Ondanks zijn eenvoud, kunt u met de SQL-database veel van een grote verscheidenheid aan query's maken. Dus wat kunt u doen als u deze belangrijke programmeertaal leert?

  • maak een verscheidenheid aan tabellen;
  • ontvangen, opslaan en wijzigen van de ontvangen gegevens;
  • verander de structuur van tabellen naar eigen goeddunken;
  • combineer de ontvangen informatie in enkele blokken;
  • bereken de ontvangen gegevens;
  • volledige bescherming van informatie te garanderen.

Welke commando's zijn het populairst in deze taal?

Als je besluit om de SQL "voor dummies" cursussen te volgen, dan krijg je gedetailleerde informatie over de commando's die gebruikt worden om er queries mee te maken. De meest voorkomende zijn tegenwoordig:

  1. DDL is een commando dat gegevens definieert. Het wordt gebruikt om een ​​grote verscheidenheid aan objecten in de database aan te maken, te wijzigen en te verwijderen.
  2. DCL is een opdracht die gegevens beheert. Het wordt gebruikt om verschillende gebruikers toegang te geven tot informatie in de database en om tabellen of weergaven te gebruiken.
  3. TCL is een team dat verschillende transacties beheert. Het belangrijkste doel is om het verloop van een transactie te bepalen.
  4. DML - manipuleert de ontvangen gegevens. Zijn taak is om de gebruiker in staat te stellen verschillende informatie uit de database te verplaatsen of daar in te voeren.

Typen privileges die op deze server bestaan

Privileges zijn die acties die een bepaalde gebruiker kan uitvoeren in overeenstemming met zijn status. Het meest minimale is natuurlijk een normale login. Natuurlijk kunnen privileges in de loop van de tijd veranderen. Oude worden verwijderd en nieuwe toegevoegd. Tegenwoordig weet iedereen die SQL Server-cursussen "voor dummies" volgt dat er verschillende soorten toegestane acties zijn:

  1. Objecttype - de gebruiker mag elke opdracht alleen uitvoeren met betrekking tot een specifiek object dat zich in de database bevindt. Tegelijkertijd verschillen de bevoegdheden voor verschillende objecten. Ze zijn ook niet alleen gebonden aan een bepaalde gebruiker, maar ook aan tabellen. Als iemand met behulp van zijn mogelijkheden een tabel heeft gemaakt, wordt hij als de eigenaar ervan beschouwd. Daarom is het zijn recht om nieuwe privileges toe te kennen aan andere gebruikers met betrekking tot de informatie erin.
  2. Het systeemtype is het zogenaamde gegevensauteursrecht. Gebruikers die dergelijke privileges hebben gekregen, kunnen verschillende objecten in de database maken.

De geschiedenis van het maken van SQL

Deze taal is in 1970 gemaakt door het IBM Research Lab. Op dat moment was de naam iets anders (SEQUEL), maar na een paar jaar gebruik werd het veranderd, iets verlaagd. Desondanks spreken veel bekende wereldexperts op het gebied van programmeren de naam zelfs vandaag nog op de oude manier uit. SQL is gemaakt met als enig doel een taal uit te vinden die zo eenvoudig zou zijn dat zelfs gewone internetgebruikers hem zonder problemen zouden kunnen leren. Een interessant feit is dat SQL in die tijd niet de enige taal was. In Californië ontwikkelde een andere groep specialisten een vergelijkbare Ingres, maar deze werd nooit wijdverbreid. Vóór 1980 waren er verschillende varianten van SQL die slechts in geringe mate van elkaar verschilden. Om verwarring te voorkomen, werd in 1983 een standaardversie gemaakt, die vandaag de dag nog steeds populair is. SQL-cursussen "voor dummies" stellen u in staat om veel meer over de service te leren en deze in een paar weken volledig te begrijpen.

Een verzameling boeken, videocursussen en online bronnen om meer te weten te komen over databases, relationele theorie en de SQL-taal.

Boeken

Alan Bewley "SQL leren" (2007)

Dit boek is een uitstekende keuze voor diegenen die aan het begin staan ​​van het netelige pad van het leren van SQL. Het stelt u niet alleen in staat om de nodige basiskennis te verwerven, maar vertelt u ook over de meest populaire subtiliteiten en krachtige functies van de taal die door ervaren programmeurs wordt gebruikt.
Veel leerboeken over databases, relationele theorie en SQL staan ​​vol met saaie theoretische achtergronden. Dit boek is een welkome uitzondering vanwege zijn lichte, levendige stijl. De auteur geeft de lezer op meesterlijke wijze informatie over SQL-statements en -blokken, conditietypes, joins, subquery's en nog veel meer.
Om de in de praktijk opgedane kennis te consolideren, creëert de auteur een MySQL-trainingsdatabase en biedt hij veel praktische voorbeelden van vragen over al het gepresenteerde theoretische materiaal.

Chris Fiailly "SQL" (2013)


Het boek behandelt de ANSI SQL-92 (SQL2) versie van de taal. Het beschrijft in detail hoe de zoektaal kan worden gebruikt voor het oplossen van de overeenkomstige klassen van problemen bij het nemen van monsters en het wijzigen van gegevens en bij het werken met objecten van de databasestructuur. Alle voorbeelden worden uitgebreid toegelicht.
In deze editie wordt bijzondere aandacht besteed aan de verschillen in SQL-dialecten bij de implementatie van de meest voorkomende DBMS: MySQL, Oracle, MS SQL Server en PostgreSQL.
Het boek is bedoeld voor iedereen die zelfstandig de SQL-taal wil leren of zijn kennis over dit onderwerp wil verbeteren.

Anthony Molinaro SQL. Verzameling van recepten "(2009)


Deze editie is bedoeld voor degenen die al enige kennis van SQL hebben en hun vaardigheden op dit gebied willen verbeteren. Het zal ook zeer nuttig zijn voor database-experts, aangezien de auteur voorbeelden geeft van het oplossen van problemen in verschillende DBMS: DB2, Oracle, PostgreSQL, MySQL en SQL Server.
Het boek leert u hoe u SQL kunt gebruiken om een ​​breder scala aan taken op te lossen: van bewerkingen in de database tot het extraheren van gegevens en het overbrengen ervan via het netwerk naar toepassingen.
U leert hoe u vensterfuncties en speciale operatoren kunt gebruiken, evenals geavanceerde datawarehouse-technieken: histogrammen maken, gegevens samenvatten in blokken, aggregatie van bewegend bereik uitvoeren, sommen en subsommen uitvoeren. U kunt tekenreeksen uitbreiden in kolommen en omgekeerd, berekeningen binnen een tekenreeks vereenvoudigen en de resultatenset dubbel uitbreiden, een tekenreeks doorlopen, waarmee u SQL kunt gebruiken om een ​​tekenreeks te ontleden in tekens, woorden of gescheiden tekenreekselementen. De door de auteur voorgestelde technieken stellen u in staat de code van uw applicaties te optimaliseren en nieuwe mogelijkheden voor u in de SQL-taal te openen.

Alex Kriegel et al. “SQL. Gebruikersbijbel, 2e editie (2010)


Het boek is uniek omdat elk hoofdstuk de implementaties van bepaalde zoekopdrachten in de dialecten van de drie toonaangevende DBMS'en vergelijkt. Dit maakt het een uitgebreide en praktische gids voor de SQL-taal voor ontwikkelaars van beginners tot goeroes, een soort desktophandleiding.
De publicatie behandelt onderwerpen van de basis tot transacties en vergrendelingen, functies en hulpprogramma's voor databasebeveiliging.
Aan het einde worden verschillende aanvullende onderwerpen gepresenteerd: SQL naar XML-integratie, OLAP-business intelligence en meer.

Eric Redmond, Jim R. Wilson Zeven databases in zeven weken. Inleiding tot moderne databases en NoSQL-ideologie" (2015)

Het boek behandelt de meeste hedendaagse open source databases: Redis, Neo4J, CouchDB, MongoDB, HBase, PostgreSQL en Riak. Voor elke database worden voorbeelden gegeven van het werken met echte gegevens, die de belangrijkste ideeën en sterke punten demonstreren.
Dit boek werpt licht op de sterke en zwakke punten van elk van de zeven databases en leert u de database te kiezen die het beste aan uw behoeften voldoet.

Martin Graber "SQL voor gewone stervelingen" Laurie, 2014, 382 pagina's (11,2 mb. pdf)

Het boek kan worden omschreven als een gids voor beginners. Structured Query Language - SQL, een programmeertaal voor het maken en beheren van relationele databases (een toegepast, logisch model voor het bouwen van een set (databases) databases). Het boek is ontworpen voor het eenvoudigste (laagste) opleidingsniveau op IT-gebied, dat wil zeggen voldoende kennis in het volume van het schoolcurriculum. Maar dit betekent niet dat het materiaal van de handleiding slechts een inleiding tot deze programmeertaal is - nee, SQL wordt behoorlijk diepgaand beschreven (verklaring van de auteur).

Elk hoofdstuk voegt nieuwe gegevens toe die verwante concepten en definities beschrijven. Al het volgende materiaal is gebaseerd op het vorige - eerder overwogen, met aandacht aan het einde van het hoofdstuk met praktische zaken voor een betere assimilatie van de opgedane kennis. De antwoorden vindt u in bijlage A.

Een inleiding tot SQL wordt gegeven in de eerste zeven hoofdstukken, die verplicht zijn als je de handleiding zoals SQL voor beginners gebruikt. De volgende zeven (van 8 tot 14) hoofdstukken behandelen complexere voorbeelden: gecombineerde zoekopdrachten, zoekopdrachten op meerdere tabellen tegelijk. Andere SQL-functies: tabellen maken en bewerken, waarden invoeren en instellen, toegang tot aangemaakte tabellen openen en sluiten - worden beschreven in de hoofdstukken 15 tot 23. Tot slot, over de structuur van databases en de mogelijkheid om SQL te gebruiken in programma's die in andere talen zijn ontwikkeld . De bijlagen bieden richtlijnen voor SQL-commando's en antwoorden op taken. Het boek is ideaal voor beginners om SQL te leren.
ISBN: 978-5-85582-301-1

Hoofdstuk 1. Inleiding tot relationele databases 1
Wat is een relationele database? 3
Databasevoorbeeld 5
Resultaten 7

Hoofdstuk 2 Inleiding tot SQL 9
Hoe werkt SQL? 10
Diverse datatypes 12
Resultaten 15

Hoofdstuk 3 SQL gebruiken om gegevens uit tabellen op te halen 17
Een verzoek indienen 18
Voorbeelddefinitie - WHERE-clausule 24
Resultaten 26

Hoofdstuk 4 Relationele en booleaanse operatoren gebruiken om complexere predikaten te maken 29
Relationele operators 30
Booleaanse operatoren 32
Resultaten 37

hoofdstuk 5 Speciale operatoren gebruiken in "voorwaarden" 39
Bediening IN 40
Operator TUSSEN 41
LIKE 44 Operator
IS NULL-operator 47
Resultaten 49

Hoofdstuk 6 Gegevens samenvatten met een aggregatiefunctie 51
Wat zijn aggregatiefuncties? 52
Resultaten 61

hoofdstuk 7 Queryresultaten opmaken 63
Strings en uitdrukkingen 64
Uitvoervelden bestellen 67
Resultaten 71

Hoofdstuk 8 Meerdere tabellen in één query gebruiken 75
Aansluittafels 76
Resultaten 81

Hoofdstuk 9 Een samenvoegbewerking waarvan de operanden worden weergegeven door een enkele tabel 83
Hoe u twee exemplaren van dezelfde tafel samenvoegt 84
Resultaten 90

Hoofdstuk 10 Nestverzoeken 93
Hoe worden subquery's uitgevoerd? 94
Resultaten 105

Hoofdstuk 11 Gerelateerde subquery's 107
Hoe gerelateerde subquery's te vormen 108
Resultaten 115

Hoofdstuk 12 De EXISTS-operator gebruiken 117
Hoe werkt de EXISTS-operator? 118
EXISTS gebruiken met gerelateerde subquery's 119
Resultaten 124

Hoofdstuk 13 De ANY, ALL en SOMMIGE operators gebruiken 127
Speciale operator ELKE of SOMMIGE 128
Speciale aandrijving ALL 135
Werking van ELKE. ALLES en BESTAAT bij gegevensverlies of
met onbekende gegevens 139
Resultaten 143

Hoofdstuk 14 De UNION-clausule gebruiken 145
Meerdere zoekopdrachten combineren in één
UNION gebruiken met ORDER BY 151
Resultaten 157

Hoofdstuk 15 Nulwaarden invoeren, wissen en wijzigen 159
DML 160 update-opdrachten
Waarden invoeren 160
Rijen uitsluiten van een tabel 162
Veldwaarden wijzigen 163
Resultaten 165

Hoofdstuk 16 Subquery's gebruiken met updateopdrachten 167
Subquery's gebruiken in INSERT 168
Subquery's gebruiken met DELETE 170
Subquery's gebruiken met UPDATE 174
Resultaten 177

Hoofdstuk 17 Tabellen maken 178
CREATE TABLE commando 179
Indexen 181
Een tabel wijzigen die al is gemaakt 182
Tabel 183 uitzondering
Resultaten 185

Hoofdstuk 18 Beperkingen op de set geldige gegevenswaarden 186
Beperkingen in tabellen 195
Resultaten 197

Hoofdstuk 19 Ondersteuning voor gegevensintegriteit 198
Buitenlandse en bovenliggende sleutels 199
BUITENLANDSE KEY-beperkingen 204
Wat gebeurt er als u update-opdracht 209 uitvoert?
Resultaten 211

Hoofdstuk 20 Inleiding tot weergaven 212
Wat zijn representaties? 212
MAAK VIEW Commando 221
Resultaten 223

Hoofdstuk 21 Waarden wijzigen met behulp van weergaven 224
Weergaven bijwerken 228
Waarden selecteren die worden gehost in weergaven 232
Resultaten 235

Hoofdstuk 22 Gegevenstoegangsrechten bepalen 236
Gebruikers 237
Overdracht van privileges 241
Intrekking van privileges 245
Andere soorten privileges 247
Resultaten 249

Hoofdstuk 23 Globale aspecten van SQL 250
Tabellen hernoemen 252
Hoe wordt de database gehost voor de gebruiker? 253
Wanneer wordt verandering permanent? 255
Hoe SQL werkt met meerdere gebruikers tegelijk Totaal 259

Hoofdstuk 24 Hoe de volgorde wordt gehandhaafd in een SQL-database 261
Systeemmap 262

De theoretische grondslagen van het SQL Server 2012 DBMS worden op een eenvoudige en toegankelijke manier behandeld.Installatie, configuratie en ondersteuning van MS SQL Server 2012. De Transact-SQL datamanipulatietaal wordt beschreven. Overwogen om een ​​database te maken, tabellen en hun inhoud, query's, indexen, views, triggers, opgeslagen procedures en door de gebruiker gedefinieerde functies aan te passen.
De implementatie van beveiliging met authenticatie, encryptie en autorisatie wordt getoond. Er wordt aandacht besteed aan automatisering van DBMS-beheertaken. Het maken van back-upkopieën van gegevens en de implementatie van systeemherstel worden overwogen. Beschrijft Microsoft Analysis Services, Microsoft Reporting Services en andere business intelligence-tools. De technologie van het werken met XML-documenten, beheer van ruimtelijke gegevens, zoeken in volledige tekst en nog veel meer komt aan bod. Voor beginnende programmeurs.

In de moderne wereld is informatie van de hoogste waarde, maar het is net zo belangrijk om deze informatie te kunnen beheren. Dit boek gaat over de SQL-querytaal en databasebeheer. Het materiaal wordt gepresenteerd, beginnend met de beschrijving van basisquery's en eindigend met complexe manipulaties met behulp van joins, subquery's en transacties. Als u de organisatie en het beheer van databases probeert te begrijpen, zal dit boek een uitstekende praktische gids zijn en u voorzien van alle tools die u nodig hebt. Een kenmerk van deze editie is de unieke manier van presenteren van het materiaal, die O\'Reilly's Head First-serie onderscheidt van een aantal saaie programmeerboeken.

Dit boek leert u werken met SQL-opdrachten en -instructies, relationele databases maken en configureren, database-objecten laden en wijzigen, krachtige query's uitvoeren, prestaties verbeteren en beveiliging bouwen. Je leert hoe je DDL-statements gebruikt en API's toepast, XML- en Java-scripts integreert, SQL-objecten gebruikt, webservers maakt, werkt met externe toegang en gedistribueerde transacties uitvoert.
In dit boek vindt u informatie zoals beschrijvingen van het werken met in-memory databases, streaming en embedded databases, databases voor mobiele en draagbare apparaten en nog veel meer.

SQL for Mortals is een complete introductie tot Structured Query Language, speciaal geschreven voor beginners.

Als databasebeheer nieuw voor u is, leert dit boek u hoe u eenvoudig en vloeiend met SQL kunt werken, met behulp van eenvoudige query's en complexe bewerkingen. SQL onder de knie krijgen:

- Begrijp de betekenis van databasebeheerconcepten met een beknopte en eenvoudige inleiding tot relationele databases.
— Volg deze instructies voor het gebruik van basis-SQL-commando's om informatie in datatabellen te zoeken en ermee te werken. Leer hoe u gegevens kunt selecteren en samenvatten, en hoe u deze vakkundig kunt beheren.
- Efficiënt werken met samengestelde gegevenstabellen door geavanceerde querytechnieken op meer dan één tabel tegelijk toe te passen en complexe query's en subquery's te maken.
- Maak nieuwe gegevenstabellen voor zakelijke toepassingen in de detailhandel. Leer de belangrijke principes van een effectief databaseontwerp en technieken om de integriteit en bescherming van gegevens te waarborgen.
- Leer SQL gebruiken met programmeertalen met behulp van een speciaal hoofdstuk voor programmeurs.

SQL is ouder dan de meesten van ons, dus ik kan niet beweren dat ik door dit boek buitengewone dingen over te brengen. Wat deze titel uniek maakt, is het slanke formaat. Als u op zoek bent naar een echte compacte praktische gids over SQL, dan is dit boek iets voor u. Voor beginners heb ik geprobeerd een oceaan tot een emmer te beperken om ze in de kortst mogelijke tijd uit te rusten met SQL-kennis. SQL-taal is te omvangrijk en het blootleggen van elk aspect van deze enorme taal is een erg vervelende taak. Afgezien van de minst gebruikte functies, is dit boek uitgerold om zich te concentreren op de meer operationele gebieden van de taal. Het is bedoeld om u te helpen snel zelf SQL te leren. Het volgt een zelfstudiebenadering, terwijl honderden praktische oefeningen worden gegeven, aangevuld met illustraties, om u in korte tijd SQL te leren. Zonder enige overdrijving zal het boek SQL in recordtijd blootleggen. Het boek behandelt expliciet een gratis platform van 's werelds nummer 1 DBMS om SQL: Oracle Database Express Edition bloot te leggen. Ik heb voor Oracle XE gekozen omdat het gratis te ontwikkelen, implementeren en distribueren is; snel te downloaden; en eenvoudig te beheren.

Beginnen met Oracle PL/SQL helpt u op weg met het gebruik van de ingebouwde taal die elke Oracle-ontwikkelaar en databasebeheerder moet kennen. Oracle Database zit boordevol ingebouwde applicatiefuncties die gratis te gebruiken zijn, en PL/SQL is uw ticket om deze functies te leren kennen en gebruiken vanuit uw eigen code. Hiermee kunt u bedrijfslogica in de database centraliseren, toepassingslogica offloaden en database- en toepassingsbeheertaken automatiseren.

Auteur Don Bales biedt in Beginnen met Oracle PL/SQL een snelle en met voorbeelden gevulde tutorial. Leer van Don\'s uitgebreide ervaring om de meest gebruikte aspecten van PL/SQL te ontdekken, zonder tijd te verspillen aan obscure en verouderde functies.

Het boek "SQL. De User's Bible is uniek omdat elk hoofdstuk de implementaties van de SQL-querytaalstandaard in de drie toonaangevende DBMS'en vergelijkt. Het resultaat is een uitgebreide en praktische referentie voor databasegebruikers, van beginners tot professionals. Dit boek over SQL combineert op handige wijze theorie met praktijk, bevat een beschrijving van nieuwe technologieën en stelt u in staat de talrijke nuances van de SQL-querytaalstandaard en zijn implementaties te begrijpen. Het kan als referentie worden gebruikt - een soort desktophandleiding.
— Leer de basis van de SQL-querytaal en relationele databases
- Leer werken met tabellen, views, sequenties en andere database-objecten
- Leer hoe u transacties en vergrendelingen toepast in een omgeving met meerdere gebruikers
- Maak kennis met de functies die worden aangeboden door de SQL-standaard en drie toonaangevende databaseleveranciers
- Leer hoe u toegang krijgt tot metadata en databasebeveiliging implementeert
- Verken aanvullende onderwerpen: SQL-naar-XML-integratie, OLAP-business intelligence en meer

Als u over elementaire HTML-vaardigheden beschikt, zult u met behulp van het boek van Robin Nixon, een ervaren ontwikkelaar en auteur van talrijke bestverkochte webmasteringboeken, gemakkelijk leren hoe u dynamische sites kunt maken die worden gekenmerkt door een hoog niveau van gebruikersinteractie.
Ontdek de combinatie van PHP en MySQL, leer hoe ze het gemakkelijk maken om moderne websites te maken, leer hoe je javascript toevoegt aan deze technologieën, zodat je hightech applicaties kunt maken.
Deze tutorial bekijkt elke technologie afzonderlijk, laat zien hoe je PHP, MySQL en javascript in één geheel kunt combineren en geeft een inleiding tot de nieuwste webprogrammeerconcepten. Met gedetailleerde casestudy's en quizzen in elk hoofdstuk, kun je wat je hebt geleerd in de praktijk brengen.

Deze gids helpt je:
— de basis van PHP en objectgeoriënteerd programmeren beheersen;
- MySQL grondig bestuderen, beginnend met de structuur van databases en eindigend met het samenstellen van complexe queries;
- webpagina's maken die PHP en MySQL gebruiken om formulieren en andere HTML-componenten te combineren;
- leer javascript, beginnend met functies en gebeurtenisafhandeling en eindigend met toegang tot het Document Object Model (DOM);
— softwarebibliotheken en -pakketten gebruiken, waaronder het Smarty-systeem, de PEAR-softwarerepository en de Yahoo! gebruikersomgeving;
- bel Ajax en maak van uw website een zeer dynamische informatieomgeving;
- bestanden en afbeeldingen uploaden naar de website en ermee werken, de door de gebruiker ingevoerde gegevens controleren;
- Zorg voor de veiligheid van uw applicaties.

Vragen lopen niet snel genoeg? Benieuwd naar de in-memory databasefuncties in 2014? Moe van telefoontjes van gefrustreerde gebruikers? Grant Fritchey's boek SQL Server Query Performance Tuning is het antwoord op uw prestatieproblemen met SQL Server-query's. Het boek is herzien om de allernieuwste functies en technieken voor prestatieoptimalisatie te behandelen, met name de nieuw toegevoegde, in-memory databasefuncties die voorheen bekend waren onder de codenaam Project Hekaton. Dit boek biedt de tools die u nodig hebt om uw vragen met prestatie in het achterhoofd te benaderen.

SQL Server Query Performance Tuning helpt u inzicht te krijgen in de oorzaken van slechte prestaties, hoe u deze kunt identificeren en oplossen. Je leert proactief te zijn bij het vaststellen van prestatiebaselines met behulp van tools zoals Performance Monitor en Extended Events. Je leert knelpunten te herkennen en onschadelijk te maken voordat de telefoon gaat. Je leert ook enkele snelle oplossingen, maar de nadruk ligt op ontwerpen voor prestaties en het goed doen, en problemen voorkomen voordat ze zich voordoen. Verras uw gebruikers. Zet die rinkelende telefoon stil. Breng de principes en lessen van SQL Server Query Performance Tuning vandaag nog in de praktijk.

Behandelt de in-memory-functies van Project Hekaton
Helpt prestatiebasislijnen vast te stellen en hierop te controleren
Gidsen voor het oplossen van problemen en het elimineren van knelpunten die gebruikers frustreerden
Wat je gaat leren
— Stel prestatiebasislijnen vast en controleer deze
— Herken en elimineer knelpunten die leiden tot trage prestaties
- Implementeer snelle oplossingen wanneer nodig, en volg langetermijnoplossingen op
— Implementeer best-practices in T-SQL om het prestatierisico te minimaliseren
— Ontwerp in de prestaties die u nodig hebt door zorgvuldige query- en indexontwerp
— Profiteer van de allernieuwste prestatie-optimalisatiefuncties in SQL Server 2014
— Begrijp de nieuwe, in-memory databasefuncties met de codenaam Project Hekaton

SQL book in 10 minuten biedt eenvoudige en praktische oplossingen voor wie snel resultaten wil boeken. Na het doorlopen van alle 22 lessen, die elk niet meer dan 10 minuten duren, leer je alles wat nodig is voor het praktische gebruik van SQL. De voorbeelden in het boek zijn geschikt voor IBM DB2, Microsoft Access, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SQLite, MariaDB en Apache OpenOffice Base. Illustratieve voorbeelden helpen u te begrijpen hoe SQL-instructies zijn gestructureerd. Tips zullen leiden tot snelkoppelingen naar oplossingen. Waarschuwingen helpen u om veelvoorkomende fouten te voorkomen. Opmerkingen geven meer verduidelijking.