Et eksempel på å lage en spørring (Query) i en MS SQL Server-database. Databasen ligger i en lokal *.mdf-fil. Hvordan skrive SQL-spørringer - Detaljerte eksempler Plassering av en DataGridView-kontroll og oppsett av databasekommunikasjon
Et eksempel på å lage en spørring (Query) i en MS SQL Server-database. Databasen ligger i en lokal *.mdf-fil
Oppgaven
Det er spesifisert en database som ligger i Education.mdf-filen. Databasen inneholder to sammenkoblede tabeller Student og Session.
Tabellene er knyttet til hverandre av ID_Book-feltet.
Bruk Microsoft Visual Studio-verktøy, lag en spørring kalt Query1, som vil ha følgende struktur:
Feltnavn | Bord |
Num_Book | Student |
Navn | Student |
Matematikk | Økt |
Informatikk | Økt |
Filosofi | Økt |
Gjennomsnitt | Beregningsfelt |
Utførelse (trinn for trinn instruksjoner)
1. Last ned Microsoft Visual Studio
2. Koble Education.mdf-databasen til listen over databaser i Server Explorer-verktøyet
For ikke å kaste bort tid på å utvikle og koble tabeller til Education.mdf-databasen, kan et arkiv med en tidligere utarbeidet database lastes ned. Etter nedlasting og lagring i en bestemt mappe, må databasen pakkes ut og kobles til listen over databaser i Server Explorer-verktøyet.
Koble til en database er implementert på en av flere standardmåter:
- velge kommandoen "Koble til database..." fra Verktøy-menyen;
- ved å velge knappen (kommando) "Koble til database..." fra Server Explorer-verktøyet.
Som et resultat åpnes et veiviservindu der du må konfigurere databasetilkoblingen ved å bruke flere trinn (vinduer).
Ris. 1. Metoder for å legge til/koble til en database
En detaljert beskrivelse av hvordan du kobler til en database som Microsoft SQL Server i Microsoft Visual Studio er gitt i emnet:
- Eksempel på opprettelse/forbindelse Jeg lokal Microsoft SQL Server-database, som ligger i en *.mdf-fil
Etter tilkobling vil Server Explorer-verktøyvinduet se ut som vist i figur 2.
Ris. 2. Server Explorer-verktøy med tilkoblet Education.mdf-database
3. Legge til en ny forespørsel. Nytt spørreteam
Du kan opprette spørringer mot databasen. I vårt tilfelle må vi opprette en forespørsel i samsvar med oppgavebetingelsene.
Spørringen opprettes ved å bruke kommandoen "New Query", som kalles opp fra kontekstmenyen (figur 3). For å kalle kommandoen, høyreklikk bare i feltområdet som er uthevet for å vise Education.mdb-databaseelementene. Det skal bemerkes at forespørsler ikke lagres av systemet. Visninger brukes til å vise lagrede (komplekse) søk.
Figur 3 viser kontekstmenyen som hentes frem når du klikker på fanen Visninger. I denne menyen må du velge kommandoen "Ny spørring". Denne kommandoen er i listen over kontekstmenyer for andre databasekomponenter (tabeller, diagrammer, etc.).
Ris. 3. Ny spørringskommando
Som et resultat vil vinduet "Legg til tabell" åpnes, der du må velge tabellene hvis data skal brukes i spørringen (Figur 4).
Ris. 4. Velge tabellene som skal brukes i spørringen
For vårt tilfelle må vi velge begge tabellene.
Som et resultat vil Microsoft Visual Studio-vinduet se ut som vist i figur 5.
Ris. 5. MS Visual Studio-vinduet etter å ha opprettet en forespørsel
I tabellene må du velge feltene som skal brukes i spørringen. Rekkefølgen felt velges i må samsvare med hvordan de vises i forespørselen i henhold til oppgavebetingelsene. Dette betyr at først feltene i Elev-tabellen velges (NumBook, Navn), og deretter velges feltene i Sesjonstabellen (Matematikk, Informatikk, Filosofi).
For vårt tilfelle er valg av felt vist i figur 6.
Ris. 6. Velge felt for forespørselen
Som det fremgår av figur 6, vises en spørring i SQL-språk generert av systemet nederst i vinduet
PLUKKE UT Student.Num_Book, Student.Name, Sesjon.Matematikk, Sesjon.Informatikk, Sesjon.filosofi FRA4. Legg til et beregnet felt Gjennomsnitt
For å lage et beregnet felt Gjennomsnitt , må du endre teksten til denne spørringen i vinduet der SQL-spørringen vises. For eksempel:
PLUKKE UT Student.Num_Book, Student.Name, Session.Mathematics, Session.Informatics, Session.philosophy, (Session.Mathematics + Session.Informatics + Session.Philosophy) / 3.0 AS Average FRA Session INNER JOIN Student ON Session.ID_Book = Student.ID_BookBeregningsfeltet Average legges til, som er det aritmetiske gjennomsnittet (Figur 7).
SQL - Strukturert spørrespråk.
I denne anmeldelsen skal vi se på de vanligste typene SQL-spørringer.
SQL-standarden er definert ANSI(American National Standards Institute).
SQL er et språk rettet spesielt mot relasjonsdatabaser.
SQL-partisjonering:
DDL(Datadefinisjonsspråk)
- det såkalte Schema Description Language i ANSI, består av kommandoer som lager objekter (tabeller, indekser, visninger og så videre) i databasen.
DML(Datamanipulasjonsspråk) er et sett med kommandoer som bestemmer hvilke verdier som er representert i tabeller til enhver tid.
DCD(Databehandlingsspråk) består av fasiliteter som bestemmer om en bruker skal tillate å utføre bestemte handlinger eller ikke. De er en del av ANSI DDL. Ikke glem disse navnene. Dette er ikke forskjellige språk, men deler av SQL-kommandoer gruppert etter funksjonene deres.
Datatyper:
SQL Server - Datatyper |
Beskrivelse |
bigint (int 8) |
bigint (int 8) |
binær(n) |
binær(eller bilde |
karakter |
nasjonal karakter eller ntekst |
karakter varierende(synonym røye varierende varchar) |
nasjonal karakter varierende eller ntekst |
Dato tid |
dato tid |
desimal |
aka numerisk |
dobbel presisjon |
dobbel presisjon |
heltall (int 4) (synonym: int) |
heltall (int 4) |
nasjonal karakter(synonym: nasjonal karakter, nchar) |
nasjonal karakter |
Numerisk(synonymer: desimal, des) |
|
nasjonal karakter varierende(synonymer: nasjonal røye varierende, nvarchar) |
Nasjonal karakter varierende |
Liten datotid |
dato tid |
smallint (int 2) |
smallint (int 2) |
Småpenger |
|
sql_variant |
Støttes ikke lenger |
Ntekst |
|
Tidsstempel |
Ikke støttet |
bitteliten (int 1) |
bitteliten (int 1) |
Uniqueidentifier |
unik identifikator |
varbinær(n) |
varbinær(eller bilde |
smalldatetime |
dato tid |
smallint (int 2) |
smallint (int 2) |
småpenger |
|
sql_variant |
Ikke støttet |
tidsstempel |
Ikke støttet |
bitteliten (int 1) |
bitteliten (int 1) |
unik identifikator |
unik identifikator |
varbinær(n) |
varbinær(eller bilde |
Datatypetabell i SQL Server 2000
HVA ER EN FORESPØRSEL?
Be om er en kommando du gir til databaseprogrammet. Spørringer er en del av DML-språket. Alle SQL-spørringer består av en enkelt kommando. Strukturen til denne kommandoen er villedende enkel fordi du må utvide den til å utføre svært komplekse evalueringer og datamanipulasjoner.
SELECT kommando:
PLUKKE UT"Select" er den mest brukte kommandoen den brukes til å velge data fra tabellen.
Type spørring med SELECT:
SELECT id, user_name, city, birth_day FROM users_base;
En slik spørring vil vise fra user_base-tabellen alle verdiene til kolonnene spesifisert atskilt med kommaer etter SELECT-kommandoen. Du kan også vise alle kolonner med ett tegn, * dvs. SELECT * FROM users_base ; - En slik spørring vil vise alle data fra tabellen.
VELG kommandostruktur:
SELECT (Kolonnenavn atskilt med kommaer som må vises i spørringen) FROM (tabellnavn i databasen)
– Dette er den enkleste typen forespørsel. Det er flere kommandoer for praktisk datainnhenting (se under "Funksjoner")
DML-kommandoer:
Verdier kan plasseres og fjernes fra felt ved hjelp av tre DML (Data Manipulation Language) kommandoer:
SETT INN(Sett inn)
OPPDATER(Oppdatering, endring),
SLETT(Slett)
INSERT kommando:
INSERT INTO users_base (brukernavn, by, fødselsdag) VERDIER ('Alexander', 'Rostov', '06/20/1991');
INSERT-kommandoen kommer med prefikset INTO (i til), så i parentes står navnene på kolonnene vi må sette inn data i, så kommer VALUES-kommandoen (verdier) og i parentes kommer verdiene etter tur (det er nødvendig for å observere rekkefølgen på verdiene med kolonnene, verdiene må være i samme rekkefølge som kolonnene du spesifiserte).
UPDATE kommando:
OPPDATER users_base SET user_name = 'Alexey';
UPDATE-kommandoen oppdaterer verdier i en tabell. Først kommer selve UPDATE-kommandoen, deretter tabellnavnet, etter SET-kommandoen (sett), deretter kolonnenavnet og verdien i anførselstegn (anførselstegn plasseres hvis verdien er i strengformat, hvis det er en numerisk verdi og kolonnen ikke er knyttet til datatypen vchar eller noen andre strengtyper, har anførselstegnene ingen betydning.)
DELETE kommando:
SLETT FRA users_base WHERE user_name = 'Vasily';
DELETE-kommandoen sletter hele raden og identifiserer raden ved å bruke WHERE-kriteriet. I dette tilfellet ville denne spørringen slette alle rader der kolonneverdien for brukernavn var Vasily. Vi snakker om WHERE-kriteriet og andre litt senere.
Kriterier, funksjoner, betingelser mv. hva hjelper oss i SQL:
WHERE-leddet er et ledd i SELECT-kommandoen og andre DML-kommandoer som lar deg sette predikater hvis tilstand kan være enten sann eller usann for en hvilken som helst rad i tabellen. Kommandoen henter bare de radene fra tabellen som denne setningen er sann for.
Eksempel:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Alexey';- en slik spørring vil kun vise de radene som samsvarer med WHERE-betingelsen, nemlig alle rader der brukernavn-kolonnen har verdien Alexey.
BESTILL ETTER - betingelse for sortering av de valgte radene. Har 2 kriterier ASC og DESC. ASC (sortering fra A til Å eller fra 0 til 9)
DESC (motsatt av ASC).
Eksempel:
SELECT id, city, birth_day FROM users_base ORDER BY user_name ASC; - en slik spørring vil vise verdier sortert etter brukernavn-kolonnen fra A til Å (A-Z; 0-9)
Denne betingelsen kan også brukes sammen med WHERE-klausulen.
Eksempel:
SELECT id, city, birth_day FROM users_base WHERE user_name = 'Alexey' ORDER BY id ASC;
DISTINCT er et argument som gir deg en måte å eliminere doble verdier fra SELECT-klausulen din. De. hvis du har dupliserte verdier i en kolonne, la oss si brukernavn, så vil DISTINCT vise deg bare én verdi, for eksempel har du 2 personer som heter Alexey i databasen din, så vil en spørring som bruker DISTINCT-funksjonen vise deg bare 1 verdi som oppstår først...
Eksempel:
SELECT DISTINCT user_name FROM users_base;- En slik spørring vil vise oss verdiene til alle postene i kolonnen user_name, men de vil ikke bli gjentatt, dvs. hvis du hadde et uendelig antall gjentatte verdier, vil de ikke bli vist...
OG - tar to boolske (i formen A OG B) som argumenter og vurderer dem mot sannheten om de begge er sanne.
Eksempel:
SELECT * FROM users_base WHERE city = 'Rostov' OG user_name = 'Alexander';- vil vise alle verdiene fra tabellen der navnet på byen vises på én linje (i dette tilfellet Rostov og brukernavnet Alexander.
ELLER - tar to boolske (i formen A ELLER B) som argumenter og vurderer om en av dem er riktig.
SELECT * FROM users_base WHERE city = 'Rostov' ELLER user_name = 'Alexander';- vil vise alle verdier fra tabellen der navnet på byen Rostov eller brukernavnet Alexander vises på linjen.
NOT - tar en enkelt boolsk (i formen NOT A) som argumenter og endrer verdien fra usant til sant eller sant til usant.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- vil vise alle verdier fra tabellen der navnet på byen Rostov vises på én linje eller brukernavnet ikke akkurat er Alexander.
IN - definerer et sett med verdier der en gitt verdi kan inkluderes eller ikke.
VELG * FRA users_base WHERE city IN ('Vladivostok', 'Rostov');- en slik spørring vil vise alle verdier fra tabellen som inneholder navnene på de spesifiserte byene i bykolonnen
Between ligner på IN-operatøren. I motsetning til å definere med tall fra et sett, som IN gjør, definerer BETWEEN et område hvis verdier må reduseres for å gjøre predikatet sant.
SELECT * FROM users_base WHERE id MELLOM 1 OG 10;- viser alle verdier fra tabellen som vil være i området fra 1 til 10 i id-kolonnen
COUNT - Produserer radnumrene eller ikke-NULL-verdier for feltene som søket valgte.
VELG ANTALL (*) FRA users_base ;- vil vise antall rader i denne tabellen.
SELECT COUNT (DISTINCT user_name) FROM users_base ;- vil vise antall linjer med brukernavn (ikke gjentatt)
SUM - produserer den aritmetiske summen av alle valgte verdier for et gitt felt.
SELECT SUM (id) FROM users_base ;- vil vise summen av verdiene til alle rader i id-kolonnen.
AVG - gjennomsnitt av alle valgte verdier i dette feltet.
VELG AVG (id) FRA users_base ;- vil vise gjennomsnittet av alle valgte verdier i id-kolonnen
MAX - produserer den største av alle valgte verdier for dette feltet.
MIN - produserer den minste av alle valgte verdier for dette feltet.
Opprette tabeller:
CREATE TABLE users_base (id-heltall, brukernavntekst, bytekst, fødselsdagsdato);- å utføre en slik kommando vil føre til opprettelsen av tabellen som jeg ga eksempler på... Alt er enkelt her, vi skriver CREATE TABLE-kommandoen, etterfulgt av navnet på tabellen vi ønsker å lage, deretter i parentes, atskilt med komma, navnene på kolonnene og deres datatype. Dette er standardmåten for å lage en tabell i SQL. Nå vil jeg gi et eksempel på å lage tabeller i SQL Server 2005:
SET ANSI_NULLS PÅ
GÅ
SETT QUOTED_IDENTIFIER PÅ
GÅ
HVIS IKKE FINNES (VELG * FRA sys.objects WHERE object_id = OBJECT_ID(N."") OG skriv inn (N"U"))
BEGYNNE
LAG TABELL .(
IKKE NULL,
IKKE NULL,
IKKE NULL,
PRIMÆR NØKKEL KLYNGET
A.S.C.
SLUTT
GÅ
SET ANSI_NULLS PÅ
GÅ
SETT QUOTED_IDENTIFIER PÅ
GÅ
HVIS IKKE FINNES (VELG * FRA sys.objects WHERE object_id = OBJECT_ID(N."") OG skriv inn (N"U"))
BEGYNNE
LAG TABELL .(
IDENTITET(1,1) IKKE NULL,
NULL,
NULL,
PRIMÆR NØKKEL KLYNGET
A.S.C.
) MED (IGNORE_DUP_KEY = AV) PÅ
) PÅ TEXTIMAGE_ON
SLUTT
GÅ
SET ANSI_NULLS PÅ
GÅ
SETT QUOTED_IDENTIFIER PÅ
GÅ
HVIS IKKE FINNES (VELG * FRA sys.objects WHERE object_id = OBJECT_ID(N."") OG skriv inn (N"U"))
BEGYNNE
LAG TABELL .(
IDENTITET(1,1) IKKE NULL,
NULL,
NULL,
PRIMÆR NØKKEL KLYNGET
A.S.C.
) MED (IGNORE_DUP_KEY = AV) PÅ
) PÅ
SLUTT
Syntaks i SQL Server 2005 er et annet emne, jeg ville bare vise at jeg beskrev det grunnleggende om SQL-programmering, du kan nå toppen ved å kjenne det grunnleggende.
Hvis du har spørsmål om dette emnet, vennligst skriv til meg
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 (dept_name) REFERANSER avdeling(dept_name)); Du kan se forskjellig informasjon (verditype, enten det er en nøkkel eller ikke) om kolonnene i en tabell med følgende kommando: BESKRIVE Når du legger til data til hver kolonne i en tabell, trenger du ikke å angi kolonnenavn. SETT 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 til å arbeide 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); Hver av oss møter og bruker regelmessig ulike databaser. Når vi velger en e-postadresse, jobber vi med en database. Databaser brukes av søketjenester, banker til å lagre kundedata mv. Men til tross for konstant bruk av databaser, selv for mange programvaresystemutviklere er det mange "blanke flekker" på grunn av forskjellige tolkninger av de samme begrepene. Vi vil gi en kort definisjon av grunnleggende databasetermer før vi dekker SQL-språket. Så. Database -
en fil eller samling av filer for lagring av ordnede datastrukturer og deres relasjoner. Svært ofte kalles et styringssystem en database - det er bare et oppbevaringssted for informasjon i et bestemt format og kan fungere med ulike DBMS-er. Bord -
La oss forestille oss en mappe der dokumenter er lagret, gruppert i henhold til en bestemt egenskap, for eksempel en liste over bestillinger for den siste måneden. Dette er en tabell i en datamaskin En separat tabell har sitt eget unike navn. Data-type -
typen informasjon som er tillatt å lagre i en egen kolonne eller rad. Dette kan være tall eller tekst av et bestemt format. Kolonne og rad– Vi har alle jobbet med regneark, som også har rader og kolonner. Enhver relasjonsdatabase fungerer med tabeller på en lignende måte. Rader kalles noen ganger poster. Primærnøkkel- Hver rad i en tabell kan ha én eller flere kolonner for å identifisere den unikt. Uten en primærnøkkel er det svært vanskelig å oppdatere, endre og slette de ønskede radene. SQL(Engelsk - strukturert spørringsspråk) ble utviklet kun for arbeid med databaser og er for tiden standarden for alle populære DBMS-er. Språksyntaksen består av et lite antall operatorer og er lett å lære. Men til tross for sin tilsynelatende enkelhet, tillater den opprettelsen av sql-spørringer for komplekse operasjoner med en database av alle størrelser. Siden 1992 har det vært en generelt akseptert standard kalt ANSI SQL. Den definerer den grunnleggende syntaksen og funksjonene til operatører og støttes av alle DBMS-markedsledere, for eksempel ORACLE. Det er umulig å vurdere alle funksjonene til språket i en kort artikkel, så vi vil kort vurdere bare grunnleggende SQL-spørringer. Eksempler viser tydelig språkets enkelhet og muligheter: Alle kolonner i en databasetabell lagrer samme datatype. Datatyper i SQL er de samme som i andre programmeringsspråk. Det er to måter å lage nye databaser, tabeller og andre spørringer på i SQL: En ny database opprettes av operatøren LAG DATABASE<наименование базы данных>;
. Som du kan se, er syntaksen enkel og konsis. Vi lager tabeller inne i databasen ved å bruke CREATE TABLE-setningen med følgende parametere: Som et eksempel, la oss lage en varetabell med følgende kolonner: Lag en tabell: LAG TABELL Vare (vare_id CHAR(15) IKKE NULL, vendor_id CHAR(15) NOT NULL, varenavn CHAR(254) NULL, varepris DESIMAL(8,2) NULL, commodity_desc VARCHAR(1000) NULL); Tabellen består av fem kolonner. Etter navnet kommer datatypen, kolonnene er atskilt med komma. Kolonneverdien kan godta tomme verdier (NULL) eller må fylles ut (IKKE NULL), og dette bestemmes når tabellen opprettes. Datahentingsoperatoren er den mest brukte SQL-spørringen. For å få informasjon må vi angi hva vi ønsker å velge fra en slik tabell. Først et enkelt eksempel: VELG varenavn FRA vare Etter SELECT-setningen spesifiserer vi navnet på kolonnen for å få informasjon, og FROM definerer tabellen. Resultatet av spørringen vil være alle rader i tabellen med Commodity_name-verdier i den rekkefølgen de ble lagt inn i databasen, dvs. uten noen sortering. En ekstra ORDER BY-klausul brukes til å bestille resultatet. For å spørre etter flere felt, liste dem atskilt med komma, som i følgende eksempel: SELECT commodity_id, commodity_name, commodity_price FROM Commodity Det er mulig å få verdien av alle kolonnene i en rad som et spørringsresultat. For å gjøre dette, bruk "*"-tegnet: VELG * FRA Råvare For å legge til en rad i en tabell, brukes SQL-spørringer med INSERT-operatoren. Tilsetning kan gjøres på tre måter: For å legge til en hel rad, må du spesifisere tabellnavnet og verdiene til kolonnene (feltene) i den nye raden. Her er et eksempel: SETT INN I RÅVAREVERDIER("106", "50", "Coca-Cola", "1,68", "Ingen alkohol ,) Eksemplet legger til et nytt produkt i tabellen. Verdier er oppført etter VERDIER for hver kolonne. Hvis det ikke er noen tilsvarende verdi for kolonnen, må NULL angis. Kolonnene er fylt ut med verdier i den rekkefølgen som ble spesifisert da tabellen ble opprettet. Hvis du bare legger til deler av en rad, må du spesifisere navnene på kolonnene eksplisitt, som i eksemplet: INSERT INTO Commodity (vare-id, leverandør-id, varenavn) VERDIER("106", "50", "Coca-Cola",) Vi skrev bare inn identifikatorene til produktet, leverandøren og navnet, og la de resterende feltene tomme. INSERT brukes først og fremst til å legge til rader, men kan også brukes til å legge til resultatene av en SELECT-setning. For å endre informasjon i feltene i en databasetabell, må du bruke UPDATE-setningen. Operatøren kan brukes på to måter: OPPDATERING består av tre hovedelementer: La oss se på et eksempel. La oss si at prisen på et produkt med ID=106 har endret seg, så denne linjen må oppdateres. Vi skriver følgende operatør: OPPDATERING Råvare SET commodity_price = "3.2" WHERE commodity_id = "106" Vi spesifiserte navnet på tabellen, i vårt tilfelle Commodity, der oppdateringen skal utføres, deretter etter SET - den nye verdien av kolonnen og fant ønsket post ved å spesifisere den nødvendige ID-verdien i WHERE. For å endre flere kolonner, etterfølges SET-setningen av flere kolonne-verdi-par atskilt med komma. La oss se på et eksempel der navnet og prisen på et produkt er oppdatert: OPPDATERING RåvareSETT commodity_name=’Fanta’, commodity_price = "3.2" WHERE commodity_id = "106" For å fjerne informasjon i en kolonne kan du tildele den verdien NULL hvis tabellstrukturen tillater det. Det må huskes at NULL er nøyaktig "ingen" verdi, og ikke null i form av tekst eller tall. La oss fjerne produktbeskrivelsen: OPPDATERING Råvare SET commodity_desc = NULL WHERE commodity_id = "106" SQL-spørringer for å slette rader i en tabell utføres ved hjelp av DELETE-setningen. Det er to brukstilfeller: Et eksempel på sletting av én rad fra en tabell: DELETE FROM Commodity WHERE commodity_id = "106" Etter DELETE FROM angir vi navnet på tabellen der radene vil bli slettet. WHERE-leddet inneholder betingelsen for at rader skal velges for sletting. I eksemplet sletter vi produktlinjen med ID=106. Å spesifisere HVOR er veldig viktig fordi utelate denne setningen vil alle rader i tabellen slettes. Dette gjelder også endring av verdi på felt. DELETE-setningen spesifiserer ikke kolonnenavn eller metategn. Den sletter rader fullstendig, men den kan ikke slette en enkelt kolonne. Brukes vanligvis interaktivt for å lage tabeller, databaser, for å administrere, endre, analysere data i en database og implementere SQL Access-spørringer gjennom en praktisk interaktiv spørringsdesigner (Query Designer), som du kan bruke til å bygge og umiddelbart utføre SQL-setninger av enhver kompleksitet. Servertilgangsmodusen støttes også, der Access DBMS kan brukes som en generator av SQL-spørringer til enhver ODBC-datakilde. Denne funksjonen lar Access-applikasjoner samhandle med alle formater. Siden SQL-spørringer ikke har alle egenskapene til prosedyreprogrammeringsspråk, som looper, forgrening osv., utvikler DBMS-produsenter sin egen versjon av SQL med avanserte funksjoner. Først av alt er dette støtte for lagrede prosedyrer og standardoperatører av prosedyrespråk. De vanligste dialektene på språket: MySQL DBMS distribueres under den gratis GNU General Public License. Det er en kommersiell lisens med mulighet til å utvikle tilpassede moduler. Som en komponent er den inkludert i de mest populære samlingene av Internett-servere, som XAMPP, WAMP og LAMP, og er den mest populære DBMS for utvikling av applikasjoner på Internett. Den ble utviklet av Sun Microsystems og støttes for tiden av Oracle Corporation. Databaser på opptil 64 terabyte i størrelse, SQL:2003 syntaksstandard, replikering av databaser og skytjenester støttes. Tabelluttrykk kalles underspørringer som brukes der tilstedeværelsen av en tabell er forventet. Det finnes to typer tabelluttrykk: avledede tabeller; generaliserte tabelluttrykk. Disse to formene for tabelluttrykk diskuteres i de følgende underavsnittene. Avledet tabell er et tabelluttrykk inkludert i FROM-leddet til en spørring. Avledede tabeller kan brukes i tilfeller der bruk av kolonnealiaser ikke er mulig fordi SQL-oversetteren behandler en annen setning før aliaset er kjent. Eksemplet nedenfor viser et forsøk på å bruke et kolonnealias i en situasjon der en annen klausul blir behandlet før aliaset er kjent: BRUK SampleDb; SELECT MONTH(EnterDate) som enter_month FROM Works_on GROUP BY enter_month; Hvis du prøver å kjøre denne spørringen, vises følgende feilmelding: Melding 207, nivå 16, tilstand 1, linje 5 Ugyldig kolonnenavn "enter_month". (Melding 207: Nivå 16, tilstand 1, linje 5 Ugyldig kolonnenavn enter_month) Årsaken til feilen er at GROUP BY-leddet behandles før den tilsvarende listen med SELECT-setningen behandles, og aliaset for enter_month-kolonnen er ukjent når gruppen behandles. Dette problemet kan løses ved å bruke en avledet tabell som inneholder den foregående spørringen (uten GROUP BY-leddet) fordi FROM-leddet kjøres før GROUP BY-leddet: BRUK SampleDb; VELG enter_month FROM (VELG MONTH(EnterDate) som enter_month FROM Works_on) AS m GROUP BY enter_month; Resultatet av denne spørringen vil være slik: Vanligvis kan et tabelluttrykk plasseres hvor som helst i en SELECT-setning der et tabellnavn kan vises. (Resultatet av et tabelluttrykk er alltid en tabell eller, i spesielle tilfeller, et uttrykk.) Eksemplet nedenfor viser bruken av et tabelluttrykk i select-listen til en SELECT-setning: Resultatet av denne spørringen: Vanlige tabelluttrykk (OTB) er et navngitt tabelluttrykk som støttes av Transact-SQL-språket. Vanlige tabelluttrykk brukes i følgende to typer spørringer: ikke-rekursiv; tilbakevendende. Disse to typene forespørsler diskuteres i de følgende avsnittene. Den ikke-rekursive formen for OTB kan brukes som et alternativ til avledede tabeller og visninger. Vanligvis bestemmes OTB av MED klausuler og en ekstra spørring som refererer til navnet brukt i WITH-leddet. I Transact-SQL er betydningen av nøkkelordet WITH tvetydig. For å unngå tvetydighet bør setningen foran WITH-setningen avsluttes med semikolon. BRUK AdventureWorks2012; SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (VELG AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") OG Frakt > (VELG AVG(TotalDue) FROM Sales.SalesOrderHeader "Order2Dato YEAR5) ")/2.5; Spørringen i dette eksemplet velger bestillinger hvis totale avgifter (TotalDue) er høyere enn gjennomsnittet av alle avgifter og hvis fraktkostnader (frakt) er større enn 40 % av gjennomsnittlig avgifter. Hovedegenskapen til denne spørringen er lengden, siden undersøkingen må skrives to ganger. En mulig måte å redusere mengden spørringskonstruksjon på er å lage en visning som inneholder en underspørring. Men denne løsningen er litt komplisert fordi den krever å opprette en visning og deretter slette den etter at spørringen er ferdig utført. En bedre tilnærming ville være å lage en OTB. Eksemplet nedenfor viser bruken av ikke-rekursiv OTB, som forkorter spørringsdefinisjonen ovenfor: BRUK AdventureWorks2012; WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT year_2005 FROMAND price_0cal) (SELECT year_2005 FROMAND price_0cal) ) /2,5; WITH-leddets syntaks i ikke-rekursive søk er som følger: Parameteren cte_name representerer OTB-navnet som definerer den resulterende tabellen, og column_list-parameteren representerer listen over kolonner i tabelluttrykket. (I eksemplet ovenfor kalles OTB price_calc og har én kolonne, year_2005.) Inner_query-parameteren representerer en SELECT-setning som spesifiserer resultatsettet til det tilsvarende tabelluttrykket. Det definerte tabelluttrykket kan deretter brukes i den ytre_query. (Den ytre spørringen i eksempelet ovenfor bruker OTB price_calc og dens år_2005-kolonne for å forenkle det dobbelt nestede søket.) Denne delen presenterer materiale med økt kompleksitet. Derfor, når du leser den for første gang, anbefales det å hoppe over den og gå tilbake til den senere. OTB-er kan brukes til å implementere rekursjoner fordi OTB-er kan inneholde referanser til seg selv. Den grunnleggende OTB-syntaksen for et rekursivt søk ser slik ut: Parameterne cte_name og column_list har samme betydning som i OTB for ikke-rekursive spørringer. Brødteksten i en WITH-klausul består av to spørringer kombinert av operatøren UNION ALLE. Den første spørringen kalles bare én gang, og den begynner å akkumulere resultatet av rekursjonen. Den første operanden til UNION ALL-operatøren refererer ikke til OTB. Denne spørringen kalles en referansespørring eller kilde. Den andre spørringen inneholder en referanse til OTB og representerer dens rekursive del. På grunn av dette kalles det et rekursivt medlem. I det første kallet til den rekursive delen representerer OTB-referansen resultatet av referansespørringen. Det rekursive medlemmet bruker resultatet av det første spørringsanropet. Etter dette kaller systemet opp den rekursive delen igjen. Et anrop til et rekursivt medlem stopper når et tidligere anrop til det returnerer et tomt resultatsett. UNION ALL-operatøren kobler seg til de nåværende akkumulerte radene, så vel som ytterligere rader lagt til av det gjeldende anropet til det rekursive medlemmet. (Tilstedeværelsen av UNION ALL-operatøren betyr at dupliserte rader ikke vil bli fjernet fra resultatet.) Til slutt spesifiserer parameteren outer_query den ytre spørringen som OTB bruker for å hente alle anrop til sammenføyningen til begge medlemmene. For å demonstrere den rekursive formen av OTB, bruker vi flytabellen definert og fylt ut med koden vist i eksemplet nedenfor: BRUK SampleDb; CREATE TABLE Fly(ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DESIMAL(6,2)); INSERT INTO Airplane VALUES ("Fly", "Fuselage", 1, 10); INSERT INTO Airplane VALUES ("Fly", "Vinger", 1, 11); INSERT INTO Airplane VALUES ("Fly", "hale", 1, 12); SETTE INN I FLYVERDIER ("Fuselage", "Salon", 1, 13); SETTE INN I FLYVERDIER ("Fuselage", "Cockpit", 1, 14); INSERT INTO Airplane VALUES ("Fuselage", "Nose",1, 15); INSERT INTO Airplane VALUES ("Cabin", NULL, 1,13); INSERT INTO Airplane VALUES ("Cockpit", NULL, 1, 14); INSERT INTO Airplane VALUES ("Nese", NULL, 1, 15); INSERT INTO Airplane VALUES ("Vinger", NULL,2, 11); INSERT INTO Airplane VALUES ("hale", NULL, 1, 12); Flytabellen har fire kolonner. Kolonnen ContainingAssembly identifiserer sammenstillingen, og ContainedAssembly-kolonnen identifiserer delene (en etter en) som utgjør den tilsvarende sammenstillingen. Figuren nedenfor viser en grafisk illustrasjon av en mulig type fly og dets komponenter: Flytabellen består av følgende 11 rader: Følgende eksempel bruker WITH-leddet til å definere en spørring som beregner den totale kostnaden for hvert bygg: BRUK SampleDb; WITH list_of_parts(assembly1, quantity, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.quantity * DEC IMALcost AS) ) FROM list_of_parts l, Fly a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Part", quantity "Quantity", cost "Price" FROM list_of_parts; WITH-leddet definerer en OTB-liste kalt list_of_parts, bestående av tre kolonner: assembly1, quantity og cost. Den første SELECT-setningen i eksemplet kalles bare én gang for å lagre resultatene fra det første trinnet i rekursjonsprosessen. SELECT-setningen på den siste linjen i eksemplet viser følgende resultat.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
SETT 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
Hva er SQL?
SQL-datatyper
Vi lager tabeller og databaser
Henter data fra en tabell
Legg til en linje
Legger til søkeresultater
Endre data
Fjerner rader
Bruker SQL i Microsoft Access
SQL-utvidelser
SQL på Internett
Avledede tabeller
Generiske tabelluttrykk
OTB og ikke-rekursive spørringer
OTB og rekursive søk