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 indeks PÅ bord
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
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.
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.
Kategori | Del | Enheter | Penger |
Transportere | Biler | 110 | 17600 |
Eiendom | Leiligheter | 89 | 18690 |
Eiendom | Dachas | 57 | 11970 |
Transportere | Motorsykler | 131 | 20960 |
Bygningsmaterialer | Styrer | 68 | 7140 |
Elektroteknikk | TV-er | 127 | 8255 |
Elektroteknikk | Kjøleskap | 137 | 8905 |
Bygningsmaterialer | Regips | 112 | 11760 |
Fritid | Bøker | 96 | 6240 |
Eiendom | Hjemme | 47 | 9870 |
Fritid | Musikk | 117 | 7605 |
Fritid | Spill | 41 | 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 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: Du kan spesifisere mer enn én primærnøkkel. I dette tilfellet vil du få en sammensatt primærnøkkel. 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)); Du kan se forskjellig informasjon (verditype, nøkkel eller ikke) om tabellkolonner med følgende kommando: BESKRIVE Når du legger til data til hver kolonne i en tabell, trenger du ikke å angi kolonnenavn. SETTE INN I SELECT brukes til å hente data fra en bestemt tabell: PLUKKE UT Følgende kommando kan vise alle dataene fra tabellen: VELG * FRA Tabellkolonner kan inneholde dupliserte data. Bruk SELECT DISTINCT for å hente kun ikke-dupliserte data. VELG DISTINKT Du kan bruke nøkkelordet WHERE i SELECT for å spesifisere betingelser i en spørring: PLUKKE UT Følgende betingelser kan spesifiseres i forespørselen: 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; GROUP BY-operatoren brukes ofte med aggregerte funksjoner som COUNT, MAX, MIN, SUM og AVG for å gruppere utdataverdier. PLUKKE UT La oss vise antall emner for hvert fakultet: VELG ANTALL(kurs_id), avd_navn FRA kurs GROUP BY avd_navn; Nøkkelordet HAVING ble lagt til SQL fordi WHERE ikke kan brukes med aggregerte funksjoner. PLUKKE UT 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; 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 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; BETWEEN brukes til å velge dataverdier fra et spesifikt område. Numeriske verdier og tekstverdier, samt datoer, kan brukes. PLUKKE UT 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; 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: 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-___"; Ved å bruke IN kan du spesifisere flere verdier for WHERE-leddet: PLUKKE UT 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.'); 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 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; 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; 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; 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. La oss lage en visning bestående av kurs med 3 studiepoeng: Disse funksjonene brukes for å få et samlet resultat relatert til de aktuelle dataene. Følgende er ofte brukte aggregerte funksjoner: Nestede underspørringer er SQL-spørringer som inkluderer SELECT , FROM og WHERE-klausuler nestet i en annen spørring. 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);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 Integritetsbegrensninger ved bruk av CREATE TABLE
Eksempel
8. Tabellinformasjon
9. Legge til data i tabellen
SETTE INN I 10. Oppdatering av tabelldata
OPPDATER 11. Fjerne alle data fra tabellen
SLETT FRA 12. Slett en tabell
DROPPE BORD Kommandoer for å lage spørringer
13. VELG
14. VELG DISTINKT
15. HVOR
Eksempel
16. GRUPPE ETTER
Eksempel
17. Å HA
Eksempel
18. BESTILL INNEN
Eksempel
19. MELLOM
Eksempel
20. LIKER
PLUKKE UT Eksempel
21. INN
Eksempel
22. BLI MED
Eksempel 1
Eksempel 2
Eksempel 3
23. Utsikt
Opprettelse
LAG UTSIKT Fjerning
DROP VISNING Eksempel
24. Aggregerte funksjoner
25. Nestede underspørringer
Eksempel