Grunnleggende sql-kommandoer. Datatilgangsmekanisme. Strukturert spørringsspråk SQL. Historikk og standarder for SQL. Behandler SQL-kommandoer av Oracle-serveren. Forespørsler om fjerning
All konseptuell informasjon om relasjonsdatabaser og tabeller er bare nyttig hvis du vet hvordan du skal samhandle med dataene. SQL-språket består av strukturerte kommandoer for å legge til, endre og slette data fra en database. Disse kommandoene danner grunnlaget for samhandling med PostgreSQL-serveren.
Denne delen handler om "anatomien" til SQL-kommandoer. Den undersøker de strukturelle komponentene til kommandoer, og beskriver funksjonene til hver komponent og deres gjensidige relasjoner. Standard PostgreSQL kommandolinjeklient, psql, skriver ut resultatene av kommandoene i eksemplene gitt.
De fleste av SQL-kommandoeksemplene er spesifikke for booktown-databasen. All psql-utdata er prefikset med formen booktown=# .
Noen eksempler bruker testdb-testdatabasen. Som standard viser psql-ledeteksten bare databasenavnet og =#-symbolene, noe som indikerer at systemet er klart til å utstede en ny kommando (selv om du vil se =-symbolet dynamisk endres ettersom tilstanden til SQL-inndata overvåkes). Boken gir denne ledeteksten sammen med SQL-inndata og -utdata for å hjelpe deg med å bli komfortabel med psql-klientutgangen.
Psql-klienten er beskrevet i detalj i kapittel 4. Den er nevnt her kun for å klargjøre stilen til SQL-kommandoeksemplene.
Merk
Booktown-databaseskjemaet (sammen med eksempelposter) er plassert i booktown.sql-filen på CD-en. For å installere denne databasen, skriv inn kommandoen psql - U postgres template! ved ledeteksten. - f /mnt/cdrom/booktown.sql, der /mnt/cdrom er banen til den monterte CD-en og postgres er PostgreSQL-superbrukernavnet.
SQL-kommandoer begynner alltid med en handling (verb) - et ord eller en gruppe ord som beskriver operasjonen som utføres. I tillegg inneholder en SQL-kommando vanligvis en eller flere seksjoner som tydeliggjør betydningen. I tabellen 3.2 viser hovedhandlingene til SQL.
Tabell 3.2. Grunnleggende PostgreSQL-handlinger.
LAG DATABASE | Opprette en ny database |
LAG INDEKS | Opprette en ny indeks på en tabellkolonne |
LAG SEKVENS | Opprette en ny sekvens i en eksisterende database |
LAG BORD | Opprette en ny tabell i en eksisterende database |
LAG TRIGGER | Opprett en ny utløserdefinisjon |
LAG UTSIKT | Opprett en ny visning for en eksisterende tabell |
PLUKKE UT | Velge poster fra en tabell |
SETT INN | Sette inn en eller flere nye poster i en tabell |
OPPDATER | Endre data i eksisterende poster |
SLETT | Fjerne eksisterende poster fra en tabell |
DROPPE DATABASE | Ødelegge en eksisterende database |
SLIPP INDEKS | Fjerne en kolonneindeks fra en eksisterende tabell |
DROPPESEKVENS | Ødelegge en eksisterende sekvensgenerator |
DROPPE BORD | Ødelegge et eksisterende bord |
SLIPPE TRIGGER | Ødelegge en eksisterende utløserdefinisjon |
DROP VISNING | Ødelegge en eksisterende visning |
OPPRETT BRUKER | Opprette en ny PostgreSQL-brukerkonto i systemet |
ENDRE BRUKER | Endre en eksisterende PostgreSQL-brukerkonto |
DROPPE BRUKER | Sletting av en eksisterende PostgreSQL-brukerkonto |
STIPEND | Gi tilgangsrettigheter til et databaseobjekt |
OPPHAV | Fjerne tilgangsrettigheter til et databaseobjekt |
LAG FUNKSJON | Opprette en ny SQL-funksjon i en database |
LAG SPRÅK | Opprette en ny språkdefinisjon i databasen |
LAG OPERATØR | Opprette en ny SQL-setning i databasen |
LAG TYPE | Opprette en ny SQL-datatype i en database |
Structured Query Language ble utviklet av IBM på begynnelsen av 1970-tallet. I 1986 ble SQL først standardisert av ANSI-organisasjonene.
SQL er et kraftig og samtidig enkelt språk for databasebehandling. Det støttes av nesten alle moderne databaser. SQL er delt inn i to undersett av kommandoer: DDL (Data Definition Language) og DML (Data Manipulation Language). DDL-kommandoer brukes til å lage nye databaser, tabeller og kolonner, og DML-kommandoer brukes til å lese, skrive, sortere, filtrere, slette data.
Denne artikkelen vil se nærmere på DML-kommandoer, siden de brukes mye oftere.
DDL-kommandoerCREATE - brukes til å lage nye tabeller, kolonner og indekser.
DROP - brukes til å fjerne kolonner og indekser.
ALTER - brukes til å legge til nye kolonner i tabeller og endre spesifikke kolonner.
DML-kommandoerSELECT er den mest brukte kommandoen og brukes til å hente et sett med data fra en databasetabell. SELECT-kommandoen har følgende syntaks:
PLUKKE UT feltliste1 FRA tabellnavn ]
Operatører innenfor hakeparenteser er valgfrie, og den vertikale linjen betyr at en av de spesifiserte frasene må være til stede, men ikke begge.
La oss for eksempel lage en enkel spørring for å hente data fra feltene "navn" og "telefon" i "venner"-tabellen:
PLUKKE UT navn, telefon FRA venner
Hvis du trenger å få alle feltene i tabellen, er det ikke nødvendig å liste dem, bare legg inn en stjerne (*):
PLUKKE UT * FRA venner
For å ekskludere dupliserte oppføringer fra den viste listen, bruk DISTINCT nøkkelordet:
VELG DISTINKT Navn FRA venner
Hvis du trenger å få en egen post, brukes WHERE-klausulen. For eksempel må vi få telefonnummeret til "Vasya Pupkin" fra "venner"-tabellen:
PLUKKE UT * FRA venner HVOR Navn = "Vasya Pupkin"
eller omvendt, vi må finne ut hvem som eier telefonen 44-65-01:
PLUKKE UT * FRA venner HVOR telefon = "44-65-01"
I tillegg kan du bruke jokertegn, og dermed lage søkemønstre. LIKE-operatoren brukes til dette. LIKE-operatoren har følgende substitusjonsoperatorer:
* - samsvarer med en streng som består av ett eller flere tegn;
Matcher et hvilket som helst tegn;
Matcher ett tegn fra et spesifikt sett;
For eksempel, for å hente poster fra "navn"-feltet som inneholder ordet "Vasya", vil forespørselen se slik ut:
VELG * FRA venner HVOR Navn SOM "*Vasya*"
ORDER BY-klausulen brukes til å bestemme rekkefølgen data returneres i. Uten denne operatøren kan ikke rekkefølgen på de returnerte dataene forutsies. Nøkkelordene ASC og DESC lar deg bestemme sorteringsretningen. ASC sorterer i stigende rekkefølge, og DESC-ordrer i synkende rekkefølge.
For eksempel vil en forespørsel om å få en liste over poster fra "navn"-feltet i alfabetisk rekkefølge se slik ut:
VELG * FRA venner REKKEFØLGE ETTER Navn
Merk at ASC-nøkkelordet ikke er nødvendig fordi det er standard.
INSERT - denne kommandoen brukes til å legge til en ny post i tabellen. Det er skrevet som følger:
SETTE INN I tabellnavn VERDIER ( verdiliste)
Vær oppmerksom på at verditypene i listen over verdier må samsvare med verditypene til tabellfeltene, for eksempel:
SETTE INN I venner VERDIER ( "Anka the Machine Gunner", "32-09-81" )
Dette eksemplet legger til en ny oppføring i vennetabellen med de angitte verdiene.
UPDATE - Denne kommandoen brukes til å oppdatere data i en tabell og brukes oftest sammen med WHERE-leddet. UPDATE-kommandoen har følgende syntaks:
OPPDATER tabellnavn SETT feltnavn = betydning
Hvis du utelater WHERE-leddet, vil dataene i alle definerte felt i tabellen bli oppdatert. La oss for eksempel endre Vasya Pupkuns telefonnummer:
OPPDATER venner SETT telefon = "55-55-55" HVOR Navn = "Vasya Pupkin"
SLETT - som du sikkert allerede har forstått, brukes denne kommandoen til å slette poster fra tabellen. Som UPDATE, brukes DELETE-kommandoen vanligvis med en WHERE-klausul; hvis denne setningen utelates, vil alle data fra den angitte tabellen bli slettet. Syntaksen for DELETE-kommandoen er som følger:
SLETT FRA tabellnavn
La oss for eksempel fjerne denne irriterende Vasya Pupkin fra bordet vårt :) :
SLETT FRA venner HVOR Navn = "Vasya Pupkin"
SluttenI denne artikkelen snakket jeg om de viktigste SQL-operatørene, de er ganske tilstrekkelige for å jobbe med databaser; Jeg vil snakke om de resterende operatørene mer detaljert en annen gang.
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 eksemplerLag 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; SOURCE Kommandoer for arbeid med databaser1. Se tilgjengelige databaser VIS DATABASER; 2. Opprette en ny database CREATE DATABASE; 3. Velge en database som skal brukes USE; 4. Importer SQL-kommandoer fra .sql-filen SOURCE ; 5. Fjerne databasen DROP DATABASE ; Arbeide med tabeller6. Se tabellene som er tilgjengelige i SHOW TABLES-databasen;
7. Opprette en ny tabell LAG TABELL ( , , PRIMÆR NØKKEL (), UTENLANDSKE NØKKEL () REFERANSER ()); Integritetsbegrensninger ved bruk av CREATE TABLEDet kan hende du må opprette begrensninger for enkelte kolonner i en tabell. Når du oppretter en tabell, kan du angi følgende begrensninger:
- en tabellcelle kan ikke ha en NULL-verdi;
- primærnøkkel - PRIMARY KEY (col_name1, col_name2, ...) ;
- fremmednøkkel - UTENLANDSKE NØKKEL (col_namex1, …, col_namexn) REFERANSER tabellnavn(col_namex1, …, col_namexn) .
Du kan spesifisere mer enn én primærnøkkel. I dette tilfellet vil du få en sammensatt primærnøkkel.
EksempelLag 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));
8. TabellinformasjonDu kan se forskjellig informasjon (verditype, nøkkel eller ikke) om tabellkolonner med følgende kommando:
BESKRIVE ;
9. Legge til data i tabellen INSERT INTO (, , , …) VERDIER (, , , …);Når du legger til data til hver kolonne i en tabell, trenger du ikke å angi kolonnenavn.
INSERT INTO VALUES (, , , ...);
10. Oppdatering av tabelldata UPDATE SET = , = , ... HVOR ; 11. Slette alle data fra tabellen SLETT FRA ; 12. Fjerne et bord DROPPE TABELL ; Kommandoer for å lage spørringer13. PLUKKE UTSELECT brukes til å hente data fra en bestemt tabell:
VELG , , ... FRA ;
Følgende kommando kan vise alle dataene fra tabellen:
VELG * FRA;
14. VELG DISTINKTTabellkolonner kan inneholde dupliserte data. Bruk SELECT DISTINCT for å hente kun ikke-dupliserte data.
VELG DISTINCT , , … FRA ;
15. HVORDu kan bruke nøkkelordet WHERE i SELECT for å spesifisere betingelser i en spørring:
VELG , , ... FRA ;
Følgende betingelser kan spesifiseres i forespørselen:
- tekst sammenligning;
- sammenligning av numeriske verdier;
- logiske operatorer AND (og), OR (eller) og NOT (negasjon).
Prøv følgende kommandoer. Vær oppmerksom på betingelsene spesifisert i HVOR:
SELECT * FROM course WHERE dept_name=’Comp. Sci.'; VELG * FRA kurs HVOR studiepoeng>3; VELG * FRA kurs WHERE dept_name="Comp. Sci." OG studiepoeng>3;
16. GRUPPE ETTERGROUP BY-operatoren brukes ofte med aggregerte funksjoner som COUNT, MAX, MIN, SUM og AVG for å gruppere utdataverdier.
VELG , , … FRA GRUPPE ETTER ;
EksempelLa oss vise antall emner for hvert fakultet:
VELG ANTALL(kurs_id), avd_navn FRA kurs GROUP BY avd_navn;
17. Å HANøkkelordet HAVING ble lagt til SQL fordi WHERE ikke kan brukes med aggregerte funksjoner.
VELG , , ... FRA GRUPPE VED Å HA
EksempelLa oss vise en liste over fakulteter som har mer enn ett kurs:
VELG ANTALL(kurs_id), avd_navn FRA kurs GRUPPE ETTER avd_navn HAR ANTALL(kurs_id)>1;
18. BESTILL INNENORDER 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.
VELG , , … FRA BESTILLING AV , , … ASC|DESC;
EksempelLa oss vise en liste over emner i stigende og synkende rekkefølge av studiepoeng:
VELG * FRA kurs BESTILL ETTER studiepoeng; VELG * FRA kurs BESTILL ETTER studiepoeng DESC;
19. MELLOMBETWEEN brukes til å velge dataverdier fra et spesifikt område. Numeriske verdier og tekstverdier, samt datoer, kan brukes.
VELG , , … FRA HVOR MELLOM OG ;
EksempelLa oss vise en liste over instruktører hvis lønn er over 50 000, men mindre enn 100 000:
VELG * FRA instruktør HVOR lønn MELLOM 50000 OG 100000;
20. LIKERLIKE-operatoren brukes i WHERE for å spesifisere et søkemønster for en lignende verdi.
Det er to gratis operatører som brukes i LIKE:
- % (ingen, ett eller flere tegn);
- _ (ett tegn).
La oss vise en liste over kurs hvis navn inneholder "til" og en liste over kurs hvis navn begynner med "CS-":
VELG * FRA kurs HVOR tittel LIKE '%to%'; VELG * FRA kurs WHERE kurs_id LIKE "CS-___";
21. INNVed å bruke IN kan du spesifisere flere verdier for WHERE-leddet:
VELG , , … FRA HVOR I (, , …);
EksempelLa oss vise en liste over studenter fra Comp majors. Sci., fysikk og elektr. Eng.:
VELG * FRA student WHERE avd.navn IN ('Comp. Sci.', 'Fysikk', 'Elec. Eng.');
22. BLI MEDJOIN 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:
VELG , , … FRA JOIN PÅ = ;
Eksempel 1Vi vil vise en liste over alle emner og relevant informasjon om fakultetene:
VELG * FRA kurs BLI MED avdeling PÅ course.dept_name=department.dept_name;
Eksempel 2Vi vil vise en liste over alle obligatoriske kurs og detaljer om dem:
VELG prereq.course_id, title, dept_name, credits, prereq_id FROM prereq VENSTRE YTRE JOIN kurs PÅ prereq.course_id=course.course_id;
Eksempel 3Vi vil vise en liste over alle kurs, uavhengig av om de er obligatoriske eller ikke:
SELECT course.course_id, title, dept_name, credits, prereq_id FROM prereq HØYRE YTRE JOIN-kurs PÅ prereq.course_id=course.course_id;
23. UtsiktView 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.
Opprette CREATE VIEW SOM SELECT , , ... FROM WHERE ; Fjerner DROP VIEW ; EksempelLa oss lage en visning bestående av kurs med 3 studiepoeng:
24. Aggregerte funksjonerDisse funksjonene brukes for å få et samlet resultat relatert til de aktuelle dataene. Følgende er ofte brukte aggregerte funksjoner:
- COUNT (col_name) - returnerer antall rader;
- SUM (col_name) - returnerer summen av verdiene i denne kolonnen;
- AVG (col_name) - returnerer gjennomsnittsverdien for en gitt kolonne;
- MIN (col_name) - returnerer den minste verdien av en gitt kolonne;
- MAX (col_name) – Returnerer den største verdien av en gitt kolonne.
Nestede underspørringer er SQL-spørringer som inkluderer SELECT , FROM og WHERE-klausuler nestet i en annen spørring.
EksempelLa 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);
Kirill Pozdeev, oversetter
Hvordan Yandex bruker dataene dine og maskinlæring for å tilpasse tjenester -.
SQL (ˈɛsˈkjuˈɛl; English structured query language - "structured query language") er et deklarativt programmeringsspråk som brukes til å lage, endre og administrere data i en relasjonsdatabase.
Samsvar med SQL-standarder for ulike databaser:
SQL (Structured Query Language - strukturert spørrespråk). SQL er først og fremst et informasjonslogisk språk designet for å beskrive lagrede data, for å hente lagrede data og for å endre data.
SQL er ikke et programmeringsspråk. Ettersom SQL har blitt mer kompleks, har det blitt mer et applikasjonsprogrammeringsspråk, og brukere kan nå bruke visuelle spørringsbyggere.
SQL er et språk som ikke skiller mellom store og små bokstaver. Strenger i SQL er omsluttet av enkle anførselstegn.
SQL-språket er en samling av utsagn. SQL-setninger er delt inn i:
Data Definition Language (DDL) - skjemabeskrivelsesspråk i ANSI, består av kommandoer som lager objekter (tabeller, indekser, visninger, etc.) i databasen (CREATE, DROP, ALTER, etc.).
Datamanipulasjonsoperatører (Data Manipulation Language, DML) er et sett med kommandoer som bestemmer hvilke verdier som presenteres i tabeller til enhver tid (INSERT, DELETE, SELECT, UPDATE, etc.).
datatilgangsdefinisjonsutsagn (Data Control Language, DCL) - består av verktøy som bestemmer om brukeren skal kunne utføre visse handlinger eller ikke (GANT/REVOKE, LOCK/UNLOCK).
Transaction Control Language (TCL) operatører
Dessverre brukes ikke disse begrepene universelt på tvers av alle implementeringer. De vektlegges av ANSI og er nyttige på et konseptuelt nivå, men de fleste SQL-programmer gjør lite for å behandle dem separat, så de blir i hovedsak funksjonelle kategorier av SQL-kommandoer.
VELG seksjon BLI MEDEnkel JOIN (=kryss JOIN =INNER JOIN) - betyr å vise bare de vanlige postene til begge tabellene. Hvordan poster anses som delte, bestemmes av feltene i join-uttrykket. For eksempel følgende oppføring: FROM t1 JOIN t2 ON t1. id = t2. id
betyr at poster med samme id som finnes i begge tabellene vil vises.
LEFT JOIN (eller LEFT OUTER JOIN) betyr å vise alle poster fra den venstre tabellen (den som kommer først i join-uttrykket) uavhengig av om det er tilsvarende poster i den høyre tabellen. Hvis det ikke er noen poster i den høyre tabellen, settes den tomme verdien NULL.
RIGHT JOIN (eller RIGHT OUTER JOIN) fungerer i motsetning til LEFT JOIN - den viser alle poster fra høyre (andre) tabell og bare de som samsvarer fra venstre (første) tabell.
Andre typer JOIN joins: MINUS - subtraksjon; FULLSTENDIG - fullfør deltakelse; CROSS JOIN - "Alle med alle" eller den kartesiske produktoperasjonen.
INSERT IGNORE Hvis du spesifiserer nøkkelordet IGNORE i en INSERT-kommando med rader som har flere verdier, vil alle rader som har dupliserte PRIMÆRE eller UNIKE nøkler i den tabellen bli ignorert og ikke satt inn. Hvis du ikke spesifiserer IGNORE, avbrytes denne innsettingsoperasjonen når den støter på en rad som har en duplikatverdi for en eksisterende nøkkel
REPLACE-kommandoen skiller seg fra INSERT bare ved at hvis det er en post i tabellen med samme verdi i det indekserte feltet (unik indeks) som den nye posten, så slettes den gamle posten før den nye legges til.
OPPDATER< tablename>SET ( | ) .,. .< COLUMN name> = < VALUE expresslon>[HVOR< predlcate>| HVOR STRØM AV< cursor name>(*kun for vedlegg*) ] ; OPPDATERING jevnaldrende SET zone= "voip" ; # oppdater alle rader i sonekolonnen i peers-tabellen UPDATE stat SET whp= "13x13x13" WHERE id = 1 ; OPPDATERT land SET nm_ukr= ( SELECT del_countries. ukrainsk FROM del_countries WHERE land. nm_en= del_countries. engelsk ) ;WordPress-bruk, innstilling: i wp_posts-tabellen, slett alle forekomster av raden
OPPDATERING wp_posts SET post_content = REPLACE (post_content, "" , "" );SLETT FRA