Skapa ett exempel på en sql-tabell. SQL - vad det är, vad språket behövs för och grundläggande funktioner för nybörjare

Typen av språk som används i ett visst DBMS kallas dialektSQL. Till exempel kallas Oracle DBMS-dialekten P.L./ SQL; MSSQLServer och DB2 använder dialekt Transagera- SQL; i Interbase och Firebird– isql. Varje SQL-dialekt är till viss del kompatibel med SQL-standarden, men kan ha skillnader och specifika språktillägg, så för att ta reda på syntaxen för en viss SQL-sats bör du först titta Hjälp specifika DBMS.

För operationer på databaser och tabeller tillhandahåller sql-standarden följande operatorer:

Följande är SQL92-syntaxen för dessa satser. Eftersom deras syntax i DBMS kan skilja sig från standarden, rekommenderas att konsultera DBMS hjälpsystem när du utför laboratoriearbete.

Namn på databasobjekt (tabeller, kolumner, etc.) kan bestå av alfanumeriska tecken och understreck. Specialtecken (@$#, etc.) indikerar vanligtvis en speciell typ av tabell (system, temporär, etc.). Det rekommenderas inte att använda nationella (ryska) tecken, mellanslag och reserverade ord i namn, men om de fortfarande används, bör sådana namn skrivas med citattecken ".." eller i hakparentes [..].

Vidare, när konstruktionerna av SQL-satser beskrivs, kommer följande notation att användas: valfria delar av konstruktionen skrivs inom hakparenteser; alternativa mönster är åtskilda av en vertikal streck | ; tandställning() markera designens logiska block; ellipser indikerar att föregående del av strukturen kan upprepas många gånger. "Utökningsbara" strukturer skrivs in vinkelfästen < >.

Skapande av databas

SKAPA DATABAS Databas namn

Ta bort en eller flera databaser

SLIP DATABAS Databas namn[,Databas namn…]

Deklarerar den aktuella databasen

ANVÄNDA SIG AV Databas namn -- i SQL Server och MySQL

STÄLL IN DATABAS namn_ baser_ data – i Firebird

Skapa ett bord

SKAPA BORD Tabellnamn (

<описание_столбца> [, <kolumnbeskrivning> |

<table_integrity constraint>…]

< kolumnbeskrivning>

Kolumnnamn TYP

(INGEN ÅTGÄRD|CASCADE|SET DEFAULT|SET NULL)]

TYP Kolumnen kan vara antingen en standarddatatyp (se tabell 1) eller ett domännamn (se avsnitt 6.2).

Vissa DBMS låter dig skapa beräknade kolumner (beräknad kolumner). Dessa är virtuella kolumner, vars värde inte lagras i det fysiska minnet, utan beräknas av DBMS-servern när denna kolumn nås med den formel som anges när den här kolumnen deklareras. Formeln kan innehålla värden från andra kolumner i den raden, konstanter, inbyggda funktioner och globala variabler.

Beskrivningen av en beräknad kolumn i SQL Server är:

<описание_столбца> Kolumnnamn SOM uttryck

Beskrivning av den beräknade kolumnen i eldfågel har formen:

<описание_столбца> Kolumnnamn BERÄKNAD AV<uttryck>

MySQL 3.23 DBMS stöder inte beräknade kolumner.

< >

BEGRÄNSNING Integrity_constraint_name

(UNIK|PRIMÄRNYCKEL)( list_of_columns_forming_key)

|UTLANDSNYCKEL ( lista_ kolumner_FK)

REFERENSER Tabellnamn(list_columns_P.K.)

(INGEN ÅTGÄRD|CASCADE|SET DEFAULT|SET NULL)]

(INGEN ÅTGÄRD|CASCADE|SET DEFAULT|SET NULL)]

|KONTROLLERA ( test_condition)

Vissa DBMS tillåter deklaration av temporära tabeller (som endast existerar under en session). I SQL Server måste temporära tabellnamn börja med ett # (lokala temporära tabeller som endast är synliga för användaren som skapade dem) eller ## (globala tabeller som är synliga för alla användare); MySQL använder nyckelordet TEMPORARY för att skapa tillfälliga tabeller, till exempel:

SKAPATEMPORÄRTABELL... (för ytterligare syntax, se CREATE TABLE).

Ändra tabellstrukturen

Används för att ändra kolumntypen för befintliga tabeller, lägga till och ta bort kolumner och integritetsbegränsningar.

ÄNDRA TABELL Tabellnamn

Ändra en kolumntyp (i SQLServer och Firebird)

ÄNDRA KOLUMN Kolumnnamn ny typ

Ändra kolumntyp, namn och begränsningar (i MySQL)

ÄNDRA KOLUMN Kolumnnamn <kolumnbeskrivning>

Lägg till en vanlig eller beräknad kolumn

|LÄGG TILL<kolumnbeskrivning>

Lägga till en integritetsbegränsning

| LÄGG TILL

<table_integrity constraint>

Ta bort en kolumn

|SLIPPA KOLUMN Kolumnnamn

Ta bort en integritetsbegränsning

|SLÄPP BEGRÄNSNING Integrity_constraint_name

Aktivera eller inaktivera kontroll av integritetsbegränsningar

BMSSQLServer

|(KONTROLL|INGEN KONTROLL) BEGRÄNSNING

{Lista_of_integrity_constraint_names|ALLA)

Ta bort en tabell

SLÄPP BORD Tabellnamn



Låt oss sedan titta på hur man deklarerar deklarativa integritetsbegränsningar när man skapar nya tabeller med kommandot CREATETABLE eller ändrar strukturen på befintliga tabeller med kommandot ALTERTABLE (de beskrivs mer i detalj i avsnitt 4.2).

1. Obligatorisk tillgång till data (NULL-värden)

Deklareras med ordet NULL (kolumnen kan ha tomma celler) eller NOT NULL (obligatorisk kolumn). Standard är NULL.

Exempel på att skapa tabell 7:

SKAPATABELL Kunder(

Kundnamn NVARCHAR(60) INTE NULL,

Födelsedatum DATUM NULL,

Telefon RÖDING(12));

-- även NULL som standard 2. Standardvärde

Ett standardvärde kan ställas in för varje tabellkolumn. Om en cell ändras och dess nya värde inte anges, infogar servern ett standardvärde. Standardvärdet kan vara NULL, en konstant, ett utvärderat uttryck eller en systemfunktion.

Låt oss titta på ett exempel på att skapa en tabell Order(Order). Kolumn Orderdatum förinställer det aktuella datumet och kolumnen Kvantitet(antal) är som standard 0.

SKAPA BORD Order(

OrderNum INT INTE NULL, -- Ordernummer

Orderdatum DATUM TID INTE NULL-- orderdatum

STANDARD GetDate()

Funktionen GetDate() returnerar det aktuella datumet 8

Kvantitet SMALLINT INTE NULL- mängd varor, STANDARD 0);

3. Deklaration av primärnycklar (PRIMÄRNYCKEL)

En enkel primärnyckel deklareras med orden PRIMARYKEY när en tabell skapas. Till exempel,

SKAPATABELL Personal( -- tabell "Anställda"

TabNum INTPRIMÄRNYCKEL, -- primärnyckel

WName NVARCHAR(40) INTENULL, -- FULLSTÄNDIGA NAMN

... -- beskrivning av andra kolumner);

En sammansatt primärnyckel deklareras annorlunda:

-- metod 1 (adP.K.när du skapar en tabell)

SKAPA BORD Kunder(

PassSeria NUMERISK(4,0)INTE NULL,-- serier pass

PasNumber NUMERISK(6,0)INTE NULL,-- siffra pass

namn NVARCHAR(40)INTE NULL,

Telefon RÖDING(12),

-- deklaration av en sammansatt primärnyckel

BEGRÄNSNING Clients_PK

PRIMÄR NYCKEL(PasSeria, Passnummer));

-- metod 2(P.K.deklareras efter att tabell skapats)

-- skapa först en tabell utanP.K.

SKAPA TABELL Kunder(

PassSeria NUMERISK(4,0)INTE NULL,--serier pass

PasNumber NUMERISK(6,0)INTE NULL,--siffra pass

Kundnamn NVARCHAR(40)INTE NULL,

Telefon RÖDING(12));

-- modifiering tabellerLägg till RK

ÄNDRA TABELL Kunder

LÄGG TILL BEGRÄNSNING Clients_PK

PRIMÄR NYCKEL(PasSeria, Passnummer);

4. Unikt av kolumner (UNIK)

Tycka om Primär Nyckel indikerar att en kolumn eller grupp av kolumner inte kan innehålla dubbletter av värden, men är det inte P.K.. Alla kolumner som förklarats UNIKA måste vara NOTNULL. Ett exempel på en enkel unik kolumndeklaration:

SKAPA BORD Studenter(

SCode INT PRIMÄR NYCKEL, -- surrogat RK

FIO NVARCHAR(40) INTE NULL, -- FULLSTÄNDIGA NAMN

Journal RÖDING(6) INTE NULL UNIK); -- Rekordnummer

Exempel på en sammansatt unik fältdeklaration:

SKAPA TABELL Personal(-- tabell " Arbetare"

TabNum INT PRIMÄR NYCKEL, -- tidrapport siffra

WName NVARCHAR(40) INTE NULL, -- Fullständiga namn

PassSeria NUMERISK(4,0) INTE NULL, -- serier pass

PasNumber NUMERISK(6,0) INTE NULL, -- siffra pass

-- meddelande sammansatt unik fält

BEGRÄNSNING Staff_UNQ UNIK(PasSeria, Passnummer));

5. Restriktioner värden kolumn (KOLLA UPP)

Denna begränsning låter dig ange ett intervall, lista eller "mask" av logiskt giltiga värden för en kolumn.

Exempel på att skapa tabeller Arbetare(Arbetare):

SKAPATABELL Arbetare(

-- 4-siffriga personalnummer

TabNum INT PRIMÄR NYCKEL

KOLLA UPP(TabNum MELLAN 1000 OCH 9999),

namn VARCHAR(60) INTE NULL, -- Fullständiga namn anställd

-- golvbrev " m" eller " och"

Gentry RÖDING(1) INTE NULL

KOLLA UPP(Gentry I("m","f")),

Ålder minst 14 år

Ålder SMALLINT INTE NULL KOLLA UPP(Ålder>=14),

--Nr på pensionsförsäkringsbevis (med mask)

PensionCert RÖDING(14)

KOLLA UPP(PensionSert TYCKA OM ""));

Detta exempel visar olika typer av kontroller. Intervallet av acceptabla värden indikeras av MELLAN…OCH-konstruktionen; normala förhållanden (som för kolumn Ålder) använd jämförelsetecken =,<>, >, >=, <, <=, связанные при необходимости логическими операциямиAND,OR,NOT(например,Ålder>=14OCH Ålder<=70); для указания списка допустимых значений используется предикатINи его отрицаниеNOTIN; конструкция

TYCKA OM mask_allowed_values BORTSETT FRÅN undantagslista

används för att ställa in en mask med giltiga värden för strängkolumner. Masken använder två specialtecken: "%" - en godtycklig delsträng och "_" - vilket enstaka tecken som helst. EXCEPT-satsen är valfri.

Kontrollera valvillkoret kan jämföra värdena för två kolumner i samma tabell och kolumner i olika tabeller.

Fram till denna punkt har vi frågat efter tabeller med data och kört kommandon för att hämta dessa data, förutsatt att dessa tabeller redan hade skapats av någon före oss. Detta är verkligen den mest realistiska situationen där ett litet antal personer skapar tabeller som sedan används av andra människor. Vårt mål är att först täcka informationen bredare och sedan gå vidare till mer specifika frågor.

I det här kapitlet kommer vi att diskutera att skapa, ändra och ta bort tabeller. Allt detta gäller själva tabellerna och inte de uppgifter de innehåller. Oavsett om du utför dessa operationer själv eller inte, kommer en begreppsmässig förståelse av dem att öka din förståelse av SQL-språket och typen av tabeller du använder. Det här kapitlet introducerar oss till ett område av SQL som kallas DDL (Data Definition Language), där SQL-dataobjekt skapas.

Det här kapitlet kommer också att visa en annan typ av SQL-dataobjekt - Index. Index används för att göra sökningen mer effektiv och ibland för att få värden att skilja sig från varandra. De fungerar vanligtvis utan att du märker det, men om du försöker lägga in värden i en tabell och de avvisas eftersom de inte är unika, betyder det att en annan rad har samma värde för det fältet, och att det fältet har ett unikt index eller en begränsning som dikterar dess unika karaktär. Diskussion om ovanstående kommer att fortsätta i kapitel 18.

KOMMANDON FÖR ATT SKAPA BORD

Tabeller skapas med kommandot CREATE TABLE. Detta kommando skapar en tom tabell - en tabell utan rader. Värden skrivs in med kommandot DML INSERT (se kapitel 15). Kommandot CREATE TABLE definierar i princip tabeller genom att beskriva en uppsättning kolumnnamn specificerade i en specifik ordning. Den definierar också datatyper och kolumnstorlekar. Varje tabell måste ha minst en kolumn.

CREATE TABLE kommandosyntax: CREATE TABLE ( [()], [()] ...); Som diskuterats i kapitel 2 varierar datatyperna avsevärt från program till program. För att vara kompatibla med standarden måste de alla åtminstone stödja standarden av ANSI-typ. Det beskrivs i bilaga B.

Eftersom mellanslag används för att separera delar av ett SQL-kommando kan de inte vara en del av namnet på en tabell (eller något annat objekt, till exempel ett index). Understreck (_) används vanligtvis för att separera ord i tabellnamn.

Värdet på storleksargumentet beror på datatypen. Om du inte anger det kommer ditt system att tilldela värdet automatiskt. För numeriska värden är detta den bästa vägen att gå, för i det här fallet kommer alla dina golv av den här typen att få samma storlek, vilket befriar dig från problemen med deras övergripande kompatibilitet (se kapitel 14). Att använda storleksargumentet med vissa numeriska uppsättningar är inte heller en enkel sak. Om du behöver lagra stora mängder måste du utan tvekan se till att golvet är tillräckligt stort för att rymma dem.

En datatyp som du oftast bör tilldela en storlek till är CHAR. Storleksargumentet är ett heltal som anger det maximala antalet tecken som fältet kan innehålla. Faktum är att antalet tecken i fältet kan vara från noll (om fältet är NULL) till detta nummer. Som standard är storleksargumentet 1, vilket betyder att fältet bara kan innehålla en bokstav. Detta är naturligtvis inte precis vad du vill.

Tabeller tillhör användaren som skapade dem, och namnen på alla tabeller som ägs av en given användare måste skilja sig från varandra, liksom namnen på alla kolumner i en given tabell. Separata tabeller kan använda samma kolumnnamn, även om de ägs av samma användare. Ett exempel på detta är stadskolumnen i tabellen Kunder och i tabellen Säljare. Användare som inte är tabellägare kan referera till dessa tabeller genom att använda tabellägarens namn följt av en punkt; till exempel kommer tabellen Anställda som skapats av Smith att kallas Smith. Anställda när den nämns av någon annan användare (vi förstår att Smith är Permission Identifier (ID). (ID) som rapporteras av användaren (ditt lösta ID är ditt namn i SQL Denna utdata diskuteras i kapitel 2, och kommer att fortsätta i kapitel 22).

Det här kommandot kommer att skapa Säljare-tabellen: CREATE TABLE Säljare (snum heltal, sname char (10), city char (10), comm declmal); Ordningen på kolumnerna i tabellen bestäms av i vilken ordning de är listade. Kolumnen ska inte separeras med en radbrytning (vilket görs för läsbarheten), utan avgränsas med kommatecken.

INDICES

Ett index är en ordnad (alfabetisk eller numerisk) lista över kolumner eller grupper av kolumner i en tabell. Tabeller kan ha ett stort antal rader, och eftersom raderna inte är i någon speciell ordning kan det ta tid att söka efter ett angivet värde. Indexadressen är både ett problem och ger samtidigt ett sätt att gruppera alla värden i grupper av en eller flera strängar som skiljer sig från varandra. I kapitel 18 kommer vi att beskriva ett mer direkt sätt att tvinga dina värderingar att vara unika. Men den här metoden finns inte i tidigare versioner av SQL. Eftersom unikhet ofta är nödvändig användes index för detta ändamål.

Index är ett SQL-verktyg som marknaden själv födde, inte ANSI. Därför stöder själva ANSI-standarden för närvarande inte index, även om de är mycket användbara och flitigt använda.

När du skapar ett index på ett fält kommer din databas att komma ihåg motsvarande ordning på alla värden i det fältet i ett minnesområde. Låt oss anta att vår kundtabell har tusentals poster och att du vill hitta en kund med nummer = 2999. Eftersom raderna inte är ordnade kommer ditt program att gå igenom hela tabellen, rad för rad, och kontrollera varje gång värdet på cnum-fältet är lika med värdet 2999. Men om det fanns ett index på cnum-fältet, programmet kan nå numret 2999 direkt från indexet och ge information om hur man hittar rätt tabellrad.

Medan ett index avsevärt förbättrar frågeeffektiviteten, gör användningen av ett index DML-modifieringsoperationer (som INSERT och DELETE) något långsammare, och själva indexet tar upp mycket minne. Därför måste du varje gång du skapar en tabell ta ett beslut om du vill indexera den eller inte. Index kan bestå av flera fält. Om mer än ett fält anges för samma index, ordnas det andra inom det första, det tredje inom det andra och så vidare. Om du hade för- och efternamn i två olika fält i en tabell, kunde du skapa ett index som skulle sortera det föregående fältet inom nästa. Detta kan göras oavsett hur kolumnerna i tabellen var ordnade.

Syntaxen för att skapa ett index är vanligtvis följande (kom ihåg att detta inte är en ANSI-standard): CREATE INDEX

( [,]...); Tabellen måste naturligtvis redan vara skapad och måste innehålla kolumner. Indexet kan inte användas för något annat i databasen (av någon användare). När det väl har skapats kommer indexet att vara osynligt för användaren. SQL bestämmer själv när det behövs för att referera till det och gör det automatiskt. Om till exempel tabellen Kunder skulle vara den tabell som oftast refereras till i säljares förfrågningar till sin egen kundkrets, skulle det vara lämpligt att skapa ett sådant index i snum-fältet i tabellen Kunder. SKAPA INDEX Klientgrupp PÅ kunder (snum); Nu kommer säljaren som är relaterad till det här bordet att kunna hitta sin egen kundkrets mycket snabbt.

INDEXENS UNIKHET

Indexet i det föregående exemplet behöver lyckligtvis inte vara unikt, trots att vi konstaterat att detta är ett av syftena med indexet. En given säljare kan ha hur många kunder som helst. Detta kommer dock inte att hända om vi använder nyckelordet UNIQUE före nyckelordet INDEX. Cnum-fältet, som en primärnyckel, kommer att vara den första kandidaten för ett unikt index: CREATE UNIQUE INDEX Custid ON Customers (cnum); OBS: detta kommando kommer att avvisas om det redan finns identiska värden i cnum-fältet. Det bästa sättet att hantera index är att skapa dem direkt efter att tabellen har skapats och innan några värden matas in. Observera också att för ett unikt index med mer än ett kön är det en kombination av värden, som var och en kanske inte är unik.

Det föregående exemplet är ett indirekt sätt att få cnum-fältet att fungera som primärnyckeln i tabellen Kunder. Databaser agerar mer direkt på primära och andra nycklar. Vi kommer att diskutera denna upptäckt ytterligare i kapitel 18 och .

RADERA INDICES

Huvudattributet för ett index är att det heter - så det kan tas bort. Vanligtvis är användare omedvetna om indexets existens. SQL avgör automatiskt om användaren får använda indexet, och i så fall tillåter det att användas. Men om du vill ta bort ett index måste du känna till det efter det. Denna syntax används för att släppa ett index: DROP INDEX ; Att ta bort ett index påverkar inte innehållet i fälten.

BYTA ETT BORD EFTER DET HAR SKAPATS

Kommandot ALTER TABLE är inte en del av ANSI-standarden; men det är en allmänt tillgänglig och ganska meningsfull form, även om dess möjligheter är något begränsade. Den används för att ändra definitionen av en befintlig tabell. Vanligtvis lägger den till kolumner i en tabell. Det kan ibland ta bort eller ändra storlek på kolumner, och i vissa program, lägga till eller ta bort begränsningar (diskuteras i kapitel 18). Den typiska syntaxen för att lägga till en kolumn i en tabell är: ALTER TABLE
LÄGG TILL ; Kolumnen kommer att läggas till med ett NULL-värde för alla rader i tabellen. Den nya kolumnen blir den sista kolumnen i tabellen. Faktum är att du kan lägga till flera nya kolumner samtidigt, separerade med kommatecken, i ett kommando. Det är möjligt att ta bort eller ändra kolumner. Oftast kan det att ändra en kolumn helt enkelt vara att öka dess storlek eller lägga till/ta bort en begränsning. Ditt system måste se till att eventuella ändringar inte kommer i konflikt med befintliga data - om du till exempel försöker lägga till en begränsning i en kolumn som redan hade ett värde, om den överträds, kommer begränsningen att avvisas. Bäst att dubbelkolla detta. Kontrollera åtminstone ditt systems dokumentation för att se om den garanterar att detta var orsaken. På grund av den icke-standardiserade karaktären hos kommandot ALTER TABLE, måste du fortfarande titta på avsnittet i din systemdokumentation som talar om specialfall.

ALTER TABLE - har ingen effekt när tabellen måste omdefinieras, men du bör designa din databas för att undvika att lita för mycket på den för att göra det om möjligt. Att ändra strukturen på ett bord när det redan används är farligt! Titta noga på tabeller som, eftersom de är sekundära tabeller med data extraherad från en annan tabell (se kapitel 20), inte fungerar korrekt under lång tid, och program som använder kapslad SQL (kapitel 25) körs inte korrekt eller inte alltid är korrekta. Dessutom kan ändringen radera alla användare som har behörighet att komma åt tabellen. Av dessa skäl bör du designa dina tabeller så att de endast använder ALTER TABLE som en sista utväg.

Om ditt system inte stöder ALTER TABLE , eller om du vill undvika att använda den, kan du helt enkelt skapa en ny tabell, med nödvändiga ändringar vid skapandet, och använda kommandot INSERT med en SELECT *-fråga för att kopiera data från den gamla bord i den. Användare som beviljats ​​åtkomst till den gamla tabellen (se kapitel 22) måste ges åtkomst till den nya tabellen.

RADERA EN TABELL

Du måste vara ägare (dvs skapare) av tabellen för att kunna ta bort den. Så oroa dig inte för att oavsiktligt förstöra dina data, SQL kommer först att kräva att du rengör tabellen innan den raderar den från databasen. En tabell med rader i den kan inte raderas. Se kapitel 15 för detaljer om hur man tar bort rader från en tabell. Syntaxen för att ta bort din tabell, förutsatt att den är tom så klart, är följande: SLIP TABELL< table name >; När detta kommando ges, känns tabellen inte längre igen av den och det finns inget sådant kommando som kan ges till detta objekt. Du måste se till att denna tabell inte refereras av en främmande nyckel till en annan tabell (Främmande nycklar diskuteras i kapitel 19), och att den inte används i definitionen av en vy (kapitel 20).

Detta kommando är faktiskt inte en del av ANSI-standarden, men det stöds i allmänhet och är användbart. Lyckligtvis är det enklare, och därför mer konsekvent, än ALTER TABLE. ANSI har helt enkelt inte ett sätt att upptäcka trasiga eller ogiltiga tabeller.

SAMMANFATTNING

Du är nu flytande i grunderna för datadefinitioner. Du kan skapa, ändra och ta bort tabeller. Även om endast den första av dessa funktioner är en del av den officiella SQL-standarden, kommer andra att ändras från tid till annan, särskilt ALTER TABLE. DROP TABLE låter dig bli av med bord som är oanvändbara. Det förstör bara tomma tabeller och förstör därför inte data.

Du vet nu om index och hur du skapar och tar bort dem. SQL ger dig inte mycket kontroll över dessa, eftersom implementeringen du använder gör ett ganska bra jobb med att avgöra hur snabbt olika kommandon exekveras. Index är ett av verktygen som ger dig möjligheten att direkt påverka effektiviteten av dina SQL-kommandon. Vi har diskuterat index här för att skilja dem från begränsningar, som de inte bör förväxlas med. Begränsningar är ämnet för kapitel 18 och kapitel 19.

ARBETA MED SQL

1. Skriv en CREATE TABLE-sats som skulle visa vår kundtabell.

2. Skriv ett kommando som gör att användaren snabbt kan hämta beställningar grupperade efter datum från tabellen Beställningar.

3. Om ordertabellen redan har skapats, hur kan du tvinga onum-fältet att vara unikt (förutsatt att alla aktuella värden är unika)?

4. Skapa ett index som gör att varje säljare snabbt kan hitta sina beställningar grupperade efter datum.

5. Anta att varje säljare bara har en kund med ett givet betyg, ange kommandot som ska hämta det.

Innan du kan skapa en SQL-tabell måste du definiera databasmodellen. Designa ett ER-diagram för att definiera entiteter, attribut och relationer.

Grundläggande koncept

Entiteter är föremål eller fakta om vilka information måste lagras. Till exempel en anställd på ett företag eller projekt som genomförs av företaget. Attribut är komponenter som beskriver eller kvalificerar en enhet. Till exempel är attributet för enheten "anställd" lön, och attributet för enheten "projekt" är den uppskattade kostnaden. Samband är associationer mellan två element. Det kan vara dubbelriktat. Det finns också en rekursiv koppling, det vill säga kopplingen mellan en entitet och sig själv.

Det är också nödvändigt att fastställa nycklar och villkor under vilka databasens integritet kommer att upprätthållas. Vad betyder det? Med andra ord begränsningar som hjälper till att hålla databaser i en korrekt och konsekvent form.

Övergång från ER-diagram till tabellmodell

Regler för övergång till en tabellmodell:

  1. Konvertera alla enheter till tabeller.
  2. Konvertera alla attribut till kolumner, det vill säga varje entitetsattribut måste visas i tabellens kolumnnamn.
  3. Konvertera unika identifierare till primärnycklar.
  4. Konvertera alla relationer till främmande nycklar.
  5. Skapa SQL-tabellen.

Skapa en databas

Först måste du starta MySQL-servern. För att starta den, gå till "Start"-menyn, sedan till "Program", sedan till MySQL och MySQL Server, välj MySQL-Command-Line-Client.

För att skapa en databas, använd kommandot Skapa databas. Denna funktion har följande format:

SKAPA DATABAS Databas namn.

Begränsningarna för namnet på databasen är följande:

  • längden är upp till 64 tecken och kan innehålla bokstäver, siffror, "" och ""-symboler;
  • namnet kan börja med en siffra, men det måste innehålla bokstäver.

Du måste komma ihåg den allmänna regeln: varje begäran eller kommando slutar med en avgränsare. I SQL är det vanligt att använda semikolon som avgränsare.

Servern måste ange vilken databas den kommer att behöva arbeta med. Det finns ett USE-uttalande för detta. Denna operator har en enkel syntax: USE n Databas namn.

Skapa en SQL-tabell

Så modellen är designad, databasen skapas och servern får veta exakt hur den ska arbeta med den. Nu kan du börja skapa SQL-tabeller. Det finns Data Definition Language (DDL). Den används för att skapa MS SQL-tabeller, samt för att definiera objekt och arbeta med deras struktur. DDL innehåller en uppsättning kommandon.

Skapa SQL Server-tabeller

Med bara ett DDL-kommando kan du skapa olika databasobjekt genom att variera dess parametrar. Kommandot Skapa tabell används. tt-formatet ser ut så här:

SKAPA TADLE tabellnamn,(kolumnnamn1 namn _kolumn2 datatyp [column_constraint],[table_constraints]).

Syntaxen för detta kommando bör beskrivas mer detaljerat:

  • Tabellnamnet måste vara upp till 30 tecken långt och börja med en bokstav. Endast alfabetiska tecken, bokstäver och symbolerna "_", "$" och "#" är tillåtna. Det är tillåtet att använda det kyrilliska alfabetet. Det är viktigt att notera att tabellnamn inte bör vara desamma som andra objektnamn eller reserverade databasserverord som kolumn, tabell, index, etc.
  • Du måste ange en datatyp för varje kolumn. Det finns en standarduppsättning som används av de flesta. Till exempel Char, Varchar, Antal, Datum, Nolltyp, etc.

  • Parametern Default låter dig ställa in ett standardvärde. Detta säkerställer att det inte finns några nollvärden i tabellen. Vad betyder det? Standardvärdet kan vara en symbol, ett uttryck, en funktion. Det är viktigt att komma ihåg att denna standarddatatyp måste matcha kolumnens indatatyp.
  • Begränsningar på varje kolumn används för att upprätthålla integritetsvillkor för data på tabellnivå. Det finns andra nyanser. Det är förbjudet att radera en tabell om det finns andra tabeller som är beroende av den.

Hur man arbetar med databasen

Stora projekt kräver ofta skapandet av flera databaser, som var och en kräver många tabeller. Naturligtvis är det omöjligt för användare att behålla all information i sina huvuden. För att göra detta är det möjligt att se strukturen för databaser och tabeller i dem. Det finns flera kommandon, nämligen:

  • VISA DATABASER - visar alla skapade SQL-databaser på skärmen;
  • VISA TABELLER - visar en lista över alla tabeller för nuvarande bas data som väljs av kommandot USE;
  • BESKRIVA tabellnamn- visar en beskrivning av alla tabellkolumner.
  • ALTER TABLE - låter dig ändra tabellstrukturen.

Det sista kommandot tillåter:

  • lägga till en kolumn eller begränsning i en tabell;
  • ändra en befintlig kolumn;
  • ta bort kolumn eller kolumner;
  • ta bort integritetsbegränsningar.

Syntaxen för detta kommando är: ALTER TABLE tabellnamn( | | | | [(AKTIVERA | INAKTIVERA) KONSTANT constraint_name ] | }.

Det finns andra kommandon:

  • RENAME - byt namn på tabellen.
  • TRUNCATE TABLE - tar bort alla rader från tabellen. Denna funktion kan behövas när det är nödvändigt att fylla tabellen igen, men det finns inget behov av att lagra tidigare data.

Det finns även situationer då databasens struktur har ändrats och tabellen bör raderas. Det finns ett DROP-kommando för detta. Naturligtvis måste du först välja den databas som du vill ta bort tabellen från, om den skiljer sig från den nuvarande.

Kommandosyntaxen är ganska enkel: DROP TABLE namn_tabeller.

I SQL Access skapas och ändras tabeller med samma kommandon som anges ovan.

Med CREATE TABLE kan du skapa en tom tabell och sedan fylla den med data. Men det är inte allt. Du kan också skapa en tabell direkt från en annan tabell. Så här? Det vill säga att det är möjligt att definiera en tabell och fylla den med data från en annan tabell. Det finns ett speciellt sökord AS för detta.

Syntaxen är väldigt enkel:

  • SKAPA BORD namn_tabeller[(kolumndefinition)] AS underfråga;
  • kolumndefinition - kolumnnamn, integritetsregler för nyskapade tabellkolumner och standardvärden;
  • subquery - returnerar raderna som behöver läggas till i den nya tabellen.

Således skapar ett sådant kommando en tabell med vissa kolumner, infogar rader i den, som returneras i frågan.

Tillfälliga bord

Tillfälliga tabeller är tabeller vars data raderas i slutet av varje session eller tidigare. De används för att registrera mellanliggande värden eller resultat. De kan användas som arbetsblad. Du kan definiera tillfälliga sådana i vilken session som helst, men du kan bara använda deras data i den aktuella sessionen. Att skapa tillfälliga SQL-tabeller liknar vanliga tabeller med kommandot CREATE TABLE. För att visa systemet att tabellen är tillfällig måste du använda parametern GLOBAL TEMPORARY.

ON COMMIT-satsen anger livslängden för data i en sådan tabell och kan göra följande:

  • DELETE ROWS - rensa den tillfälliga tabellen (ta bort all sessionsdata) efter varje transaktionsslutförande. Detta är vanligtvis standardvärdet.
  • BEVARA RADER - lämna data för användning i nästa transaktion. Dessutom kan du rensa bordet först efter att sessionen är slut. Men det finns några egenheter. Om en transaktion rullas tillbaka (ROLLBACK), kommer tabellen att återställas till sitt tillstånd i slutet av föregående transaktion.

Syntaxen för att skapa en temporär tabell kan representeras enligt följande: CREATE TABLE namn_tabeller,(namnkolumn_1 datatyp [column_constraint], namn _kolumn2 datatyp [column_constraint], [table_constraints]).

Föreläsning

Skapa en databas med hjälp av SQL.

Datamanipulation i SQL

Ingår i SQL-språket innehåller ett databeskrivningsspråk som låter dig hantera tabeller och ett datamanipuleringsspråk som används för att hantera data ( glida 2 ).

17.1. Bygga databaser med hjälp av SQL

17.1.1. Kommandot för att skapa tabell − SKAPATABELL

En tabell skapas med kommandot CREATE TABLE. Den allmänna kommandosyntaxen är som följer (glida 3).

De där. efter att ha angett tabellnamnet, separerade med kommatecken inom parentes, bör alla satser som definierar enskilda element i tabellen - kolumner eller integritetsbegränsningar - listas:

table_name är identifieraren för tabellen som skapas, som vanligtvis är uppbyggd av databasnamnet, namnet på tabellägaren och namnet på själva tabellen. I det här fallet måste kombinationen av tabellnamnet och dess ägare vara unik databasen. Om tabellen inte skapas i den aktuella databasen måste dess identifierare innehålla databasnamnet.

column_definition – anger namn, datatyp och parametrar för en enskild tabellkolumn. Kolumnnamn måste följa reglerna för identifierare och vara unika i tabellen.

table_constraint definition – specificerar någon integritetsbegränsning på tabellnivå.

Kolumnbeskrivningar

Som du kan se av syntaxen för kommandot CREATE TABLE, anges en sats för varje kolumn<определение_столбца>, som används för att ställa in egenskaperna för kolumnen. Meningen har följande syntax( glida 3) :

Låt oss titta på syftet och användningen av parametrar.

Kolumnnamn är en identifierare som anger namnet på tabellkolumnen.

data_type – anger datatypen för kolumnen. Om kolumndefinitionen inte uttryckligen anger en begränsning för lagring av NULL-värden, kommer datatypens egenskaper att användas, dvs. Om den valda datatypen tillåter lagring av NULL-värden, kan kolumnen även lagra NULL-värden. Om, när du definierar en kolumn i CREATE TABLE-kommandot, lagring av NULL-värden uttryckligen är tillåten eller förbjuden, kommer egenskaperna för datatypen att åsidosättas av begränsningen som är inställd på kolumnnivå. Till exempel, om datatypen tillåter dig att lagra NULL-värden och kolumnnivån är inaktiverad, misslyckas försök att infoga ett NULL-värde i kolumnen.

column_constraint – Den här satsen specificerar de begränsningar som kommer att definieras på kolumnen. Meningssyntaxen är som följer ( glida 4 ):

Låt oss titta på syftet med parametrarna.

CONSTRAINT är ett valfritt nyckelord följt av namnet på begränsningen på kolumnvärdena (constraint_name). Begränsningsnamn måste vara unika i databasen.

DEFAULT - Anger standardvärdet för kolumnen. Detta värde kommer att användas när du infogar en rad om inget värde uttryckligen anges för kolumnen.

NULL|NOT NULL – nyckelord som tillåter (NULL) eller förbjuder (NOT NULL) lagring av NULL-värden i en kolumn. Om en kolumn inte har ett standardvärde, kommer att infoga en rad med ett okänt värde för kolumnen försöka infoga ett NULL-värde i kolumnen. Om begränsningen NOT NULL anges för kolumnen, kommer försöket att infoga raden att avvisas och användaren kommer att få ett lämpligt felmeddelande.

PRIMÄRNYCKEL – definition av en primärnyckel på en kolumnnivå (dvs den primära nyckeln kommer endast att bestå av värdena i en kolumn). Om det är nödvändigt att bilda en primärnyckel baserad på två eller flera kolumner, måste en sådan integritetsbegränsning anges på tabellnivå. Kom ihåg att endast en primärnyckel kan skapas för varje tabell.

UNIQUE - Anger att en UNIK integritetsbegränsning skapas på en kolumn för att säkerställa att varje enskilt värde i kolumnen är unikt inom den kolumnen. Flera UNIKA integritetsbegränsningar kan skapas på en tabell.

FOREIGN KEY ... REFERENCER – en indikation på att kolumnen kommer att fungera som en främmande nyckel för tabellen vars namn anges med parametern<имя_главной_таблицы>.

(kolumnnamn [,...,n]) – en kolumn eller lista med kommaseparerade kolumner i huvudtabellen som ingår i FOREIGN KEY-begränsningen. Kolumner som ingår i en främmande nyckel kan dock endast referera till primärnyckelkolumner eller kolumner med en tabell UNIQUE-begränsning.

ON DELETE (CASCADE | NO ACTION) – Dessa nyckelord definierar åtgärden som vidtas när en rad raderas från huvudtabellen. Om nyckelordet CASCADE anges, kommer raden i den beroende tabellen också att tas bort när en rad tas bort från huvudtabellen (förälder). Att specificera nyckelordet NO ACTION i ett sådant fall kommer att generera ett fel. Standardvärdet är INGEN ÅTGÄRD.

VID UPPDATERING (CASCADE | INGEN ÅTGÄRD) – Dessa nyckelord definierar de åtgärder som vidtas när en rad i huvudtabellen ändras. Om nyckelordet CASCADE anges, kommer raden i den beroende tabellen också att ändras när en rad från huvudtabellen (förälder) ändras. Användning av nyckelordet NO ACTION i det här fallet kommer att generera ett fel. Standardvärdet är INGEN ÅTGÄRD.

CHECK – en integritetsbegränsning som initierar kontroll av värden som matas in i en kolumn (eller kolumner).

boolean_expression – ett booleskt uttryck som används för CHECK-begränsningen.

Begränsningar på tabellnivå

Kommandosyntaxen CREATE TABLE använder satsen<ограничение_таблицы>, som definierar integritetsbegränsningar på tabellnivå. Meningssyntaxen är som följer (glida 5) .

Syftet med parametrarna sammanfaller med syftet med liknande parametrar i förslaget<ограничение_столбца > . Dock i förslaget<ограничение_таблицы>Det finns några nya alternativ:

kolumnnamn – kolumnen (eller listan över kolumner) som du vill tillämpa vissa integritetsbegränsningar på.

– en metod för att organisera data i ett index. Ett index skapas genom att ange nyckelorden PRIMARY KEY, UNIQUE. När ASC-värdet specificeras kommer data i indexet att ordnas i stigande ordning när DESC-värdet specificeras, kommer data i indexet att ordnas i fallande ordning. Standardvärdet är ASC.

Exempel på tabellskapande

Som ett exempel, överväg instruktionerna för att skapa tabeller i "Session"-databasen:

Tabellen "Studenter" består av följande kolumner:

ID_Student – ​​INTEGER datatyp, unik nyckel;

Group_number - datatyp CHAR, längd 6;

glida 6).

Adress Och Telefon, restriktioner införs INTE NULL

För att skapa tabellen "Disciplines", kommandot (glida 7).

Tabellen innehåller 2 kolumner (ID_Disciplin, namn).

Till kolumner ID_Disciplin, namn restriktioner införs INTE NULL , förbjuder inmatning av en rad om kolumnvärdet är odefinierat.

Kolumn ID_Disciplindeklareras som en primärnyckel och på de värden som anges i kolumnen Namn, ett unikt villkor ställs.

Tabellen Curriculum_Plan innehåller följande kolumner:

ID_Discipline – datatyp INTEGER;

Termin - datatyp INTEGER;

Antal_timmar - datatyp INTEGER;

Tabellen skapades med följande kommando (glida 8).

För kolumnvärden Termin ett logiskt uttryck har formulerats som gör att du bara kan ange värden från 1 till 10.

Tabellen "Summary_statement" består av följande kolumner:

ID_Student – ​​INTEGER datatyp, unik nyckelkolumn;

ID_Plan – INTEGER datatyp, unik nyckelkolumn;

Utvärdering - datatyp INTEGER;

Leveransdatum - datatyp DATETIME;

ID_Teacher - INTEGER datatyp.

Tabellen skapades med följande kommando (glida 9).

Alla tabellkolumner har begränsningar INTE NULL , förbjuder inmatning av en rad om kolumnvärdet är odefinierat.

För kolumnvärden Kvalitet ett logiskt uttryck har formulerats som gör att du bara kan ange värden från 0 till 5: 0 - misslyckande, 1 - godkänt, 2 - otillfredsställande, 3 - tillfredsställande, 4 - bra, 5 - utmärkt.

Och slutligen listar vi kolumnerna "Personal_composition":

ID_Teacher – INTEGER datatyp, unik nyckel;

Efternamn – datatyp CHAR, längd 30;

Namn - datatyp CHAR, längd 15;

Mellannamn - datatyp CHAR, längd 20;

Position - datatyp CHAR, längd 20;

Stol - datatyp CHAR, längd 3;

Adress - datatyp CHAR, längd 30;

Telefon - datatyp CHAR, längd 8.

Tabellen skapades med följande kommando (glida 10).

Till alla tabellkolumner utom kolumner Adress Och Telefon, restriktioner införs INTE NULL , förbjuder inmatning av en rad om kolumnvärdet är odefinierat.

För tabellerna "Curriculum_plan" och "Summary_statement" måste främmande nycklar byggas som länkar "Session"-databastabellerna:

FK_Discipline – en främmande nyckel som länkar samman tabellerna "Curriculum_plan" och "Discipline" med hjälp av kolumnen ID_Discipline;

FK_Personnel_composition – en främmande nyckel som länkar tabellerna "Curriculum_plan" och "Personnel_composition" med kolumnen ID_Teacher;

FK_Student – ​​en främmande nyckel som förbinder tabellerna "Summary_statement" och "Students" med ID_Student-kolumnen;

FK_Plan – en främmande nyckel som länkar tabellerna "Summary_statement" och "Curriculum_plan" efter kolumn ID _Plan.

Vi kommer att överväga att lägga till främmande nycklar till tabeller senare när vi diskuterar kommandots möjligheterÄNDRA TABELL.

17.1.2. Ändra tabellstruktur - kommando ÄNDRATABELL

Oavsett hur noggrant tabellstrukturen planeras, blir det ibland nödvändigt att göra några ändringar i den. Låt oss anta att du behöver lägga till ditt hemtelefonnummer och hemadress i den redan skapade "Lärare"-tabellen. Denna operation kan utföras på olika sätt. Du kan till exempel ta bort en tabell med den gamla strukturen och skapa en ny tabell med önskad struktur istället. Nackdelen med denna metod är att det kommer att bli nödvändigt att kopiera data i tabellen någonstans och skriva om den till en ny tabell efter att den har skapats.

SpecialteamÄNDRA TABELL är avsett att ändra tabellstrukturen. Med dess hjälp kan du ändra egenskaperna för befintliga kolumner, ta bort eller lägga till kolumner i en tabell och hantera integritetsbegränsningar på både kolumn- och tabellnivå, d.v.s. utföra följande funktioner:

Lägg till en ny kolumndefinition i tabellen;

Ta bort en kolumn från en tabell;

Ändra standardvärdet för en kolumn;

Lägg till eller ta bort en tabells primärnyckel;

Lägg till eller ta bort en främmande nyckel till en tabell;

Lägg till eller ta bort ett unikt villkor;

Lägg till eller ta bort ett villkor för ett värde.

Allmän kommandosyntaxÄNDRA TABELL presenteras på bilden (glida 11).

Kommandot ALTER TABLE tar hand om alla åtgärder för att kopiera data till en temporär tabell, ta bort den gamla tabellen, skapa en ny tabell med önskad struktur i dess ställe och sedan skriva om data till den.

Tilldela många kommandoparametrar och nyckelordÄNDRA TABELL liknande till att tilldela motsvarande kommandoparametrar och nyckelord SKAPA BORD (till exempel konstruktionssyntaxen<определение_столбца>sammanfaller med syntaxen för en liknande kommandokonstruktion SKAPA BORD ).

Grundläggande kommandoanvändningslägenÄNDRINGSTABELL är följande:

Lägga till en kolumn;

Ta bort en kolumn;

Kolumn modifiering;

Ändra, lägga till och ta bort begränsningar (primära och främmande nycklar, standardvärden).

Lägga till en kolumn

För att lägga till en ny kolumn bör du använda nyckelordet LÄGG TILL följt av en kolumndefinition.

Låt oss till exempel lägga till kolumnen "Antagningsår" i tabellen "Studenter" (glida 12). Efter att ha utfört detta kommando kommer en annan kolumn att läggas till i Studenttabellstrukturen med ett standardvärde som är lika med det aktuella året (standardvärdet beräknas med två inbyggda funktioner - YEAR() och GETDATE()).

Kolumnändring

Använd nyckelordet för att ändra en befintlig tabellkolumnÄNDRA KOLUMN . Det går inte att ändra kolumnegenskaper om:

kolumnen deltar i PRIMARY KEY eller FOREIGN KEY begränsningar;

kolumnen är föremål för CHECK eller UNIQUE integritetsbegränsningar (undantaget är för kolumner som har en datatyp med variabel längd, dvs. datatyper som börjar med var);

om ett standardvärde är associerat med kolumnen (i vilket fall längden, det totala antalet siffror eller antalet siffror efter decimaltecknet kan ändras, så länge datatypen förblir oförändrad).

När du definierar en ny datatyp för en kolumn, kom ihåg att den gamla datatypen måste konverteras till den nya.

Ett exempel på att ändra kolumnen "Grupp_Number" i tabellen "Studenter" (datatyp INTEGER ersätts av CHAR) ( glida 12).

Ta bort en kolumn

För att ta bort en kolumn från en tabell, använd satsen SLIPP KOLUMN <имя_столбца>. När du tar bort kolumner, tänk på att du inte kan ta bort kolumner med integritetsbegränsningar KONTROLL, UTLÄNDSK NYCKEL, UNIK eller PRIMÄRNYCKEL , såväl som kolumner som har definierade standardvärden (antingen som en integritetsbegränsning på kolumnnivå eller tabellnivå).

Tänk till exempel på kommandot för att ta bort kolumnen "År för inträde" från tabellen "Student" (glida 12).

Detta kommando kommer inte att köras, dvs. ett standardvärde definierades när kolumnen lades till.

Lägga till begränsningar på tabellnivå

För att lägga till begränsningar på tabellnivå, använd klausulen LÄGG TILL BEGRÄNSNING <имя_ограничения>.

Som ett exempel, låt oss titta på kommandona för att lägga till främmande nycklar till sessionsdatabastabellerna (glida 13):

· lägga till främmande nycklar till tabellen "Curriculum_plan" (skapa en relation med namnet FK _Disciplin och kopplingar till namnet FK_ Personal_composition);

· lägga till främmande nycklar till tabellen "Summary_statement" (skapa en relation med namnet FK _Student och kopplingar till namnet FK _Plan).

Genom design LÄGG TILL BEGRÄNSNING en namngiven begränsning skapas. Det bör noteras att borttagning av alla begränsningar på tabellnivå endast sker med dess namn, så begränsningen måste namnges (så att den kan tas bort).

Ta bort restriktioner

För att ta bort en integritetsbegränsning från en tabell, använd satsen SLIPP BEGRÄNSNING <имя_ограничения>.

Att ta bort en integritetsbegränsning är bara möjligt om den är namngiven (dvs. en klausul<определение_ограничения>innehåller namnet på begränsningen BEGRÄNSNING ).

Kommando för att radera en konstruerad främmande nyckel FK _Disciplinen från tabellen "Curriculum_plan" ser ut så här (glida 14).

På rutschkanan ( glida 14) visar borttagningen av den tidigare konstruerade begränsningen på standardvärdet DEF _Gruppnummer.

17.1.3. Ta bort tabeller - kommando SLÄPPATABELL

Att ta bort en tabell görs med kommandot SLÄPP BORD ( glida 14).

Kommandots enda argument anger namnet på tabellen som ska raderas.

Åtgärden att ta bort en tabell i vissa fall kräver viss uppmärksamhet. Det går inte att släppa en tabell om det finns en integritetsbegränsning på den FRÄMMANDE NYCKEL en annan tabell refereras: ett försök att ta bort tabellen "Disciplines" kommer att orsaka ett felmeddelande, eftersom disciplintabellen refereras av tabellen "Curriculum_plan".

17.2. Datahantering

Syftet med alla databashanteringssystem är ytterst att mata in, ändra, ta bort och hämta data. Låt oss titta på datahanteringsmetoder som använder SQL-språket.

17.2.1. Dataextraktion - Kommando VÄLJ

Huvudverktyget för att hämta data i SQL-språket är kommandot VÄLJ . Med detta kommando kan du komma åt data som presenteras som en samling tabeller av nästan vilken komplexitet som helst.

Den vanligaste förenklade versionen av kommandot är VÄLJ , som har följande syntax (glida 15).

SELECT-sats är uppdelad i separata sektioner, som var och en har sitt eget syfte. Av den givna syntaxbeskrivningen är det tydligt att endast avsnitten är obligatoriska VÄLJ och FRÅN , och de återstående avsnitten kan utelämnas. Den fullständiga listan över avsnitt finns på bilden (glida 15).

VÄLJ avsnitt

Huvudsyftet med avsnittet VÄLJ (en av de två obligatoriska sektionerna som måste anges i valfri fråga) - ange en uppsättning kolumner som returneras efter att frågan har exekveras, dvs. resultatets utseende. I det enklaste fallet returneras en kolumn från en av tabellerna som deltar i frågan. I mer komplexa situationer bildas en uppsättning värden i en kolumn som ett resultat av att utvärdera ett uttryck. Dessa kolumner kallas beräknade kolumner och får inget namn som standard.

Om det behövs kan användaren ange ett anpassat namn för kolumnen som returneras efter att frågan har utförts. Detta namn kallas en pseudonym ( alias ). I normala situationer är det inte nödvändigt att tilldela ett alias, men i vissa fall krävs en uttrycklig indikation på det. Detta krävs oftast när man arbetar med en sektion IN I där var och en av de returnerade kolumnerna måste ha ett namn och det namnet måste vara unikt.

Utöver ovanstående använder du avsnittet VÄLJ Du kan begränsa antalet rader som ska inkluderas i provresultatet. Sektionssyntax VÄLJ nästa ( glida 16).

Låt oss titta på syftet med parametrarna.

Nyckelord ALLA | DISTINKT. När du anger ett nyckelord ALLT frågeresultatet visas Allt rader som uppfyller de formulerade villkoren, vilket gör det möjligt att inkludera identiska rader i resultatet (likheten mellan rader bestäms på nivån för urvalsresultatet och inte på nivån för källdata). Parameter ALLT är standard.

Om i en SELECT-fråga nyckelordet anges DISTINKT , kommer provresultatet inte att innehålla mer än en dubblettrad. På så sätt blir varje rad som returneras unik. En rads unika karaktär bestäms på radnivån i provresultatet och inte på nivån för källdata. Om två kolumner ingår i provresultatet, kommer unikheten att bestämmas av värdena för båda dessa kolumner. Individuellt kan värdena i den första och andra kolumnen upprepas, men kombinationen av värden i båda kolumnerna måste vara unik. Liknande regler gäller för fler kolumner.

Tänk på resultatet av att använda sökord ALLA och SÄRSKILDA med exemplet att välja kolumnerna Termin och Rapportering från tabellen "Curriculum_plan" i databasen "Session" ( glida 17 ). Låt oss först köra en fråga som anger nyckelordet ALLT . Ett fragment av resultatet presenteras på bilden. Låt oss nu ersätta nyckelordet ALLT FÖR ATT SÄRSKILDA . I det här fallet är frågeresultatet som presenteras på bilden rader som innehåller samma värden i kolumnerna, endast inkluderade en gång. Detta resultat bör endast indikera förekomsten av olika former av rapportering under terminer.

NyckelordTOP n. Genom att använda nyckelordet TOP n, där n är ett numeriskt värde, kan du välja inte alla rader som ett resultat, utan bara det första n. Detta väljer de första raderna i provresultatet, inte originaldata. Därför kan uppsättningen rader som blir resultatet av valet när TOP-nyckelordet anges variera beroende på sorteringsordningen. Om begäran använder ett avsnitt VAR , så fungerar nyckelordet TOP på den uppsättning rader som returneras efter tillämpning av det booleska villkoret som definieras i avsnitt VAR.

Låt oss demonstrera användningen av nyckelordet TOP (glida18 )

I detta exempel från tabellen Studenter databasen "Session" de första 5 raderna valdes.

Du kan också välja inte ett fast antal rader, utan en viss procentandel av alla rader som uppfyller villkoret. För att göra detta måste du lägga till ett nyckelord PROCENT.

Det fanns 115 rader i tabellen, så 10 % skulle vara 11,5 rader. Resultatet blir 12 rader.

Om den angivna radprocenten är ett icke-heltal, avrundar servern alltid uppåt.

Vi ger också ett exempel som visar effekten av sorteringsordning på den returnerade uppsättningen rader (glida19 ).

När det anges tillsammans med ett erbjudande SORTERA EFTER nyckelord MED SLIPSAR resultatet kommer också att inkludera rader som matchar värdet på sorteringskolumnen med de senast visade frågeraderna VÄLJ TOP n [PERCENT].

Använda ett nyckelord MED SLIPSAR i det föregående exemplet kommer att säkerställa att, som svar på en begäran, information om alla elever i den första gruppen tillhandahålls (glida20 ).

Erbjudande<Список_выбора>. Meningssyntax<Список_выбора>Nästa (glida 21).

Symbolen "*" betyder att resultatet inkluderar alla kolumner i listan med partitionstabeller FRÅN.

Om resultatet inte behöver inkludera alla kolumner alla tabeller, kan du uttryckligen ange namnet på objektet från vilket du vill välja alla kolumner (<Имя_таблицы>.* eller<Tabellalias>.*).

En separat tabellkolumn ingår i urvalsresultatet genom att explicit ange kolumnnamnet (parameter<Имя_столбца>). Kolumnen måste tillhöra en av tabellerna som anges i FROM-satsen. Om en kolumn med det angivna namnet finns i mer än en datakälla som anges i FROM-satsen, måste du uttryckligen ange namnet på den datakälla som kolumnen tillhör i formatet<Имя_таблицы>.<Имя_столбца>.Annars kommer ett felmeddelande att visas.

Låt oss till exempel försöka välja data från kolumnen ID_Discipline, som är tillgänglig i tabellerna "Discipline" och "Curriculum":

Ett felmeddelande kommer att returneras som indikerar att namnet 'ID_Discipline' inte används korrekt.

Det vill säga, i det här fallet måste du uttryckligen ange namnet på datakällan som kolumnen tillhör, till exempel:

Kolumner som returneras som frågeresultat kan ges alias. Alias ​​låter dig ändra namnet på den ursprungliga kolumnen eller namnge den kolumn vars innehåll erhålls som ett resultat av att utvärdera ett uttryck. Aliasnamnet anges med parametern<Псевдоним_столбца>. Nyckelordet AS är valfritt när du anger ett alias. I allmänhet kräver inte servern unika kolumnnamn för ett exempelresultat, så olika kolumner kan ha samma namn eller alias.

Kolumnerna som blir resultatet av urvalet kan inte bara vara en kopia av en kolumn från en av källtabellerna, utan också bildas utifrån beräkningen av ett uttryck. En sådan kolumn i urvalslistan anges med konstruktionen<Выражение> [ <Псевдоним_столбца>]. Uttrycket kan innehålla konstanter, kolumnnamn, funktioner och kombinationer därav. Dessutom kan du tilldela ett alias till kolumnen som bildas baserat på beräkningen av uttrycket genom att ange det med parametern<Псевдоним_столбца>. Som standard har en beräknad kolumn inget namn.

Ett annat sätt att bilda en beräknad kolumn är att använda ett likhetstecken:<Псевдоним_столбца> = <Выражение>. Den enda skillnaden mellan den här metoden och den tidigare är kravet att ange ett alias. I det enklaste fallet är uttrycket ett kolumnnamn, konstant, variabel eller funktion. Om uttrycket är ett kolumnnamn får vi ett annat sätt att ställa in ett alias för en kolumn.

Betrakta följande exempel. Anta att du för tabellen "Studenter" behöver bygga en fråga som representerar efternamn, förnamn och patronym i en kolumn. Genom att använda operationen för sammanlänkning (tillägg) av teckensträngar och värdet på det fullständiga namnet som ett kolumnalias, kommer vi att bygga en fråga ( glida 22 ).

FRÅN sektion

Använder avsnittet FRÅN vilka datakällor som frågan kommer att fungera med bestäms.

Sektionssyntax FRÅN nästa ( glida23 )

Vid första anblicken ser sektionsdesignen enkel ut. Men vid närmare granskning visar det sig vara ganska komplicerat. Arbetar främst med sektionen FRÅN Detta är en kommaseparerad lista över datakällor som frågan ska fungera med. Den faktiska datakällan anges med hjälp av en klausul<Источник_данных>, vars syntax presenteras på bilden.

Använder parametern<имя_таблицы>namnet på en vanlig tabell anges. Parameter<псевдоним_таблицы>används för att tilldela ett alias till tabellen under vilket det måste refereras till i en fråga. Tabellalias används ofta för att göra länken till önskad tabell mer bekväm och kort. Till exempel, om frågan ofta nämner tabellnamnet "Curriculum_plan", kan du använda ett alias, till exempel, tpl . Ange ett nyckelord SOM är inte obligatoriskt.

WHERE klausul

WHERE klausul är avsedd för att införa vertikala filter på data som behandlas av begäran. Med andra ord, med hjälp av avsnittet VAR du kan begränsa uppsättningen rader som ingår i provresultatet. För att göra detta, ange ett logiskt villkor som avgör om raden ska inkluderas i frågevalet eller inte. En rad inkluderas i hämtningsresultatet endast om det booleska uttrycket returnerar ett värde SANN.

I allmänhet innehåller ett booleskt uttryck namnen på tabellkolumnerna som frågan fungerar på. För varje rad som returneras av frågan utvärderas ett booleskt uttryck genom att kolumnnamnen ersätts med specifika värden från motsvarande rad. Om ett uttryck evaluerar att returnera SANN , det vill säga uttrycket är sant, då kommer strängen att inkluderas i slutresultatet. Annars ingår inte raden i resultatet. Om det behövs kan du ange mer än ett logiskt uttryck genom att kombinera dem med logiska operatorer ELLER och OCH.

Låt oss titta på avsnittets syntax VAR ( glida 24).

I design<условие_отбора>Du kan definiera vilket logiskt villkor som helst som gör att raden inkluderas i resultatet.

Exemplet som visas på bilden visar logiken i avsnittet. VAR . Som ett resultat kommer en lista över alla studenter som kom in på fakulteten före 2000 att returneras.

Förutom jämförelseoperationer (=, >,<, >=, <=) и логических операторов ELLER, OCH, INTE När ett urvalsvillkor skapas kan ytterligare logiska operatorer användas för att utöka funktionerna för datahantering. Låt oss titta på några av dessa operatörer.

OperatörMELLAN. Med den här operatorn kan du avgöra om värdet för en angiven kvantitet ligger inom ett specificerat område. Syntaxen för att använda operatorn är följande ( glida 25 ).

<Выражение>anger värdet som ska kontrolleras och argumenten<начало_диапазона>Och<конец_диапазона>fastställa de möjliga gränserna för dess förändring. Använda operatören INTE tillsammans med operatören MELLAN låter dig ställa in ett intervall utanför vilket värdet som testas kan ändras.

När du kör uttalandet MELLAN förvandlas till en konstruktion av två jämförelseoperationer.

Låt oss titta på ett exempel på hur du använder operatorn MELLAN ( glida 25). Som ett resultat av att följa instruktionerna kommer vi att få en lista över läroplansdiscipliner med antalet timmar från 50 till 100.

OperatörI. Operatören låter dig ange i urvalsvillkoret en uppsättning möjliga värden för det värde som kontrolleras. Syntaxen för att använda operatorn är följande (glida 26).

<Выражение>indikerar värdet som kontrolleras och argumenten<выражение1>,…, <выражение N > ange med kommaseparerad uppräkning en uppsättning värden som värdet som kontrolleras kan ta. Nyckelord INTE utför logisk negation.

Låt oss titta på ett exempel på hur du använder operatorn I ( glida 26). Som ett resultat av att följa instruktionerna kommer vi att få läroplanslinjer för disciplinerna "Engelska språket" och "Fysisk utbildning".

OperatörTYCKA OM. Använda en operatör TYCKA OM Du kan jämföra ett teckentypsuttryck med ett givet mönster. Operatorsyntaxen är som följer (glida 27).

<Образец>anger ett teckenmönster att jämföra och omges av citattecken. Mönstret kan innehålla avgränsare. Följande avgränsningstecken är tillåtna (glida 27):

% - kan ersättas i ett symboliskt uttryck med valfritt antal godtyckliga tecken;

_ - kan ersättas i ett teckenuttryck av vilket som helst men bara ett tecken;

[ ABC0-9] - kan ersättas i ett teckenuttryck med endast ett tecken från den uppsättning som anges inom hakparenteser (bindestrecket används för att indikera ett intervall);

[^ ABC0-9] - kan ersättas i ett teckenuttryck av endast ett tecken annat än de som anges inom hakparenteser (bindestrecket används för att indikera ett intervall).

Låt oss titta på ett exempel på hur operatorn (glida 27). Genom att använda ett prov för värdet i kolumnen Position i det här fallet kunde vi välja rader med värdena "Senior lärare." och "Prof"

KapitelBESTÄLLAFÖRBI

BESTÄLL EFTER sektion är avsett att organisera den uppsättning data som returneras efter att en fråga har körts. Syntax för hela avsnittet BESTÄLL SENAST ( glida 28).

Parameter<условие_сортировки>kräver att man anger ett uttryck enligt vilket raderna kommer att sorteras. I sitt enklaste fall är detta uttryck namnet på en kolumn från en av frågedatakällorna.

Det bör noteras att uttrycket i enlighet med vilket raderna sorteras också kan använda kolumner som inte är specificerade i SELECT-avsnittet, det vill säga inte ingår i urvalsresultatet.

BESTÄLL EFTER sektion tillåter användning av nyckelorden ASC och DESC, som kan användas för att uttryckligen ange hur strängar ska ordnas. Om du anger nyckelordet ASC kommer data att sorteras i stigande ordning. Om du vill sortera data i fallande ordning, använd nyckelordet DESC. Standard är att sortera i stigande ordning.

Data kan sorteras efter flera kolumner. För att göra detta måste du ange kolumnnamnen separerade med kommatecken i sorteringsordning. Data sorteras först efter kolumnen vars namn angavs först i avsnittet SORTERA EFTER . Sedan, om det finns många rader med samma värde i den första kolumnen, sorteras dessa rader ytterligare efter den andra kolumnen (inom gruppen med samma värde i den första kolumnen), och så vidare.

Här är ett exempel på sortering efter två kolumner (glida 28).

UNION sektion

UNION sektion tjänar till att kombinera urvalsresultat som returneras av två eller flera frågor.

Låt oss titta på avsnittets syntax UNION ( glida 29).

För att kunna tillämpa en join-operation på sökresultat måste de uppfylla följande krav:

frågor måste returnera samma uppsättning kolumner (och det är nödvändigt att garantera samma ordning av kolumner i var och en av frågorna);

datatyperna för motsvarande kolumner i den andra och efterföljande frågorna måste stödja implicit konvertering eller matcha datatypen för kolumnerna i den första frågan;

inget av resultaten kan sorteras med hjälp av ORDER BY-satsen (men det övergripande resultatet kan sorteras, som visas nedan)

Ange ett nyckelord ALLT instruerar att inkludera dubbletter av linjer i resultatet. Som standard ingår inte dubbletter av rader i resultatet.

Låt oss demonstrera användningen av avsnittet UNION . Låt oss titta på tabellerna "Personal_Composition" och "Students" och försöka bygga till exempel en allmän lista över både elever och lärare vars telefonnummer börjar med 120. Låt oss sortera den resulterande listan i alfabetisk ordning genom att lägga till en mening SORTERA EFTER ( glida 29).

När du sammanfogar tabeller får kolumnerna i den resulterande datamängden alltid samma namn som de som angavs i den första frågan du sammanfogar.

1 röst

Välkommen till min bloggsida. Idag ska vi prata om sql-frågor för nybörjare. Vissa webbansvariga kan ha en fråga. Varför lära sig sql? Går det inte att klara sig?

Det visar sig att detta inte kommer att räcka för att skapa ett professionellt internetprojekt. Sql används för att arbeta med databaser och skapa applikationer för WordPress. Låt oss titta på hur du använder frågor mer detaljerat.

Vad det är

SQL är ett strukturerat frågespråk. Designad för att bestämma typen av data, ge tillgång till den och bearbeta information under korta tidsperioder. Den beskriver komponenterna eller några resultat som du vill se på Internetprojektet.

Enkelt uttryckt låter detta programmeringsspråk dig lägga till, ändra, söka och visa information i databasen. Populariteten för mysql beror på att den används för att skapa dynamiska internetprojekt som är baserade på en databas. Därför, för att utveckla en funktionell blogg, måste du lära dig detta språk.

Vad kan jag göra

SQL-språket tillåter:

  • skapa tabeller;
  • ändra för att ta emot och lagra olika data;
  • kombinera information till block;
  • skydda data;
  • skapa förfrågningar i åtkomst.

Viktig! När du väl förstår sql kan du skriva applikationer för WordPress oavsett komplexitet.

Vilken struktur

Databasen består av tabeller som kan presenteras som en Excel-fil.

Den har ett namn, kolumner och en rad med lite information. Du kan skapa sådana tabeller med sql-frågor.

Vad du behöver veta


Nyckelpunkter att lära sig SQL

Som noterats ovan används frågor för att bearbeta och lägga in ny information i en databas som består av tabeller. Varje rad är en separat post. Så låt oss skapa en databas. För att göra detta, skriv kommandot:

Skapa databas 'bazaname'

Vi skriver databasnamnet på latin inom citattecken. Försök att komma på ett tydligt namn för det. Skapa inte en databas som "111", "www" och liknande.

När du har skapat databasen installerar du:

SETNAMN 'utf-8'

Detta är nödvändigt för att innehållet på sajten ska visas korrekt.

Låt oss nu skapa en tabell:

SKAPA TABELL 'bazaname' . 'bord' (

id INT(8) INTE NULL AUTO_INCREMENT PRIMÄRNYCKEL,

log VARCHAR(10),

passera VARCHAR(10),

datum DATUM

På den andra raden skrev vi tre attribut. Låt oss se vad de betyder:

  • NOT NULL-attributet betyder att cellen inte kommer att vara tom (fältet är obligatoriskt);
  • AUTO_INCREMENT-värdet är autokomplettering;
  • PRIMARY KEY - primärnyckel.

Hur man lägger till information

För att fylla fälten i den skapade tabellen med värden används INSERT-satsen. Vi skriver följande kodrader:

INFOGA I "tabell"

(inloggning, pass, datum) VÄRDEN

('Vasa', '87654321', '2017-06-21 18:38:44');

Inom parentes anger vi namnen på kolumnerna, och i nästa - värdena.

Viktig! Upprätthåll konsekvens i kolumnnamn och värden.

Hur man uppdaterar information

För att göra detta, använd kommandot UPDATE. Låt oss se hur du ändrar lösenordet för en specifik användare. Vi skriver följande kodrader:

UPPDATERA 'tabell' SET pass = '12345678' WHERE id = '1'

Ändra nu lösenordet "12345678". Ändringar sker i raden med "id"=1. Om du inte skriver kommandot WHERE kommer alla rader att ändras, inte en specifik.

Jag rekommenderar att du köper boken" SQL för dummies " Med dess hjälp kan du arbeta professionellt med databasen steg för steg. All information är strukturerad enligt principen från enkel till komplex och kommer att uppfattas väl.

Hur man tar bort en post

Om du skrev något fel, korrigera det med kommandot DELETE. Fungerar på samma sätt som UPDATE. Vi skriver följande kod:

DELETE FRÅN 'tabell' WHERE id = '1'

Provtagningsinformation

För att hämta värden från databasen, använd kommandot SELECT. Vi skriver följande kod:

VÄLJ * FRÅN 'tabell' WHERE id = '1'

I det här exemplet väljer vi alla tillgängliga fält i tabellen. Detta händer om du anger en asterisk "*" i kommandot. Om du behöver välja något exempelvärde, skriv detta:

VÄLJ logg , skicka FRÅN tabellen WHERE id = '1'

Det bör noteras att förmågan att arbeta med databaser inte kommer att räcka. För att skapa ett professionellt internetprojekt måste du lära dig hur du lägger till data från en databas till sidor. För att göra detta, bekanta dig med webbprogrammeringsspråket PHP. Det kommer att hjälpa dig med detta cool kurs av Mikhail Rusakov .


Ta bort en tabell

Uppstår med en DROP-begäran. För att göra detta kommer vi att skriva följande rader:

DROP TABLE tabell;

Visar en post från en tabell baserat på ett specifikt villkor

Tänk på den här koden:

VÄLJ ID, land, stad FRÅN tabell VAR personer>150000000

Den kommer att visa register över länder med en befolkning på mer än etthundrafemtio miljoner.

En förening

Det är möjligt att länka flera tabeller tillsammans med Join. Se mer detaljerat hur det fungerar i den här videon:

PHP och MySQL

Än en gång vill jag betona att förfrågningar när man skapar ett internetprojekt är vanliga. För att använda dem i PHP-dokument, följ följande algoritm:

  • Anslut till databasen med kommandot mysql_connect();
  • Med mysql_select_db() väljer vi önskad databas;
  • Vi behandlar begäran med mysql_fetch_array();
  • Stäng anslutningen med kommandot mysql_close().

Viktig! Att arbeta med en databas är inte svårt. Det viktigaste är att skriva begäran korrekt.

Nybörjare webbansvariga kommer att tänka på det. Vad bör du läsa om detta ämne? Jag skulle vilja rekommendera Martin Grabers bok " SQL för enbart dödliga " Det är skrivet på ett sådant sätt att nybörjare kommer att förstå allt. Använd den som uppslagsbok.

Men detta är en teori. Hur fungerar detta i praktiken? I verkligheten måste ett internetprojekt inte bara skapas, utan också föras till toppen av Google och Yandex. Videokursen hjälper dig med detta " Skapande och marknadsföring av webbplatser ».


Videoinstruktion

Har du fortfarande frågor? Se onlinevideon för mer information.

Slutsats

Så att ta reda på hur man skriver sql-frågor är inte så svårt som det verkar, men alla webbansvariga måste göra detta. Videokurserna som beskrivs ovan kommer att hjälpa till med detta. Prenumerera på min VKontakte-grupp att vara den första att veta när ny intressant information dyker upp.