Voorbeelden van SQL-query's in MariaDB (MySQL). Wat is SQL? Eenvoudige UPDATE-query's naar een MySQL-database

Hoe kom ik erachter hoeveel pc-modellen een bepaalde leverancier heeft geproduceerd? Hoe bepaal je de gemiddelde prijs van computers met dezelfde technische kenmerken? Deze en vele andere vragen met betrekking tot bepaalde statistische informatie kunnen worden beantwoord met behulp van laatste (geaggregeerde) functies. De standaard biedt het volgende geaggregeerde functies:

Al deze functies retourneren één enkele waarde. Tegelijkertijd de functies AANTAL, MIN En MAX toepasbaar op elk gegevenstype, while SOM En AVG worden alleen gebruikt voor numerieke velden. Verschil tussen functie GRAAF(*) En GRAAF(<имя поля>) is dat de tweede bij de berekening geen rekening houdt met NULL-waarden.

Voorbeeld. Vind de minimum- en maximumprijs voor personal computers:

Voorbeeld. Zoek het beschikbare aantal computers geproduceerd door fabrikant A:

Voorbeeld. Als we geïnteresseerd zijn in het aantal verschillende modellen geproduceerd door fabrikant A, dan kan de vraag als volgt worden geformuleerd (gebruik makend van het feit dat in de Producttabel elk model één keer wordt geregistreerd):

Voorbeeld. Zoek het aantal beschikbare verschillende modellen geproduceerd door fabrikant A. De zoekopdracht is vergelijkbaar met de vorige, waarin het totale aantal modellen moest worden bepaald dat door fabrikant A is geproduceerd. Hier moet u ook het aantal verschillende modellen vinden in de pc-tafel (dat wil zeggen, die beschikbaar zijn voor verkoop).

Om ervoor te zorgen dat alleen unieke waarden worden gebruikt bij het verkrijgen van statistische indicatoren, wanneer argument van aggregatiefuncties kan worden gebruikt DISTINCT-parameter. Een andere parameter ALLES is de standaard en gaat ervan uit dat alle geretourneerde waarden in de kolom worden geteld. Exploitant,

Als we het aantal geproduceerde pc-modellen willen weten iedereen fabrikant, die u moet gebruiken GROUP BY-clausule, syntactisch volgend WHERE-clausules.

GROUP BY-clausule

GROUP BY-clausule gebruikt om groepen uitvoerreeksen te definiëren waarop kan worden toegepast aggregatiefuncties (COUNT, MIN, MAX, AVG en SUM). Als deze clausule ontbreekt en er aggregatiefuncties worden gebruikt, worden alle kolommen met namen vermeld in SELECTEER, moet worden opgenomen geaggregeerde functies, en deze functies worden toegepast op de volledige set rijen die voldoen aan het querypredikaat. Anders alle kolommen van de SELECT-lijst niet inbegrepen in totaal moeten functies worden gespecificeerd in de GROUP BY-clausule. Als gevolg hiervan zijn alle uitvoerqueryrijen verdeeld in groepen die worden gekenmerkt door dezelfde combinaties van waarden in deze kolommen.
Hierna worden aggregatiefuncties op elke groep toegepast. Houd er rekening mee dat voor GROUP BY alle NULL-waarden als gelijk worden behandeld, d.w.z. bij het groeperen op een veld dat NULL-waarden bevat, vallen al dergelijke rijen in één groep. Als als er een GROUP BY-clausule aanwezig is , in de SELECT-clausule geen geaggregeerde functies
, dan retourneert de query eenvoudigweg één rij uit elke groep. Deze functie kan, samen met het trefwoord DISTINCT, worden gebruikt om dubbele rijen in een resultatenset te elimineren.
Laten we een eenvoudig voorbeeld bekijken:
SELECTEER model, COUNT(model) AS Qty_model, AVG(prijs) AS Gem.prijs
VANAF PC

GROEP OP model; In dit verzoek wordt voor elk pc-model het aantal bepaald en gemiddelde kosten
. Alle rijen met dezelfde modelwaarde vormen een groep, en de uitvoer van SELECT berekent het aantal waarden en de gemiddelde prijswaarden voor elke groep. Het resultaat van de query is de volgende tabel: model Aantal_model
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Gem._prijs

Als de SELECT een datumkolom zou hebben, zou het mogelijk zijn om deze indicatoren voor elke specifieke datum te berekenen. Om dit te doen, moet u datum toevoegen als groeperingskolom, waarna de aggregatiefuncties worden berekend voor elke combinatie van waarden (modeldatum). Er zijn verschillende specifieke:

  • regels voor het uitvoeren van aggregatiefuncties Indien als gevolg van het verzoek geen rijen ontvangen
  • (of meer dan één rij voor een bepaalde groep), dan zijn er geen brongegevens voor het berekenen van de aggregatiefuncties. In dit geval is het resultaat van de COUNT-functies nul en is het resultaat van alle andere functies NULL. Argument geaggregeerde functie kan zelf geen aggregatiefuncties bevatten
  • (functie van functie). Die. bij één zoekopdracht is het bijvoorbeeld onmogelijk om het maximum aan gemiddelde waarden te verkrijgen. Het resultaat van het uitvoeren van de COUNT-functie is geheel getal
  • (GEHEEL GETAL). Andere aggregatiefuncties erven de gegevenstypen van de waarden die ze verwerken. Als de SUM-functie een resultaat oplevert dat groter is dan de maximale waarde van het gebruikte gegevenstype,.

fout Dus als het verzoek niet bevat GROUP BY-clausules geaggregeerde functies, Dat opgenomen in SELECT-clausule GROUP BY-clausule, elke set rijen die dezelfde waarden heeft van een kolom of groep kolommen die is opgegeven in GROUP BY-clausule, vormt een groep, en geaggregeerde functies worden voor elke groep afzonderlijk uitgevoerd.

AANBOD HEBBEN

Hierna worden aggregatiefuncties op elke groep toegepast. Houd er rekening mee dat voor GROUP BY alle NULL-waarden als gelijk worden behandeld, d.w.z. bij het groeperen op een veld dat NULL-waarden bevat, vallen al dergelijke rijen in één groep. WHERE-clausule definieert vervolgens een predikaat voor het filteren van rijen AANBOD HEBBEN is van toepassing na groepering om een ​​soortgelijk predikaat te definiëren dat groepen op waarden filtert geaggregeerde functies. Deze clausule is nodig om de waarden te valideren die worden verkregen met behulp van geaggregeerde functie niet uit individuele rijen van de recordbron gedefinieerd in FROM-clausule, en van groepen van dergelijke lijnen. Een dergelijke controle kan daarom niet worden opgenomen WHERE-clausule.

GegevenstypenSQL(Zoals inPg, zoals in de standaard)

Tekenreekstypen

Numerieke gegevenstypen

Valuta, karakter, binaire gegevenstypen

Booleaans type. Overdrachten

Voorbeelden van eenvoudige SQL-query's

De eenvoudigste SELECT-query's

De SQL SELECT-instructie is de belangrijkste en meest gebruikte instructie. Het is ontworpen om informatie uit databasetabellen op te halen.

De vereenvoudigde syntaxis voor de SELECT-instructie is als volgt.

SELECTEER [ ALLES | DISTINCT ] select_item_commalist

FROM tabel_referentie_commalist

[WHERE voorwaardelijke_expressie]

[ GROEPEREN OP kolom_naam_commalist ]

[ HEBT conditionele_expressie ]

[ BESTEL DOOR order_item_commalist ]

Vierkante haken geven elementen aan die mogelijk niet aanwezig zijn in het verzoek. Het trefwoord SELECT vertelt de database dat dit voorstel

is een verzoek om informatie op te vragen.

Na het woord SELECT staan, gescheiden door komma's, de namen van de velden (lijst met attributen) waarvan de inhoud wordt opgevraagd.

Het vereiste trefwoord in een SELECT-queryclausule is het woord FROM. Het sleutelwoord FROM wordt gevolgd door een door komma's gescheiden lijst met tabelnamen waaruit informatie wordt opgehaald.

Selecteer bijvoorbeeld titel, beschrijving uit film

Elke SQL-query moet eindigen met het symbool “;” (puntkomma). Het resultaat van deze query is een tabel...

De volgorde van de kolommen in deze tabel komt overeen met de volgorde van de velden die in de query zijn opgegeven

Als u de waarden van alle tabelkolommen wilt weergeven, kunt u het symbool “*” (sterretje) gebruiken in plaats van hun namen op te sommen.

SELECTEER * UIT film;

Laten we nogmaals aandacht besteden aan het feit dat de tabellen die worden verkregen als resultaat van een SQL-query niet volledig voldoen aan de definitie van een relationele relatie. In het bijzonder kunnen ze tupels (rijen) bevatten met identieke attribuutwaarden.

De zoekopdracht “lijst met namen van acteurs” kan bijvoorbeeld als volgt worden geschreven.

selecteer voornaam van acteur;

Het resultaat is een tabel, de tabel bevat identieke rijen. Om dubbele records uit te sluiten van het resultaat van een SELECT-query, gebruikt u het trefwoord DISTINCT.

Als SELECT-vraag haalt meerdere velden op, DISTINCT elimineert dubbele rijen waarin de waarden van alle geselecteerde velden identiek zijn.

De vorige query kan als volgt worden geschreven.

selecteer een aparte voornaam van de acteur;

Als resultaat krijgen we een tabel waarin dubbele rijen zijn uitgesloten.

Het trefwoord ALL doet het tegenovergestelde van DISTINCT, wat betekent dat dubbele rijen in de uitvoer worden opgenomen.

De modus die is opgegeven door het trefwoord ALL is de standaardmodus en wordt daarom bij echte zoekopdrachten praktisch niet voor deze doeleinden gebruikt. Gebruik binnen SELECT-instructie

Met een WHERE-clausule kunt u een voorwaarde-expressie (predikaat) opgeven die resulteert in waar of onwaar voor de tabelrijveldwaarden waartoe de SELECT-instructie toegang heeft.

De WHERE-clausule bepaalt welke rijen van de opgegeven tabellen moeten worden geselecteerd.

De tabel die uit de query resulteert, bevat alleen die rijen waarvoor de voorwaarde (predikaat) die is opgegeven in de WHERE-clausule, resulteert in waar.

Voorbeeld: Schrijf een query die de achternaam ophaalt van alle actoren met de naam PENELOPE selecteer achternaam van acteur waar voornaam = "PENELOPE";< (меньше), >In die gespecificeerd in de zin<- (меньше или равно), <>WAAR voorwaarden

Er kunnen vergelijkingsbewerkingen worden gebruikt die zijn gedefinieerd door de operatoren = (gelijk), > (groter dan).

= (groter dan of gelijk aan),

(niet gelijk), evenals de logische operatoren AND, OR en NOT.< 60 and rental_rate < 3

Een verzoek om de namen en beschrijvingen van korte films (korter dan 60 minuten), waarvan de huur minder dan $ 3 kost, te verkrijgen, ziet er bijvoorbeeld als volgt uit:

selecteer titel, beschrijving uit film

waar lengte

Het resultaat van deze query ziet er als volgt uit:


verhuur - verhuur
1. inventaris - inventaris, voorraden
2. winkel - voorraad, winkel
3. Inhoud van het artikel
4. Eenvoudige UPDATE-query's (overschrijven, toevoegen).
5. Eenvoudige DELETE-query's (record verwijderen).
6. Eenvoudige DROP-query's (tabel verwijderen).
7. Complexe MySQL-query's
8. MySQL-query's en PHP-variabelen

1. De eenvoudigste SQL-query's

1. Toont een lijst met ALLE databases.

SHOW-databases;
2. Geeft ALLE tabellen weer in de database base_name.

TOON tabellen in base_name;

2. Eenvoudige SELECT-query's naar de MySQL-database

SELECTEER– een query die bestaande gegevens uit de database selecteert. U kunt specifieke selectieparameters voor selectie opgeven. De essentie van het verzoek in het Russisch klinkt bijvoorbeeld als volgt: SELECTEER die en die kolommen UIT die en die tabel WAAR de parameter van die en die kolom gelijk is aan de waarde.

1. Selecteer ALLE gegevens in de tabel tbl_name.

SELECTEER * VAN tbl_naam;
2. Toont het aantal records in de tabel tbl_name.

SELECTEER aantal(*) FROM tbl_name;
3. Selecteert (SELECT) uit (FROM) tabel tbl_name limit (LIMIT) 3 records, beginnend bij 2.

SELECTEER * VAN tbl_name LIMIT 2,3;
4. Selecteert (SELECT) ALLE (*) records uit (FROM) tabel tbl_name en sorteert ze (ORDER BY) op volgorde op het id-veld.

SELECTEER * VAN tbl_name BESTEL OP id;
5. Selecteert (SELECT) ALLE records uit (FROM) de tabel tbl_name en sorteert ze (ORDER BY) op het id-veld in OMGEKEERDE volgorde.

SELECTEER * VAN tbl_name BESTEL OP id DESC;
6. Selecteert ( SELECTEER) ALLE (*) records van ( VAN) tafels gebruikers en sorteert ze ( BESTEL DOOR) over het veld Identiteitskaart in oplopende volgorde, limiet ( BEPERKEN) eerste 5 inzendingen.

SELECTEER * VAN gebruikers BESTEL OP ID LIMIET 5;
7. Selecteert alle records uit de tabel gebruikers, waar is het veld fnaam komt overeen met de waarde Gena.

SELECT * VAN gebruikers WAAR fname="Gena";
8. Selecteert alle records uit de tabel gebruikers, waarbij de veldwaarde fnaam begint met Ge.

SELECTEER * VAN gebruikers WAAR fname ZOALS "Ge%";
9. Selecteert alle records uit de tabel gebruikers, Waar fnaam eindigt met nvt en sorteert de records in oplopende volgorde van waarde Identiteitskaart.

SELECTEER * VAN gebruikers WAAR fname ZOALS "%na" ORDER OP ID;
10. Selecteert alle gegevens uit kolommen fnaam, Iknaam van de tafel gebruikers.

SELECT fname, lname VAN gebruikers;

11. Stel dat u een land in uw gebruikersgegevenstabel heeft. Dus als je ALLEEN een lijst met voorkomende waarden wilt weergeven (zodat Rusland bijvoorbeeld niet 20 keer wordt weergegeven, maar slechts één keer), dan gebruiken we DISTINCT. Het zal Rusland, Oekraïne en Wit-Rusland uit de massa van zich herhalende waarden halen. Van tafel dus gebruikers luidsprekers land ALLE UNIEKE waarden worden uitgevoerd

SELECTEER EEN ANDER land VAN gebruikers;
12. Selecteer ALLE rijgegevens uit de tabel gebruikers Waar leeftijd heeft de waarden 18,19 en 21.

SELECT * VAN gebruikers WAAR leeftijd IN (18,19,21);
13. Selecteert de MAXIMUM-waarde leeftijd in de tafel gebruikers. Dat wil zeggen, als u de grootste waarde in uw tabel heeft leeftijd(vanaf Engelse leeftijd) 55 is, dan is het zoekresultaat 55.

SELECTEER max(leeftijd) VAN gebruikers;
14. Selecteer gegevens uit de tabel gebruikers door velden naam En leeftijd WAAR leeftijd neemt de kleinste waarde aan.

SELECTEER naam, min(leeftijd) FROM gebruikers;
15. Selecteer gegevens uit de tabel gebruikers over het veld naam WAAR Identiteitskaart NIET GELIJK AAN 2.

SELECTEER naam VAN gebruikers WAAR id!="2";

3. Eenvoudige INSERT-query's (nieuwe invoer).

INVOEGEN– een query waarmee u EERST een record in de database kunt invoegen. Dat wil zeggen, er wordt een NIEUW record (regel) in de database gemaakt.

1. Maakt een nieuwe invoer in de tabel gebruikers, in het veld naam voegt Sergey toe, en in het veld leeftijd voegt 25 in. Er wordt dus een nieuwe rij met deze waarden aan de tabel toegevoegd. Als er meer kolommen zijn, blijven de overige kolommen leeg of hebben ze standaardwaarden.

INSERT INTO gebruikers (naam, leeftijd) WAARDEN ("Sergey", "25");

4. Eenvoudige UPDATE-query's naar de MySQL-database

UPDATE– een query waarmee u veldwaarden kunt RESERVEREN of iets kunt TOEVOEGEN aan een reeds bestaande rij in de database. Er is bijvoorbeeld een kant-en-klare regel, maar de leeftijdsparameter moet daarin worden herschreven, omdat deze in de loop van de tijd is veranderd.

1. In de tabel gebruikers leeftijd wordt 18.

UPDATE gebruikers SET leeftijd = "18" WAAR id = "3";
2. Alles is hetzelfde als in het eerste verzoek, het toont alleen de syntaxis van het verzoek, waarbij twee of meer velden worden overschreven.
In de tafel gebruikers WHERE id is gelijk aan 3 veldwaarden leeftijd wordt 18 en land Rusland.

UPDATE gebruikers SET leeftijd = "18", land = "Rusland" WHERE id = "3";

5. Eenvoudige DELETE-query's (record verwijderen) naar de MySQL-database

VERWIJDEREN– een query die een rij uit een tabel verwijdert.

1. Verwijdert een rij uit de tabel gebruikers WAAR Identiteitskaart gelijk aan 10.

VERWIJDEREN VAN gebruikers WAAR id = "10";

6. Eenvoudige DROP-query's (verwijder tabel) naar een MySQL-database

DRUPPEL– een query die een tabel verwijdert.

1. Verwijdert de hele tabel tbl_naam.

DROP TABLE tbl_naam;

7. Complexe zoekopdrachten naar de MySQL-database

Interessante zoekopdrachten die zelfs voor ervaren gebruikers nuttig kunnen zijn

SELECT id,naam,land FROM gebruikers,beheerders WHERE TO_DAYS(NOW()) - TO_DAYS(registratiedatum)<= 14 AND activation != "0" ORDER BY registration_date DESC;
Deze complexe query SELECTEERt kolommen ID, naam, land IN TAFELS gebruikers, beheerders WAAR registratiedatum(datum) niet ouder 14 dagen ik activering NIET GELIJK 0 , SORTEER OP registratiedatum in omgekeerde volgorde (nieuw eerst).

UPDATE gebruikers SET leeftijd = "18+" WHERE leeftijd = (SELECTEER leeftijd VAN gebruikers WAAR man = "man");
Hierboven ziet u een voorbeeld van de zogenaamde verzoek binnen een verzoek in SQL. Update de leeftijd van gebruikers naar 18+, waarbij het geslacht mannelijk is. Ik raad dergelijke verzoekopties niet aan. Uit persoonlijke ervaring zal ik zeggen dat het beter is om meerdere afzonderlijke te maken - ze zullen sneller worden verwerkt.

8. MySQL- en PHP-databasequery's

In MySQL-query's op een PHP-pagina kunt u variabelen invoegen als vergeleken waarden, enz. Een paar voorbeelden

1. Selecteert alle records uit de tabel gebruikers, waar is het veld fnaam komt overeen met de waarde van de variabele $naam.

SELECT * VAN gebruikers WAAR fname="$name";
2. In de tabel gebruikers WHERE id is gelijk aan 3 veldwaarden leeftijd wijzigingen in de waarde van de variabele $age.

UPDATE gebruikers SET leeftijd = "$age" WHERE id = "3";

Aandacht! Als je geïnteresseerd bent in een ander voorbeeld, schrijf dan een vraag in de reacties!

Deze bijlage geeft een beknoptere beschrijving van verschillende SQL-opdrachten. Het doel is om u een snelle en nauwkeurige referentie en definitie van SQL te geven. Het eerste deel van deze applicatie definieert de elementen die worden gebruikt om SQL-opdrachten te maken; ten tweede details van de syntaxis en zinnen met een korte beschrijving van de opdrachten zelf. Hieronder ziet u standaardconventies (BNF-voorwaarden genoemd):

  • Trefwoorden worden in hoofdletters getypt.
  • SQL en andere speciale termen staan ​​tussen punthaken en zijn cursief getypt.(< En >)
  • Optionele delen van opdrachten staan ​​tussen vierkante haakjes ().
  • Een weglatingsteken (...) geeft aan dat het voorgaande deel van de opdracht een willekeurig aantal keren kan worden herhaald.
  • Een verticale balk (|) betekent dat wat eraan voorafgaat, vervangen kan worden door wat erna volgt.
  • Accolades ((en)) geven aan dat alles daarbinnen moet worden behandeld als een geheel getal om andere tekens (zoals verticale balken of ellipsen) te kunnen evalueren.
  • Dubbele dubbele punten en gelijken (:: =) betekenen dat wat daarop volgt de definitie is van wat eraan voorafgaat.

    Daarnaast gebruiken we de volgende reeks (.,..) om aan te geven dat wat eraan voorafgaat een willekeurig aantal keren kan worden herhaald, waarbij afzonderlijke gebeurtenissen worden gescheiden door komma's. Attributen die geen deel uitmaken van de officiële standaard worden in de beschrijving gemarkeerd als (*niet-standaard*).

    LET OP: De terminologie die we hier gebruiken is geen officiële ANSI-terminologie. De officiële terminologie kan erg verwarrend zijn, daarom hebben we deze enigszins vereenvoudigd.

    Om deze reden hanteren wij soms andere voorwaarden dan ANSI, of hanteren wij dezelfde voorwaarden maar op een iets andere manier. Onze definitie is bijvoorbeeld< predicate >verschilt van de ANSI-standaarddefinitiecombinatie< predicate >Met< search condition >.

    SQL-ELEMENTEN

    In deze sectie worden de elementen van SQL-opdrachten gedefinieerd. Ze zijn onderverdeeld in twee categorieën: Basiselementen van taal, En Functionele elementen van taal.

    Basiselementen- Dit blokken gemaakt taal; Wanneer SQL een opdracht onderzoekt, evalueert het eerst elk teken in de opdrachttekst in termen van die elementen. Afscheiders< separator >het ene deel van het team van het andere scheiden; alles wat zich tussen de afscheiders bevindt< separator >verwerkt als module. Op basis van deze indeling interpreteert SQL de opdracht.

    Functionele elementen zijn verschillende andere dingen dan trefwoorden die als modules kunnen worden geïnterpreteerd. Dit zijn de delen van een opdracht, gescheiden door scheidingstekens< separator >, die een speciale betekenis hebben in SQL. Sommigen van hen zijn speciaal voor bepaalde commando's en zullen samen met deze commando's verderop in deze bijlage worden beschreven. Hier vermeld staat gemeenschappelijke elementen voor alle beschreven commando's. Functionele elementen kunnen in termen van elkaar of zelfs in hun eigen termen worden gedefinieerd. Het gezegde bijvoorbeeld< predicate >, ons laatste en moeilijkste geval, bevat een predikaat binnen zijn eigen definitie. Dit komt omdat het predikaat< predicate >het gebruik van AND of OR kan een willekeurig aantal predikaten bevatten< predicate >die autonoom kan werken. Wij hebben u het predikaat gepresenteerd< predicate >in een aparte sectie in deze bijlage, vanwege de diversiteit en complexiteit van dit functionele element van de taal. Hij zal voortdurend aanwezig zijn bij het bespreken van andere functionele onderdelen van de teams.

    ELEMENTEN VAN DE BASISTAAL

    ELEMENT DEFINITIE< separator > < comment > | < space > | < newline > < comment > --< string > < newline > < space >ruimte< newline >implementatie gedefinieerd einde tekenreeks < identifier > < letter >[{< letter or digit > | < underscore}... ] < ИМЕЙТЕ ВВИДУ: Следу строгому стандарту ANSI, символы должны быть набраны в hoofdletter en de identificatie< identifier >mag niet langer zijn dan 18 tekens. ELEMENT DEFINITIE< underscore > - < percent sign > % < delimiter >een van de volgende: , ()< > . : = + " - | <> > = < = или < string > < string >[alle getypte tekst tussen enkele aanhalingstekens] Opmerking: In< string >, worden twee opeenvolgende enkele aanhalingstekens (" ") geïnterpreteerd als één (").< SQL term >eindigend afhankelijk van de hoofdtaal. (*alleen genest*)

    FUNCTIONELE ELEMENTEN

    De volgende tabel laat zien functionele elementen SQL-opdrachten en hun definities: ELEMENT DEFINITION< query >SELECT-clausule< subquery >Een SELECT-clausule tussen haakjes in een andere clausule die in feite afzonderlijk wordt geëvalueerd voor elke kandidaatrij van de andere clausule.< value expression > < primary > | < primary > < operator > < primary > | < primary > < operator > < value expression > < operator >een van de volgende: + - / *< primary > < column name > | < literal > | < aggregate function > | < built-in constant > | < nonstandard function > < literal > < string > | < mathematical expressio ЭЛЕМЕНТ ОПРЕДЕЛЕНИЕ < built-in constant >GEBRUIKER |< implementation-dehned constant > < table name > < identifier > < column spec > [< table name > | < alias >.]< column name > < grouping column > < column spec > | < integer > < ordering column > < column spec > | < integer > < colconstraint >NIET NUL | UNIEK | REKENING (< predicate >) | PRIMAIRE SLEUTEL | REFERENTIES< table name >[(< column name >)] < tabconstraint >UNIEK (< column list >) | REKENING (< predicate >) | PRIMAIRE SLEUTEL (< column list >) | BUITENLANDSE SLEUTEL (< column list >) REFERENTIES< table name >[(< column list >)] < defvalue >STANDAARDWAARDE =< value expression > < data type >Geldig gegevenstype (zie bijlage B voor een beschrijving van de typen geleverd door ANSI of bijlage C voor andere veel voorkomende typen.)< size >De waarde is afhankelijk van< data type >(Zie bijlage B.)< cursor name > < identifier > < index name > < identifier > < synonym > < identifier >(*niet-standaard*)< owner > < Authorization ID > < column list > < column spec > .,.. < value list > < value expression > .,.. < table reference > { < table name > [< alias >] } .,..

    PREDICATEN

    Hieronder wordt een lijst met verschillende predikaattypen gedefinieerd< predicate >beschreven op de volgende pagina's:

    < predicate > ::=

    { < comparison predicate > | < in predicate > | < null predicate > | < between predicate > | < like predicate > | < quantified predicate > | < exists predicate > } < predicate >is een uitdrukking die waar, onwaar of onbekend kan zijn, behalve< exists predicate >En< null predicate >, wat alleen waar of onwaar kan zijn.

    Er wordt een onbekende ontvangen als NULL-waarden de uitvoer van het ontvangen antwoord verhinderen. Dit zal altijd gebeuren NULL-waarde te vergelijken met welke waarde dan ook. Standaardoperatoren Booleaanse waarden - AND, OR en NOT - kunnen worden gebruikt met een predikaat. NIET waar = onwaar, NIET onwaar = waar, en NIET onbekend = onbekend. De resultaten van AND en OR in combinatie met predikaten worden weergegeven in de volgende tabellen:

    EN EN Waar Onwaar Onbekend Waar waar onwaar onbekend Onwaar onwaar onwaar onwaar Onbekend onbekend onwaar onbekend OF OF Waar Onwaar Onbekend Waar waar waar waar Onwaar waar onwaar onbekend Onbekend waar onbekend onbekend

    Deze tabellen worden gelezen op een manier die vergelijkbaar is met een tafel van vermenigvuldiging: je combineert de ware, valse of onbekende waarden uit de rijen met hun kolommen om het resultaat bij het draadkruis te krijgen. In een AND-tabel geven bijvoorbeeld de derde kolom (Onbekend) en de eerste rij (Waar) op het snijpunt in de rechterbovenhoek het resultaat - onbekend, met andere woorden: Waar EN Onbekend = onbekend. De volgorde van de berekeningen wordt bepaald door haakjes. Ze stellen zichzelf niet elke keer voor. NOT wordt eerst geëvalueerd, gevolgd door AND en OR. Diverse soorten predikaten< predicate >worden afzonderlijk besproken in de volgende sectie.

    < comparison predicate >(vergelijkingspredikaat)

    Syntaxis

    < value expresslon > < relational op > < value expresslon > |
    < subquery >
    < relatlonal op > :: =
    =
    | <
    | >
    | <
    | >=
    | < >

    Als een van beide< value expression >= NULL, of< comparison predicate >= onbekend; met andere woorden, het is waar als de vergelijking waar is, of onwaar als de vergelijking onwaar is.
    < relational op >heeft standaard wiskundige waarden voor numerieke waarden; voor andere waardetypen zijn die waarden implementatiespecifiek.
    Beide< value expression >moeten vergelijkbare gegevenstypen hebben. Als de subquery< subquery >wordt gebruikt, moet deze één expressie bevatten< value expression >in de SELECT-clausule waarvan de waarde de tweede expressie zal vervangen< value expression >in een vergelijkingspredicaat< comparision predicate >, elke keer< subquery >daadwerkelijk vervuld.

    < between predicate >

    Syntaxis

    < value expression >TUSSEN< value expression >
    EN< value expression >

    < between predicate >- A TUSSEN B EN C , heeft dezelfde betekenis als< predicate >- (A >= B EN< = C). < between predicate >waarvoor A NIET TUSSEN B EN C dezelfde betekenis heeft als NIET (TUSSEN B EN C).< value expression >kan worden afgeleid met behulp van een niet-standaardquery< subquery >(*niet-standaard*).

    < in prediicate >

    Syntaxis

    < value expression >IN< value list > | < subquery >

    Lijst met waarden< value list >zal bestaan ​​uit een of meer vermelde waarden tussen haakjes en gescheiden door komma's die vergelijkbaar zijn< value expression >gegevenstype. Als er een subquery wordt gebruikt< subquery >, mag deze slechts één expressie bevatten< value expression >in de SELECT-clausule (mogelijk meer, maar dit valt buiten de ANSI-standaard). Subquery< subquery >in feite wordt het afzonderlijk uitgevoerd voor elke kandidaatrij van de hoofdquery, en de waarden die het zal uitvoeren vormen een lijst met waarden< value list >voor deze lijn. In ieder geval het predikaat< in predicate >zal waar zijn als de uitdrukking< value expression >weergegeven in een lijst met waarden< value list >, als NIET is opgegeven. De zinsnede A NOT IN (B, C) is gelijk aan de zinsnede NOT (A IN (B, C)).

    < like predicate >

    Syntaxis

    < charvalue >LEUK VINDEN< pattern >

    < charvalue >is een *niet-standaard* expressie< value expression >alfanumeriek type.< charvalue >misschien, volgens de standaard, alleen een bepaalde kolom< column spec >. Steekproef< pattern >bestaat uit een string die wordt gecontroleerd op een match< charvalue >. Einde symbool< escapechar >is één alfanumeriek teken. Er vindt een match plaats als aan de volgende voorwaarden wordt voldaan:

  • Voor elk onderstrepingsteken< underscore >in het monster< pattern >die niet wordt voorafgegaan door een beëindigingsteken< escapechar >, is er één corresponderend symbool< charvalue >.
  • Voor iedereen< percent sign >in het monster< pattern >, die niet voorafgaat< escapechar >, er nullen of meer overeenkomende tekens voorkomen< charvalue >.
  • Voor iedereen< escapechar >V< pattern >die niet aan een ander voorafgaat< escapechar >, er zit geen corresponderend teken in< charvalue >.
  • Voor elk ander personage in< pattern >, wordt hetzelfde symbool geplaatst op het overeenkomstige teken in< charvalue >.

    Als er een match plaatsvindt,< like predicate >- waar als NOT is opgegeven. De zinsnede NOT LIKE "tekst" is gelijk aan NOT (A LIKE "tekst").

    < null predicate >

    Syntaxis

    < column spec >IS NUL

    < column spec >= IS NULL als er een NULL-waarde in deze kolom aanwezig is. Het zal voldoende zijn< null predicate >true als NULL niet is opgegeven. Zin< column spec >IS NOT NULL, heeft hetzelfde resultaat als NOT (< column spec >IS NUL).

    < quantified predicate >

    Syntaxis

    < value expression > < relational op >
    < quantifier > < subquery >
    < quantifier >::= ELKE | ALLE | SOMMIGE

    Subquery SELECT-clausule< subquery >moet één en slechts één waarde-expressie bevatten< value expression >. Alle waarden geretourneerd door de subquery< subquery >een reeks resultaten opstellen< result set >. < value expression >vergeleken met behulp van een provider< relational operator >, met elk lid van de resultaatset< result set >. Deze vergelijking wordt als volgt beoordeeld:

  • Hierna worden aggregatiefuncties op elke groep toegepast. Houd er rekening mee dat voor GROUP BY alle NULL-waarden als gelijk worden behandeld, d.w.z. bij het groeperen op een veld dat NULL-waarden bevat, vallen al dergelijke rijen in één groep.< quantifier >= ALL, en elk lid van de resultatenset< result set >maakt deze vergelijking waar,< quantified predicate >- WAAR.
  • Hierna worden aggregatiefuncties op elke groep toegepast. Houd er rekening mee dat voor GROUP BY alle NULL-waarden als gelijk worden behandeld, d.w.z. bij het groeperen op een veld dat NULL-waarden bevat, vallen al dergelijke rijen in één groep.< quantifier >= ANY en er is minstens één lid uit de resultatenset< result set >, wat deze vergelijking dus waar maakt< quantified predicate >klopt.
  • Als het resultaat is ingesteld< result set >leeg dus< quantified predicate >waar als< quantifier >= ALL , en false indien anders.
  • Hierna worden aggregatiefuncties op elke groep toegepast. Houd er rekening mee dat voor GROUP BY alle NULL-waarden als gelijk worden behandeld, d.w.z. bij het groeperen op een veld dat NULL-waarden bevat, vallen al dergelijke rijen in één groep.< quantifier >= SOMMIGE, het effect is hetzelfde als voor ELK.
  • Hierna worden aggregatiefuncties op elke groep toegepast. Houd er rekening mee dat voor GROUP BY alle NULL-waarden als gelijk worden behandeld, d.w.z. bij het groeperen op een veld dat NULL-waarden bevat, vallen al dergelijke rijen in één groep.< quantified predicate >noch waar, noch ontrouw, hij is onbekend.

    < exists predicate >

    Syntaxis:

    BESTAAT (< subquery >)

    Als de subquery< subquery >drukt een of meer regels uitvoer af,< exists predicate >- trouw; en onjuist indien anders.

    SQL-OPDRACHTEN

    In dit gedeelte wordt de syntaxis van verschillende SQL-opdrachten beschreven. Dit geeft je de mogelijkheid om snel naar een commando te zoeken, de syntaxis ervan te vinden en een korte beschrijving te geven van hoe het werkt.

    HOUD er rekening mee dat opdrachten die beginnen met het woord - EXEC SQL, evenals opdrachten of zinnen die eindigen met het woord - alleen kunnen worden gebruikt in geneste SQL.

    BEGIN MET HET VERKLAREN VAN DE SECTIE

    Syntaxis

    EXEC SQL BEGIN DECLARE SECTIE< SQL term > < host-language variable declarations >EXEC SQL EINDE DECLARE SECTIE< SQL term >

    Met deze opdracht wordt een sectie van het hoofdtaalprogramma gemaakt om de belangrijkste variabelen te declareren die in geneste SQL-instructies zullen worden gebruikt. De SQLCODE-variabele moet worden opgenomen als een van de gedeclareerde hosttaalvariabelen.

    SLUIT CURSOR

    Syntaxis

    EXEC SQL SLUIT CURSOR< cursor name > < SQL term >;

    Dit commando vertelt de cursor om te sluiten, waarna er geen waarde uit kan worden opgehaald totdat deze opnieuw wordt geopend.

    COMMIT (WERK)

    Syntaxis

    Met deze opdracht blijven alle wijzigingen in de database ongewijzigd totdat de huidige transactie eindigt en een nieuwe transactie begint.

    INDEX MAKEN

    (*NIET STANDAARD*)

    Syntaxis

    INDEX MAKEN< Index name >
    OP< table name > (< column list >);

    Met deze opdracht wordt een efficiënte route gemaakt snelle toegang om te zoeken naar rijen die aangewezen kolommen bevatten. Als UNIQUE is opgegeven, kan de tabel geen dubbele waarden in deze kolommen bevatten.

    CREËER SYNONIEM (*NIET STANDAARD*)
    (CREËER SYNONIEM) (*NIET-STANDAARD*)

    Syntaxis

    CREËER IPUBLIEK SYNONIEM< synonym >VOOR
    < owner >.< table name >;

    Met deze opdracht wordt een alternatief (synoniem) voor de tabel gemaakt. Het synoniem is eigendom van de maker ervan, en de tabel zelf, meestal van een andere gebruiker. Door een synoniem te gebruiken, hoeft de eigenaar niet met de volledige naam (inclusief de eigenaar) naar de tabel te verwijzen. Als PUBLIC is opgegeven, behoort het synoniem tot de directory SYSTEM en is daarom beschikbaar voor alle gebruikers.

    MAAK TABEL

    Syntaxis

    MAAK TABEL< table name >
    ({< column name > < data type >[< size >]
    [< colconstralnt > . . .]
    [< defvalue >]} . , . . < tabconstraint > . , . .);

    Met de opdracht wordt een tabel in de database gemaakt. Deze tafel wordt eigendom van de maker ervan. De kolommen worden in naamvolgorde beschouwd.< data type >- bepaalt het gegevenstype dat de kolom zal bevatten. Standaard< data type >beschreven in bijlage B; alle andere gebruikte gegevenstypen< data type >, besproken in bijlage C. Grootte waarde< size >hangt af van het gegevenstype< data type >.
    < colconstraint >En< tabconstraint >beperkingen opleggen aan de waarden die in een kolom kunnen worden ingevoerd.
    < defvalue >specificeert de (standaard)waarde die automatisch wordt ingevoegd als er geen andere waarde is opgegeven voor deze rij. (Zie hoofdstuk 17 voor details over de opdracht CREATE TABLE zelf en hoofdstuk 18 AND voor details over beperkingen en< defvalue >).

    CREËER UITZICHT

    Syntaxis

    CREËER UITZICHT< table name >
    ALS< query >
    ;

    Het uitzicht wordt behandeld zoals elke tafel SQL-opdrachten. Wanneer een opdracht verwijst naar een tabelnaam< table name >, verzoek< query >wordt uitgevoerd en de uitvoer ervan komt overeen met de inhoud van de tabel die in deze opdracht is opgegeven.
    Sommige weergaven kunnen worden gewijzigd, wat betekent dat wijzigingsopdrachten op die weergaven kunnen worden uitgevoerd en kunnen worden doorgegeven aan de tabel waarnaar in de query werd verwezen< query >. Als MET CHECK OPTIE is opgegeven, moet deze wijziging ook aan de predikaatvoorwaarde voldoen< predicate >in het verzoek< query >.

    VERKLAR CURSOR

    Syntaxis

    EXEC SQL DECLARE< cursor name >CURSOR VOOR
    < query >< SQL term >

    Deze opdracht bindt ze aan de cursor< cursor name >, met een verzoek< query >. Wanneer de cursor open is (zie OPEN CURSOR), wordt het verzoek weergegeven< query >wordt uitgevoerd en het resultaat kan worden opgehaald (door het FETCH-commando) voor uitvoer. Als de cursor kan worden gewijzigd, de tabel waarnaar in de query wordt verwezen< query >, kan een wijziging in de inhoud verkrijgen door middel van een wijzigingsbewerking op de cursor (zie hoofdstuk 25 over aanpasbare cursors).

    VERWIJDEREN

    Syntaxis

    VERWIJDEREN VAN< table name >
    { ; }
    | WAAR STROOM VAN< cursorname >< SQL term >

    Als de WHERE-clausule ontbreekt, worden ALLE rijen in de tabel verwijderd. Als de WHERE-clausule een predikaat gebruikt< predicate >, rijen die voldoen aan de voorwaarde van dit predikaat< predicate >worden verwijderd. Als de WHERE-clausule een CURRENT OF-argument in de cursornaam heeft< cursor name >, rij uit tabel< table name >waarnaar momenteel wordt verwezen door de cursornaam< cursor name >zal worden verwijderd. Het WHERE CURRENT-formulier kan alleen worden gebruikt in geneste SQL en alleen met aanpasbare cursors.

    EXEC-SQL

    Syntaxis

    EXEC-SQL< embedded SQL command > < SQL term >

    EXEC SQL wordt gebruikt om het begin aan te geven van alle SQL-opdrachten die in een andere taal zijn genest.

    OPHALEN

    Syntaxis

    EXEC SQL FETCH< cursorname >
    NAAR BINNEN< host-varlable llst >< SQL term >

    FETCH accepteert de uitvoer van huidige lijn verzoek< query >, voegt het in de lijst met hoofdvariabelen in< host-variable list >en verplaatst de cursor naar volgende regel. Lijst< host-variable list >kan een indicatorvariabele als doelvariabele bevatten (zie hoofdstuk 25).

    VERLENING (OVERDRACHTRECHTEN)

    Syntaxis (standaard)

    VERLEEN ALLES
    | (SELECTEER
    | INVOEGEN
    | VERWIJDEREN
    | UPDATE [(< column llst >)]
    | REFERENTIES [(< column llst >)l). , . .
    OP< table name > . , . .
    VOOR PUBLIEK |< Authorization ID > . , . .
    ;

    Het ALL-argument, met of zonder PRIVILEGES, omvat elk privilege in de lijst met privileges. PUBLIC omvat alle bestaande gebruikers en alle gebruikers die in de toekomst worden aangemaakt. Met deze opdracht kunt u rechten overdragen om acties uit te voeren op een tabel met een opgegeven naam. Met REFERENTIES kunt u machtigingen geven om kolommen in de kolommenlijst te gebruiken< column list >als oudersleutel voor een externe sleutel. Andere privileges bestaan ​​uit het recht om opdrachten uit te voeren, waarvoor de privileges in de tabel met hun naam worden aangegeven. UPDATE is vergelijkbaar met REFERENTIES en kan beperkingen opleggen aan bepaalde kolommen. GRANT OPTION maakt het mogelijk om deze rechten over te dragen aan andere gebruikers.

    Syntaxis (niet-standaard)

    VERLEEN DBA
    | BRON
    | VERBINDEN... .
    NAAR< Authorization ID > . , . .
    | < privilege > . , . . }
    VAN (OPENBAAR
    | < Authorization ID > . , . . };

    Voorrecht< privelege >kan elk van de waarden zijn die zijn gespecificeerd in de GRANT-opdracht. De gebruiker die de REVOKE geeft, moet dezelfde rechten hebben als de gebruiker die de GRANT geeft. De ON-clausule kan worden gebruikt wanneer een privilege van een speciaal type wordt gebruikt voor een speciaal object.

    ROLLBACK (WERK)
    (ROLLBACK) (TRANSACTIES)

    Syntaxis

    Met deze opdracht worden alle wijzigingen in de database die tijdens de huidige transactie zijn aangebracht, ongedaan gemaakt. Het beëindigt ook de huidige en start een nieuwe transactie.

    SELECTEER

    Syntaxis

    SELECTEER ( IDISTINCT | ALLES]< value expression > . , . . } / *
    VAN< table reference > . , . .

    . , . . ];

    Deze instructie organiseert de query en haalt waarden op uit de database (zie Hoofdstuk 3 - Hoofdstuk 14). De volgende regels zijn van toepassing:

  • Als noch ALL noch DISTINCT zijn opgegeven, wordt ALL aangenomen.
  • Uitdrukking< value expression >bestaat uit< column spec >, geaggregeerde functie< aggregate funct >, niet-standaardfunctie< nonstandard fu nction >, constant< constant >, of een combinatie daarvan met operators in geldige expressies.
  • Referentie tabel< table reference >, bestaat uit de tabelnaam, inclusief het eigenaarvoorvoegsel als de huidige gebruiker niet de eigenaar is, of een (niet-standaard) synoniem voor de tabel. De tabel kan een basistabel of een weergave zijn. In principe kan een alias alleen voor de duur van het huidige commando aangeven welke alias voor een tabel wordt gebruikt. De tabelnaam of het synoniem moet door een of meer scheidingstekens van de alias worden gescheiden< separator >.
  • Als GROUP BY wordt gebruikt, alle kolommen< column spec >gebruikt in de SELECT-clausule moet worden gebruikt als een groep kolommen< grouping column >, als ze niet in de aggregatiefunctie voorkomen< aggregate funct >. Gehele kolomgroep< grouping column >moet tussen de uitdrukkingen worden weergegeven< value expressions >opgegeven in de SELECT-clausule. Voor elke afzonderlijke combinatie van kolomgroepwaarden< grouping column >, zal er slechts één uitvoerregel zijn.
  • Als HAVING wordt gebruikt, is het predikaat< predicate >wordt toegepast op elke rij die wordt geproduceerd door de GROUP BY-clausule, en de rijen die dit predikaat waar maken, worden afgedrukt.
  • Als ORDER BY wordt gebruikt, heeft de uitvoer een specifieke volgorde. Elke kolom-ID< column identifer >verwijst naar het opgegeven< value expression >in de SELECT-clausule. Als dit< value expression >is de opgegeven kolom< column spec >, < co lumn identifier >zou hetzelfde kunnen zijn als< column spec >. Anders< co lumn identifier >kan een positief geheel getal zijn dat de locatie aangeeft waar< value expression >in de volgorde van de SELECT-clausule. De uitvoer wordt gegenereerd zodat deze past bij de waarden in< column identifier >in oplopende volgorde als DESC niet is opgegeven. Kolom-ID-naam< column identifier > op de eerste plaats komen in de ORDER BY-clausule wordt voorafgegaan door later waardevolle namen bij het bepalen van de uitvoervolgorde.

    De SELECT-clausule evalueert elke kandidaatrij van een tabel waarin de rijen onafhankelijk worden weergegeven. De kandidaatreeks wordt als volgt gedefinieerd:

  • Als er slechts één tabel is waarnaar wordt verwezen< table reference >is opgenomen, is elke rij in deze tabel op zijn beurt een kandidaat-rij.
  • Als er meer dan één tabel waarnaar wordt verwezen< table reference >ingeschakeld, moet elke rij van elke tabel op zijn beurt worden gecombineerd met elke combinatie van rijen uit alle andere tabellen. Elke dergelijke combinatie zal op zijn beurt een kandidaatreeks zijn.

    Elke kandidaatrij produceert waarden die het predikaat vormen< predicate >in de WHERE-clausule is waar, onwaar of onbekend. Als GROUP BY niet wordt gebruikt, wordt elke< value expression >wordt op zijn beurt toegepast op elke kandidaatreeks waarvan de waarde het predikaat waar maakt, en het resultaat van deze bewerking is de uitvoer.
    Als GROUP BY wordt gebruikt, worden de kandidaatrijen gecombineerd met behulp van aggregatiefuncties. Als er geen predikaat is< predicate >niet ingesteld, elke expressie< value expression >geldt voor elke kandidaatrij of -groep. Als DISTINCT is opgegeven, worden dubbele rijen uit de uitvoer verwijderd.

    UNIE

    Syntaxis

    < query >(UNIE< query > } . . . ;

    Twee of meer query's uitvoeren< query >zal worden samengevoegd. Elk verzoek< query >moet hetzelfde nummer bevatten< value expression >in de SELECT-clausule en in een zodanige volgorde dat 1..n van elk gegevenstype compatibel is< data type >en maat< size >met 1..n alle anderen.

    UPDATE

    Syntaxis

    UPDATE< table name >
    SET (< column name > = < value expression > } . , . .
    ([ WAAR< predlcate >]; }
    | {
    < SQL term >]}

    UPDATE wijzigt de waarden in elke genoemde kolom< column name >naar de overeenkomstige waarde< value expression >. Als de WHERE-clausule een predikaat gebruikt< predicate >, dan alleen tabelrijen waarvan de huidige waarden dat predikaat vormen< predicate >correct, onder voorbehoud van wijzigingen. Als WHERE de CURRENT OF-clausule gebruikt, worden de waarden in de tabelrij genoemd< table name >bevindt zich in de cursor met de naam< cursor name >zijn aan het veranderen. WHERE CURRENT OF is alleen geschikt voor gebruik in geneste SQL, en alleen met aanpasbare cursors. Als er geen WHERE-clausule is, worden alle rijen gewijzigd.

    WANNEER (ELKE KEER ALS)

    Syntaxis

    EXEC SQL WANNEER< SQLcond > < actlon > < SQL term >
    < SQLcond >::=SQLERROR | NIET GEVONDEN | SQLWAARSCHUWING
    (de laatste is niet standaard)
    < action >::=VERDER | GA NAAR< target >| GA NAAR< target >
    < target >:: = hangt af van de hosttaal

  • Syntaxis:

    * Waar velden1— velden voor selectie gescheiden door komma's, u kunt ook alle velden specificeren met een *; tafel— de naam van de tabel waaruit we gegevens extraheren; voorwaarden— bemonsteringsomstandigheden; velden2— veld of velden gescheiden door komma's waarop moet worden gesorteerd; graaf— aantal regels om te uploaden.
    * De zoekopdracht tussen vierkante haakjes is niet vereist om gegevens op te halen.

    Eenvoudige voorbeelden van het gebruik van select

    1. Normale gegevensbemonstering:

    > SELECTEER * VAN gebruikers

    2. Gegevensbemonstering door twee tabellen samen te voegen (JOIN):

    SELECT u.naam, r.* VAN gebruikers u WORD LID van gebruikersrechten r AAN r.user_id=u.id

    * V in dit voorbeeld gegevens worden bemonsterd en tabellen worden samengevoegd gebruikers En gebruikersrechten. Ze zijn verenigd door velden gebruiker_id(in de tabel user_rights) en Identiteitskaart(gebruikers). Het naamveld wordt uit de eerste tabel opgehaald en alle velden uit de tweede.

    3. Bemonstering met tijd- en/of datumintervallen

    a) het startpunt en een bepaald tijdsinterval zijn bekend:

    * gegevens van het afgelopen uur worden geselecteerd (veld datum).

    b) de startdatum en einddatum zijn bekend:

    25.10.2017 En 25.11.2017 .

    c) start- en einddatum + tijd zijn bekend:

    * selecteer gegevens tussen 25-03-2018 0 uur 15 minuten En 25-04-2018 15 uur 33 minuten en 9 seconden.

    d) gegevens voor een bepaalde maand en een bepaald jaar ophalen:

    * extraheer gegevens waar in het veld datum daar zijn waarden voor april 2018 jaar.

    4. Bemonstering van maximale, minimale en gemiddelde waarden:

    > SELECTEER max(oppervlakte), min(oppervlakte), gemiddelde(oppervlakte) VAN land

    * maximaal— maximale waarde; min- minimaal; gem- gemiddeld.

    5. Snaarlengte gebruiken:

    * deze zoekopdracht moet alle gebruikers tonen waarvan de naam uit 5 tekens bestaat.

    Voorbeelden van zoekopdrachten die complexer zijn of zelden worden gebruikt

    1. Samenvoeging met groepering van geselecteerde gegevens in één rij (GROUP_CONCAT):

    *van tafel gebruikers veldgegevens worden opgehaald Identiteitskaart, ze worden allemaal op één regel geplaatst, de waarden zijn gescheiden komma's.

    2. Gegevens groeperen op twee of meer velden:

    > SELECTEER * VAN gebruikers GROEP OP CONCAT(titel, "::", geboorte)

    * Samenvattend: in dit voorbeeld uploaden we gegevens uit de gebruikerstabel en groeperen we deze op velden titel En geboorte. Voordat we gaan groeperen, combineren we de velden tot één regel met een scheidingsteken :: .

    3. Resultaten uit twee tabellen samenvoegen (UNION):

    > (SELECT id, fio, adres, "Gebruikers" als type FROM gebruikers)
    UNIE
    (SELECT id, fio, adres, "Klanten" als type VAN klanten)

    * in dit voorbeeld worden gegevens uit tabellen gehaald gebruikers En klanten.

    4. Voorbeeld van gemiddelde waarden gegroepeerd voor elk uur:

    SELECT gem(temperatuur), DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H") als hour_datetime FROM archief GROUP BY DATE_FORMAT(datetimeupdate, "%Y-%m-%d %H")

    *Hier extraheren we de gemiddelde waarde van het veld temperatuur van de tafel archief en groeperen op veld datumtijdupdate(met tijdsverdeling voor elk uur).

    INVOEGEN

    Syntaxis 1:

    > INVOEREN

    () WAARDEN ( )

    Syntaxis 2:

    > INVOEREN

    WAARDEN ( )

    * Waar tafel— de naam van de tabel waarin we de gegevens invoeren; velden— lijst met velden gescheiden door komma's;waarden— waarden opsommen, gescheiden door komma's.
    * met de eerste optie kunt u alleen de vermelde velden invoegen; de rest krijgt standaardwaarden. De tweede optie vereist invoeging voor alle velden.

    Voorbeelden van het gebruik van inzetstukken

    1. Meerdere rijen invoegen met één query:

    > INVOEGEN IN steden ("naam", "land") WAARDEN ("Moskou", "Rusland"), ("Parijs", "Frankrijk"), ("Funafuti", "Tuvalu");

    * in dit voorbeeld voegen we 3 records toe aan één SQL-query.

    2. Invoegen vanuit een andere tabel (rijen kopiëren, INSERT + SELECT):

    * extraheer alle records uit de tabel steden, waarvan de namen beginnen met “M” en voer deze in de tabel in steden-nieuw.

    Bijwerken (UPDATE)

    Syntaxis:

    * Waar tafel— tabelnaam; veld— het veld waarvoor we de waarde zullen wijzigen; waarde- nieuwe betekenis; voorwaarden— voorwaarde (zonder deze is het uitvoeren van een update gevaarlijk - u kunt alle gegevens in de hele tabel vervangen).

    Update door middel van vervanging (REPLACE):

    UPDATE

    SET = VERVANGEN( , "<что меняем>", "<на что>");

    UPDATE steden SET naam = REPLACE(naam, "Maskva", "Moskou");

    Als we op safe willen spelen, kan het resultaat van de vervanging eerst worden gecontroleerd met behulp van SELECT:

    Verwijderen (VERWIJDEREN)

    Syntaxis:

    * Waar tafel— tabelnaam; voorwaarden— voorwaarde (zoals in het geval van UPDATE is het gebruik van DELETE zonder voorwaarde gevaarlijk - het DBMS zal niet om bevestiging vragen, maar zal eenvoudigweg alle gegevens verwijderen).

    Een tabel maken

    Syntaxis:

    > MAAK TABEL

    ( , )

    > MAAK TABEL INDIEN NIET BESTAAT `users_rights` (
    `id` int(10) unsigned NIET NULL,
    `user_id` int(10) unsigned NIET NULL,
    `rights` int(10) unsigned NIET NULL
    ) ENGINE=InnoDB STANDAARD TEKENSET=utf8;

    * Waar tafel— tabelnaam (in het voorbeeld gebruikersrechten); veld1, veld2— naam van de velden (in het voorbeeld worden er 3 velden aangemaakt — id, user_id, rechten); opties1, opties2— veldparameters (in het voorbeeld int(10) unsigned NIET NULL); tafel opties— algemene tabelparameters (in het voorbeeld ENGINE=InnoDB STANDAARD TEKENSET=utf8).

    Met behulp van verzoeken in PHP

    Verbinding maken met de database:

    mysql_connect("localhost", "inloggen", "wachtwoord") or die("MySQL verbindingsfout");
    mysql_select_db("db_naam");
    mysql_query("NAMEN INSTELLEN "utf8"");

    * waarbij verbinding wordt gemaakt met een database op een lokale server ( lokalehost); verbindingsreferenties - login En wachtwoord(respectievelijk login en wachtwoord); gebruikt als basis db_naam; codering gebruikt UTF-8.

    U kunt ook een permanente verbinding maken:

    mysql_pconnect("localhost", "inloggen", "wachtwoord") or die("MySQL verbindingsfout");

    * het is echter mogelijk dat de maximaal toegestane hostinglimiet wordt bereikt. Deze methode moet worden gebruikt voor eigen servers, waar wij zelf de situatie onder controle kunnen houden.

    Volledige aansluiting:

    * in PHP wordt automatisch uitgevoerd, behalve permanente verbindingen(mysql_pconnect).

    Een query naar MySQL (Mariadb) in PHP wordt gedaan met de mysql_query() functie, en het ophalen van gegevens uit de query wordt gedaan met mysql_fetch_array():

    $result = mysql_query("SELECT * FROM gebruikers");
    while ($mass = mysql_fetch_array($result)) (
    echo $massa. "
    ";
    }

    * in dit voorbeeld is er een query naar de tabel uitgevoerd gebruikers. Het zoekresultaat wordt in een variabele geplaatst $resultaat. Vervolgens wordt de lus gebruikt terwijl, waarvan elke iteratie een array met gegevens ophaalt en in een variabele plaatst $massa— in elke iteratie werken we met één rij van de database.

    De gebruikte functie mysql_fetch_array() retourneert een associatieve array, wat handig is om mee te werken, maar er is ook een alternatief - mysql_fetch_row(), die een reguliere genummerde array retourneert.

    Afscherming

    Als u een speciaal teken in de querytekenreeks moet opnemen, bijvoorbeeld %, moet u een escapeteken gebruiken met het backslash-teken - \

    Bijvoorbeeld:

    * als u een dergelijke zoekopdracht uitvoert zonder te ontsnappen, wordt het %-teken geïnterpreteerd als een willekeurig aantal tekens na 100.

    Dat is alles. Als u hulp nodig heeft bij het invullen van een verzoek, kunt u mij een e-mail sturen