sql-funksjon med inngangsparametere. SQL-strengfunksjoner - Eksempler på bruk

Innebygde funksjoner SQL designet for å lette og fremskynde databehandlingen. Det spesielle er at de kan spesifiseres direkte i uttrykket. Alle innebygde funksjoner kan deles inn i grupper.

Matematiske funksjoner:

    ABS(betydning) – returnerer den absolutte verdien av et tall;

    Rund(verdi, nøyaktighet) – returnerer en numerisk verdi avrundet til verdien spesifisert av argumentet nøyaktighet antall desimaler;

    SKILT(betydning) – returnerer minus hvis tallet er negativt, og pluss ellers;

    MAKT(betydning, grad) – hever et tall til en potens;

    SQRT(betydning) – trekker ut kvadratroten av et tall;

    TAK(betydning)– returnerer nærmeste heltall større enn eller lik verdien;

    - GULV(betydning)– returnerer nærmeste heltall mindre enn eller lik verdien.

Strengefunksjoner:

    ASCII(linje) – returnerer ASCII koden til det første tegnet på linjen;

    CHENR(Antall) – returner tegnet med ASCII kode;

    LEN (linje) – returnerer lengden på strengen i tegn, unntatt etterfølgende mellomrom;

    LLISTVERK(linje)/ RTRIM(linje)- fjerner mellomrom på begynnelsen/slutten av en linje;

    VENSTRE(streng, tall)/ RLETT(streng, tall)– returnerer det angitte argumentet Antall antall tegn på linjen, fra venstre/høyre kant;

    SUBSTRING(linje, posisjon, lengde) – returnerer en delstreng med den angitte lengden fra en streng, med start fra den angitte posisjonen;

    NEDRE(linje) /ØVERSTE(linje) – returnerer en streng konvertert til små/store bokstaver osv.

Funksjoner for å jobbe med datoer:

    GETDATE() – returnerer en verdi som inneholder datoen og klokkeslettet til datamaskinen som forekomsten av SQL Server kjører på;

    DAG(verdi dato)– returnerer et tall fra den angitte datoen;

    MÅNED(verdi dato)– returnerer månedsnummeret fra den angitte datoen;

    ÅR(verdi dato)– returnerer årsverdien fra den angitte datoen;

    DATENANE( del, verdi_dato) – returnerer en tegnstreng som representerer den angitte delen ( Dag, Måned, Timeetc.) fra den angitte datoen;

    DATODEL( del, verdi_dato) – returnerer et heltall som representerer den angitte delen ( Dag, Måned, Timeetc.) fra den angitte datoen.

Datatypekonverteringsfunksjoner

    CAST (betydning SOM data-type)

    KONVERTERE(data-type, betydning)

Argument betydning in functions angir verdien som må konverteres.

7.3. Språkkommandoer for datadefinisjon

Data Definition Language inneholder kommandoer som brukes til å opprette, endre og slette en database og dens objekter.

Opprette en tabell

Oppretting av en ny tabell gjøres med kommandoen LAG BORD. Kommandoen beskriver strukturen til tabellen, hver kolonne i tabellen og integritetsbegrensningene som må settes på tabellen.

Kommandosyntaks:

LAG BORD tabellnavn (( kolonnebeskrivelse |beregnet_kolonne_navn SOM uttrykk | table_level_integrity_constraints) [, ...])

Tabellnavnet er en identifikator på ikke mer enn 128 tegn.

En tabell kan inneholde en beregnet kolonne, i så fall bestemmes verdien av kolonnen av et uttrykk som er lagret i tabellstrukturen. En beregnet kolonne kan ikke endres, så den kan ikke ha NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY eller DEFAULT integritetsbegrensninger.

Syntaksen for å beskrive en tabellkolonne er:

kolonnenavn data-type[(størrelse)]

[(DEFAULT default_value | IDENTITY [(verdi, trinn)]}]

[column_level_integrity_constraints]

STANDARD - lar deg spesifisere verdien som er tildelt kolonnen i den nylig lagt til posten.

IDENTITET – indikerer at det opprettes en kolonne som støtter automatisk nummerering (tellerkolonne). Bare én tellerkolonne kan defineres i en tabell. Verdiparameteren spesifiserer startverdien til telleren, og trinnparameteren spesifiserer inkrementtrinnet. Hvis disse parameterne ikke er spesifisert, har de verdien 1. IDENTITY kan bare spesifiseres for de kolonnene som er av heltalls- eller desimaltyper. Det er ikke tillatt å sette inn verdier i IDENTITY-kolonnen.

Det er to grupper av integritetsbegrensninger som behandles av DBMS:

Deklarative integritetsbegrensninger, som er deklarert når en tabell opprettes eller endres;

Prosedyremessige integritetsbegrensninger som behandles av utløsere.

Deklarative integritetsbegrensninger kan være begrensninger på tabellnivå eller begrensninger på tabellnivå. Begrensninger på kolonnenivå gjelder kun én kolonne. Hver deklarativ integritetsbegrensning kan gis et navn.

Definisjoner av begrensninger på kolonnenivå har følgende syntaks:

((PRIMÆR NØKKEL | UNIK | IKKE NULL ) |UTLANDSKE NØKKELREFERANSER tabellnavn( kolonnenavn)

|SJEKK boolean_expression)

Navnet på dataintegritetsbegrensningen må være unikt i databasen. La oss se på begrensningene som kan defineres på kolonnenivå:

Primærnøkkelbegrensning PRIMÆRKØKKEL. Alle primærnøkkelverdier i tabellen må være unike og forskjellige fra Null. En tabell kan bare ha én primærnøkkel. Hvis den er sammensatt, spesifiseres integritetsbegrensninger på primærnøkkelen på tabellnivå;

Begrensninger på unikheten til en UNIK kolonneverdi. Dette betyr at en tabell ikke kan ha to poster som har samme verdi i den kolonnen;

EN NOT NULL-begrensning som forbyr lagring av en NULL-verdi i en kolonne;

FOREIGN KEY fremmednøkkelbegrensning (referanseintegritetsbegrensning). For en kolonne som er en fremmednøkkel, spesifiserer REFERENCES navnet på tabellen som relasjonen etableres til og navnet på kolonnen i den tabellen som relasjonen skal opprettes på. Denne tabellen er hovedtabellen (overordnet) i forhold til tabellen som opprettes. Hovedtabellkolonnen hvis verdier kobles sammen, må ha et PRIMARY KEY-begrensningssett.

Hvis nøkkelen til en ekstern tabell består av flere felt, må FOREIGN KEY-begrensningen spesifiseres på tabellnivå. I dette tilfellet bør du liste opp alle kolonnene som er inkludert i fremmednøkkelen, angi navnet på hovedtabellen og navnene på kolonnene i hovedtabellen som er referert til av fremmednøkkelen.

Referensiell integritet etablerer regler for å legge til og endre data i en tabell ved å bruke en fremmednøkkel og dens tilsvarende primærnøkkelbegrensning. Klausulene ON UPDATE og ON DELETE for en fremmednøkkel definerer følgende regler for endring av relaterte data:

INGEN HANDLING – lar deg endre (slette) bare de verdiene i hovedtabellen som ikke har tilsvarende fremmednøkkelverdier i undertabellen. Denne regelen er i kraft som standard;

CASCADE betyr at hver fremmednøkkelverdi i en underordnet tabell automatisk vil bli endret (slettet) når primærnøkkelverdien til den overordnede tabellen endres;

SET NULL betyr at hvis primærnøkkelen til den overordnede tabellen endres (slettet), i alle refererende rader i barnetabellen, vil fremmednøkkelverdiene automatisk bli tildelt NULL-verdier;

SET DEFAULT betyr at hvis primærnøkkelen til den overordnede tabellen endres (slettet), i alle refererende rader i underordnet tabellen, vil fremmednøkkelverdiene automatisk bli tildelt standardverdier.

La oss supplere eksemplet med utdanningsdatabasen "University", hvis utforming ble diskutert i kapittel. 4.3 tabeller DISKIPIN og GENERELL RAPPORT. Tabell 6 og 7 beskriver den logiske strukturen til tabellene.

Tabell 6

Logisk struktur av informasjonsobjektet DISCIPLINE

Tabell 7

Logisk struktur av informasjonsobjektet GENERELL UTTALELSE

Nøkkeltegn

Feltformat

Navn

Nøyaktighet

Rekordboknummer

Registrert studentboknummer

tekst

Disiplinkodeks

Disiplinkodeks

Numerisk

Langt heltall

numerisk

La oss presentere forespørsler om å lage tabeller i samsvar med den som er vist i fig. 35 inologisk databasemodell.

Ris. 35. Databaseordning "Universitetet"

Som det fremgår av databaseskjemaet, er FACULTY-tabellen en uavhengig tabell, så den opprettes først. Be om å lage en tabell som tar hensyn til beskrivelsen av den logiske strukturen i tabellen. 4 (s.61) vil se slik ut:

LAG TABELL fakultetet

([avdelingsnummer] tinyint PRIMARY KEY , [avdelingsnavn] char(50))

SPECIALTY-tabellen er også uavhengig, vi lager den som nummer to. Når du oppretter en spørring, bruker den beskrivelsen av den logiske strukturen i tabellen. 5 (s.62).

LAG TABELL [spesialitet] (

[spesialitetsnummer] int PRIMARY KEY,

[navn på spesialitet] røye (60),

[kostnad for utdanning] )

GRUPPEtabellen er en tabell avhengig av FAKULTET og SPESIALITET. Vi bruker tabell 3 (s. 61) når vi lager en spørring og tar hensyn til at kolonnene fakultetsnummer Og spesialitetsnummer er fremmednøkler:

OPPRETT TABELL [gruppe] (

[gruppenummer] smallint PRIMARY KEY,

[spesialitetsnummer] int FOREIGN KEY REFERANSER spesialitet( Antall spesiell- ness)PÅ SLETT CASCADE PÅ UPDADE CASCADE,

[fakultetsnummer] tinyint UTENLANDSKE NØKKELREFERANSER fakultet( Antall fakultet) PÅ SLETT CASCADE PÅ UPDADE CASCADE, [kursnummer] tinyint)

STUDENT-tabellen er en GRUPPE-avhengig tabell. Basert på dataene i Tabell 2 (s. 60), vil vi lage en spørring. Vi tar også hensyn til at kolonnen gruppenummer er fremmednøkler:

LAG TABELL [student] (

[gruppenummer] smallint NOT NULL UTENLANDSKE NØKKELREFERANSER gruppe( Antall grupper) ,

[etternavn] char(15) NOT NULL ,

[fødselsdato] datetime NOT NULL ,

[kommersiell] bit IKKE NULL ,

[registreringsnavn] char(9))

Dataene i GENERELL RAPPORT-tabellen avhenger av STUDENT- og DISIPIN-tabellene. I denne tabellen er primærnøkkelen sammensatt og hver av primærnøkkelkolonnene er en fremmednøkkel (se tabell 7 og figur 35).

La oss bruke beskrivelsen av den logiske strukturen til disiplintabellen gitt i tabell 6 og lage en spørring:

LAG TABELL [disiplin] (

[disiplinkode] int PRIMARY KEY,

[disiplinnavn] char(50))

Nå kan du opprette en spørring for å lage den generelle setningstabellen. Siden primærnøkkelen til en tabell er sammensatt, må PRIMARY KEY-begrensningen spesifiseres på tabellnivå. La oss for eksempel sette FOREIGN KEY-restriksjoner også på tabellnivå. Forespørselen vil se slik ut:

LAG TABELL [generell uttalelse] (

[disiplinkode] int,

[karakterboknummer] char(8),

[karakter] IKKE NULL , PRIMÆR NØKKEL ([disiplinkode],[karakterboknummer]), UTENLANDSKE NØKKEL ([disiplinkode]) REFERANSER [disiplin] ([disiplinkode]), UTENLANDSKE NØKKEL ([karakterboknummer]) REFERANSER [student] ([karakterboknummer]))

Endre tabellstrukturen

Endring av tabellstrukturen utføres med ALTER TABLE-kommandoen. Ved å bruke kommandoen kan du endre egenskapene til eksisterende kolonner, slette dem eller legge til nye kolonner i tabellen, og administrere integritetsbegrensninger både på kolonnenivå og tabellnivå. Betydningen av mange av parameterne og nøkkelordene er den samme som de tilsvarende parameterne og nøkkelordene til CREATE TABLE-kommandoen.

Sletter en tabell

Å slippe en tabell gjøres ved å bruke kommandoen DROP TABLE. Kommandosyntaks:

DROPPE BORD bord

For eksempel ser en forespørsel om å slette STUDENT-tabellen slik ut:

DROPPE BORD Student

Når du sletter en tabell, BØR du ta hensyn til relasjonene som er etablert i databasen mellom tabellene. Hvis tabellen som slettes refereres til av en annen tabell som bruker FOREIGN KEY-integritetsbegrensningen, vil ikke DBMS tillate sletting.

Opprette en indeks

Indekser brukes til å øke hastigheten på tilgangen til spesifikke data i en databasetabell. En indeks er en struktur som organiserer verdiene i én eller flere kolonner i en databasetabell, for eksempel kolonnen Etternavn i STUDENT-tabellen. Hvis du søker etter en bestemt student ved etternavn, hjelper indeksen deg med å få informasjonen du trenger raskere enn å søke gjennom alle rader i tabellen.

En indeks gir pekere til dataverdier lagret i spesifikke kolonner i en tabell og ordner disse pekerne i henhold til en spesifisert sorteringsrekkefølge. Å søke etter data i en tabell ved hjelp av en indeks ligner på å søke i en indeks i en bok. Først søkes indeksen etter en bestemt verdi, og deretter navigeres den tilsvarende pekeren til raden som inneholder den verdien.

Indeksen opprettes ved å bruke CREATE INDEX-kommandoen:

LAG INDEKS

Navn_ indeks PÅ navn _tabeller(kolonne [,...])

der UNIQUE angir at indeksen kun skal lagre unike verdier.

En indeks kan opprettes på en eller flere kolonner (sammensatt indeks). Sammensatte indekser lar deg skille mellom poster som har de samme verdiene i samme kolonne.

Eksempel: Lag en sammensatt indeks på STUDENT-tabellen for etternavn og fødselsdato-feltene

LAG INDEKS Ind_Fam PÅ

Student(Etternavn, [Fødselsdato] DESC)

Du bør bare opprette en indeks på en tabell hvis du forventer å ofte spørre etter dataene i de indekserte kolonnene. Indekser tar opp diskplass og senker radtilføyelse, sletting og oppdateringsoperasjoner.

Fjerne en tabellindeks

DROP-kommandoen fjerner en indeks fra en tabell. Syntaksen til DROP-kommandoen for å fjerne en indeks er:

DROP INDEKS indeksbord

Før du kan fjerne en indeks fra en tabell eller selve tabellen, må du lukke tabellen.

Eksempel: Fjern indeks Ind_Fam fra tabellen STUDENT

DROP INDEX Ind_Fam ON Student

Tabell 8.2. SQL matematiske funksjoner
Matematisk funksjon Beskrivelse
ABS(X) Returnerer den absolutte verdien av tallet X
ACOS (X) Returnerer buekosinus til X
ASIN(X) Returnerer arcsine av tallet X
ATAN(X) Returnerer arktangensen til X
COS(X) Returnerer cosinus til tallet X
EXP(X) Returnerer eksponenten til X
SIGN(X) Returnerer -1 hvis X<0,0, если Х=0, +1 , если Х>0
LN(X) Returnerer naturlig logaritme tall X
MOD(X,Y) Returnerer resten når X er delt på Y
CEIL (X) Returnerer det minste heltall større enn eller lik X
RUND(X;n) Avrunder tallet X til et tall med n desimaler
SIN(X) Returnerer sinusen til X
SQRT(X) Returnerer kvadratroten av et tall X
TAN(X) Returnerer tangensen til X
ETASJE (X) Returnerer det største heltall mindre enn eller lik X
LOG(a,X) Returnerer logaritmen til X til grunntall A
SINH(X) Returnerer den hyperbolske sinusen til X
COSH(X) Returnerer den hyperbolske cosinus til X
TANH(X) Returnerer den hyperbolske tangensen til X
TRANS(X;n) Avkorter tallet X til et tall med n sifre etter desimaltegnet
POWER(A,X) Returnerer verdien av A hevet til potensen av X

Settet med innebygde funksjoner kan variere avhengig av versjonen av DBMS fra én produsent og også i DBMS fra forskjellige produsenter. For eksempel, i SQLBase DBMS, Century Inc. Det er en funksjon @ATAN2(X,Y) som returnerer arctangensen til Y/X, men det er ingen funksjon SIGN(X) .

Aritmetiske uttrykk er nødvendig for å få data som ikke er direkte lagret i kolonnene i databasetabeller, men hvis verdier kreves av brukeren. La oss si at du trenger en liste over ansatte som viser lønnen hver ansatt mottok, inkludert bonuser og straffer.

VELG ENAME, SAL, COMM, FINE, SAL + COMM - FINE FRA ANSATTE BESTILLING AV DEPNO;

Det aritmetiske uttrykket SAL + COMM - FINE blir satt ut som en ny kolonne i resultattabellen, som beregnes som et resultat av spørringen. Slike kolonner kalles også avledede (kalkulerte) attributter eller felt.

Stringbehandlingsfunksjoner

SQL gir deg et bredt spekter av funksjoner for å manipulere strengdata (strengsammenkobling, CHR, LENGTH, INSTR og andre). En liste over hovedfunksjonene for behandling av strengdata er gitt i tabell 8.3.

Tabell 8.3. SQL-funksjoner for strengbehandling
Funksjon Beskrivelse
CHR(N) Returnerer ASCII-kodetegnet for desimalkode N
ASCII(S) Returnerer desimal ASCII-koden til det første tegnet i en streng
INSTR(S2.S1.pos[,N] Returnerer posisjonen til streng S1 i streng S2 større enn eller lik pos.N - antall forekomster
LENGDE(R) Returnerer lengden på en streng
LENGRE Erstatter alle tegn i en streng med store bokstaver
INITCAP(S) Setter det første tegnet i hvert ord i en streng til store bokstaver og de resterende tegnene i hvert ord til store bokstaver
SUBSTR(S;pos;[,len]) Velger en delstreng med lengde len i strengen S, starter ved posisjon pos
ØVRE Konverterer store bokstaver i en streng til store bokstaver
LPAD(S,N[,A]) Returnerer strengen S som er polstret med A opptil N tegn. Tegn - standard fyllstoff - mellomrom
Rpad(S,N[,A]) Returnerer strengen S, fylt til høyre med tegnene A, til antall tegn N. Tegn - standard fyllstoff - mellomrom
LTRIM(S,) Returnerer den venstre trunkerte strengen S. Tegn fjernes så lenge tegnet som fjernes er inkludert i strengen - mønster S1 (standard - mellomrom)
RTRIM(S,) Returnerer den høyre trunkerte strengen S. Tegn fjernes så lenge tegnet som fjernes er inkludert i strengen - mønster S1 (standard - mellomrom
OVERSETT(S,S1,S2) Returnerer strengen S med alle forekomster av streng S1 erstattet av streng S2. Hvis S1<>S2 , blir tegn som ikke samsvarer ekskludert fra den resulterende strengen
ERSTATT(S,S1,[,S2]) Returnerer strengen S som alle forekomster av strengen S1 er erstattet av understrengen S2 for. Hvis S2 ikke er spesifisert, fjernes alle forekomster av delstrengen S1 fra den resulterende strengen
NVL(X,Y) Hvis X er NULL , returnerer Y enten en streng, et tall eller en dato, avhengig av den opprinnelige typen Y

Navnene på de samme funksjonene kan variere i forskjellige DBMS-er. Oracle DBMS-funksjonen SUBSTR(S, pos, [, len]) i SQLBase DBMS kalles for eksempel @SUBSTRING(S, pos, len) . SQLBase DBMS har funksjoner som ikke er tilgjengelige i Oracle DBMS (se.

Hovedfunksjonaliteten til SQL-språket er gitt nedenfor.

Definisjon av data. Denne SQL-funksjonen er en beskrivelse av strukturen til dataene som støttes og organiseringen av relasjonsrelasjoner (tabeller). Operatører for å lage en database, lage tabeller og få tilgang til data er ment å implementere den.

Database opprettelse. For å opprette en ny database, bruk CREATE DATABASE-setningen. Utsagnsstrukturen spesifiserer navnet på databasen som skal opprettes.

Lage tabeller. Basistabellen opprettes ved å bruke CREATE TABLE-setningen. Denne setningen spesifiserer feltnavn, datatyper for dem og lengde (for noen datatyper). SQL bruker følgende datatyper:

HELTAL – heltall;

CHAR – tegnverdi;

VARCHAR – tegnverdi, bare ikke-blanke tegn lagres;

DESIMAL – desimaltall;

FLOAT – flyttallnummer;

DOBBEL PRESISJON – dobbel presisjon flytepunkt;

DATETIME – dato og klokkeslett;

BOOL – boolsk verdi.

Tabellopprettingssetningen spesifiserer restriksjoner på kolonneverdier og på tabellen. Mulige restriksjoner er vist i tabellen. 4.8

Tabell 4.8 Begrensninger på definerte data

For en relasjonsdatamodell er det viktig å spesifisere en fremmednøkkel (FOREIGNKEY). Når du erklærer fremmednøkler, må du legge passende begrensninger på kolonnen, for eksempel IKKE NULL.

I en SQL-setning angir CHECK semantiske begrensninger som sikrer dataintegritet, for eksempel å begrense settet med gyldige verdier for en bestemt kolonne.

Du kan ikke bruke create table-setningen mer enn én gang på samme tabell. Hvis det etter opprettelsen oppdages unøyaktigheter i definisjonen, kan endringer gjøres ved å bruke ALTER TABLE-setningen. Denne setningen er laget for å endre strukturen til en eksisterende tabell: du kan fjerne eller legge til et felt i en eksisterende tabell.

Datamanipulasjon. SQL lar en bruker eller et applikasjonsprogram endre innholdet i en database ved å sette inn nye data, slette eller endre eksisterende data.

Setter inn nye data er en prosedyre for å legge til rader i en database og utføres ved hjelp av INSERT-setningen.

Datamodifisering involverer endringer i verdier i en eller flere kolonner i en tabell og utføres ved hjelp av en UPDATE-setning. Eksempel:

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

WHERE beløp>0

Fjerner rader fra en tabell som bruker DELETE-setningen. Operatorsyntaksen er:

FRA bordet

WHERE-klausulen er valgfri, men hvis den ikke er inkludert, vil alle oppføringer i tabellen bli slettet. Det er nyttig å bruke SELECT-setningen med samme syntaks som DELETE-setningen for å forhåndsteste hvilke poster som vil bli slettet.

Sikre dataintegritet. SQL-språket lar deg definere ganske komplekse integritetsbegrensninger, hvis tilfredsstillelse vil bli sjekket for alle databasemodifikasjoner. Overvåking av resultatene av transaksjoner, behandling av feil som oppstår og koordinering av parallelt arbeid med databasen for flere applikasjoner eller brukere er gitt av COMMIT (registrerer vellykket gjennomføring av gjeldende transaksjon og begynnelsen av en ny) og ROLLBACK (behovet for en tilbakeføring - automatisk gjenoppretting av databasetilstanden til begynnelsen av transaksjonen) operatører.

Datasampling er en av de viktigste databasefunksjonene som tilsvarer SELECT-setningen. Et eksempel på bruk av operatøren ble diskutert i forrige avsnitt.

I SQL kan du lage nestede sekvenser av spørringer (underspørringer). Det er visse typer spørringer som best implementeres ved hjelp av underspørringer. Disse spørringene inkluderer såkalte eksistenssjekker. La oss anta at du ønsker å få data om elever som ikke har syvpoengskarakter. Hvis et tomt sett returneres, betyr dette bare én ting - hver elev har minst én slik karakter.

Koble tabeller. SQL-setninger lar deg hente data fra mer enn én tabell. En måte å gjøre dette på er å koble tabeller ved hjelp av ett felles felt.

SELECT-setningen må inneholde en begrensning på å matche verdiene til en bestemt kolonne (felt). Da vil bare de radene der verdiene til den angitte kolonnen samsvarer, hentes fra de relaterte tabellene. Kolonnenavnet er kun angitt sammen med tabellnavnet; ellers vil uttalelsen være tvetydig.

Du kan bruke andre typer tabellkoblinger: INTER JOIN-operatoren (inner join) sikrer at det resulterende settet med poster inneholder samsvarende verdier i relaterte felt. Ytre sammenføyninger (OUTER JOIN) lar deg inkludere alle radene fra en tabell og de tilsvarende radene fra en annen i søkeresultatet

Adgangskontroll. SQL sikrer synkronisering av databasebehandling av ulike applikasjonsprogrammer, og beskytter data mot uautorisert tilgang.

Datatilgang i et flerbrukermiljø kontrolleres ved hjelp av GRANT- og REVOKE-setninger. I hver setning er det nødvendig å spesifisere brukeren, objektet (tabell, visning) som tillatelsene er satt til, og selve tillatelsene. For eksempel gir GRANT-setningen bruker X muligheten til å hente data fra PRODUCT-tabellen:

GI UTVALG PÅ PRODUKT TIL X

REVOKE-erklæringen tilbakekaller alle tidligere gitte tillatelser.

Innbygging av SQL i applikasjonsprogrammer. Ekte applikasjoner er vanligvis skrevet på andre språk som genererer SQL-kode og sender den til DBMS som ASCII-tekst.

IBM-standarden for SQL-produkter regulerer bruken av det innebygde SQL-språket. Når du skriver et applikasjonsprogram, er teksten en blanding av kommandoer fra hovedprogrammeringsspråket (for eksempel C, Pascal, Cobol, Fortran, Assembler) og SQL-kommandoer med et spesielt prefiks, for eksempel. ExecSQL. Strukturen til SQL-setninger har blitt utvidet for å imøtekomme vertsspråkvariabler i en SQL-konstruksjon.

SQL-prosessoren endrer typen program i samsvar med kravene til kompilatoren av hovedprogrammeringsspråket. Funksjonen til kompilatoren er å oversette (oversette) et program fra kildeprogrammeringsspråket til et språk nær maskinspråket. Etter kompilering er applikasjonsprogrammet (applikasjonen) en uavhengig modul.

SQL-dialekter

Moderne relasjonelle DBMS-er bruker dialekter av SQL-språket for å beskrive og manipulere data. Et undersett av SQL-språket som lar deg lage og beskrive en database kalles DDL (Data Definition Language).

Opprinnelig ble SQL-språket kalt SEQUEL (Structured English Query Language), deretter SEQUEL/2, og deretter ganske enkelt SQL. I dag er SQL de facto-standarden for relasjonelle DBMS-er.

Den første språkstandarden dukket opp i 1989 - SQL-89 og ble støttet av nesten alle kommersielle relasjons-DBMS-er. Den var generell og gjenstand for bred tolkning. Fordelene med SQL-89 kan betraktes som standardisering av syntaks og semantikk til operatører for sampling og datamanipulering, samt fiksering av midler for å begrense integriteten til databasen. Imidlertid manglet det en så viktig del som databaseskjemamanipulering. Ufullstendigheten til SQL-89-standarden førte til utseendet i 1992. neste versjon av SQL-språket.

SQL2 (eller SQL-92) dekker nesten alle nødvendige problemer: manipulering av databaseskjemaer, transaksjons- og øktadministrasjon, støtte for klient-server-arkitekturer eller applikasjonsutviklingsverktøy.

Neste steg i utviklingen av språket er versjonen av SQL 3. Denne versjonen av språket er supplert med en triggermekanisme, definisjonen av en vilkårlig datatype og en objektutvidelse.

For øyeblikket er det tre nivåer av språket: nybegynner, middels og komplett. Mange produsenter av deres DBMS bruker sine egne SQL-implementeringer, basert i det minste på startnivået til den tilsvarende ANSI-standarden, og inneholder noen utvidelser som er spesifikke for en bestemt DBMS. I tabellen 4.9 gir eksempler på SQL-dialekter.

Tabell 4.9 SQL-dialekter

DBMS Spørrespråk
System R DBMS SQL
DB2 SQL
Adgang SQL
SYBASE SQL hvor som helst Watcom-SQL
SYBASE SQL Server Transact_SQL
Min SQL SQL
Oracle PL/SQL

Objektorienterte databaser bruker objektspørringsspråket OQL (Object Query Language). OQL-språket var basert på SELECT-kommandoen til SQL2-språket og la til muligheten til å dirigere en spørring til et objekt eller en samling av objekter, samt muligheten til å kalle metoder innenfor en enkelt spørring.

Kompatibiliteten til mange brukte SQL-dialekter bestemmer kompatibiliteten til DBMS. Dermed er SYBASE SQL Anywhere DBMS så kompatibel som mulig for en DBMS av denne klassen med SYBASE SQL Server DBMS. Et av aspektene ved denne kompatibiliteten er støtten i SYBASE SQL Anywhere av en slik dialekt av SQL-språket som Transact-SQL. Denne dialekten brukes i SYBASE SQL Server og kan brukes i SYBASE SQL hvor som helst sammen med den opprinnelige SQL-dialekten - Watcom-SQL.

Kontrollspørsmål

1. Hvordan kan et DBMS klassifiseres?

2. Hvilke databasemodeller finnes?

3. Hva er hovedelementene i informasjonsmodeller?

4. Hvilke typer relasjoner mellom enheter finnes?

5. Hva er ER-diagrammer og hva brukes de til?

6. Hva lar tabellnormaliseringsprosedyren deg gjøre?

7. Hva er språk- og programvareverktøyene til DBMS?

8. Hvilken type MS Access DBMS er det?

9. Hva er hovedobjektene til MS Access DBMS?

10. Hva brukes de viktigste SQL-operatorene til?

La oss lære å oppsummere. Nei, dette er ikke resultatene av å studere SQL, men resultatene av verdiene til kolonnene i databasetabellene. SQL-aggregatfunksjoner opererer på verdiene til en kolonne for å produsere en enkelt resulterende verdi. De mest brukte SQL-aggregatfunksjonene er SUM, MIN, MAX, AVG og COUNT. Det er nødvendig å skille mellom to tilfeller av bruk av aggregerte funksjoner. For det første brukes aggregerte funksjoner alene og returnerer en enkelt resulterende verdi. For det andre brukes aggregerte funksjoner med SQL GROUP BY-leddet, det vil si gruppering etter felt (kolonner) for å få de resulterende verdiene i hver gruppe. La oss først vurdere tilfeller av bruk av aggregerte funksjoner uten gruppering.

SQL SUM funksjon

SQL SUM-funksjonen returnerer summen av verdiene i en databasetabellkolonne. Det kan bare brukes på kolonner hvis verdier er tall. SQL-spørringene for å få den resulterende summen starter slik:

VELG SUM (COLUMN_NAME) ...

Dette uttrykket etterfølges av FROM (TABLE_NAME), og deretter kan en betingelse spesifiseres ved å bruke WHERE-leddet. I tillegg kan kolonnenavnet innledes med DISTINCT, noe som betyr at bare unike verdier telles. Som standard tas alle verdier i betraktning (for dette kan du spesifikt spesifisere ikke DISTINCT, men ALL, men ordet ALL er ikke nødvendig).

Eksempel 1. Det er en bedriftsdatabase med data om avdelinger og ansatte. Personaltabellen har også en kolonne med data om ansattes lønn. Utvalget fra tabellen ser slik ut (for å forstørre bildet, klikk på det med venstre museknapp):

For å få summen av alle lønn, bruk følgende spørring:

VELG SUM (Lønn) FRA Personalet

Denne spørringen vil returnere verdien 287664.63.

Og nå . I øvelsene begynner vi allerede å komplisere oppgavene, og bringe dem nærmere de man møter i praksis.

SQL MIN funksjon

SQL MIN-funksjonen opererer også på kolonner hvis verdier er tall og returnerer minimum av alle verdier i kolonnen. Denne funksjonen har en syntaks som ligner på SUM-funksjonen.

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

Vi må finne ut minstelønnen for ansatte ved avdeling nummer 42. For å gjøre dette, skriv følgende forespørsel:

Spørringen vil returnere verdien 10505.90.

Og igjen øvelse for selvløsning. I denne og noen andre øvelser trenger du ikke bare Staff-tabellen, men også Org-tabellen, som inneholder data om selskapets divisjoner:


Eksempel 4. Org-tabellen legges til Staff-tabellen, som inneholder data om selskapets avdelinger. Skriv ut minimum antall år jobbet av én ansatt i en avdeling i Boston.

SQL MAX funksjon

SQL MAX-funksjonen fungerer på samme måte og har en lignende syntaks, som brukes når du skal bestemme maksimalverdien blant alle verdiene i en kolonne.

Eksempel 5.

Du må finne ut maksimal lønn til ansatte ved avdeling nummer 42. For å gjøre dette, skriv følgende forespørsel:

Spørringen vil returnere verdien 18352.80

Det er på tide øvelser for selvstendig løsning.

Eksempel 6. Vi jobber igjen med to bord - Staff og Org. Vis navnet på avdelingen og den maksimale verdien av provisjonen mottatt av en ansatt i avdelingen som tilhører gruppen av avdelinger (divisjon) Øst. Bruk JOIN (sammenslå tabeller) .

SQL AVG-funksjon

Det som er angitt angående syntaksen for de tidligere beskrevne funksjonene, gjelder også for SQL AVG-funksjonen. Denne funksjonen returnerer gjennomsnittet av alle verdier i en kolonne.

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

Anta at du vil finne ut gjennomsnittlig tjenestetid for ansatte i avdeling nummer 42. For å gjøre dette, skriv følgende spørring:

Resultatet blir 6,33

Eksempel 8. Vi jobber med ett bord - Staff. Vis gjennomsnittslønnen til ansatte med 4 til 6 års erfaring.

SQL COUNT funksjon

SQL COUNT-funksjonen returnerer antall poster i en databasetabell. Hvis du spesifiserer SELECT COUNT(COLUMN_NAME) ... i spørringen, vil resultatet være antall poster uten å ta hensyn til de postene der kolonneverdien er NULL (udefinert). Hvis du bruker en stjerne som argument og starter en SELECT COUNT(*) ...-spørring, vil resultatet være antallet av alle poster (rader) i tabellen.

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

Du vil vite antall ansatte som mottar provisjoner. Antall ansatte hvis Comm-kolonneverdier ikke er NULL vil bli returnert av følgende spørring:

VELG ANTALL (Komm) FRA ansatte

Resultatet blir 11.

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

Hvis du vil finne ut det totale antallet poster i tabellen, bruker du en spørring med en stjerne som argument til COUNT-funksjonen:

VELG ANTALL (*) FRA Personalet

Resultatet blir 17.

I neste øvelse for uavhengig løsning du må bruke en underspørring.

Eksempel 11. Vi jobber med ett bord - Staff. Vis antall ansatte i planavdelingen (Plains).

Samle funksjoner med SQL GROUP BY

La oss nå se på bruk av aggregerte funksjoner sammen med SQL GROUP BY-setningen. SQL GROUP BY-setningen brukes til å gruppere resultatverdier etter kolonner i en databasetabell. Nettstedet har en leksjon dedikert separat til denne operatøren .

Eksempel 12. Det er en database for annonseportalen. Den har en annonsetabell som inneholder data om annonser som er sendt inn for uken. Kategori-kolonnen inneholder data om store annonsekategorier (for eksempel Eiendom), og Deler-kolonnen inneholder data om mindre deler som er inkludert i kategoriene (for eksempel er delene Leiligheter og Sommerhus deler av Eiendomskategorien). Enheter-kolonnen inneholder data om antall innsendte annonser, og kolonnen Penger inneholder data om hvor mye penger som er mottatt for innsending av annonser.

KategoriDelEnheterPenger
TransportereBiler110 17600
EiendomLeiligheter89 18690
EiendomDachas57 11970
TransportereMotorsykler131 20960
BygningsmaterialerStyrer68 7140
ElektroteknikkTV-er127 8255
ElektroteknikkKjøleskap137 8905
BygningsmaterialerRegips112 11760
FritidBøker96 6240
EiendomHjemme47 9870
FritidMusikk117 7605
FritidSpill41 2665

Bruk SQL GROUP BY-setningen til å finne hvor mye penger du tjener ved å legge ut annonser i hver kategori. Vi skriver følgende forespørsel:

VELG Kategori, SUM (Penger) AS Penger FRA Annonser GRUPPE ETTER Kategori

Eksempel 13. Databasen og tabellen er de samme som i forrige eksempel.

Bruk SQL GROUP BY-setningen til å finne ut hvilken del av hver kategori som hadde flest oppføringer. Vi skriver følgende forespørsel:

VELG kategori, del, MAX (enheter) AS Maksimum FRA annonser GRUPPE ETTER Kategori

Resultatet blir følgende tabell:

Totale og individuelle verdier kan fås i én tabell kombinere søkeresultater ved å bruke UNION-operatoren .

Relasjonsdatabaser og SQL-språk

Grunnleggende SQL-kommandoer som enhver programmerer bør kjenne til

SQL eller Structured Query Language er et språk som brukes til å administrere data i et relasjonsdatabasesystem (RDBMS). Denne artikkelen vil dekke vanlige SQL-kommandoer som enhver programmerer bør være kjent med. Dette materialet er ideelt for de som ønsker å friske opp kunnskapen om SQL før et jobbintervju. For å gjøre dette, se på eksemplene gitt i artikkelen og husk at du studerte databaser i par.

Merk at noen databasesystemer krever semikolon på slutten av hver setning. Semikolonet er standardpekeren til slutten av hver setning i SQL. Eksemplene bruker MySQL, så et semikolon kreves.

Sette opp en database for eksempler

Lag en database for å demonstrere hvordan team fungerer. For å fungere, må du laste ned to filer: DLL.sql og InsertStatements.sql. Deretter åpner du en terminal og logger på MySQL-konsollen ved å bruke følgende kommando (artikkelen antar at MySQL allerede er installert på systemet):

Mysql -u root -s

Skriv deretter inn passordet ditt.

Kjør følgende kommando. La oss kalle databasen "universitet":

LAG DATABASE universitet; BRUK universitetet; KILDE ; KILDE

Kommandoer for arbeid med databaser

1. Se tilgjengelige databaser

VIS DATABASER;

2. Opprett en ny database

LAG DATABASE;

3. Velge en database som skal brukes

BRUK ;

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

KILDE ;

5. Slett databasen

DROPPE DATABASE ;

Arbeid med tabeller

6. Se tabellene som er tilgjengelige i databasen

VIS TABELLER;

7. Opprett en ny tabell

LAG BORD ( , , PRIMÆRNØKKEL ( ), UTENLANDSKE NØKKEL ( ) REFERANSER ());

Integritetsbegrensninger ved bruk av CREATE TABLE

Det kan hende du må opprette begrensninger for enkelte kolonner i en tabell. Når du oppretter en tabell, kan du angi følgende begrensninger:

  • en tabellcelle kan ikke ha en NULL-verdi;
  • primærnøkkel - PRIMARY KEY (col_name1, col_name2, ...) ;
  • fremmednøkkel - UTENLANDSKE NØKKEL (col_namex1, …, col_namexn) REFERANSER tabellnavn(col_namex1, …, col_namexn) .

Du kan spesifisere mer enn én primærnøkkel. I dette tilfellet vil du få en sammensatt primærnøkkel.

Eksempel

Lag en tabell "instruktør":

CREATE TABLE-instruktør (ID CHAR(5), navn VARCHAR(20) NOT NULL, dept_name VARCHAR(20), lønn NUMERIC(8,2), PRIMARY KEY (ID), UTENLANDSKE KEY (avd_navn) REFERANSER avdeling(avd_navn));

8. Tabellinformasjon

Du kan se forskjellig informasjon (verditype, nøkkel eller ikke) om tabellkolonner med følgende kommando:

BESKRIVE ;

9. Legge til data i tabellen

SETTE INN I (, , , ...) VERDIER ( , , , …);

Når du legger til data til hver kolonne i en tabell, trenger du ikke å angi kolonnenavn.

SETTE INN I VERDIER ( , , , …);

10. Oppdatering av tabelldata

OPPDATER SETT = , = , ... HVOR ;

11. Fjerne alle data fra tabellen

SLETT FRA ;

12. Slett en tabell

DROPPE BORD ;

Kommandoer for å lage spørringer

13. VELG

SELECT brukes til å hente data fra en bestemt tabell:

PLUKKE UT , , … FRA ;

Følgende kommando kan vise alle dataene fra tabellen:

VELG * FRA ;

14. VELG DISTINKT

Tabellkolonner kan inneholde dupliserte data. Bruk SELECT DISTINCT for å hente kun ikke-dupliserte data.

VELG DISTINKT , , … FRA ;

15. HVOR

Du kan bruke nøkkelordet WHERE i SELECT for å spesifisere betingelser i en spørring:

PLUKKE UT , , … FRA HVOR ;

Følgende betingelser kan spesifiseres i forespørselen:

  • tekst sammenligning;
  • sammenligning av numeriske verdier;
  • logiske operatorer AND (og), OR (eller) og NOT (negasjon).

Eksempel

Prøv følgende kommandoer. Vær oppmerksom på betingelsene spesifisert i HVOR:

SELECT * FROM course WHERE dept_name=’Comp. Sci.'; VELG * FRA kurs HVOR studiepoeng>3; VELG * FRA kurs WHERE dept_name="Comp. Sci." OG studiepoeng>3;

16. GRUPPE ETTER

GROUP BY-operatoren brukes ofte med aggregerte funksjoner som COUNT, MAX, MIN, SUM og AVG for å gruppere utdataverdier.

PLUKKE UT , , … FRA GRUPPE AV ;

Eksempel

La oss vise antall emner for hvert fakultet:

VELG ANTALL(kurs_id), avd_navn FRA kurs GROUP BY avd_navn;

17. Å HA

Nøkkelordet HAVING ble lagt til SQL fordi WHERE ikke kan brukes med aggregerte funksjoner.

PLUKKE UT , , ... FRA GRUPPE AV HA

Eksempel

La oss vise en liste over fakulteter som har mer enn ett kurs:

VELG ANTALL(kurs_id), avd_navn FRA kurs GRUPPE ETTER avd_navn HAR ANTALL(kurs_id)>1;

18. BESTILL INNEN

ORDER BY brukes til å sortere søkeresultater i synkende eller stigende rekkefølge. ORDER BY vil sortere i stigende rekkefølge med mindre ASC eller DESC er spesifisert.

PLUKKE UT , , … FRA REKKEFØLGE ETTER , , …ASC|DESC;

Eksempel

La oss vise en liste over emner i stigende og synkende rekkefølge av studiepoeng:

VELG * FRA kurs BESTILL ETTER studiepoeng; VELG * FRA kurs BESTILL ETTER studiepoeng DESC;

19. MELLOM

BETWEEN brukes til å velge dataverdier fra et spesifikt område. Numeriske verdier og tekstverdier, samt datoer, kan brukes.

PLUKKE UT , , … FRA HVOR MELLOM OG ;

Eksempel

La oss vise en liste over instruktører hvis lønn er over 50 000, men mindre enn 100 000:

VELG * FRA instruktør HVOR lønn MELLOM 50000 OG 100000;

20. LIKER

LIKE-operatoren brukes i WHERE for å spesifisere et søkemønster for en lignende verdi.

Det er to gratis operatører som brukes i LIKE:

  • % (ingen, ett eller flere tegn);
  • _ (ett tegn).
PLUKKE UT , , … FRA HVOR SOM ;

Eksempel

La oss vise en liste over kurs hvis navn inneholder "til" og en liste over kurs hvis navn begynner med "CS-":

VELG * FRA kurs HVOR tittel LIKE '%to%'; VELG * FRA kurs WHERE kurs_id LIKE "CS-___";

21. INN

Ved å bruke IN kan du spesifisere flere verdier for WHERE-leddet:

PLUKKE UT , , … FRA HVOR IN ( , , …);

Eksempel

La oss vise en liste over studenter fra Comp majors. Sci., fysikk og elektr. Eng.:

VELG * FRA student WHERE avd.navn IN ('Comp. Sci.', 'Fysikk', 'Elec. Eng.');

22. BLI MED

JOIN brukes til å koble sammen to eller flere tabeller ved å bruke vanlige attributter i dem. Bildet nedenfor viser de forskjellige måtene å bli med i SQL. Legg merke til forskjellen mellom en venstre ytre skjøt og en høyre ytre skjøt:

PLUKKE UT , , … FRA BLI MED = ;

Eksempel 1

Vi vil vise en liste over alle emner og relevant informasjon om fakultetene:

VELG * FRA kurs BLI MED avdeling PÅ course.dept_name=department.dept_name;

Eksempel 2

Vi vil vise en liste over alle obligatoriske kurs og detaljer om dem:

VELG prereq.course_id, title, dept_name, credits, prereq_id FROM prereq VENSTRE YTRE JOIN kurs PÅ prereq.course_id=course.course_id;

Eksempel 3

Vi vil vise en liste over alle kurs, uavhengig av om de er obligatoriske eller ikke:

SELECT course.course_id, title, dept_name, credits, prereq_id FROM prereq HØYRE YTRE JOIN-kurs PÅ prereq.course_id=course.course_id;

23. Utsikt

View er en virtuell SQL-tabell opprettet som et resultat av å utføre et uttrykk. Den inneholder rader og kolonner og ligner veldig på en vanlig SQL-tabell. Vis viser alltid den nyeste informasjonen fra databasen.

Opprettelse

LAG UTSIKT SOM VALG , , … FRA HVOR ;

Fjerning

DROP VISNING ;

Eksempel

La oss lage en visning bestående av kurs med 3 studiepoeng:

24. Aggregerte funksjoner

Disse funksjonene brukes for å få et samlet resultat relatert til de aktuelle dataene. Følgende er ofte brukte aggregerte funksjoner:

  • COUNT (col_name) - returnerer antall rader;
  • SUM (col_name) - returnerer summen av verdiene i denne kolonnen;
  • AVG (col_name) - returnerer gjennomsnittsverdien for en gitt kolonne;
  • MIN (col_name) - returnerer den minste verdien av en gitt kolonne;
  • MAX (col_name) – Returnerer den største verdien av en gitt kolonne.

25. Nestede underspørringer

Nestede underspørringer er SQL-spørringer som inkluderer SELECT , FROM og WHERE-klausuler nestet i en annen spørring.

Eksempel

La oss finne kurs som ble undervist høsten 2009 og våren 2010:

SELECT DISTINCT course_id FROM section WHERE semester = 'Høst' OG år= 2009 OG course_id IN (SELECT course_id FROM section WHERE semester = 'Vår' OG år= 2010);