Lage et eksempel på en sql-tabell. SQL - hva det er, hva språket er for, og grunnleggende funksjoner for nybegynnere

Typen språk som brukes i et bestemt DBMS kalles dialektSQL. For eksempel kalles Oracle-dialekten PL/ SQL; i MSSQLServer og DB2 brukes dialekten Transaksjon- SQL; i Interbase og Firebird– isql... Hver SQL-dialekt er til en viss grad kompatibel med SQL-standarden, men den kan ha forskjeller og spesifikke språkutvidelser, så for å finne ut syntaksen til en bestemt SQL-operatør, bør du først se på Hjelp spesifikk DBMS.

For operasjoner på databaser og tabeller gir sql-standarden operatører:

Følgende er SQL92-syntaksen for disse operatørene. Siden deres syntaks i DBMS kan avvike fra standarden, anbefales det å henvise til DBMS hjelpesystemet under laboratoriearbeidet.

Databaseobjektnavn (tabeller, kolonner osv.) kan bestå av alfanumeriske tegn og understrekingstegnet. Spesialtegn (@ $ #, etc.) indikerer vanligvis en spesiell type tabell (system, midlertidig, etc.). Det anbefales ikke å bruke nasjonale (russiske) tegn, mellomrom og reserverte ord i navn, men hvis de fortsatt brukes, bør slike navn skrives i anførselstegn ".." eller i firkantede parenteser [..].

I det følgende, når konstruksjonene til SQL-setninger beskrives, vil følgende betegnelser bli brukt: i hakeparenteser skrives valgfrie deler av konstruksjonen; alternative design er atskilt med en vertikal strek | ; tannregulering() allokere logiske blokker av strukturen; ellipsis indikerer at forrige del av strukturen kan gjentas mange ganger. «Utvidbare» konstruksjoner er skrevet inn vinkelbeslag < >.

Databaseoppretting

LAG DATABASE Database_name

Fjerning av en eller flere databaser

DROPPE DATABASE Database_name[,Database_name…]

Erklærer gjeldende database

BRUK Database_Name –- i SQL Server og MySQL

STILL DATABASE Navn_ utgangspunkt_ data - i Firebird

Opprette en tabell

LAG BORD Tabellnavn (

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

<table_integrity_constraint>…]

< kolonnebeskrivelse>

Kolonne_navn TYPE AV

(INGEN HANDLING | CASCADE | SET DEFAULT | SET NULL)]

TYPE AV en kolonne kan enten være en standard datatype (se tabell 1), eller et domenenavn (se avsnitt 6.2).

Noen DBMS-er lar deg lage beregnede kolonner (beregnet kolonner). Dette er virtuelle kolonner, hvis verdi ikke lagres i fysisk minne, men beregnes av DBMS-serveren hver gang denne kolonnen åpnes ved å bruke formelen som ble spesifisert da denne kolonnen ble deklarert. Formelen kan inkludere verdiene til andre kolonner i denne raden, konstanter, innebygde funksjoner og globale variabler.

Beskrivelsen av en beregnet kolonne i SQL Server er:

<описание_столбца> Kolonne_navn SOM uttrykk

Beregnet kolonnebeskrivelse i Ildfugl ser ut som:

<описание_столбца> Kolonne_navn BEREGNET AV<uttrykk>

MySQL 3.23 støtter ikke beregnede kolonner.

< >

BEGRENSNING Integrity_constraint_name

(UNIKK | PRIMÆR NØKKEL) ( key_list_column_list)

| UTENLANDSKE NØKKEL ( liste_ kolonner_FK)

REFERANSER Tabellnavn(kolonnelistePK)

(INGEN HANDLING | CASCADE | SET DEFAULT | SET NULL)]

(INGEN HANDLING | CASCADE | SET DEFAULT | SET NULL)]

| SJEKK ( validation_condition)

Noen DBMS-er tillater erklæring av midlertidige tabeller (eksisterer bare under økten). I SQL Server må midlertidige tabellnavn begynne med # (lokale midlertidige tabeller er kun synlige for brukeren som opprettet dem) eller ## (globale tabeller synlige for alle brukere); MySQL bruker TEMPORARY nøkkelordet for å lage midlertidige tabeller, for eksempel:

SKAPEMIDLERTIDIGBORD… (For ytterligere syntaks se LAG TABELL).

Endre strukturen til en tabell

Brukes til å endre typen kolonner i eksisterende tabeller, legge til og fjerne kolonner og integritetsbegrensninger.

ENDRE TABELL Tabellnavn

Endre kolonnetype (i SQLServer og Firebird)

ENDRE KOLONNE Kolonne_navn new_TYPE

Endre kolonnetype, navn og begrensninger (i MySQL)

ENDRE KOLONNE Kolonne_navn <column_description>

Legge til en vanlig eller beregnet kolonne

| LEGG TIL<kolonnebeskrivelse>

Legger til en integritetsbegrensning

| LEGGE TIL

<table_integrity_constraint>

Sletting av en kolonne

| SLIPP KOLONNE Kolonne_navn

Fjerne en integritetsbegrensning

| SLIPP BEGRENSNING Integrity_constraint_name

Aktivere eller deaktivere kontroll av integritetsbegrensninger

InMSSQLServer

| (SJEKK | INGEN KONTROLL) BEGRENSNING

{Integrity_constraint_name_list| ALLE)

Å slippe et bord

DROPPE BORD Tabellnavn

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

Deretter vil vi vurdere hvordan vi skal deklarere deklarative integritetsbegrensninger når du oppretter nye tabeller med CREATETABLE-kommandoen eller endrer strukturen til eksisterende tabeller med ALTERTABLE-kommandoen (de er beskrevet mer detaljert i avsnitt 4.2).

1. Obligatorisk tilgjengelighet av data (NULL-verdier)

Erklært med ordet NULL (kolonnen kan ha tomme celler) eller IKKE NULL (obligatorisk). Standard er NULL.

Eksempel på å lage tabell 7:

SKAPEBORD Kunder (

Klientens navn NVARCHAR(60) IKKE NULL,

Fødselsdato DATO NULL,

Telefon CHAR(12)); - også NULL som standard

2. Standardverdi (MISLIGHOLDE)

En standardverdi kan angis for hver kolonne i tabellen. Hvis den nye verdien ikke er spesifisert når du endrer en celle, setter serveren inn standardverdien. Standarden kan være NULL, en konstant, et beregnet uttrykk eller en systemfunksjon.

La oss vurdere et eksempel på å lage en tabell Ordrene(Ordrene). Kolonne Bestillingsdato tar gjeldende dato som standard, og kolonnen Mengde(antall) er standard til 0.

LAG BORD Ordrene (

Ordrenummer INT IKKE NULL, -- Ordrenummer

Bestillingsdato DATO TID IKKE NULL-- bestillingsdato

MISLIGHOLDE GetDate (),

GetDate ()-funksjonen returnerer gjeldende dato 8

Mengde SMALLINT IKKE NULL- mengde varer, MISLIGHOLDE 0);

3. Erklære primærnøkler (PRIMÆRNØKKEL)

En enkel primærnøkkel er deklarert med ordene PRIMARYKEY når tabellen opprettes. For eksempel,

SKAPEBORD Ansatte ( - Tabell "Ansatte"

TabNum INTHOVEDNØKKEL, - primærnøkkel

WName NVARCHAR(40) IKKENULL, -- FULLT NAVN

... -- beskrivelse av andre kolonner);

En sammensatt primærnøkkel erklæres annerledes:

-- metode 1 (erklæringPKnår du lager en tabell)

LAG BORD Kunder (

PassSeria NUMERISK(4,0)IKKE NULL,-- serie pass

Pasnummer NUMERISK(6,0)IKKE NULL,-- rom pass

Navn NVARCHAR(40)IKKE NULL,

Telefon CHAR(12),

-- sammensatt primærnøkkelerklæring

BEGRENSNING Clients_PK

HOVED NØKKEL(PasSeria, PasNumber));

-- metode 2 (PKerklært etter tabelloppretting)

– først lager vi et bord utenPK

SKAPE BORD Kunder (

PassSeria NUMERISK(4,0)IKKE NULL,--serie pass

Pasnummer NUMERISK(6,0)IKKE NULL,--rom pass

Klientens navn NVARCHAR(40)IKKE NULL,

Telefon CHAR(12));

-- modifikasjon tabellerlegge til RK

ENDRE BORD Kunder

LEGGE TIL BEGRENSNING Clients_PK

HOVED NØKKEL(PassSeria, PasNumber);

4. Unikhet av kolonner (UNIK)

Som Hoved Nøkkel indikerer at en kolonne eller gruppe med kolonner ikke kan inneholde dupliserte verdier, men ikke er det PK... Alle kolonner som er erklært UNIKE, må være IKKE NULL. Et eksempel på å deklarere en enkel unik kolonne:

LAG BORD studenter (

SCode INT HOVED NØKKEL, - surrogat RK

FIO NVARCHAR(40) IKKE NULL, -- FULLT NAVN

Rekord bok CHAR(6) IKKE NULL UNIK); - elevnummer

Et eksempel på å deklarere et sammensatt unikt felt:

SKAPE BORD Personalet (- bord " Arbeidere"

TabNum INT PRIMÆR NØKKEL, -- offisielt rom

WName NVARCHAR(40) IKKE NULL, -- Fullt navn

PassSeria NUMERISK(4,0) IKKE NULL, -- serie pass

Pasnummer NUMERISK(6,0) IKKE NULL, -- rom pass

-- kunngjøring sammensatte unik Enger

BEGRENSNING Staff_UNQ UNIK(PasSeria, PasNumber));

5. Begrensninger betydning kolonne (KRYSS AV)

Denne begrensningen lar deg spesifisere et område, en liste eller "maske" av kolonnens logiske verdier.

Eksempel på å lage en tabell Arbeidere(arbeidere):

SKAPEBORD Arbeidere (

- personellnummer 4-sifret

TabNum INT PRIMÆR NØKKEL

KRYSS AV(TabNum MELLOM 1000 OG 9999),

Navn VARCHAR(60) IKKE NULL, -- Fullt navn ansatt

-- gulvbrev " m" eller " f"

Gentry CHAR(1) IKKE NULL

KRYSS AV(Gentry I("m", "f")),

Alder ikke mindre enn 14 år gammel

Alder SMALLINT IKKE NULL KRYSS AV(Alder> = 14),

- nummer på pensjonsforsikringsbevis (med maske)

PensionCert CHAR(14)

KRYSS AV(PensionSert SOM ""));

Dette eksemplet viser ulike typer sjekker. Utvalget av gyldige verdier er indikert med MELLOM... OG; vanlige forhold (som for kolonnen Alder) bruk sammenligningstegn =,<>, >, >=, <, <=, связанные при необходимости логическими операциямиAND,OR,NOT(например,Alder> = 14OG Alder<=70); для указания списка допустимых значений используется предикатINи его отрицаниеNOTIN; конструкция

SOM tillatt_verdimaske UNNTATT ekskluderingsliste

brukes til å angi masken for gyldige verdier for strengkolonner. Masken bruker to spesialtegn: "%" - en vilkårlig delstreng, og "_" - et enkelt tegn. UNNTATT er valgfritt.

I valgbetingelsen CHECK, kan verdiene til to kolonner i samme tabell og kolonner i forskjellige tabeller sammenlignes.

Frem til dette punktet har vi forespurt datatabeller og kjørt kommandoer for å hente disse dataene, forutsatt at disse tabellene allerede er opprettet av noen før oss. Dette er faktisk den mest realistiske situasjonen der et lite antall mennesker lager tabeller som deretter brukes av andre mennesker. Målet vårt er å dekke informasjonen først bredere, og deretter gå videre til smalere saker.

I dette kapittelet vil vi diskutere å lage, endre og slette tabeller. Alt dette gjelder selve tabellene, og ikke dataene de inneholder. Enten du utfører disse operasjonene selv eller ikke, vil en konseptuell forståelse av dem øke din forståelse av SQL-språket og typen av tabellene du bruker. Dette kapittelet introduserer oss til et område av SQL kalt DDL (Data Definition Language), hvor SQL-dataobjekter lages.

Dette kapittelet vil også vise deg en annen type SQL-dataobjekt - Indeks. Indekser brukes for å gjøre søk mer effektive og noen ganger få verdiene til å se forskjellige ut fra hverandre. De fungerer vanligvis ubemerket for deg, men hvis du prøver å sette verdier i en tabell og de blir avvist fordi de ikke er unike, betyr det at en annen rad har samme verdi for dette feltet, og at dette feltet har en unik indeks eller en begrensning som tilsier det unike. Diskusjonen av ovenstående vil fortsette i kapittel 18.

BORDSKAPINGSTEAM

Tabeller opprettes med CREATE TABLE-kommandoen. Denne kommandoen oppretter en tom tabell - en tabell uten rader. Verdier legges inn ved hjelp av DML INSERT-kommandoen (se kapittel 15). CREATE TABLE-kommandoen definerer i utgangspunktet tabeller som en beskrivelse av et sett med kolonnenavn i en bestemt rekkefølge. Den definerer også datatyper og kolonnestørrelser. Hver tabell må ha minst én kolonne.

Syntaksen for CREATE TABLE-kommandoen er: CREATE TABLE ( [()], [()] ...); Som diskutert i kapittel 2 varierer datatyper betydelig fra program til program. For å være i samsvar med standarden, bør de alle minst støtte en ANSI-standard. Det er beskrevet i vedlegg B.

Siden mellomrom brukes til å skille deler av en SQL-kommando, kan de ikke være en del av tabellnavnet (eller noe annet objekt, for eksempel en indeks). Understrek (_) - Brukes vanligvis for å skille ord i tabellnavn.

Betydningen av størrelsesargumentet avhenger av datatypen. Hvis du ikke spesifiserer det, vil systemet tildele verdien automatisk. For numeriske verdier er dette det beste alternativet, fordi i dette tilfellet vil alle kjønnene dine av denne typen få samme størrelse, noe som frigjør deg fra problemene med deres generelle kompatibilitet (se kapittel 14). Dessuten er det ikke akkurat en enkel sak å bruke størrelsesargumentet med noen tallsett. Hvis du trenger å lagre store antall, må du utvilsomt sørge for at gulvet er stort nok til å holde dem.

En datatype som du hovedsakelig må tilordne en størrelse for er CHAR. Størrelsesargumentet er et heltall som spesifiserer maksimalt antall tegn som feltet kan inneholde. Faktisk kan antallet tegn for et felt være fra null (hvis feltet er NULL) til dette tallet. Som standard er størrelsesargumentet 1, noe som betyr at feltet kun kan inneholde én bokstav. Dette er absolutt ikke akkurat det du ønsker.

Tabeller tilhører brukeren som opprettet dem, og navnene på alle tabellene som tilhører denne brukeren må være forskjellige fra hverandre, samt navnene på alle kolonnene i denne tabellen. Separate tabeller kan bruke de samme kolonnenavnene selv om de eies av samme bruker. Et eksempel på dette er bykolonnen i Kunder-tabellen og i Selgere-tabellen. Ikke-eiere av tabeller kan referere til disse tabellene ved å bruke navnet på eieren av disse tabellene etterfulgt av et punktum; Ansatte-tabellen opprettet av Smith vil for eksempel bli kalt Smith. Ansatte når det refereres til av en annen bruker (vi forstår at Smith er tillatelses-ID-en (ID). (ID) rapportert av brukeren (din tillatte ID er din i SQL. Denne utgangen diskutert i kapittel 2, og vil bli videreført i kapittel 22).

Denne kommandoen vil opprette selgertabellen: CREATE TABLE Salepeople (snum heltall, sname char (10), city char (10), comm declmal); Rekkefølgen på kolonnene i en tabell bestemmes av rekkefølgen de er oppført i. De skal ikke skille kolonnen på linjeskift (som er for lesbarhet), men er atskilt med komma.

INDISER

En indeks er en ordnet (alfabetisk eller numerisk) liste over kolonner eller grupper av kolonner i en tabell. Tabeller kan ha et stort antall rader, og siden radene ikke er i noen spesiell rekkefølge, kan det ta tid å søke etter dem etter den angitte verdien. Indeksadressen er både en bekymring og gir samtidig en måte å gruppere alle verdier i grupper av en eller flere strenger som er forskjellige fra hverandre. I kapittel 18 vil vi beskrive en mer direkte måte å gjøre verdiene dine unike på. Men denne metoden finnes ikke i tidligere versjoner av SQL. Siden unikhet ofte er nødvendig, har indekser blitt brukt til dette formålet.

Indekser er et SQL-verktøy som ble født av markedet selv, ikke ANSI. Derfor støtter ikke selve ANSI-standarden for øyeblikket indekser, selv om de er veldig nyttige og mye brukt.

Når du oppretter en indeks på et felt, husker databasen riktig rekkefølge av alle verdier for det feltet i minnet. Anta at kundetabellen vår har tusenvis av oppføringer og du vil finne kunde med nummer = 2999. Siden radene ikke er sortert, vil programmet skanne hele tabellen, rad for rad, og sjekke hver gang cnum-feltet er lik 2999. Men hvis det var en indeks i cnum-feltet, kan programmet nå 2999 direkte av indeks og gi informasjon om hvordan du finner riktig rad i tabellen.

Mens indeksen forbedrer søkeytelsen betydelig, bremser bruken av indeksen DML-modifikasjonsoperasjoner (som INSERT og DELETE) noe, og selve indeksen tar opp minne. Derfor, hver gang du oppretter en tabell, må du bestemme om du vil indeksere den eller ikke. Indekser kan være sammensatt av flere felt. Hvis mer enn ett felt er spesifisert for én indeks, blir det andre sortert innenfor den første, det tredje innenfor den andre, og så videre. Hvis du hadde det første og siste i to forskjellige felt i tabellen, kunne du opprette en indeks som ville sortere det forrige feltet i det neste. Dette kan gjøres uavhengig av hvordan kolonnene i tabellen er ordnet.

Syntaksen for å lage en indeks er vanligvis følgende (husk at dette ikke er en ANSI-standard): CREATE INDEX

( [,] ...); Tabellen må selvfølgelig allerede være opprettet og må inneholde en kolonne for den. Im an index kan ikke brukes til noe annet i databasen (av noen bruker). Når den er opprettet, vil indeksen være usynlig for brukeren. SQL bestemmer når det er nødvendig å referere til det og gjør det automatisk. Hvis for eksempel Kunder-tabellen vil være den hyppigst refererte i salgshenvendelser til deres eget klientell, vil det være riktig å opprette en slik indeks i snum-feltet i Kunder-tabellen. LAG INDEKS Klientgruppe PÅ kunder (snum); Nå vil den selgeren som er relatert til denne tabellen kunne finne sitt eget klientell veldig raskt.

INDEKSENS UNIKHET

Indeksen i forrige eksempel er heldigvis ikke pålagt å være unik, til tross for vår bemerkning om at dette er et av formålene med indeksen. En gitt selger kan ha et hvilket som helst antall kunder. Dette vil imidlertid ikke skje hvis vi bruker nøkkelordet UNIQUE før søkeordet INDEX. Cnum-feltet, som primærnøkkel, vil være den første kandidaten for en unik indeks: CREATE UNIQUE INDEX Custid ON Customers (cnum); MERK: Denne kommandoen vil bli avvist hvis det allerede er identiske verdier i cnum-feltet. Den beste måten å håndtere indekser på er å lage dem umiddelbart etter at tabellen er opprettet og før noen verdier legges inn. Vær også oppmerksom på at for en unik indeks med mer enn ett kjønn, er dette en kombinasjon av verdier, som kanskje ikke er unike.

Det forrige eksemplet er en indirekte måte å få cnum-feltet til å fungere som primærnøkkelen til Kunder-tabellen. Databaser virker mer direkte på primærnøkler og andre nøkler. Vi vil diskutere denne konklusjonen videre i kapittel 18 og.

SLETTER INDEKS

Hovedattributtet til en indeks er dens den - så den kan slettes. Vanligvis er brukere uvitende om eksistensen av indeksen. SQL oppdager automatisk om brukeren har lov til å bruke indeksen, og i så fall lar den brukes. Men hvis du ønsker å slippe en indeks, må du kjenne den med den. Denne syntaksen brukes til å slippe en indeks: DROP INDEX; Sletting av en indeks påvirker ikke innholdet i feltene.

ENDRING AV BORDEN ETTER DET BLEV OPPRETTET

ALTER TABLE er ikke en del av ANSI-standarden; men den er allment tilgjengelig, og ganske meningsfull form, selv om dens muligheter er noe begrenset. Den brukes til å endre definisjonen av en eksisterende tabell. Vanligvis legger den til kolonner i tabellen. Det kan noen ganger fjerne eller endre størrelse på kolonner, og i noen programmer legge til eller fjerne begrensninger (diskutert i kapittel 18). Typisk syntaks for å legge til en kolonne i en tabell er: ALTER TABLE
LEGGE TIL ; Kolonnen vil bli lagt til med en NULL-verdi for alle rader i tabellen. Den nye kolonnen blir den siste kolonnen i tabellen. Faktisk kan du legge til flere nye kolonner samtidig, skille dem med kommaer, i én kommando. Det er mulig å slette eller endre kolonner. Oftest kan endring av en kolonne ganske enkelt være å øke størrelsen, eller legge til (fjerne) en begrensning. Systemet ditt må sørge for at eventuelle endringer ikke kommer i konflikt med eksisterende data - for eksempel hvis du prøver å legge til en begrensning i en kolonne som allerede hadde en verdi, og hvis den brytes, vil begrensningen bli avvist. Det beste alternativet er å dobbeltsjekke dette. Se i det minste på systemets dokumentasjon for å se om den garanterer at dette var årsaken. På grunn av den ikke-standardiserte naturen til ALTER TABLE-kommandoen, bør du fortsatt se på den delen av systemdokumentasjonen for spesielle tilfeller.

ALTER TABLE har ingen effekt når tabellen må overstyres, men du bør designe databasen så mye som mulig for ikke å stole for mye på den. Det er farlig å endre strukturen til et bord mens det allerede er i bruk! Se nøye på tabeller som, som sekundære tabeller med data hentet fra en annen tabell (se kapittel 20), ikke fungerer riktig lenge, og programmer som bruker nestet SQL (kapittel 25) ikke kjører riktig eller alltid ikke fungerer riktig. I tillegg kan endringen slette alle brukere som har tilgang til tabellen. Av disse grunnene bør du designe tabellene dine slik at de kun bruker ALTER TABLE som en siste utvei.

Hvis systemet ditt ikke støtter ALTER TABLE, eller hvis du vil unngå å bruke det, kan du ganske enkelt lage en ny tabell, med de nødvendige endringene ved opprettelse, og bruke INSERT-kommandoen med en SELECT *-spørring for å overskrive data fra den gamle tabellen i det. Brukere som har fått tilgang til den gamle tabellen (se kapittel 22) må få tilgang til den nye tabellen.

SLETTER EN TABELL

Du må være eieren (det vil si skaperen) av tabellen for å kunne slette den. Så ikke bekymre deg for å ødelegge dataene dine ved et uhell, SQL vil først kreve at du tømmer tabellen før du sletter den fra databasen. Tabellen med radene i kan ikke slettes. Se kapittel 15 for detaljer om hvordan du sletter rader fra en tabell. Syntaksen for å slette tabellen, forutsatt at den er tom, er: DROP TABLE< table name >; Når du utsteder denne kommandoen, gjenkjennes ikke tabellen lenger av dem, og det er ingen slik kommando som kan gis til dette objektet. Du må sørge for at denne tabellen ikke refereres av en fremmednøkkel til en annen tabell (fremmednøkler er omtalt i kapittel 19), og at den ikke brukes i definisjonen av en visning (kapittel 20).

Denne kommandoen er faktisk ikke en del av ANSI-standarden, men den er generelt støttet og nyttig. Heldigvis er det enklere, og derfor mer konsistent, enn ALTER TABLE. ANSI har rett og slett ikke en måte å identifisere ødelagte eller ugyldige tabeller på.

SAMMENDRAG

Du er nå flytende i det grunnleggende om datadefinisjoner. Du kan opprette, endre og slippe tabeller. Mens bare den første av disse funksjonene er en del av den offisielle SQL-standarden, vil andre endre seg fra tid til annen, spesielt ALTER TABLE. DROP TABLE lar deg bli kvitt tabeller som ikke er nyttige. Den ødelegger bare tomme tabeller og ødelegger derfor ikke data.

Du vet nå om indekser og hvordan du oppretter og sletter dem. SQL gir deg ikke mye kontroll over dem, siden implementeringen du bruker er ganske god til å bestemme hvor raskt ulike kommandoer utføres. Indekser er et av verktøyene som gir deg muligheten til å direkte påvirke ytelsen til SQL-kommandoene dine. Vi har dekket indekser her for å skille dem fra begrensninger, som de ikke bør forveksles med. Begrensninger er tema for kapittel 18 og kapittel 19.

ARBEIDE MED SQL

1. Skriv en CREATE TABLE-klausul som vil gi ut vår kundetabell.

2. Skriv en kommando som gjør det mulig for brukeren å raskt hente bestillingene gruppert etter dato fra bestillingstabellen.

3. Hvis ordretabellen allerede er opprettet, hvordan kan du gjøre onum-feltet unikt (forutsatt at alle gjeldende verdier er unike)?

4. Lag en indeks som lar hver selger raskt finne bestillingene sine gruppert etter dato.

5. Forutsatt at hver selger kun har én kunde med en gitt vurdering, skriv inn en kommando som vil hente den.

Før du begynner å lage SQL-tabellen, må du definere databasemodellen din. Design et ER-diagram der du kan definere enheter, attributter og relasjoner.

Enkle konsepter

Entiteter er objekter eller fakta om hvilken informasjon må lagres. For eksempel en ansatt i et selskap eller prosjekter implementert av en bedrift. Attributter er en komponent som beskriver eller kvalifiserer en enhet. For eksempel er attributtet til "ansatt"-enheten lønnen, og attributtet til "prosjekt"-enheten er den estimerte kostnaden. Linker er assosiasjoner mellom to elementer. Det kan være toveis. Det er også et rekursivt forhold, det vil si et forhold mellom en enhet og seg selv.

Det er også nødvendig å definere nøklene og betingelsene under hvilke integriteten til databasen bevares. Hva betyr det? Med andre ord, begrensninger som vil bidra til å holde databaser rene og konsistente.

Flytte fra ER-diagram til tabellmodell

Regler for å gå til en tabellmodell:

  1. Konverter alle enheter til tabeller.
  2. Konverter alle attributter til kolonner, det vil si at hvert enhetsattributt må tilordnes tabellkolonnenavnet.
  3. Konverter unike identifikatorer til primærnøkler.
  4. Konverter alle relasjoner til fremmednøkler.
  5. Lag en SQL-tabell.

Baseoppretting

Først må du starte MySQL-serveren. For å starte den, gå til "Start"-menyen, deretter til "Programmer", deretter til MySQL og MySQL Server, velg MySQL-Command-Line-Client.

Kommandoen Create Database brukes til å lage en database. Denne funksjonen har følgende format:

LAG DATABASE databasenavn.

Begrensningene for navnet på basen er som følger:

  • lengden er opptil 64 tegn og kan inneholde bokstaver, tall, symboler "" og "";
  • navnet kan begynne med et tall, men må inneholde bokstaver.

Det er også nødvendig å huske den generelle regelen: enhver forespørsel eller kommando slutter med en skilletegn. Det er vanlig i SQL å bruke semikolon som skilletegn.

Serveren må spesifisere hvilken database den må jobbe med. Det er dette USE-operatøren er til for. Denne setningen har en enkel syntaks: BRUK n databasenavn.

Opprette en SQL-tabell

Så modellen er designet, databasen opprettes, og serveren blir fortalt nøyaktig hvordan den skal jobbe med den. Nå kan du begynne å lage SQL-tabeller. Det er et Data Definition Language (DDL). Den brukes til å lage MS SQL-tabeller, samt til å definere objekter og arbeide med deres struktur. DDL inkluderer et sett med kommandoer.

Oppretting av SQL Server-tabeller

Ved å bruke bare én DDL-kommando kan du lage forskjellige databaseobjekter ved å variere parameterne. For å bruke kommandoen Opprett tabell. tt-formatet ser slik ut:

LAG TADLE tabellnavn,(kolonnenavn1 tittel _kolonne2 datatype [column_constraint], [table_constraint]).

Syntaksen til denne kommandoen bør beskrives mer detaljert:

  • Tabellnavnet må være opptil 30 tegn langt og begynne med en bokstav. Bare alfabetiske tegn, bokstaver og symboler "_", "$" og "#" er tillatt. Bruk av det kyrilliske alfabetet er tillatt. Det er viktig å merke seg at tabellnavn ikke skal være det samme som andre objektnavn eller reserverte databaseserverord som kolonne, tabell, indeks osv.
  • Sørg for å spesifisere datatypen for hver kolonne. Det er et standardsett som brukes av de fleste. For eksempel Char, Varchar, Number, Date, Null type, etc.

  • Standardparameteren kan brukes til å angi standardverdien. Dette sikrer at det ikke er nullverdier i tabellen. Hva betyr det? Standardverdien kan være et symbol, uttrykk, funksjon. Det er viktig å huske at denne standarddatatypen må være den samme som inndatatypen for kolonnen.
  • Begrensninger på hver kolonne brukes til å håndheve integritetsbetingelser for data på tabellnivå. Det er også nyanser. Det er forbudt å droppe et bord hvis det er andre bord som er avhengige av det.

Hvordan jobbe med basen

Store prosjekter krever ofte opprettelse av flere databaser, og hver krever mange tabeller. Det er selvsagt umulig for brukere å holde all informasjonen i hodet. For dette er det mulig å se på strukturen til databaser og tabeller i dem. Det er flere kommandoer, nemlig:

  • VIS DATABASER - viser på skjermen alle opprettede SQL-databaser;
  • VIS TABELLER - Viser alle tabeller for nåværende base data valgt av USE-kommandoen;
  • BESKRIVE tabellnavn- viser en beskrivelse av alle kolonnene i tabellen.
  • ALTER TABLE - lar deg endre strukturen til tabellen.

Den siste kommandoen lar deg:

  • legg til en kolonne eller begrensning i tabellen;
  • endre en eksisterende kolonne;
  • fjern en kolonne eller kolonner;
  • fjerne integritetsbegrensninger.

Syntaksen for denne kommandoen ser slik ut: ALTER TABLE tabellnavn(| | | | [(AKTIVER | DEAKTIVER) KONSTANT constraint_name ] | }.

Det er også andre kommandoer:

  • RENAME - gi nytt navn til en tabell.
  • TRUNCATE TABLE - fjerner alle rader fra tabellen. Denne funksjonen kan være nødvendig når det er nødvendig å fylle tabellen igjen, men det er ikke nødvendig å lagre tidligere data.

Det er også situasjoner hvor strukturen til databasen har endret seg og tabellen bør slettes. For dette er det DROP-kommandoen. Selvfølgelig må du først velge databasen du vil slette tabellen fra, hvis den er forskjellig fra den gjeldende.

Kommandosyntaksen er ganske enkel: DROP TABLE tittel_tabeller.

I SQL Access opprettes og endres tabeller ved hjelp av de samme kommandoene som er oppført ovenfor.

Ved å bruke CREATE TABLE kan du opprette en tom tabell og deretter fylle den med data. Men det er ikke alt. Du kan også umiddelbart opprette en tabell fra en annen tabell. Som dette? Det vil si at det er mulig å definere en tabell og fylle den med data fra en annen tabell. Det er et spesielt nøkkelord AS for dette.

Syntaksen er veldig enkel:

  • LAG BORD tittel_tabeller[(kolonnedefinisjon)] AS underspørring;
  • kolonnedefinisjon - kolonnenavn, integritetsregler for kolonner i den nyopprettede tabellen og standardverdier;
  • subquery - returnerer radene som skal legges til i den nye tabellen.

Dermed oppretter en slik kommando en tabell med visse kolonner, setter inn radene som returneres i spørringen.

Midlertidige bord

Midlertidige tabeller er tabeller hvis data slettes ved slutten av hver økt eller tidligere. De brukes til å registrere mellomverdier eller resultater. De kan brukes som arbeidsark. Du kan definere midlertidige i en hvilken som helst økt, og du kan bare bruke dataene deres i gjeldende økt. SQL midlertidige tabeller opprettes på samme måte som vanlig, ved å bruke CREATE TABLE-kommandoen. For å vise systemet at tabellen er midlertidig, må du bruke parameteren GLOBAL TEMPORARY.

ON COMMIT-klausulen angir levetiden til data i en slik tabell og kan gjøre følgende:

  • SLETT RADER - Tøm den midlertidige tabellen (slett alle øktdata) etter hver transaksjonsfullføring. Dette er vanligvis standard.
  • BEHOLD RADER - la data ligge igjen til bruk i neste transaksjon. I tillegg kan du tømme bordet først etter at økten er ferdig. Men det er noen særegenheter. Hvis en transaksjon rulles tilbake (ROLLBACK), vil tabellen bli rullet tilbake til tilstanden ved slutten av forrige transaksjon.

Syntaksen for å lage en midlertidig tabell kan representeres slik: CREATE TABLE tittel_tabeller,(tittel_kolonne1 datatype [column_constraint], tittel _kolonne2 datatype [column_constraint], [table_constraint]).

Foredrag

Opprette en database ved hjelp av SQL.

Datamanipulering i SQL

SQL-språket inkluderer et databeskrivelsesspråk som lar deg administrere tabeller, og et datamanipuleringsspråk som tjener til å administrere data ( lysbilde 2 ).

17.1. Bygge databaser med SQL

17.1.1. Kommandoen for å lage en tabell er - SKAPEBORD

Tabellen opprettes ved å bruke CREATE TABLE-kommandoen. Den generaliserte kommandosyntaksen er som følger (lysbilde 3).

De. etter å ha spesifisert tabellnavnet, atskilt med kommaer i parentes, skal alle setninger som definerer individuelle tabellelementer - kolonner eller integritetsbegrensninger være oppført:

tabellnavn er identifikatoren til tabellen som opprettes, som vanligvis er konstruert fra navnet på databasen, navnet på eieren av tabellen og navnet på selve tabellen. Kombinasjonen av tabellnavnet og dens eier må være unike i databasen. Hvis tabellen ikke er opprettet i gjeldende database, må databasenavnet inkluderes i dens ID.

kolonnedefinisjon - spesifiserer navnet, datatypen og parameterne for en individuell tabellkolonne. Kolonnenavn må følge reglene for identifikatorer og være unike i tabellen.

table_constraint_define - Spesifiser en integritetsbegrensning på tabellnivå.

Kolonnebeskrivelse

Som du kan se fra syntaksen til CREATE TABLE-kommandoen, er en klausul spesifisert for hver kolonne<определение_столбца>, ved hjelp av hvilken egenskapene til kolonnen settes. Setningen har følgende syntaks( lysbilde 3) :

La oss vurdere formålet og bruken av parametere.

Kolonnenavn er en identifikator som spesifiserer navnet på en tabellkolonne.

datatype – Spesifiserer datatypen for kolonnen. Hvis, når du definerer en kolonne, en begrensning på lagring av NULL-verdier ikke er eksplisitt spesifisert, vil egenskapene til datatypen bli brukt, dvs. hvis den valgte datatypen tillater lagring av NULL-verdier, vil det være mulig å lagre NULL-verdier i kolonnen. Hvis, når du definerer en kolonne i CREATE TABLE-kommandoen, lagring av NULL-verdier er eksplisitt tillatt eller nektet, vil datatypeegenskapene bli overstyrt av begrensningen satt på kolonnenivå. For eksempel, hvis datatypen lar deg lagre NULL-verdier, og kolonnen er deaktivert på kolonnenivå, vil et forsøk på å sette inn en NULL-verdi i kolonnen mislykkes.

column_constraint - Denne klausulen spesifiserer begrensningene som vil bli definert for kolonnen. Syntaksen til setningen er som følger ( lysbilde 4 ):

La oss vurdere formålet med parameterne.

CONSTRAINT er et valgfritt nøkkelord etterfulgt av navnet på begrensningen på kolonneverdiene (constraint_name). Begrensningsnavn må være unike i databasen.

STANDARD - Angir standardverdien for kolonnen. Denne verdien vil bli brukt når du setter inn en rad hvis ingen verdi er spesifisert for kolonnen.

NULL | IKKE NULL - nøkkelord som tillater (NULL) eller ikke tillater (IKKE NULL) lagring av NULL-verdier i kolonnen. Hvis det ikke er angitt noen standardverdi for en kolonne, vil det å sette inn en rad med en ukjent verdi for kolonnen forsøke å sette inn en NULL-verdi i kolonnen. Hvis NOT NULL-begrensningen er spesifisert for kolonnen, vil forsøket på å sette inn en rad bli avvist og brukeren vil motta en tilsvarende feilmelding.

PRIMÆR NØKKEL - definisjon av primærnøkkelen på nivået til én kolonne (dvs. primærnøkkelen vil kun bestå av verdiene til én kolonne). Hvis det er nødvendig å danne en primærnøkkel basert på to eller flere kolonner, må en slik integritetsbegrensning spesifiseres på tabellnivå. Husk imidlertid at kun én primærnøkkel kan opprettes for hver tabell.

UNIQUE - en indikasjon på å lage en UNIK integritetsbegrensning for en kolonne, som vil sikre unikheten til hver enkelt verdi i en kolonne i den kolonnen. Flere UNIKE integritetsbegrensninger kan opprettes på en tabell.

FOREIGN KEY ... REFERANSER - en indikasjon på at kolonnen vil tjene som en fremmednøkkel for tabellen hvis navn er spesifisert ved hjelp av parameteren<имя_главной_таблицы>.

(kolonnenavn [, ..., n]) - en kolonne eller en kommadelt liste over kolonner i hovedtabellen inkludert i FOREIGN KEY-begrensningen. I dette tilfellet kan kolonnene som er inkludert i fremmednøkkelen bare referere til kolonnene til primærnøkkelen eller kolonnene med den UNIKE begrensningen i tabellen.

PÅ SLETT (CASCADE | INGEN HANDLING) - Disse nøkkelordene bestemmer handlingen som skal utføres når en rad slettes fra hovedtabellen. Hvis nøkkelordet CASCADE er spesifisert, vil raden i den avhengige tabellen også bli slettet når en rad slettes fra hovedtabellen (overordnet). Hvis du spesifiserer nøkkelordet INGEN HANDLING i et slikt tilfelle, vil det oppstå en feilmelding. Standard er INGEN HANDLING.

VED OPPDATERING (CASCADE | INGEN HANDLING) – Disse nøkkelordene bestemmer handlingen som skal utføres når en rad i hovedtabellen endres. Hvis nøkkelordet CASCADE er spesifisert, vil raden i den avhengige tabellen også bli endret når en rad fra hovedtabellen (overordnet) endres. Hvis du bruker nøkkelordet INGEN HANDLING i et slikt tilfelle, vil det oppstå en feilmelding. Standard er INGEN HANDLING.

CHECK er en integritetsbegrensning som initierer kontroll av verdier som legges inn i en kolonne (eller kolonner).

boolean_expression er et boolesk uttrykk som brukes for CHECK-begrensningen.

Begrensninger på tabellnivå

Syntaksen for CREATE TABLE-kommandoen er å bruke leddet<ограничение_таблицы>som definerer integritetsbegrensninger på tabellnivå. Syntaksen til setningen er som følger (lysbilde 5) .

Formålet med parametrene er det samme som formålet med tilsvarende parametre i tilbudet.<ограничение_столбца > ... Imidlertid i setningen<ограничение_таблицы>det er noen nye alternativer:

kolonnenavn er kolonnen (eller listen over kolonner) som du vil pålegge integritetsbegrensninger.

- metode for å bestille data i indeksen. Indeksen opprettes når du spesifiserer søkeordene PRIMÆRKØKKEL, UNIK. Hvis du angir en ASC-verdi, vil dataene i indeksen bli sortert i stigende rekkefølge; hvis du angir en DESC-verdi, vil de bli sortert i synkende rekkefølge. Standard er ASC.

Eksempler på å lage tabeller

Som et eksempel kan du vurdere instruksjonene for å lage sesjonsdatabasetabeller:

Tabellen "Studenter" består av følgende kolonner:

ID_Student - INTEGER datatype, unik nøkkel;

Group_number - datatype CHAR, lengde 6;

lysbilde 6).

Adresse og Telefon, innførte restriksjoner IKKE NULL

For å lage "Disipliner"-tabellen ble kommandoen brukt (lysbilde 7).

Tabellen inneholder 2 kolonner (ID_Disiplin, Navn).

Kolonner ID_Disiplin, Navn innførte restriksjoner IKKE NULL som forbyr inntasting av en rad når kolonneverdien er udefinert.

Kolonne ID_Disiplinerklært som primærnøkkel, og på verdiene som er lagt inn i kolonnen Navn, unikhetsbetingelsen er pålagt.

Tabellen "Studieplan" inneholder følgende kolonner:

ID_Disiplin - datatype INTEGER;

Semester - INTEGER datatype;

Antall_timer - datatype INTEGER;

Tabellen ble opprettet ved hjelp av følgende kommando (lysbilde 8).

For kolonneverdier Semester Det er formulert et logisk uttrykk som lar bare verdier fra 1 til 10 legges inn.

Pivot_Note-tabellen består av følgende kolonner:

ID_Student - INTEGER datatype, unik nøkkelkolonne;

ID_Plan - INTEGER datatype, unik nøkkelkolonne;

Evaluering - datatype INTEGER;

Dato_Dato - datatype DATETIME;

ID_Teacher er INTEGER-datatypen.

Tabellen ble opprettet ved hjelp av følgende kommando (lysbilde 9).

Restriksjoner er pålagt alle kolonner i tabellen IKKE NULL som forbyr inntasting av en rad når kolonneverdien er udefinert.

For kolonneverdier Karakter Det er formulert et logisk uttrykk som lar bare verdier fra 0 til 5 legges inn: 0 - ikke bestått, 1 - bestått, 2 - utilfredsstillende, 3 - tilfredsstillende, 4 - bra, 5 - utmerket.

Og til slutt, la oss liste opp kolonnene "Personnel_Composition":

ID_Teacher - INTEGER datatype, unik nøkkel;

Etternavn - datatype CHAR, lengde 30;

Navn - datatype CHAR, lengde 15;

Patronymisk - datatype CHAR, lengde 20;

Posisjon - datatype CHAR, lengde 20;

Stol - datatype CHAR, lengde 3;

Adresse - datatype CHAR, lengde 30;

Telefon - datatype CHAR, lengde 8.

Tabellen ble opprettet ved hjelp av følgende kommando (lysbilde 10).

For alle kolonner i tabellen, bortsett fra kolonner Adresse og Telefon, innførte restriksjoner IKKE NULL som forbyr inntasting av en rad når kolonneverdien er udefinert.

For tabellene Tutorial_plan og Pivot_sheet må fremmednøkler bygges som kobler sammen sesjonsdatabasetabellene:

FK_discipline er en fremmednøkkel som kobler sammen tabellene "Curriculum_plan" og "Disipliner" etter kolonnen for disiplin ID_;

FK_Human_Composition - en fremmednøkkel som kobler sammen tabellene "Curriculum_plan" og "Personnel_staff" ved kolonnen ID_Teacher;

FK_Student - en fremmednøkkel som kobler sammen tabellene Pivot_Notification og Studenter med ID_Student-kolonnen;

FK_Plan er en fremmednøkkel som kobler sammen Pivot_notification og Training_plan-tabellene etter kolonne ID _plan.

Vi vil vurdere å legge til fremmednøkler til tabeller senere når vi diskuterer funksjonene til kommandoen ENDRE TABELL.

17.1.2. Endre tabellstruktur - kommando ENDREBORD

Uansett hvor nøye du planlegger strukturen til en tabell, noen ganger må du gjøre noen endringer i den. Anta at du må legge til hjemmetelefonnummeret og hjemmeadressen til den allerede dannede lærertabellen. Denne operasjonen kan utføres på forskjellige måter. Du kan for eksempel slippe en tabell med gammel struktur og lage en ny tabell med ønsket struktur i stedet. Ulempen med denne metoden er at det vil være nødvendig å kopiere dataene i tabellen et sted og omskrive dem til en ny tabell etter opprettelsen.

Spesiallag ENDRE TABELL er ment å endre strukturen til tabellen. Den kan brukes til å endre egenskaper for eksisterende kolonner, slette eller legge til kolonner i en tabell, og administrere integritetsbegrensninger både på kolonnenivå og på tabellnivå, dvs. utføre følgende funksjoner:

Legg til en ny kolonnedefinisjon i tabellen;

Fjern en kolonne fra en tabell;

Endre standardverdien for en kolonne;

Legg til eller fjern primærnøkkelen til en tabell;

Legg til eller fjern en fremmednøkkel til en tabell;

Legg til eller fjern en unikhetsbetingelse;

Legg til eller fjern en betingelse for en verdi.

Generalisert kommandosyntaks ENDRE TABELL presentert på lysbildet (lysbilde 11).

ALTER TABLE kommando tar seg av alle handlingene med å kopiere data til en midlertidig tabell, slette den gamle tabellen, lage en ny tabell med ønsket struktur i stedet, og deretter skrive dataene inn i den.

Tilordne mange kommandoparametere og nøkkelord ENDRE TABELL lik tilordningen av de tilsvarende kommandoparameterne og nøkkelordene LAG BORD (for eksempel syntaksen til konstruksjonen<определение_столбца>samsvarer med syntaksen til en lignende kommandokonstruksjon LAG TABELL).

De viktigste modusene for bruk av kommandoen ENDRINGSTABELLEN er som følger:

Legge til en kolonne;

Slette en kolonne;

Kolonne modifikasjon;

Endre, legge til og fjerne begrensninger (primær- og fremmednøkler, standardverdier).

Legger til en kolonne

For å legge til en ny kolonne, bruk nøkkelordet LEGGE TIL etterfulgt av kolonnedefinisjonen.

La oss for eksempel legge til kolonnen "Opptaksår" i tabellen "Studenter" (lysbilde 12). Etter å ha utført denne kommandoen, vil en annen kolonne bli lagt til "Student"-tabellstrukturen med en standardverdi lik gjeldende år (standardverdien beregnes ved hjelp av to innebygde funksjoner -ÅR () og GETDATE ()).

Kolonnemodifikasjon

For å endre en eksisterende kolonne i en tabell, bruk nøkkelordet ENDRE KOLONNE ... Kolonneegenskaper kan ikke endres hvis:

kolonnen deltar i en PRIMÆR NØKKEL eller UTENLANDSK NØKKEL-begrensning;

kolonnen har CHECK eller UNIQUE integritetsbegrensninger (unntaket er kolonner med datatyper med variabel lengde, det vil si datatyper som starter med var);

hvis en standardverdi er knyttet til kolonnen (i dette tilfellet kan du endre lengden, totalt antall sifre eller antall sifre etter desimaltegnet med samme datatype).

Når du definerer en ny datatype for en kolonne, husk at den gamle datatypen må konverteres til den nye.

Et eksempel på endring av kolonnen "Gruppenummer" i tabellen "Studenter" (datatype INTEGER er erstattet med CHAR) ( lysbilde 12).

Sletting av en kolonne

For å fjerne en kolonne fra en tabell, bruk klausulen DROPPE KOLONNE <имя_столбца>... Når du sletter kolonner, husk at du ikke kan slette kolonner med integritetsbegrensninger CHECK, UTENLANDSKE NØKKEL, UNIK eller PRIMÆR NØKKEL og også kolonner som standardverdier er definert for (i form av en integritetsbegrensning på kolonnenivå eller på tabellnivå).

Tenk for eksempel på kommandoen for å slette kolonnen "Opptaksår" fra tabellen "Student" (lysbilde 12).

Denne kommandoen vil ikke bli utført. Når du legger til en kolonne, ble en standardverdi definert.

Legger til begrensninger på tabellnivå

For å legge til begrensninger på tabellnivå, bruk klausulen LEGG TIL BEGRENSNING <имя_ограничения>.

Som et eksempel kan du vurdere kommandoene for å legge til fremmednøkler til sesjonsdatabasetabellene (lysbilde 13):

· legge til fremmednøkler til "Study_plan"-tabellen (opprette en kobling med navnet FK _Disiplin og forbindelse med navnet FK _ Personal_Composition);

· legge til fremmednøkler til "Pivot_notification"-tabellen (opprette en kobling med navnet FK _Student- og navnlenker FK _plan).

Etter konstruksjon LEGG TIL BEGRENSNING en navngitt begrensning opprettes. Det skal bemerkes at fjerning av enhver begrensning på tabellnivå kun skjer etter navnet, så begrensningen må navngis (slik at den kan fjernes).

Fjerner restriksjoner

For å fjerne en integritetsbegrensning fra en tabell, bruk klausulen DROPPSBEGRENSNING <имя_ограничения>.

Å fjerne en integritetsbegrensning er bare mulig når den er navngitt (dvs<определение_ограничения>inneholder navnebegrensninger BEGRENSNING).

Slett konstruert fremmednøkkelkommando FK _Disiplin fra "Curriculum_plan"-tabellen ser slik ut (lysbilde 14).

På sklien ( lysbilde 14) viser fjerningen av den tidligere konstruerte begrensningen på standardverdien DEF _Gruppe_nummer.

17.1.3. Slippe tabeller - kommando MISTEBORD

Å slippe en tabell gjøres ved å bruke kommandoen SLIPP TABELL ( lysbilde 14).

Kommandoens eneste argument spesifiserer navnet på tabellen som skal slettes.

Operasjonen med å slippe et bord krever i noen tilfeller litt oppmerksomhet. Kan ikke slette en tabell hvis du bruker en integritetsbegrensning på den UTENLANDSKE NØKKEL en annen tabell refererer: et forsøk på å slette "Disipliner"-tabellen vil føre til en feilmelding, fordi disiplintabellen refereres til av tabellen "Curriculum_plan".

17.2. Dataledelse

Det endelige målet for ethvert databasestyringssystem er å legge inn, endre, slette og hente data. La oss vurdere metoder for databehandling ved å bruke SQL-språket.

17.2.1. Henter data - Kommando PLUKKE UT

Hovedverktøyet for å hente data i SQL-språket er kommandoen PLUKKE UT ... Ved å bruke denne kommandoen kan du få tilgang til data presentert som en samling av tabeller av nesten hvilken som helst kompleksitet.

Den mest brukte er en forenklet versjon av kommandoen PLUKKE UT har følgende syntaks (lysbilde 15).

SELECT-setning er delt inn i separate seksjoner, som hver har sitt eget formål. Fra den ovennevnte syntaktiske beskrivelsen kan det ses at bare seksjonene er nødvendige. VELG og FRA og resten av avsnittene kan utelates. En fullstendig liste over seksjoner vises på lysbildet (lysbilde 15).

VELG seksjon

Hovedformålet med seksjonen PLUKKE UT (en av de to obligatoriske delene som må spesifiseres i ethvert søk) - spesifisere et sett med kolonner som returneres etter at spørringen er utført, dvs. utseendet til resultatet. I det enkleste tilfellet returneres en kolonne fra en av tabellene som deltar i spørringen. I mer komplekse situasjoner genereres et sett med verdier i en kolonne som et resultat av å evaluere et uttrykk. Disse kolonnene kalles beregnede kolonner og er ikke navngitt som standard.

Om nødvendig kan brukeren spesifisere et vilkårlig navn for kolonnen som returneres etter å ha utført spørringen. Et slikt navn kalles et alias ( alias ). Normalt er det ikke nødvendig å tildele et alias, men i noen tilfeller er det nødvendig å spesifisere det eksplisitt. Dette er oftest nødvendig når du arbeider med en seksjon. INN I der hver av de returnerte kolonnene må ha et navn, og dette navnet må være unikt.

I tillegg til det som er sagt, ved hjelp av seksjonen PLUKKE UT du kan begrense antall rader som skal inkluderes i valgresultatet. Seksjonssyntaks VELG neste ( lysbilde 16).

La oss vurdere formålet med parameterne.

Nøkkelord ALLE | DISTINKT. Når du spesifiserer et nøkkelord ALLE søkeresultatene sendes ut alle rader som tilfredsstiller de formulerte betingelsene, og tillater dermed inkludering av identiske rader i resultatet (likheten til rader bestemmes på nivået av utvalgsresultatet, og ikke på nivået av kildedataene). Parameter ALLE brukes som standard.

Hvis du er i en SELECT-spørring nøkkelordet er spesifisert DISTINKT , vil ikke mer enn én duplikatrad inkluderes i utvalgsresultatet. På denne måten vil hver returnerte streng være unik. I dette tilfellet bestemmes unikheten til en rad på nivået til radene i utvalgsresultatet, og ikke på nivået til kildedataene. Hvis to kolonner er inkludert i utvalgsresultatet, vil unikhet bestemmes av verdiene til begge disse kolonnene. Individuelt kan verdiene i den første og andre kolonnen gjentas, men kombinasjonen av verdier i begge kolonnene må være unik. Lignende regler gjelder for flere kolonner.

Vurder resultatet av å bruke søkeord ALT og DISTINKT ved å bruke eksemplet med å velge Semester- og Rapporteringskolonnene fra "Study_plan"-tabellen i "Session"-databasen ( lysbilde 17 ). Først, la oss utføre en spørring som spesifiserer nøkkelordet ALLE ... Et fragment av resultatet vises på lysbildet. La oss nå erstatte nøkkelordet ALLE på DISTINCT ... I dette tilfellet er søkeresultatet som vises på lysbildet rader som inneholder de samme verdiene i kolonnene som bare er inkludert én gang. Dette resultatet skal kun indikere tilstedeværelsen av ulike rapporteringsformer i semestre.

NøkkelordTOPP n. Ved å bruke TOP n nøkkelordet, hvor n er en numerisk verdi, kan du velge ikke alle radene i resultatet, men bare de første n. I dette tilfellet er de første radene i utvalgsresultatet valgt, og ikke de originale dataene. Derfor kan settet med rader som et resultat av valget når TOP-nøkkelordet spesifiseres endres avhengig av sorteringsrekkefølgen. Hvis forespørselen bruker delen HVOR , så opererer TOP-nøkkelordet på settet med rader som returneres etter å ha brukt den boolske betingelsen definert i delen HVOR.

La oss demonstrere bruken av TOP-nøkkelordet (lysbilde18 )

I dette eksemplet, fra tabellen Studenter i Session-databasen ble de første 5 radene valgt.

Du kan også velge ikke et fast antall rader, men en viss prosentandel av alle rader som tilfredsstiller betingelsen. For å gjøre dette må du legge til et nøkkelord PROSENT.

Totalt hadde tabellen 115 linjer, derfor vil 10 % være 11,5 linjer. Som et resultat vil 12 linjer vises.

Hvis det angitte antallet prosent av rader er et ikke-heltall, runder serveren alltid opp.

Vi gir også et eksempel som viser effekten av sorteringsrekkefølge på det returnerte radsettet (lysbilde19 ).

Når spesifisert sammen med en setning REKKEFØLGE ETTER søkeord MED BÅND resultatet vil også inkludere rader som samsvarer med verdien av sorteringskolonnen med de sist viste spørringsradene VELG TOPP n [PROSENT].

Ved hjelp av et nøkkelord MED BÅND i forrige eksempel vil det gi utstedelse av informasjon som svar på en forespørsel om informasjon om alle studenter i den første gruppen i rekkefølge (lysbilde20 ).

By på<Список_выбора>. Setningssyntaks<Список_выбора>neste (lysbilde 21).

"*"-symbolet betyr at resultatet inkluderer alle kolonnene i listen over seksjonstabeller FRA.

Hvis resultatet ikke trenger å inkludere alle kolonnene av alle tabeller, så kan du eksplisitt spesifisere navnet på objektet du må velge alle kolonnene fra (<Имя_таблицы>.* eller<Table_alias>. *).

En egen tabellkolonne er inkludert i valgresultatet ved å spesifisere kolonnenavnet (parameter<Имя_столбца>). Kolonnen må tilhøre en av tabellene spesifisert i FROM-leddet. Hvis en kolonne med det angitte navnet finnes i mer enn én datakilde oppført i FROM-leddet, må du spesifisere navnet på datakilden som kolonnen tilhører i formatet<Имя_таблицы>.<Имя_столбца>Ellers vil en feilmelding vises.

La oss for eksempel prøve å velge data fra disiplin-ID-kolonnen, som er tilgjengelig i tabellene Disipline og Academic_plan:

En feilmelding vil bli returnert som indikerer feil bruk av navnet 'ID_disiplin'.

Det vil si at i dette tilfellet må du eksplisitt spesifisere navnet på datakilden som kolonnen tilhører, for eksempel:

Kolonner som returneres som et resultat av å utføre en spørring, kan ha alias. Aliaser lar deg endre navnet på kildekolonnen eller navngi kolonnen hvis innhold hentes som et resultat av å evaluere et uttrykk. Aliasnavnet angis ved hjelp av parameteren<Псевдоним_столбца>... AS-nøkkelordet er valgfritt når du spesifiserer et alias. Generelt krever ikke serveren unike kolonnenavn i henteresultatet, så forskjellige kolonner kan ha samme navn eller aliaser.

Kolonner som et resultat av et utvalg kan ikke bare være en kopi av en kolonne i en av kildetabellene, men også dannes basert på beregningen av et uttrykk. En slik kolonne i utvalgslisten er spesifisert ved hjelp av konstruksjonen<Выражение> [ <Псевдоним_столбца>]. I dette tilfellet kan uttrykket inneholde konstanter, kolonnenavn, funksjoner, så vel som deres kombinasjoner. I tillegg kan et alias tilordnes til en kolonne dannet på grunnlag av å evaluere et uttrykk ved å spesifisere det ved å bruke parameteren<Псевдоним_столбца>... Som standard har en beregnet kolonne ikke noe navn.

En annen måte å danne en beregnet kolonne på er å bruke likhetstegnkonstruksjonen:<Псевдоним_столбца> = <Выражение>... Den eneste forskjellen mellom denne metoden og den forrige er at et alias må spesifiseres. I det enkleste tilfellet er et uttrykk et kolonnenavn, konstant, variabel eller funksjon. Hvis kolonnenavnet brukes som et uttrykk, får vi en annen måte å spesifisere et alias for kolonnen.

Tenk på følgende eksempel. Anta at for tabellen "Studenter" er det nødvendig å bygge en spørring som presenterer etternavn, fornavn og patronym i én kolonne. Ved å bruke operasjonen for sammenkobling (tilføyelse) av tegnstrenger og verdien av det fulle navnet som kolonnealias, konstruerer vi spørringen ( lysbilde 22 ).

FRA klausul

Bruker seksjonen FRA definerer datakildene som spørringen skal fungere med.

Seksjonssyntaks FRA neste ( lysbilde23 )

Ved første øyekast ser seksjonsdesignet enkelt ut. Men ved nærmere ettersyn viser det seg å være ganske komplekst. Jobber hovedsakelig med en seksjon FRA det er en kommadelt liste over datakildene som spørringen skal fungere med. Den faktiske datakilden angis ved hjelp av en setning<Источник_данных>, hvis syntaks vises på lysbildet.

Ved å bruke parameteren<имя_таблицы>navnet på en vanlig tabell er angitt. Parameter<псевдоним_таблицы>brukes til å tilordne et alias til tabellen, som det må refereres til i spørringen. Ofte brukes tabellaliaser for å gjøre referansen til ønsket tabell mer praktisk og kort. For eksempel, hvis tabellnavnet "Study_plan" er ofte nevnt i søket ditt, kan du bruke et alias, for eksempel, tpl ... Angi et nøkkelord SOM er valgfritt.

WHERE-klausul

WHERE-klausul er ment for å pålegge vertikale filtre på dataene som behandles av forespørselen. Med andre ord, ved å bruke seksjonen HVOR du kan begrense settet med rader som er inkludert i utvalgsresultatet. For dette er det spesifisert en logisk betingelse, som avgjør om raden skal inkluderes i utvalget ved forespørsel eller ikke. Strengen inkluderes i utvalgsresultatet bare hvis det boolske uttrykket returnerer en verdi EKTE.

Generelt inneholder et boolsk uttrykk navnene på kolonnene i tabellene som spørringen opererer på. For hver rad som returneres av spørringen, blir et boolsk uttrykk evaluert ved å erstatte de spesifikke verdiene fra den tilsvarende raden med kolonnenavnene. Hvis du evaluerer uttrykket returnerer en verdi EKTE , det vil si at uttrykket er sant, så vil strengen inkluderes i det endelige resultatet. Ellers er ikke strengen inkludert i resultatet. Om nødvendig kan du spesifisere mer enn ett boolsk uttrykk ved å sette dem sammen med boolske operatorer ELLER og OG.

Tenk på syntaksen til seksjonen HVOR ( lysbilde 24).

Under konstruksjon<условие_отбора>du kan definere en hvilken som helst boolsk betingelse, ved oppfyllelse av hvilke raden vil bli inkludert i resultatet.

Eksemplet på lysbildet demonstrerer logikken i seksjonen. HVOR ... Dette vil returnere en liste over alle studenter som kom inn på fakultetet før 2000.

I tillegg til sammenligningsoperasjoner (=,>,<, >=, <=) и логических операторов ELLER, OG, IKKE ved dannelse av en seleksjonsbetingelse kan flere logiske operatorer brukes for å utvide mulighetene for databehandling. La oss ta en titt på noen av disse operatørene.

OperatørMELLOM. Denne operatoren kan brukes til å bestemme om verdien til den angitte verdien er innenfor det spesifiserte området. Syntaksen for bruk av operatoren er som følger ( lysbilde 25 ).

<Выражение>angir verdien som skal sjekkes, og argumentene<начало_диапазона>og<конец_диапазона>bestemme de mulige grensene for endringen. Operatørbruk IKKE sammen med operatøren MELLOM lar deg angi området utenfor som den merkede verdien kan endres.

Når utført, operatøren MELLOM er konvertert til en to-sammenligningskonstruksjon.

La oss vurdere et eksempel på bruk av operatøren MELLOM ( lysbilde 25). Som et resultat av å fullføre instruksjonene, vil vi motta en liste over disipliner i læreplanen med antall timer fra 50 til 100.

OperatørI. Operatøren lar deg spesifisere et sett med mulige verdier for den sjekkede verdien i valgtilstanden. Syntaksen for bruk av operatoren er som følger (lysbilde 26).

<Выражение>angir verdien som skal sjekkes, og argumentene<выражение1>,…, <выражение N > spesifiser en kommadelt liste over verdier som den sjekkede verdien kan ta. Nøkkelord IKKE utfører logisk negasjon.

Tenk på et eksempel på bruk av operatøren IN ( lysbilde 26). Som et resultat av å følge instruksjonene vil vi motta linjene i læreplanen for fagene "Engelsk" og "Fysisk kultur".

OperatørSOM. Bruke operatøren SOM du kan sammenligne et uttrykk for en tegntype mot et gitt mønster. Syntaksen til operatøren er som følger (lysbilde 27).

<Образец>angir et tegnmønster for sammenligning og er omgitt av anførselstegn. Malen kan inneholde skilletegn. Følgende skilletegn er tillatt (lysbilde 27):

% - kan erstattes i et symbolsk uttrykk med et hvilket som helst antall vilkårlige tegn;

_ - kan erstattes i et symbolsk uttrykk med et hvilket som helst, men bare ett symbol;

[ ABC0-9] - kan erstattes i et symbolsk uttrykk med bare ett tegn fra settet som er angitt i hakeparenteser (en bindestrek brukes for å indikere et område);

[^ ABC0-9] - kan erstattes i et symbolsk uttrykk med bare ett tegn, bortsett fra de som er angitt i hakeparenteser (en bindestrek brukes for å indikere et område).

Tenk på et eksempel på bruk av operatøren (lysbilde 27). Bruken av en prøve for verdien av kolonnen Posisjon tillot oss i dette tilfellet å velge rader med verdiene "St.prep." og "Prof"

KapittelREKKEFØLGEAV

BESTILL ETTER seksjon er for å bestille datasettet returnert etter at spørringen er utført. Fullfør seksjonssyntaks BESTILL INNEN neste ( lysbilde 28).

Parameter<условие_сортировки>krever å spesifisere et uttrykk som sorteringen av strenger skal utføres i henhold til. I det enkleste tilfellet er dette uttrykket kolonnenavnet til en av spørringsdatakildene.

Det skal bemerkes at uttrykket, som radene er sortert etter, også kan bruke kolonner som ikke er spesifisert i SELECT-delen, det vil si at de ikke er inkludert i utvalgsresultatet.

BESTILL ETTER seksjon tillater bruk av nøkkelordene ASC og DESC, som kan brukes til å spesifisere eksplisitt hvordan strenger skal bestilles. Hvis du spesifiserer ASC-nøkkelordet, vil dataene bli sortert i stigende rekkefølge. Hvis du vil sortere dataene i synkende rekkefølge, spesifiser nøkkelordet DESC. Stigende sortering brukes som standard.

Data kan sorteres etter flere kolonner. For å gjøre dette må du angi kolonnenavnene atskilt med komma i sorteringsrekkefølgen. Dataene sorteres først etter kolonnen som er navngitt først i seksjonen REKKEFØLGE ETTER ... Deretter, hvis det er mange rader med samme verdi i den første kolonnen, utføres en ekstra sortering på disse radene etter den andre kolonnen (innenfor en gruppe med samme verdi i den første kolonnen), og så videre.

La oss gi et eksempel på sortering etter to kolonner (lysbilde 28).

UNION delen

UNION delen tjener til å kombinere utvalgsresultater returnert av to eller flere søk.

Tenk på syntaksen til seksjonen UNION ( lysbilde 29).

For å bruke en sammenføyningsoperasjon på søkeresultater, må de oppfylle følgende krav:

spørringer må returnere det samme settet med kolonner (og det er nødvendig å sikre samme rekkefølge av kolonner i hver av spørringene);

datatypene til de korresponderende kolonnene i den andre og påfølgende spørringene må støtte implisitt konvertering eller samsvare med datatypen til kolonnene i den første spørringen;

ingen av resultatene kan sorteres ved å bruke ORDER BY-klausulen (men det samlede resultatet kan sorteres som vist nedenfor)

Angi et nøkkelord ALLE instruerer å inkludere dupliserte linjer i resultatet. Som standard er ikke dupliserte linjer inkludert i resultatet.

La oss demonstrere anvendelsen av seksjonen UNION ... Tenk på tabellene "Personal_Composition" og "Students" og prøv å bygge for eksempel en generell liste over både elever og lærere, hvis telefonnummer begynner med 120. La oss sortere den resulterende listen alfabetisk ved å legge til en setning REKKEFØLGE ETTER ( lysbilde 29).

Når du slår sammen tabeller, blir kolonnene i det resulterende datasettet alltid tildelt de samme navnene som i den første spørringen som ble koblet sammen.

1 stemme

Velkommen til bloggsiden min. I dag skal vi snakke om sql-spørringer for nybegynnere. Noen webansvarlige kan ha et spørsmål. Hvorfor lære sql? Kan du ikke gjøre det?

Det viser seg at dette ikke vil være nok til å lage et profesjonelt internettprosjekt. Sql brukes til å jobbe med databaser og lage applikasjoner for WordPress. La oss se nærmere på hvordan du bruker spørringer.

Hva det er

SQL er et strukturert spørrespråk. Designet for å definere typen data, gi tilgang til dem og behandle informasjon i løpet av korte tidsrom. Den beskriver komponentene eller en slags resultater du ønsker å se på Internett-prosjektet.

Enkelt sagt lar dette programmeringsspråket deg legge til, endre, søke og vise informasjon i databasen. Populariteten til mysql skyldes det faktum at den brukes til å lage dynamiske Internett-prosjekter basert på en database. Derfor, for å utvikle en funksjonell blogg, må du lære dette språket.

Hva kan gjøre

SQL-språket tillater:

  • lage tabeller;
  • endre motta og lagre forskjellige data;
  • kombinere informasjon i blokker;
  • beskytte data;
  • opprette forespørsler i tilgang.

Viktig! Etter å ha behandlet sql, kan du skrive applikasjoner for WordPress uansett kompleksitet.

Hvilken struktur

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

Hun har et navn, kolonner og en rad med litt informasjon. Du kan lage slike tabeller ved å bruke sql-spørringer.

Hva du trenger å vite


Høydepunkter når du lærer SQL

Som nevnt ovenfor, brukes spørringer til å behandle og legge inn ny informasjon i en database som består av tabeller. Hver av linjene er en egen oppføring. Så la oss lage en database. For å gjøre dette, skriv kommandoen:

Opprett database 'bazaname'

I anførselstegn skriver du navnet på databasen på latin. Prøv å finne et meningsfullt navn for henne. Ikke lag en base som "111", "www" og lignende.

Etter å ha opprettet databasen, installer:

SET NAME "utf-8"

Dette er nødvendig for at innholdet på siden skal vises riktig.

Nå lager vi en tabell:

LAG TABELL 'bazaname'. 'Bord' (

id INT (8) IKKE NULL AUTO_INCREMENT PRIMÆR NØKKEL,

logg VARCHAR (10),

passerer VARCHAR (10),

dato DATO

På den andre linjen har vi skrevet tre attributter. La oss se hva de betyr:

  • NOT NULL-attributtet betyr at cellen ikke vil være tom (dette feltet er obligatorisk);
  • AUTO_INCREMENT verdi - autofullføring;
  • PRIMARY KEY er primærnøkkelen.

Hvordan legge til informasjon

For å fylle feltene i den opprettede tabellen med verdier, bruk INSERT-setningen. Vi skriver følgende kodelinjer:

SETTE INN I "tabell"

(pålogging, pass, dato) VERDIER

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

I parentes angir vi navnet på kolonnene, og i den neste - verdiene.

Viktig! Observer rekkefølgen av kolonnenavn og betydninger.

Hvordan oppdatere informasjon

For å gjøre dette, bruk UPDATE-kommandoen. La oss se hvordan du endrer passordet for en bestemt bruker. Vi skriver følgende kodelinjer:

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

Endre nå passordet '12345678'. Endringer gjøres på linjen med "id" = 1. Hvis du ikke skriver WHERE-kommandoen, vil alle linjer endres, ikke en spesifikk.

Jeg anbefaler at du kjøper boken" SQL for Dummies ". Med dens hjelp vil du kunne jobbe profesjonelt med databasen trinn for trinn. All informasjon er strukturert fra enkel til kompleks og vil bli godt mottatt.

Slik sletter du en oppføring

Hvis du skrev noe feil, korriger det med DELETE-kommandoen. Fungerer på samme måte som UPDATE. Vi skriver følgende kode:

SLETT FRA 'tabell' HVOR id = '1'

Henter informasjon

For å hente verdier fra databasen, bruk SELECT-kommandoen. Vi skriver følgende kode:

VELG * FRA 'tabell' HVOR id = '1'

I dette eksemplet velger vi alle tilgjengelige felt i tabellen. Dette skjer hvis du skriver en stjerne "*" i kommandoen. Hvis du trenger å velge en prøveverdi, skriver vi slik:

SELECT-logg, pass FROM-tabell WHERE id = '1'

Det skal bemerkes at evnen til å jobbe med databaser ikke vil være nok. For å lage et profesjonelt Internett-prosjekt, må du lære hvordan du legger til data fra databasen på sidene. For å gjøre dette, gjør deg kjent med php-nettprogrammeringsspråket. Dette vil hjelpe deg klasseromskurs av Mikhail Rusakov .


Å slippe et bord

Oppstår med en DROP-forespørsel. For å gjøre dette, skriv følgende linjer:

DROP TABELL tabell;

Utgang av en post fra en tabell i henhold til en spesifikk tilstand

Tenk på en kode som denne:

VELG ID, land, by FRA tabell HVOR personer> 150000000

Den vil vise registreringer av land der befolkningen er over hundre og femti millioner.

Union

Det er mulig å koble sammen flere tabeller ved å bruke Join. Hvordan det fungerer, se denne videoen mer detaljert:

PHP og MySQL

Nok en gang vil jeg understreke at forespørsler når man oppretter et internettprosjekt er en vanlig ting. For å bruke dem i php-dokumenter, følg denne prosedyren:

  • Vi kobler til databasen ved å bruke kommandoen mysql_connect ();
  • Bruk mysql_select_db () for å velge den nødvendige databasen;
  • Vi behandler forespørselen ved å bruke mysql_fetch_array ();
  • Vi lukker forbindelsen med kommandoen mysql_close ().

Viktig! Å jobbe med en database er ikke vanskelig. Det viktigste er å skrive forespørselen riktig.

Nybegynnere webansvarlige vil tenke. Hva skal du lese om dette emnet? Jeg vil gjerne anbefale boken til Martin Graber " SQL for rene dødelige ". Det er skrevet på en slik måte at alt vil være klart for nybegynnere. Bruk den som oppslagsbok.

Men dette er teori. Hva er situasjonen i praksis? I virkeligheten må et Internett-prosjekt ikke bare opprettes, men også bringes til TOPPEN av Google og Yandex. Videokurset " Oppretting og markedsføring av nettsider ».


Videoinstruksjon

Har du fortsatt spørsmål? Se nettvideoen mer detaljert.

Produksjon

Så å håndtere å skrive sql-spørringer er ikke så vanskelig som det ser ut til, men enhver webmaster må gjøre det. Dette vil hjelpe videokursene beskrevet ovenfor. Abonner på min VKontakte-gruppe å være den første som får vite om fremveksten av ny interessant informasjon.