sql-funktion med inputparametre. SQL-strengfunktioner - Eksempler på brug

Indbyggede funktioner SQL designet til at lette og fremskynde databehandlingen. Det særlige er, at de kan angives direkte i udtrykket. Alle indbyggede funktioner kan opdeles i grupper.

Matematiske funktioner:

    ABS(betyder) – returnerer den absolutte værdi af et tal;

    Rund(værdi, nøjagtighed) – returnerer en numerisk værdi afrundet til værdien angivet af argumentet nøjagtighed antal decimaler;

    SKILT(betyder) – returnerer minus, hvis tallet er negativt, og plus ellers;

    STRØM(betydning, grad) – hæver et tal til en potens;

    SQRT(betyder) – udtrækker kvadratroden af ​​et tal;

    LOFT(betyder)– returnerer det nærmeste heltal større end eller lig med værdien;

    - ETAGE(betyder)– returnerer det nærmeste heltal mindre end eller lig med værdien.

String funktioner:

    ASCII(linje) - vender tilbage ASCII kode for det første tegn i linjen;

    CHENR(nummer) – returner tegnet med ASCII kode;

    LEN (linje) – returnerer længden af ​​strengen i tegn, ekskl. mellemrum;

    LTRIMME(linje)/ RTRIM(linje)- fjerner mellemrum i begyndelsen/slutningen af ​​en linje;

    VENSTRE(streng, nummer)/ RLIGE(streng, nummer)– returnerer det angivne argument nummer antal tegn i linjen, startende fra venstre/højre kant;

    SUBSTRING(linje, position, længde) – returnerer en understreng af den specificerede længde fra en streng, startende fra den specificerede position;

    NEDERSTE(linje) /ØVERST(linje) – returnerer en streng konverteret til små/store bogstaver osv.

Funktioner til at arbejde med datoer:

    GETDATE() – returnerer en værdi, der indeholder datoen og klokkeslættet for den computer, som forekomsten af ​​SQL Server kører på;

    DAG(værdi_dato)– returnerer et tal fra den angivne dato;

    MÅNED(værdi_dato)– returnerer månedsnummeret fra den angivne dato;

    ÅR(værdi_dato)– returnerer årsværdien fra den angivne dato;

    DATENANE( del, værdi_dato) – returnerer en tegnstreng, der repræsenterer den angivne del ( Dag, Måned, Timeetc.) fra den angivne dato;

    DATODEL( del, værdi_dato) – returnerer et heltal, der repræsenterer den angivne del ( Dag, Måned, Timeetc.) fra den angivne dato.

Datatypekonverteringsfunktioner

    CAST (betyder SOM datatype)

    KONVERTERE(datatype, betyder)

Argument betyder i funktioner angiver den værdi, der skal konverteres.

7.3. Sprogkommandoer til datadefinition

Data Definition Language indeholder kommandoer, der bruges til at oprette, ændre og slette en database og dens objekter.

Oprettelse af et bord

Oprettelse af en ny tabel udføres med kommandoen OPRET TABEL. Kommandoen beskriver strukturen i tabellen, hver kolonne i tabellen og de integritetsbegrænsninger, der skal indstilles på tabellen.

Kommandosyntaks:

OPRET TABEL tabelnavn (( kolonnebeskrivelse |beregnet_kolonne_navn SOM udtryk | table_level_integrity_constraints) [, ...])

Tabelnavnet er en identifikator på ikke mere end 128 tegn.

En tabel kan indeholde en beregnet kolonne, i hvilket tilfælde værdien af ​​kolonnen bestemmes af et udtryk, der er gemt i tabelstrukturen. En beregnet kolonne kan ikke ændres, så den kan ikke have NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY eller DEFAULT integritetsbegrænsninger.

Syntaksen til at beskrive en tabelkolonne er:

kolonnenavn datatype[(størrelse)]

[(DEFAULT standard_værdi | IDENTITET [(værdi, trin)]}]

[column_level_integrity_constraints]

STANDARD - giver dig mulighed for at angive den værdi, der er tildelt kolonnen i den nyligt tilføjede post.

IDENTITET – angiver, at der oprettes en kolonne, der understøtter automatisk nummerering (tællerkolonne). Der kan kun defineres én tællerkolonne i en tabel. Værdiparameteren angiver startværdien af ​​tælleren, og trinparameteren angiver trintrinnet. Hvis disse parametre ikke er angivet, har de værdien 1. IDENTITY kan kun angives for de kolonner, der er af heltals- eller decimaltyper. Det er ikke tilladt at indsætte værdier i IDENTITY-kolonnen.

Der er to grupper af integritetsbegrænsninger, der behandles af DBMS:

Deklarative integritetsbegrænsninger, som erklæres, når en tabel oprettes eller ændres;

Proceduremæssige integritetsbegrænsninger, der behandles af triggere.

Deklarative integritetsbegrænsninger kan være begrænsninger på tabelniveau eller begrænsninger på tabelniveau. Begrænsninger på kolonneniveau gælder kun for én kolonne. Hver deklarativ integritetsbegrænsning kan gives et navn.

Definitioner af begrænsninger på kolonneniveau har følgende syntaks:

((PRIMÆR NØGLE | UNIK | IKKE NULL) |UDLANDSKE NØGLEREFERENCER tabelnavn( kolonnenavn)

|check boolean_expression)

Navnet på dataintegritetsbegrænsningen skal være unikt i databasen. Lad os se på de begrænsninger, der kan defineres på kolonneniveau:

PRIMÆR NØGLE primær nøgle begrænsning. Alle tabel primære nøgleværdier skal være unikke og forskellige fra Null. En tabel kan kun have én primær nøgle. Hvis den er sammensat, er integritetsbegrænsninger på den primære nøgle angivet på tabelniveau;

Begrænsninger for unikheden af ​​en UNIK kolonneværdi. Det betyder, at en tabel ikke kan have to poster, der har samme værdi i den kolonne;

EN NOT NULL-begrænsning, der forbyder lagring af en NULL-værdi i en kolonne;

FOREIGN KEY fremmed nøgle begrænsning (referentiel integritet begrænsning). For en kolonne, der er en fremmednøgle, angiver REFERENCES navnet på den tabel, som relationen etableres til, og navnet på kolonnen i den tabel, hvor relationen skal etableres. Denne tabel er hovedtabellen (overordnet) i forhold til den tabel, der oprettes. Hovedtabelkolonnen, hvis værdier sammenkædes, skal have en PRIMARY KEY-begrænsning.

Hvis nøglen til en ekstern tabel består af flere felter, skal FOREIGN KEY-begrænsningen angives på tabelniveau. I dette tilfælde skal du liste alle de kolonner, der er inkluderet i fremmednøglen, angive navnet på hovedtabellen og navnene på kolonnerne i hovedtabellen, der refereres til af fremmednøglen.

Referenceintegritet etablerer regler for tilføjelse og ændring af data i en tabel ved hjælp af en fremmednøgle og dens tilsvarende primærnøglebegrænsning. Klausulerne ON UPDATE og ON DELETE for en fremmednøgle definerer følgende regler for ændring af relaterede data:

INGEN HANDLING - giver dig mulighed for kun at ændre (slette) de værdier i hovedtabellen, der ikke har tilsvarende fremmednøgleværdier i undertabellen. Denne regel er i kraft som standard;

CASCADE betyder, at hver fremmednøgleværdi i en undertabel automatisk vil blive ændret (slettet), når den primære nøgleværdi for den overordnede tabel ændres;

SET NULL betyder, at hvis den primære nøgle i den overordnede tabel ændres (slettet), i alle referencerækker i den underordnede tabel, vil fremmednøgleværdierne automatisk blive tildelt NULL-værdier;

SET DEFAULT betyder, at hvis den primære nøgle i den overordnede tabel ændres (slettet), i alle referencerækker i den underordnede tabel, vil fremmednøgleværdierne automatisk blive tildelt standardværdier.

Lad os supplere eksemplet med uddannelsesdatabasen "Universitetet", hvis design blev diskuteret i kapitel. 4.3 tabeller DISCIPLINE og GENEREL RAPPORT. Tabel 6 og 7 beskriver den logiske opbygning af tabellerne.

Tabel 6

Logisk struktur af DISCIPLINE informationsobjektet

Tabel 7

Logisk struktur af informationsobjektet GENEREL UDTALELSE

Nøgleskilt

Feltformat

Navn

Nøjagtighed

Rekordbogsnummer

Registreret elevbogsnummer

tekst

Disciplinkodeks

Disciplinkodeks

Numerisk

Langt heltal

numerisk

Lad os præsentere anmodninger om oprettelse af tabeller i overensstemmelse med den, der er vist i fig. 35 inologisk databasemodel.

Ris. 35. Databaseordning "Universitetet"

Som det fremgår af databaseskemaet, er FACULTY-tabellen en uafhængig tabel, så den oprettes først. Anmod om at oprette en tabel under hensyntagen til beskrivelsen af ​​den logiske struktur i tabellen. 4 (s.61) vil se sådan ud:

OPRET TABEL fakultet

([afdelingsnummer] tinyint PRIMARY KEY , [afdelingsnavn] char(50))

SPECIALTY-tabellen er også uafhængig; vi opretter den som nummer to. Når du opretter en forespørgsel, bruger den beskrivelsen af ​​den logiske struktur i tabellen. 5 (s.62).

OPRET TABEL [speciale] (

[specialnummer] int PRIMÆR NØGLE,

[specialenavn] char (60),

[udgifter til uddannelse])

GRUPPE-tabellen er en tabel afhængig af FAKULTET og SPECIALITET. Vi bruger tabel 3 (s. 61) ved oprettelse af en forespørgsel og tager højde for, at kolonnerne fakultetsnummer Og specialenummer er fremmednøgler:

OPRET TABEL [gruppe] (

[gruppenummer] smallint PRIMÆR NØGLE,

[specialnummer] int FOREIGN KEY REFERENCES specialty( nummer særlig- ness)PÅ SLET KASCADE PÅ OPDATERING CASCADE,

[fakultetsnummer] tinyint UDENLANDSKE NØGLEREFERENCER fakultet( nummer fakultet) PÅ SLET CASCADE PÅ UPDADE CASCADE, [kursusnummer] tinyint)

STUDENT-tabellen er en GRUPPE-afhængig tabel. Baseret på dataene i tabel 2 (s. 60) vil vi oprette en forespørgsel. Vi tager også højde for, at kolonnen gruppenummer er fremmednøgler:

OPRET TABEL [elev] (

[gruppenummer] smallint NOT NULL UDENLANDSKE NØGLEREFERENCER gruppe( nummer grupper) ,

[efternavn] char(15) IKKE NULL ,

[fødselsdato] datetime NOT NULL ,

[kommerciel] bit IKKE NULL ,

[registreringsnavn] char(9))

Dataene i tabellen GENEREL RAPPORT afhænger af STUDENT- og DISCIPLINEtabellerne. I denne tabel er den primære nøgle sammensat, og hver af de primære nøglekolonner er en fremmednøgle (se tabel 7 og figur 35).

Lad os bruge beskrivelsen af ​​den logiske struktur af disciplintabellen givet i tabel 6 og oprette en forespørgsel:

OPRET TABEL [disciplin] (

[disciplinkode] int PRIMÆR NØGLE,

[disciplinnavn] char(50))

Nu kan du oprette en forespørgsel for at oprette den generelle erklæringstabel. Da den primære nøgle i en tabel er sammensat, skal PRIMARY KEY-begrænsningen angives på tabelniveau. Lad os f.eks. indstille FOREIGN KEY-restriktioner også på tabelniveau. Anmodningen vil se sådan ud:

OPRET TABEL [generel erklæring] (

[disciplinkode] int,

[karakterbogsnummer] char(8),

[karakter] IKKE NULL , PRIMÆR NØGLE ([disciplinkode],[karakterbogsnummer]), UDENLANDSKE NØGLE ([disciplinkode]) REFERENCER [disciplin] ([disciplinkode]), UDENLANDSKE NØGLE ([karakterbogsnummer]) REFERENCER [elev] ([karakterbogsnummer]))

Ændring af tabelstrukturen

Ændring af tabelstrukturen udføres med kommandoen ALTER TABLE. Ved hjælp af kommandoen kan du ændre egenskaberne for eksisterende kolonner, slette dem eller tilføje nye kolonner til tabellen og administrere integritetsbegrænsninger både på kolonneniveau og på tabelniveau. Betydningen af ​​mange af parametrene og nøgleordene er den samme som de tilsvarende parametre og nøgleord i CREATE TABLE-kommandoen.

Sletning af en tabel

Sletning af en tabel sker ved hjælp af kommandoen DROP TABLE. Kommandosyntaks:

DROP TABEL bord

For eksempel ser en anmodning om at slette STUDENT-tabellen sådan ud:

DROP TABEL Elev

Når du sletter en tabel, BØR du tage hensyn til de relationer, der er etableret i databasen mellem tabellerne. Hvis den tabel, der slettes, henvises til af en anden tabel, der bruger FOREIGN KEY-integritetsbegrænsningen, vil DBMS ikke tillade dens sletning.

Oprettelse af et indeks

Indekser bruges til at fremskynde adgangen til specifikke data i en databasetabel. Et indeks er en struktur, der organiserer værdierne i en eller flere kolonner i en databasetabel, såsom kolonnen Efternavne i STUDENT-tabellen. Hvis du søger efter en bestemt elev ved efternavn, hjælper indekset dig med at få de oplysninger, du har brug for, hurtigere end at søge gennem alle rækker i tabellen.

Et indeks giver pointere til dataværdier gemt i specifikke kolonner i en tabel og arrangerer disse pointere i henhold til en specificeret sorteringsrækkefølge. At søge efter data i en tabel ved hjælp af et indeks svarer til at søge i et indeks i en bog. Først søges indekset efter en bestemt værdi, og derefter navigeres den tilsvarende markør til rækken, der indeholder værdien.

Indekset oprettes ved hjælp af CREATE INDEX kommandoen:

OPRET INDEKS

Navn_ indeks ON navn _tabeller(kolonne [,...])

hvor UNIQUE angiver, at indekset kun skal gemme unikke værdier.

Et indeks kan oprettes på en eller flere kolonner (sammensat indeks). Sammensatte indekser giver dig mulighed for at skelne mellem poster, der har de samme værdier i samme kolonne.

Eksempel: Opret et sammensat indeks på STUDENT-tabellen for felterne Efternavn og Fødselsdato

OPRET INDEKS Ind_Fam TIL

Elev(Efternavn, [fødselsdato] DESC)

Du bør kun oprette et indeks på en tabel, hvis du forventer ofte at forespørge dataene i de indekserede kolonner. Indekser optager diskplads og forsinker tilføjelse, sletning og opdatering af rækker.

Fjernelse af et tabelindeks

DROP-kommandoen fjerner et indeks fra en tabel. Syntaksen for DROP-kommandoen til at fjerne et indeks er:

DROP INDEKS indeksbord

Før du kan fjerne et indeks fra en tabel eller selve tabellen, skal du lukke tabellen.

Eksempel: Fjern indeks Ind_Fam fra tabel STUDENT

DROP INDEX Ind_Fam ON Student

Tabel 8.2. SQL matematiske funktioner
Matematisk funktion Beskrivelse
ABS(X) Returnerer den absolutte værdi af tallet X
ACOS (X) Returnerer buecosinus af X
ASIN(X) Returnerer arcsinus for tallet X
ATAN(X) Returnerer arctangensen af ​​X
COS(X) Returnerer cosinus af tallet X
EXP(X) Returnerer eksponenten af ​​X
TEGN(X) Returnerer -1 hvis X<0,0, если Х=0, +1 , если Х>0
LN(X) Vender tilbage naturlig logaritme numrene X
MOD(X,Y) Returnerer resten, når X divideres med Y
CEIL (X) Returnerer det mindste heltal større end eller lig med X
RUND(X,n) Afrunder tallet X til et tal med n decimaler
SIN(X) Returnerer sinus af X
SQRT(X) Returnerer kvadratroden af ​​et tal X
TAN(X) Returnerer tangenten til X
ETAGE (X) Returnerer det største heltal mindre end eller lig med X
LOG(a,X) Returnerer logaritmen af ​​X til grundtal A
SINH(X) Returnerer den hyperbolske sinus af X
COSH(X) Returnerer den hyperbolske cosinus af X
TANH(X) Returnerer den hyperbolske tangens af X
TRANS(X;n) Afkorter tallet X til et tal med n cifre efter decimalkommaet
POWER(A,X) Returnerer værdien af ​​A hævet til potensen af ​​X

Sættet af indbyggede funktioner kan variere afhængigt af versionen af ​​DBMS fra én producent og også i DBMS'er fra forskellige producenter. For eksempel i SQLBase DBMS, Century Inc. Der er en funktion @ATAN2(X,Y), der returnerer arctangensen af ​​Y/X, men der er ingen funktion SIGN(X) .

Aritmetiske udtryk er nødvendige for at opnå data, der ikke er direkte lagret i kolonnerne i databasetabeller, men hvis værdier er påkrævet af brugeren. Lad os sige, at du har brug for en liste over medarbejdere, der viser den løn, hver medarbejder har modtaget, inklusive bonusser og bøder.

VÆLG ENAME, SAL, COMM, FINE, SAL + COMM - FINE FRA MEDARBEJDER ORDRE AF DEPNO;

Det aritmetiske udtryk SAL + COMM - FINE udlæses som en ny kolonne i resultattabellen, som beregnes som et resultat af forespørgslen. Sådanne kolonner kaldes også afledte (beregnede) attributter eller felter.

Stringbehandlingsfunktioner

SQL giver dig en bred vifte af funktioner til at manipulere strengdata (strengsammenkædning, CHR, LENGTH, INSTR og andre). En liste over de vigtigste funktioner til behandling af strengdata er givet i tabel 8.3.

Tabel 8.3. SQL-funktioner til strengbehandling
Fungere Beskrivelse
CHR(N) Returnerer ASCII-kodetegnet for decimalkode N
ASCII(S) Returnerer decimal ASCII-koden for det første tegn i en streng
INSTR(S2.S1.pos[,N] Returnerer positionen af ​​streng S1 i streng S2 større end eller lig med pos.N - antal forekomster
LÆNGDE(R) Returnerer længden af ​​en streng
NEDRE Erstatter alle tegn i en streng med store bogstaver
INITCAP(S) Indstiller det første tegn i hvert ord i en streng til store bogstaver og de resterende tegn i hvert ord til store bogstaver
SUBSTR(S,pos,[,len]) Vælger en understreng af længden len i strengen S, startende ved position pos
ØVRE Konverterer store bogstaver i en streng til store bogstaver
LPAD(S,N[,A]) Returnerer strengen S venstre polstret med A op til N tegn. Tegn - standardfyldstof - mellemrum
Rpad(S,N[,A]) Returnerer strengen S, udfyldt til højre med tegnene A, til antallet af tegn N. Tegn - standardfyldstof - mellemrum
LTRIM(S,) Returnerer den venstre trunkerede streng S. Tegn fjernes, så længe tegnet, der fjernes, er inkluderet i strengen - mønster S1 (standard - mellemrum)
RTRIM(S,) Returnerer den højre trunkerede streng S. Tegn fjernes, så længe tegnet, der fjernes, er inkluderet i strengen - mønster S1 (standard - mellemrum
OVERSÆT(S,S1,S2) Returnerer strengen S med alle forekomster af streng S1 erstattet af streng S2. Hvis S1<>S2 , så er tegn, der ikke matcher, udelukket fra den resulterende streng
ERSTAT(S,S1,[,S2]) Returnerer strengen S, for hvilken alle forekomster af strengen S1 er erstattet af understrengen S2. Hvis S2 ikke er specificeret, fjernes alle forekomster af understrengen S1 fra den resulterende streng
NVL(X,Y) Hvis X er NULL , returnerer Y enten en streng, et tal eller en dato, afhængigt af den oprindelige type Y

Navnene på de samme funktioner kan være forskellige i forskellige DBMS'er. For eksempel kaldes Oracle DBMS-funktionen SUBSTR(S, pos, [, len]) i SQLBase DBMS @SUBSTRING(S, pos, len) . SQLBase DBMS har funktioner, der ikke er tilgængelige i Oracle DBMS (se.

Hovedfunktionaliteten af ​​SQL-sproget er angivet nedenfor.

Definition af data. Denne SQL-funktion er en beskrivelse af strukturen af ​​de understøttede data og organiseringen af ​​relationelle relationer (tabeller). Operatører til at oprette en database, oprette tabeller og få adgang til data er beregnet til at implementere den.

Database oprettelse. For at oprette en ny database skal du bruge CREATE DATABASE-sætningen. Udsagnsstrukturen angiver navnet på den database, der skal oprettes.

Oprettelse af tabeller. Basistabellen oprettes ved hjælp af CREATE TABLE-sætningen. Denne sætning angiver feltnavne, datatyper for dem og længde (for nogle datatyper). SQL bruger følgende datatyper:

HELTAL – heltal;

CHAR – tegnværdi;

VARCHAR – tegnværdi, kun ikke-blanke tegn gemmes;

DECIMAL – decimaltal;

FLOAT – flydende kommanummer;

DOBBELT PRÆCISION – dobbelt præcision flydende komma;

DATETIME – dato og klokkeslæt;

BOOL – Boolesk værdi.

Tabelloprettelseserklæringen specificerer begrænsninger for kolonneværdier og på tabellen. Mulige begrænsninger er vist i tabel. 4.8

Tabel 4.8 Begrænsninger på definerede data

For en relationel datamodel er det vigtigt at angive en fremmednøgle (FOREIGNKEY). Når du erklærer fremmede nøgler, skal du pålægge passende begrænsninger på kolonnen, for eksempel IKKE NULL.

I en SQL-sætning angiver CHECK semantiske begrænsninger, der sikrer dataintegritet, såsom begrænsning af sættet af gyldige værdier for en bestemt kolonne.

Du kan ikke bruge sætningen create table mere end én gang på den samme tabel. Hvis der efter oprettelsen opdages unøjagtigheder i dens definition, kan ændringer foretages ved hjælp af ALTER TABLE-sætningen. Denne erklæring er designet til at ændre strukturen af ​​en eksisterende tabel: du kan fjerne eller tilføje et felt til en eksisterende tabel.

Datamanipulation. SQL giver en bruger eller et applikationsprogram mulighed for at ændre indholdet af en database ved at indsætte nye data, slette eller ændre eksisterende data.

Indsættelse af nye data er en procedure til tilføjelse af rækker til en database og udføres ved hjælp af INSERT-sætningen.

Dataændring involverer ændringer af værdier i en eller flere kolonner i en tabel og udføres ved hjælp af en UPDATE-sætning. Eksempel:

SET beløb=beløb+1000,00

WHERE beløb>0

Fjernelse af rækker fra en tabel ved hjælp af DELETE-sætningen. Operatørsyntaksen er:

FRA bordet

WHERE-sætningen er valgfri, men hvis den ikke er inkluderet, vil alle poster i tabellen blive slettet. Det er nyttigt at bruge SELECT-sætningen med samme syntaks som DELETE-sætningen for at forhåndstjekke, hvilke poster der vil blive slettet.

Sikring af dataintegritet. SQL-sproget giver dig mulighed for at definere ret komplekse integritetsbegrænsninger, hvis tilfredshed vil blive kontrolleret for alle databaseændringer. Overvågning af resultaterne af transaktioner, behandlingsfejl, der opstår, og koordinering af parallelt arbejde med databasen for flere applikationer eller brugere leveres af COMMIT (registrerer den vellykkede gennemførelse af den aktuelle transaktion og begyndelsen af ​​en ny) og ROLLBACK (behovet for en rollback - automatisk gendannelse af databasetilstanden til begyndelsen af ​​transaktionen) operatører.

Datasampling er en af ​​de vigtigste databasefunktioner, der svarer til SELECT-sætningen. Et eksempel på brug af operatøren blev diskuteret i det foregående afsnit.

I SQL kan du oprette indlejrede sekvenser af forespørgsler (underforespørgsler). Der er visse typer forespørgsler, der bedst implementeres ved hjælp af underforespørgsler. Disse forespørgsler omfatter såkaldte eksistenstjek. Lad os antage, at du ønsker at få data om elever, der ikke har en syv-punktskarakter. Hvis et tomt sæt returneres, betyder det kun én ting - hver elev har mindst én sådan karakter.

Sammenkædning af tabeller. SQL-sætninger giver dig mulighed for at hente data fra mere end én tabel. En måde at gøre dette på er at sammenkæde tabeller ved hjælp af et fælles felt.

SELECT-sætningen skal indeholde en begrænsning for at matche værdierne i en bestemt kolonne (felt). Derefter hentes kun de rækker, hvor værdierne af den angivne kolonne matcher, fra de relaterede tabeller. Kolonnenavnet er kun angivet sammen med tabelnavnet; ellers vil udsagnet være tvetydigt.

Du kan bruge andre typer tabellinkning: INTER JOIN-operatøren (indre joinforbindelse) sikrer, at det resulterende sæt af poster indeholder matchende værdier i relaterede felter. Outer joins (OUTER JOIN) giver dig mulighed for at inkludere alle rækkerne fra en tabel og de tilsvarende rækker fra en anden i forespørgselsresultatet

Adgangskontrol. SQL sikrer synkronisering af databasebehandling af forskellige applikationsprogrammer, hvilket beskytter data mod uautoriseret adgang.

Dataadgang i et flerbrugermiljø styres ved hjælp af GRANT- og REVOKE-sætninger. I hver sætning er det nødvendigt at specificere brugeren, objektet (tabel, visning), som tilladelserne er sat i forhold til, og selve tilladelserne. For eksempel giver GRANT-sætningen bruger X mulighed for at hente data fra PRODUCT-tabellen:

TILDEL UDVALG PÅ PRODUKT TIL X

REVOKE-erklæringen tilbagekalder alle tidligere tildelte tilladelser.

Indlejring af SQL i applikationsprogrammer. Rigtige applikationer er normalt skrevet på andre sprog, der genererer SQL-kode og sender den til DBMS som ASCII-tekst.

IBM-standarden for SQL-produkter regulerer brugen af ​​det indbyggede SQL-sprog. Når du skriver et applikationsprogram, er dets tekst en blanding af kommandoer fra hovedprogrammeringssproget (for eksempel C, Pascal, Cobol, Fortran, Assembler) og SQL-kommandoer med et særligt præfiks, for eksempel. ExecSQL. Strukturen af ​​SQL-sætninger er blevet udvidet til at rumme værtssprogvariabler i en SQL-konstruktion.

SQL-processoren ændrer programtypen i overensstemmelse med kravene fra compileren af ​​hovedprogrammeringssproget. Compilerens funktion er at oversætte (oversætte) et program fra kildeprogrammeringssproget til et sprog tæt på maskinsproget. Efter kompilering er applikationsprogrammet (applikationen) et selvstændigt modul.

SQL-dialekter

Moderne relationelle DBMS'er bruger dialekter af SQL-sproget til at beskrive og manipulere data. En delmængde af SQL-sproget, der giver dig mulighed for at oprette og beskrive en database, kaldes DDL (Data Definition Language).

Til at begynde med hed SQL-sproget SEQUEL (Structured English Query Language), derefter SEQUEL/2 og derefter blot SQL. I dag er SQL de facto standarden for relationelle DBMS'er.

Den første sprogstandard dukkede op i 1989 - SQL-89 og blev understøttet af næsten alle kommercielle relationelle DBMS'er. Den var af generel karakter og genstand for bred fortolkning. Fordelene ved SQL-89 kan betragtes som standardiseringen af ​​operatørernes syntaks og semantik til sampling og datamanipulation, såvel som fikseringen af ​​midler til at begrænse databasens integritet. Det manglede dog en så vigtig sektion som databaseskemamanipulation. Ufuldstændigheden af ​​SQL-89-standarden førte til fremkomsten i 1992. den næste version af SQL-sproget.

SQL2 (eller SQL-92) dækker næsten alle de nødvendige spørgsmål: manipulation af databaseskemaer, transaktions- og sessionsstyring, understøttelse af klient-server-arkitekturer eller applikationsudviklingsværktøjer.

Næste trin i udviklingen af ​​sproget er versionen af ​​SQL 3. Denne version af sproget suppleres af en triggermekanisme, definitionen af ​​en vilkårlig datatype og en objektudvidelse.

I øjeblikket er der tre niveauer af sproget: begynder, mellemliggende og komplet. Mange producenter af deres DBMS bruger deres egne SQL-implementeringer, som i det mindste er baseret på det oprindelige niveau af den tilsvarende ANSI-standard, og som indeholder nogle udvidelser, der er specifikke for et bestemt DBMS. I tabel 4.9 giver eksempler på SQL-dialekter.

Tabel 4.9 SQL-dialekter

DBMS Forespørgselssprog
System R DBMS SQL
DB2 SQL
Adgang SQL
SYBASE SQL Anywhere Watcom-SQL
SYBASE SQL Server Transact_SQL
Min SQL SQL
Oracle PL/SQL

Objektorienterede databaser bruger objektforespørgselssproget OQL (Object Query Language). OQL-sproget var baseret på SELECT-kommandoen i SQL2-sproget og tilføjede muligheden for at dirigere en forespørgsel til et objekt eller en samling af objekter, samt muligheden for at kalde metoder inden for en enkelt forespørgsel.

Kompatibiliteten af ​​mange brugte SQL-dialekter bestemmer kompatibiliteten af ​​DBMS. Således er SYBASE SQL Anywhere DBMS så kompatibel som muligt for et DBMS af denne klasse med SYBASE SQL Server DBMS. Et af aspekterne ved denne kompatibilitet er understøttelsen i SYBASE SQL Anywhere af en sådan dialekt af SQL-sproget som Transact-SQL. Denne dialekt bruges i SYBASE SQL Server og kan bruges i SYBASE SQL Anywhere sammen med den oprindelige SQL-dialekt - Watcom-SQL.

Kontrolspørgsmål

1. Hvordan kan et DBMS klassificeres?

2. Hvilke databasemodeller findes der?

3. Hvad er hovedelementerne i informationsmodeller?

4. Hvilke typer relationer mellem enheder findes der?

5. Hvad er ER-diagrammer, og hvad bruges de til?

6. Hvad giver tabelnormaliseringsproceduren dig mulighed for?

7. Hvad er sprog- og softwareværktøjerne i DBMS?

8. Hvilken type MS Access DBMS er det?

9. Hvad er hovedformålene med MS Access DBMS?

10. Hvad bruges de vigtigste SQL-operatorer til?

Lad os lære at opsummere. Nej, dette er ikke resultaterne af at studere SQL, men resultaterne af værdierne af kolonnerne i databasetabellerne. SQL-aggregatfunktioner fungerer på værdierne af en kolonne for at producere en enkelt resulterende værdi. De mest almindeligt anvendte SQL-aggregatfunktioner er SUM, MIN, MAX, AVG og COUNT. Det er nødvendigt at skelne mellem to tilfælde af brug af aggregerede funktioner. For det første bruges aggregerede funktioner alene og returnerer en enkelt resulterende værdi. For det andet bruges aggregerede funktioner med SQL GROUP BY-sætningen, det vil sige gruppering efter felter (kolonner) for at opnå de resulterende værdier i hver gruppe. Lad os først overveje tilfælde af brug af aggregerede funktioner uden gruppering.

SQL SUM funktion

SQL SUM-funktionen returnerer summen af ​​værdierne i en databasetabelkolonne. Det kan kun anvendes på kolonner, hvis værdier er tal. SQL-forespørgslerne for at få den resulterende sum starter således:

VÆLG SUM (COLUMN_NAME) ...

Dette udtryk efterfølges af FROM (TABLE_NAME), og derefter kan en betingelse angives ved hjælp af WHERE-sætningen. Derudover kan kolonnenavnet indledes med DISTINCT, hvilket betyder, at kun unikke værdier tælles. Som standard tages alle værdier i betragtning (til dette kan du specifikt angive ikke DISTINCT, men ALLE, men ordet ALLE er ikke påkrævet).

Eksempel 1. Der er en virksomhedsdatabase med data om dens afdelinger og medarbejdere. Personaletabellen har også en kolonne med data om medarbejdernes lønninger. Udvalget fra tabellen ser således ud (for at forstørre billedet, klik på det med venstre museknap):

For at få summen af ​​alle lønninger skal du bruge følgende forespørgsel:

VÆLG SUM (Løn) FRA Personale

Denne forespørgsel returnerer værdien 287664.63.

Og nu . I øvelserne begynder vi allerede at komplicere opgaverne og bringe dem tættere på dem, man møder i praksis.

SQL MIN funktion

SQL MIN-funktionen fungerer også på kolonner, hvis værdier er tal og returnerer minimum af alle værdier i kolonnen. Denne funktion har en syntaks svarende til den for SUM-funktionen.

Eksempel 3. Databasen og tabellen er de samme som i eksempel 1.

Vi skal finde ud af mindstelønnen for ansatte i afdeling nummer 42. For at gøre dette skal du skrive følgende anmodning:

Forespørgslen returnerer værdien 10505.90.

Og igen øvelse til selvløsning. I denne og nogle andre øvelser har du ikke kun brug for Staff-tabellen, men også Org-tabellen, der indeholder data om virksomhedens divisioner:


Eksempel 4. Organisationstabellen tilføjes til tabellen Personale, der indeholder data om virksomhedens afdelinger. Udskriv det mindste antal år, en medarbejder har arbejdet i en afdeling i Boston.

SQL MAX funktion

SQL MAX-funktionen fungerer på samme måde og har en lignende syntaks, som bruges, når du skal bestemme den maksimale værdi blandt alle værdier i en kolonne.

Eksempel 5.

Du skal finde ud af den maksimale løn for medarbejdere i afdeling nummer 42. For at gøre dette skal du skrive følgende anmodning:

Forespørgslen returnerer værdien 18352.80

Det er tid øvelser til selvstændig løsning.

Eksempel 6. Vi arbejder igen med to borde - Personale og Org. Vis navnet på afdelingen og den maksimale værdi af provisionen modtaget af en medarbejder i afdelingen, der tilhører gruppen af ​​afdelinger (Division) Øst. Brug JOIN (samle tabeller) .

SQL AVG funktion

Det, der er anført vedrørende syntaksen for de tidligere beskrevne funktioner, gælder også for SQL AVG-funktionen. Denne funktion returnerer gennemsnittet af alle værdier i en kolonne.

Eksempel 7. Databasen og tabellen er de samme som i de foregående eksempler.

Antag, at du vil finde ud af den gennemsnitlige anciennitet for medarbejdere i afdeling nummer 42. For at gøre dette skal du skrive følgende forespørgsel:

Resultatet bliver 6,33

Eksempel 8. Vi arbejder med ét bord - Personale. Vis den gennemsnitlige løn for medarbejdere med 4 til 6 års erfaring.

SQL COUNT-funktion

SQL COUNT-funktionen returnerer antallet af poster i en databasetabel. Hvis du angiver SELECT COUNT(COLUMN_NAME) ... i forespørgslen, vil resultatet være antallet af poster uden at tage højde for de poster, hvor kolonneværdien er NULL (udefineret). Hvis du bruger en stjerne som argument og starter en SELECT COUNT(*) ...-forespørgsel, vil resultatet være antallet af alle poster (rækker) i tabellen.

Eksempel 9. Databasen og tabellen er de samme som i de foregående eksempler.

Du vil vide antallet af alle medarbejdere, der modtager provision. Antallet af medarbejdere, hvis Comm-kolonneværdier ikke er NULL, returneres af følgende forespørgsel:

VÆLG ANTAL (Komm) FRA personale

Resultatet bliver 11.

Eksempel 10. Databasen og tabellen er de samme som i de foregående eksempler.

Hvis du vil finde ud af det samlede antal poster i tabellen, skal du bruge en forespørgsel med en stjerne som argument for funktionen COUNT:

VÆLG ANTAL (*) FRA Personale

Resultatet bliver 17.

I den næste øvelse for selvstændig løsning du skal bruge en underforespørgsel.

Eksempel 11. Vi arbejder med ét bord - Personale. Vis antallet af medarbejdere i planlægningsafdelingen (Plains).

Aggreger funktioner med SQL GROUP BY

Lad os nu se på at bruge aggregerede funktioner sammen med SQL GROUP BY-sætningen. SQL GROUP BY-sætningen bruges til at gruppere resultatværdier efter kolonner i en databasetabel. Hjemmesiden har en lektion dedikeret separat til denne operatør .

Eksempel 12. Der er en database over annonceportalen. Den har en annoncetabel, der indeholder data om annoncer, der er indsendt for ugen. Kolonnen Kategori indeholder data om store annoncekategorier (for eksempel fast ejendom), og kolonnen Dele indeholder data om mindre dele, der er inkluderet i kategorierne (for eksempel er lejligheder og sommerhuse dele af kategorien fast ejendom). Kolonnen Enheder indeholder data om antallet af indsendte annoncer, og kolonnen Penge indeholder data om det beløb, der er modtaget for indsendelse af annoncer.

KategoriEn delEnhederPenge
TransportereBiler110 17600
EjendomLejligheder89 18690
EjendomDachas57 11970
TransportereMotorcykler131 20960
ByggematerialerTavler68 7140
ElektroteknikTV127 8255
ElektroteknikKøleskabe137 8905
ByggematerialerRegips112 11760
FritidBøger96 6240
EjendomHjemme47 9870
Fritidmusik117 7605
FritidSpil41 2665

Brug SQL GROUP BY-sætningen til at finde det beløb, der er tjent ved at sende annoncer i hver kategori. Vi skriver følgende anmodning:

VÆLG Kategori, SUM (Penge) SOM Penge FRA Annoncer GRUPPE EFTER Kategori

Eksempel 13. Databasen og tabellen er de samme som i det foregående eksempel.

Brug SQL GROUP BY-sætningen til at finde ud af, hvilken del af hver kategori der havde flest lister. Vi skriver følgende anmodning:

VÆLG Kategori, Del, MAX (Enheder) AS Maksimum FRA annoncer GRUPPER EFTER Kategori

Resultatet bliver følgende tabel:

Samlede og individuelle værdier kan fås i en tabel at kombinere forespørgselsresultater ved hjælp af UNION-operatoren .

Relationelle databaser og SQL-sprog

Grundlæggende SQL-kommandoer, som enhver programmør bør kende

SQL eller Structured Query Language er et sprog, der bruges til at styre data i et relationsdatabasesystem (RDBMS). Denne artikel vil dække almindeligt anvendte SQL-kommandoer, som enhver programmør bør være bekendt med. Dette materiale er ideelt for dem, der ønsker at opfriske deres viden om SQL inden en jobsamtale. For at gøre dette skal du se på eksemplerne i artiklen og huske, at du har studeret databaser i par.

Bemærk, at nogle databasesystemer kræver et semikolon i slutningen af ​​hver sætning. Semikolon er standardmarkøren til slutningen af ​​hver sætning i SQL. Eksemplerne bruger MySQL, så et semikolon er påkrævet.

Opsætning af en database for eksempler

Opret en database for at demonstrere, hvordan teams arbejder. For at fungere skal du downloade to filer: DLL.sql og InsertStatements.sql. Åbn derefter en terminal og log ind på MySQL-konsollen ved hjælp af følgende kommando (artiklen antager, at MySQL allerede er installeret på systemet):

Mysql -u root -s

Indtast derefter din adgangskode.

Kør følgende kommando. Lad os kalde databasen "universitet":

OPRET DATABASE universitet; BRUG universitetet; KILDE ; KILDE

Kommandoer til at arbejde med databaser

1. Se tilgængelige databaser

VIS DATABASER;

2. Opret en ny database

OPRET DATABASE;

3. Vælg en database, der skal bruges

BRUG ;

4. Importer SQL-kommandoer fra en .sql-fil

KILDE ;

5. Slet databasen

SLIP DATABASE ;

Arbejde med borde

6. Se de tilgængelige tabeller i databasen

VIS TABELLER;

7. Opret en ny tabel

OPRET TABEL ( , , PRIMÆRNØGLE ( ), FREMMED NØGLE ( ) REFERENCER ());

Integritetsbegrænsninger ved brug af CREATE TABLE

Du skal muligvis oprette begrænsninger for visse kolonner i en tabel. Når du opretter en tabel, kan du angive følgende begrænsninger:

  • en tabelcelle kan ikke have en NULL-værdi;
  • primær nøgle - PRIMÆR NØGLE (kolonnenavn1, kolonnenavn2, ...) ;
  • fremmed nøgle - UDENLANDSKE NØGLE (kol.navnx1, …, kolonnenavn) REFERENCER tabelnavn(kolonnenavnx1, …, kolonnenavn) .

Du kan angive mere end én primær nøgle. I dette tilfælde får du en sammensat primærnøgle.

Eksempel

Opret en tabel "instruktør":

CREATE TABLE instruktør (ID CHAR(5), navn VARCHAR(20) NOT NULL, afd.navn VARCHAR(20), løn NUMERIC(8,2), PRIMÆR NØGLE (ID), UDENLANDSKE NØGLE (afd.navn) REFERENCER afdeling(afd_navn));

8. Tabeloplysninger

Du kan se forskellige oplysninger (værditype, nøgle eller ej) om tabelkolonner med følgende kommando:

BESKRIVE ;

9. Tilføjelse af data til tabellen

INDSÆT I (, , , ...) VÆRDIER ( , , , …);

Når du tilføjer data til hver kolonne i en tabel, behøver du ikke at angive kolonnenavne.

INDSÆT I VÆRDIER ( , , , …);

10. Opdatering af tabeldata

OPDATERING SÆT = , = , ... HVOR ;

11. Fjernelse af alle data fra tabellen

SLET FRA ;

12. Slet en tabel

DROP TABEL ;

Kommandoer til oprettelse af forespørgsler

13. VÆLG

SELECT bruges til at hente data fra en bestemt tabel:

VÆLG , , … FRA ;

Følgende kommando kan vise alle data fra tabellen:

VÆLG * FRA ;

14. VÆLG DISTINKT

Tabelkolonner kan indeholde duplikerede data. Brug SELECT DISTINCT til kun at hente ikke-duplikerede data.

VÆLG DISTINKT , , … FRA ;

15. HVOR

Du kan bruge nøgleordet WHERE i SELECT til at angive betingelser i en forespørgsel:

VÆLG , , … FRA HVOR ;

Følgende betingelser kan specificeres i anmodningen:

  • tekst sammenligning;
  • sammenligning af numeriske værdier;
  • logiske operatorer AND (og), OR (eller) og NOT (negation).

Eksempel

Prøv følgende kommandoer. Vær opmærksom på betingelserne specificeret i HVOR:

VÆLG * FRA kursus WHERE dept_name=’Comp. Sci.'; VÆLG * FRA kursus HVOR point>3; VÆLG * FRA kursus WHERE dept_name="Comp. Sci." OG kreditter>3;

16. GRUPPE AF

GROUP BY-operatoren bruges ofte sammen med aggregerede funktioner såsom COUNT, MAX, MIN, SUM og AVG til at gruppere outputværdier.

VÆLG , , … FRA GRUPPE EFTER ;

Eksempel

Lad os vise antallet af kurser for hvert fakultet:

SELECT COUNT(course_id), dept_name FROM course GROUP BY dept_name;

17. AT HAVE

Nøgleordet HAVING blev tilføjet til SQL, fordi WHERE ikke kan bruges med aggregerede funktioner.

VÆLG , , ... FRA GRUPPE EFTER AT HAVE

Eksempel

Lad os vise en liste over fakulteter, der har mere end ét kursus:

VÆLG ANTAL(kursus_id), afd.navn FRA kursus GRUPPE EFTER afd.navn HAR ANTAL(kursus_id)>1;

18. BESTIL PÅ

ORDER BY bruges til at sortere forespørgselsresultater i faldende eller stigende rækkefølge. ORDER BY vil sortere i stigende rækkefølge, medmindre ASC eller DESC er angivet.

VÆLG , , … FRA BESTIL EFTER , , …ASC|DESC;

Eksempel

Lad os vise en liste over kurser i stigende og faldende rækkefølge af kreditter:

VÆLG * FRA kursus BESTIL EFTER point; VÆLG * FRA kursus BESTIL EFTER point DESC;

19. MELLEM

BETWEEN bruges til at vælge dataværdier fra et specifikt område. Numeriske og tekstværdier samt datoer kan bruges.

VÆLG , , … FRA HVOR MELLEM OG ;

Eksempel

Lad os vise en liste over instruktører, hvis løn er mere end 50.000, men mindre end 100.000:

VÆLG * FRA instruktør HVOR løn MELLEM 50000 OG 100000;

20. LIKE

LIKE-operatoren bruges i WHERE til at angive et søgemønster for en lignende værdi.

Der er to gratis operatører, der bruges i LIKE:

  • % (ingen, et eller flere tegn);
  • _ (et tegn).
VÆLG , , … FRA HVOR SYNES GODT OM ;

Eksempel

Lad os vise en liste over kurser, hvis navne indeholder "til" og en liste over kurser, hvis navne begynder med "CS-":

VÆLG * FRA kursus HVOR titel LIKE '%to%'; VÆLG * FRA kursus WHERE kursus_id SOM "CS-___";

21. IN

Ved at bruge IN kan du angive flere værdier for WHERE-sætningen:

VÆLG , , … FRA HVOR IN ( , , …);

Eksempel

Lad os vise en liste over studerende fra Comp majors. Sci., Fysik og El. Eng.:

VÆLG * FRA elev WHERE afd.navn IN ('Comp. Sci.', 'Fysics', 'Elec. Eng.');

22. VÆR MED

JOIN bruges til at forbinde to eller flere tabeller ved hjælp af fælles attributter i dem. Billedet nedenfor viser de forskellige måder at deltage i SQL. Bemærk forskellen mellem en venstre ydre sammenføjning og en højre udvendig sammenføjning:

VÆLG , , … FRA TILSLUTTE = ;

Eksempel 1

Vi viser en liste over alle kurser og relevant information om fakulteterne:

VÆLG * FRA kursus JOIN afdeling PÅ kursus.dept_name=department.dept_name;

Eksempel 2

Vi viser en liste over alle nødvendige kurser og detaljer om dem:

VÆLG prereq.course_id, title, dept_name, credits, prereq_id FROM prereq VENSTRE YDRE JOIN kursus PÅ prereq.course_id=course.course_id;

Eksempel 3

Vi viser en liste over alle kurser, uanset om de er obligatoriske eller ej:

SELECT course.course_id, title, dept_name, credits, prereq_id FROM prereq HØJRE YDRE JOIN kursus PÅ prereq.course_id=course.course_id;

23. Udsigt

View er en virtuel SQL-tabel, der er oprettet som et resultat af eksekvering af et udtryk. Den indeholder rækker og kolonner og minder meget om en almindelig SQL-tabel. View viser altid de seneste oplysninger fra databasen.

Skabelse

OPRET UDSIGT SOM UDVALG , , … FRA HVOR ;

Fjernelse

DROP VIEW ;

Eksempel

Lad os skabe en visning bestående af kurser med 3 point:

24. Samlede funktioner

Disse funktioner bruges til at opnå et samlet resultat relateret til de pågældende data. Følgende er almindeligt anvendte aggregerede funktioner:

  • COUNT (col_name) - returnerer antallet af rækker;
  • SUM (col_name) - returnerer summen af ​​værdierne i denne kolonne;
  • AVG (col_name) - returnerer gennemsnitsværdien af ​​en given kolonne;
  • MIN (kolonnenavn) - returnerer den mindste værdi af en given kolonne;
  • MAX (kolonnenavn) - Returnerer den største værdi af en given kolonne.

25. Indlejrede underforespørgsler

Indlejrede underforespørgsler er SQL-forespørgsler, der inkluderer SELECT , FROM og WHERE-sætninger indlejret i en anden forespørgsel.

Eksempel

Lad os finde kurser, der blev undervist i efteråret 2009 og foråret 2010:

SELECT DISTINCT course_id FROM section WHERE semester = 'Efterår' OG år= 2009 OG kursus_id IN (SELECT course_id FROM section WHERE semester = 'Forår' OG år= 2010);