Functionaliteit van de SQL-taal. SQL: een universele taal voor het werken met databases

Programmeertaal

SQL (Structured Query Language) is een databasebeheertaal voor relationele databases. SQL zelf is geen Turing-complete programmeertaal, maar de standaard maakt het mogelijk om procedurele uitbreidingen ervoor te creëren die de functionaliteit ervan uitbreiden tot een volwaardige programmeertaal.

De taal werd in de jaren zeventig gemaakt onder de naam "SEQUEL" voor het System R-databasebeheersysteem (DBMS). Later werd het omgedoopt tot "SQL" om handelsmerkconflicten te voorkomen. In 1979 werd SQL voor het eerst gepubliceerd als een commercieel product, Oracle V2.

De eerste officiële taalstandaard werd in 1986 door ANSI en in 1987 door ISO aangenomen. Sindsdien zijn er nog een aantal versies van de standaard gemaakt, waarvan sommige de vorige herhalen met kleine variaties, terwijl andere belangrijke nieuwe functies hebben gekregen.

Ondanks het bestaan ​​van standaarden verschillen de meest voorkomende SQL-implementaties zo sterk dat de code zelden van het ene databasebeheersysteem naar het andere kan worden overgedragen zonder noemenswaardige wijzigingen aan te brengen. Dit komt door de lengte en complexiteit van de standaard, maar ook door het gebrek aan specificatie op een aantal belangrijke implementatiegebieden.

SQL is gemaakt als een eenvoudige, gestandaardiseerde manier om gegevens in een relationele database op te halen en te manipuleren. Het werd later complexer dan bedoeld en werd een tool voor ontwikkelaars in plaats van een tool voor eindgebruikers. Momenteel blijft SQL (meestal zoals geïmplementeerd door Oracle) de meest populaire databasebeheertalen, hoewel er een aantal alternatieven bestaan.

SQL bestaat uit vier afzonderlijke delen:

  1. Data Definition Language (DDL) wordt gebruikt om de datastructuren te definiëren die in de database zijn opgeslagen. Met DDL-instructies kunt u afzonderlijke objecten in de database maken, wijzigen en verwijderen. Geldige objecttypen zijn afhankelijk van het gebruikte DBMS en omvatten doorgaans databases, gebruikers, tabellen en een aantal kleinere ondersteunende objecten zoals rollen en indexen.
  2. Datamanipulatietaal (DML) wordt gebruikt om gegevens in de database op te halen en te wijzigen. Met DML-instructies kunt u gegevens in tabellen ophalen, invoegen, wijzigen en verwijderen. Soms worden selectieinstructies voor het ophalen van gegevens niet beschouwd als onderdeel van DML, omdat ze de status van de gegevens niet veranderen. Alle DML-instructies zijn declaratief van aard.
  3. Data Access Definition Language (DCL) wordt gebruikt om de toegang tot gegevens in de database te controleren. DCL-instructies zijn van toepassing op bevoegdheden en bieden u de mogelijkheid rechten te verlenen en in te trekken om bepaalde DDL- en DML-instructies op bepaalde databaseobjecten toe te passen.
  4. Transaction Control Language (TCL) wordt gebruikt om de verwerking van transacties in de database te controleren. Typisch omvatten TCL-instructies commit om wijzigingen door te voeren die tijdens een transactie zijn aangebracht, rollback om ze terug te draaien en savepoint om de transactie in verschillende kleinere delen op te splitsen.

Opgemerkt moet worden dat SQL een declaratief programmeerparadigma implementeert: elke instructie beschrijft alleen de vereiste actie, en het DBMS neemt een beslissing over hoe deze moet worden uitgevoerd, d.w.z. plant de elementaire handelingen die nodig zijn om een ​​actie uit te voeren en voert deze uit. Om de mogelijkheden van SQL effectief te kunnen gebruiken, moet een ontwikkelaar echter begrijpen hoe het DBMS elke instructie parseert en het uitvoeringsplan ervan maakt.

Voorbeelden:

Hallo wereld!:

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

De tekenreeks 'Hallo wereld!' wordt geselecteerd uit de ingebouwde dubbele tabel, die wordt gebruikt voor zoekopdrachten waarvoor geen toegang tot echte tabellen nodig is.

selecteer "Hallo, wereld!"

van dubbel;

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

Factoriaal:

  • SQL ondersteunt geen lussen, recursie of door de gebruiker gedefinieerde functies. Dit voorbeeld demonstreert een mogelijke oplossing met behulp van:
  • pseudo-kolomniveau om pseudo-tabellen t1 en t2 te maken met getallen van 1 tot 16,
  • aggregatiefunctie sum , waarmee u de elementen van een set kunt optellen zonder expliciet een lus te gebruiken,

en de wiskundige functies ln en exp, waarmee u het product (nodig om de faculteit te berekenen) kunt vervangen door een som (geleverd door SQL).

De regel “0! = 1” wordt niet opgenomen in de resulterende reeks rijen, omdat een poging om ln(0) te evalueren resulteert in een uitzondering.

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

Fibonacci-getallen:

  • SQL ondersteunt geen lussen of recursie, en het aaneenschakelen van velden uit verschillende rijen in een tabel of query is geen standaard aggregatiefunctie. In dit voorbeeld wordt gebruik gemaakt van:
  • pseudo-kolomniveau om een ​​pseudo-tabel t1 te creëren met getallen van 1 tot 16;
  • ingebouwde functie SYS_CONNECT_BY_PATH voor geordende aaneenschakeling van de ontvangen nummers.

SELECTEER VERVANGEN (MAX (SYS_CONNECT_BY_PATH (fib || ", ", "/" )), "/" , "" ) || "..." fiblist FROM (SELECT n, fib, ROW_NUMBER () OVER (ORDER BY n) r FROM (selecteer n, round ((power ((1 + sqrt (5)) * 0. 5, n ) - power ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib van (selecteer niveau n van dubbele verbinding op niveau<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Hallo wereld!:

Voorbeeld voor versies van Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3

selecteer "Hallo, wereld!" ;

van dubbel;

Voorbeeld voor versies van Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Er wordt een recursieve definitie van faculteit gebruikt, geïmplementeerd via een recursieve query. Elke queryregel bevat twee numerieke velden, n en n!, en elke volgende regel wordt berekend met behulp van de gegevens van de vorige.

Je kunt alleen gehele faculteiten tot en met 20 berekenen!. Wanneer u 21 probeert te berekenen! De fout "Rekenkundige overloopfout" treedt op, d.w.z. het bitraster loopt over.

Voor reële getallen wordt de faculteit van 100 berekend! (Om dit te doen, moet u in het voorbeeld bigint vervangen door float in de derde regel)

De regel “0! = 1” wordt niet opgenomen in de resulterende reeks rijen, omdat een poging om ln(0) te evalueren resulteert in een uitzondering.

Voorbeeld voor versies van Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Er wordt iteratieve bepaling van Fibonacci-getallen gebruikt, geïmplementeerd via een recursieve query. Elke zoekregel bevat twee aangrenzende getallen in de reeks, en de volgende regel wordt berekend als (laatste getal, som van getallen) van de vorige regel. Alle getallen behalve het eerste en het laatste verschijnen dus twee keer, zodat het resultaat alleen de eerste getallen van elke regel bevat.

van dubbel;

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

Dit voorbeeld demonstreert het gebruik van de modeloperator, beschikbaar in Oracle 10g, waarmee queryreeksen als array-elementen kunnen worden behandeld. Elke regel bevat twee velden: het regelnummer n en de faculteit f.

selecteer n ||

De regel “0! = 1” wordt niet opgenomen in de resulterende reeks rijen, omdat een poging om ln(0) te evalueren resulteert in een uitzondering.

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

Dit voorbeeld demonstreert het gebruik van de modeloperator, beschikbaar in Oracle 10g, waarmee queryreeksen als array-elementen kunnen worden behandeld. Elke regel bevat twee velden: het Fibonacci-getal zelf en de aaneenschakeling van alle getallen kleiner dan of gelijk aan dit getal. Het iteratief samenvoegen van getallen in dezelfde query die ze genereert, is eenvoudiger en sneller dan het aggregeren als een afzonderlijke bewerking.

selecteer max(s) ||

van dubbel;

", ..." van (selecteer s uit dubbel model retourneer alle rijendimensie met ( 0 d ) metingen ( cast (" " as varchar2 (200 )) s , 0 f ) regels itereren ( 16 ) ( f [ iteratie_nummer ] = decoderen (iteratie_nummer, 0, 1, 1, 1, f [ iteratie_nummer - 1 ] + f [ iteratie_nummer - 2 ]), s [ iteratie_nummer ] = decoderen ( iteratie_nummer, 0, to_char (f [ iteratie_nummer ]), s [ iteratie_nummer - 1 ] ||. ", " ||.char (f [ iteratie_nummer ])) );

Voorbeeld voor MySQL 5-versies<= t2 . n group by t2 . n

De regel “0! = 1” wordt niet opgenomen in de resulterende reeks rijen, omdat een poging om ln(0) te evalueren resulteert in een uitzondering.

selecteer concat (cast (t2 . n als char ), "!= " , cast (exp (sum (log (t1 . n ))) als char )) uit ( selecteer @ i : = @ i + 1 AS n uit TABEL , (selecteer @ i : = 0 ) als sel1 limiet 16 ) t1 , ( selecteer @ j : = @ j + 1 AS n uit TABEL , (selecteer @ j : = 0 ) als sel1 limiet 16 ) t2 waarbij t1 . N

Voorbeeld voor MySQL 5-versies

Vervang TABLE door elke tabel waartoe u toegang hebt, zoals mysql.help_topic .

Hallo wereld!:

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

selecteer concat (group_concat (f separator ", " ), ", ..." ) uit (selecteer @ f : = @ i + @ j as f , @ i : = @ j , @ j : = @ f uit TABEL , (selecteer @ i : = 1 , @ j : = 0 ) sel1 limiet 16 ) t

In dit voorbeeld wordt een anoniem PL/SQL-blok gebruikt dat een bericht afdrukt naar standaarduitvoer met behulp van het pakket dbms_output.

van dubbel;

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

begin dbms_output . put_line("Hallo wereld!");

einde ;<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

De regel “0! = 1” wordt niet opgenomen in de resulterende reeks rijen, omdat een poging om ln(0) te evalueren resulteert in een uitzondering.

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

Dit voorbeeld demonstreert de iteratieve berekening van faculteit met behulp van PL/SQL.

declareer typevector is varray (16) van getal;

fib-vector := vector();

Voorbeeld voor versies Oracle 10g SQL, Oracle 11g SQL

ik nummer;

svarchar2(100);

begin fib. verlengen(16);

fib (1):= 1;

fib (2):= 1;<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

sessieset wijzigen NLS_NUMERIC_CHARACTERS = ";< 0 ;

selecteer 'Geen kwadratische vergelijking'.

ans van dual waarbij && A = 0 unie selecteer "x = " ||

to_char (-&& B / 2 /& A ) van dual waarbij & A != 0 en & B *& B - 4 *& A *&& C = 0 unie selecteer "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) ||", x2 = " || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A van dubbel waarbij & A != 0 en & B *& B - 4 *& A *& C > 0 unie selecteer "x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || "), " ||"x2 = (" || naar_char (-& B / 2 /& A ) || "," || naar_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || ")" van dubbel waarbij & A != 0 en & B *& B - 4 *& A *& C Bent u nieuw bij het programmeren of heeft u in het verleden eenvoudigweg het leren van SQL vermeden? Dan bent u bij ons aan het juiste adres, aangezien elke ontwikkelaar op den duur wordt geconfronteerd met de noodzaak om deze zoektaal te kennen. U bent misschien niet de belangrijkste databaseontwerper, maar het is bijna onmogelijk om met hen samen te werken. Ik hoop dat dit korte overzicht van de basissyntaxis van SQL-query's de geïnteresseerde ontwikkelaar en iedereen die het nodig heeft zal helpen. Wat is een SQL-database?

Gestructureerde querytaal (

S gestructureerd(RDBMS). Voor sommige systemen verwijst 'database' ook naar een groep tabellen, gegevens of configuratie-informatie die een inherent afzonderlijk onderdeel is van andere, soortgelijke constructies. In dit geval kan elke SQL-database-installatie uit meerdere databases bestaan. In andere systemen worden ze tabellen genoemd.

Een tabel is een databasestructuur die bestaat uit: kolommen bevattend lijnen gegevens. Meestal worden tabellen gemaakt om gerelateerde informatie te bevatten. Binnen dezelfde database kunnen meerdere tabellen worden gemaakt.

Elke kolom vertegenwoordigt een attribuut of een reeks attributen van objecten, zoals werknemersidentificatienummers, lengte, autokleur, enz. De term die vaak wordt gebruikt om naar een kolom te verwijzen is veld met vermelding van de naam, bijvoorbeeld "in het veld Naam". Een rijveld is het minimumelement van een tabel. Elke kolom in een tabel heeft een specifieke naam, gegevenstype en grootte. Kolomnamen moeten uniek zijn binnen de tabel.

Elke rij (of record) vertegenwoordigt een verzameling attributen van een specifiek object. Een rij kan bijvoorbeeld het identificatienummer van de werknemer, zijn salaris, zijn geboortejaar, enz. bevatten. Tabelrijen hebben geen namen. Om toegang te krijgen tot een specifieke rij, moet de gebruiker een attribuut (of een reeks attributen) opgeven dat deze op unieke wijze identificeert.

Een van de belangrijkste handelingen die worden uitgevoerd bij het werken met gegevens is het ophalen van informatie die is opgeslagen in de database. Om dit te doen, moet de gebruiker uitvoeren verzoek(vraag).

Laten we nu eens kijken naar de belangrijkste typen databasequery's die zich richten op het manipuleren van gegevens in de database. Voor onze doeleinden worden alle voorbeelden geleverd in standaard SQL, zodat ze geschikt zijn voor elke omgeving.

Soorten gegevensquery's

Er zijn vier hoofdtypen gegevensquery's in SQL, deze worden ook wel taal voor datamanipulatie(Datamanipulatietaal of DML):

  • SELECTEER– selecteer rijen uit tabellen;
  • INVOEGEN– rijen toevoegen aan de tabel;
  • UPDATE– rijen in de tabel wijzigen;
  • VERWIJDEREN– rijen in de tabel verwijderen;

Elk van deze query's heeft verschillende operators en functies die worden gebruikt om bepaalde acties op de gegevens uit te voeren. De SELECT-query heeft het grootste aantal opties. Er worden ook aanvullende querytypen gebruikt in combinatie met SELECT, zoals JOIN en UNION. Maar voorlopig zullen we ons alleen concentreren op basisvragen.

Een SELECT-query gebruiken om de gewenste gegevens te selecteren

Om informatie op te halen die in de database is opgeslagen, wordt een SELECT-query gebruikt. Het basiseffect van deze query is beperkt tot één enkele tabel, hoewel er ontwerpen zijn waarmee u uit meerdere tabellen tegelijk kunt kiezen. Om alle rijen met gegevens voor specifieke kolommen te krijgen, wordt een query als deze gebruikt:

SELECTEER kolom1, kolom2 VAN tabelnaam;

U kunt ook alle kolommen uit een tabel ophalen met behulp van het jokerteken *:

SELECT * FROM tabelnaam;

Dit kan handig zijn als u gegevens gaat selecteren met een specifieke WHERE-clausule. De volgende query retourneert alle kolommen uit alle rijen waarin 'kolom1' de waarde '3' bevat:

Naast = (is gelijk aan) zijn er de volgende voorwaardelijke operatoren:

Bovendien kunt u de BITWEEN- en LIKE-voorwaarden gebruiken om te vergelijken met de WHERE-voorwaarde, evenals combinaties van de AND- en OR-operatoren.

Wat in de Russische vertaling betekent: selecteer alle rijen uit de tabeltabelnaam, waarbij de waarde van de leeftijdskolom groter is dan of gelijk is aan 18, en de waarde van de kolom Achternaam in het alfabetische bereik ligt van Ivanov tot en met Sidorov, of de waarde van de kolom Bedrijf is Motorola.

Een INSERT-query gebruiken om nieuwe gegevens in te voegen

De INSERT-query wordt gebruikt creatie nieuwe rij gegevens. Om bestaande gegevens of lege rijvelden bij te werken, moet u een UPDATE-query gebruiken.

Voorbeeld INSERT-querysyntaxis:

INSERT INTO tabelnaam (kolom1, kolom2, kolom3) VALUES ("data1", "data2", "data3");

Als u alle waarden gaat invoegen in de volgorde waarin de tabelkolommen verschijnen, kunt u de kolomnamen weglaten, hoewel dit vanwege de leesbaarheid de voorkeur heeft. Als u kolommen vermeldt, hoeft u ze ook niet weer te geven in de volgorde waarin ze in de database verschijnen, zolang de waarden die u invoert maar overeenkomen met die volgorde. U mag geen kolommen vermelden die geen informatie bevatten.

Reeds bestaande informatie in de database wordt op een vergelijkbare manier gewijzigd.

UPDATE-query en WHERE-voorwaarde

UPDATE wordt gebruikt om bestaande waarden te wijzigen of een veld op een rij vrij te maken, dus de nieuwe waarden moeten overeenkomen met het bestaande gegevenstype en acceptabele waarden opleveren. Als u de waarden in alle rijen niet wilt wijzigen, moet u de WHERE-clausule gebruiken.

U kunt WHERE in elke kolom gebruiken, inclusief de kolom die u wilt wijzigen. Dit wordt gebruikt wanneer het nodig is om de ene specifieke waarde door een andere te vervangen.

Wees voorzichtig! DELETE-query verwijdert hele rijen

Een DELETE-query verwijdert een rij volledig uit de database. Als u één enkel veld wilt verwijderen, moet u een UPDATE-verzoek gebruiken en dit veld instellen op een waarde die analoog is aan NULL in uw programma. Zorg ervoor dat u uw DELETE-query beperkt tot een WHERE-clausule, anders raakt u mogelijk de volledige inhoud van de tabel kwijt.

Zodra een rij uit uw database is verwijderd, kan deze niet meer worden hersteld. Het is dus raadzaam om een ​​kolom met de naam "IsActive" of iets dergelijks te hebben, die u kunt wijzigen in null, wat aangeeft dat de weergave van de gegevens uit die rij is vergrendeld.

Nu kent u de basisprincipes van SQL-query's

SQL is een databasetaal en we hebben de belangrijkste en meest elementaire commando's besproken die worden gebruikt in dataquery's. Er zijn veel kernconcepten die niet aan bod kwamen (bijvoorbeeld SUM en COUNT), maar de weinige commando's die we hierboven hebben kunnen opsommen, zouden je moeten aanmoedigen om actief te worden en dieper te graven in de prachtige zoektaal genaamd SQL.

Laatste update: 24/06/2017

SQL Server is een van de populairste databasebeheersystemen (DBMS) ter wereld. Dit DBMS is geschikt voor een grote verscheidenheid aan projecten: van kleine applicaties tot grote, zwaarbelaste projecten.

SQL Server is gemaakt door Microsoft. De eerste versie werd uitgebracht in 1987. En de huidige versie is versie 16, die in 2016 uitkwam en in de huidige handleiding zal worden gebruikt.

SQL Server is lange tijd exclusief een databasebeheersysteem voor Windows geweest, maar vanaf versie 16 is het ook beschikbaar op Linux.

SQL Server wordt gekenmerkt door functies als:

    Prestatie. SQL Server is erg snel.

    Betrouwbaarheid en veiligheid. SQL Server biedt gegevensversleuteling.

    Eenvoud. Dit DBMS is relatief eenvoudig om mee te werken en te beheren.

Het centrale aspect in MS SQL Server, zoals in elk DBMS, is de database. Een database is een opslagplaats van gegevens die op een specifieke manier zijn georganiseerd. Vaak vertegenwoordigt de database fysiek een bestand op de harde schijf, hoewel deze correspondentie niet nodig is. Databasebeheersystemen of DBMS'en worden gebruikt voor het opslaan en beheren van databases. En alleen MS SQL Server is zo'n DBMS.

MS SQL Server gebruikt een relationeel model om databases te organiseren. Dit databasemodel werd in 1970 ontwikkeld door Edgar Codd. En tegenwoordig is het eigenlijk de standaard voor het organiseren van databases.

Het relationele model omvat het opslaan van gegevens in de vorm van tabellen, die elk uit rijen en kolommen bestaan. Elke rij bevat een afzonderlijk object en de kolommen bevatten de attributen van dat object.

Er wordt een primaire sleutel gebruikt om elke rij binnen een tabel te identificeren. De primaire sleutel kan uit een of meer kolommen bestaan. Met behulp van een primaire sleutel kunnen we naar een specifieke rij in een tabel verwijzen. Dienovereenkomstig kunnen twee rijen niet dezelfde primaire sleutel hebben.

Via sleutels kan de ene tabel aan de andere worden gekoppeld, dat wil zeggen dat relaties tussen twee tabellen kunnen worden georganiseerd. En de tabel zelf kan worden weergegeven als een relatie.

Voor interactie met de database wordt de taal SQL (Structured Query Language) gebruikt. De client (bijvoorbeeld een extern programma) verzendt een verzoek in SQL met behulp van een speciale API. Het DBMS interpreteert en voert het verzoek correct uit, en stuurt vervolgens het uitvoeringsresultaat naar de client.

SQL is oorspronkelijk door IBM ontwikkeld voor een databasesysteem genaamd System/R. Tegelijkertijd heette de taal zelf SEQUEL (Structured English Query Language). Hoewel noch de database, noch de taal zelf vervolgens officieel werden gepubliceerd, wordt de term SQL zelf traditioneel vaak uitgesproken als een ‘vervolg’.

In 1979 richtte Relational Software Inc. ontwikkelde het eerste databasebeheersysteem, Oracle genaamd, dat de SQL-taal gebruikte. Vanwege het succes van dit product werd het bedrijf omgedoopt tot Oracle.

Vervolgens verschenen er andere databasesystemen die SQL gebruikten. Als gevolg hiervan codificeerde het American National Standards Institute (ANSI) in 1989 de taal en publiceerde de eerste standaard. Hierna werd de standaard periodiek geactualiseerd en aangevuld. De laatste update vond plaats in 2011. Maar ondanks het bestaan ​​van een standaard gebruiken DBMS-fabrikanten vaak hun eigen implementaties van de SQL-taal, die enigszins van elkaar verschillen.

Er zijn twee varianten van de SQL-taal: PL-SQL en T-SQL. PL-SQL wordt gebruikt in DBMS'en zoals Oracle en MySQL. T-SQL (Transact-SQL) wordt gebruikt in SQL Server. Dit is in feite de reden waarom T-SQL in de huidige handleiding zal worden overwogen.

Afhankelijk van de taak die de T-SQL-opdracht uitvoert, kan dit een van de volgende typen zijn:

    DDL (Data Definition-taal). Dit type omvat verschillende opdrachten die een database, tabellen, indexen, opgeslagen procedures, enz. Maken. Over het algemeen worden gegevens bepaald.

    In het bijzonder kunnen we de volgende opdrachten als dit type classificeren:

    • CREATE : creëert databaseobjecten (de database zelf, tabellen, indexen, enz.)

      ALTER: wijzigt databaseobjecten

      DROP: Verwijdert databaseobjecten

      TRUNCATE: verwijdert alle gegevens uit tabellen

    DML (gegevensmanipulatietaal). Dit type bevat opdrachten voor het selecteren van gegevens, het bijwerken ervan, het toevoegen ervan en het verwijderen ervan - in het algemeen al die opdrachten waarmee we gegevens kunnen beheren.

    De volgende opdrachten behoren tot dit type:

    • SELECT: haalt gegevens op uit de database

      UPDATE: gegevens bijwerken

      INSERT: voegt nieuwe gegevens toe

      VERWIJDEREN: verwijdert gegevens

    DCL (Data Control Language / Data Access Control-taal). Dit type bevat opdrachten die de toegangsrechten voor gegevens beheren. In het bijzonder zijn dit de volgende opdrachten:

    • GRANT: verleent toestemming voor toegang tot gegevens

      REVOKE: trekt de toegangsrechten tot gegevens in

Klantprogramma's

TFTP-protocol

TFTP- ook het FTP-protocol, maar bovenop het UDP-protocol (dat wil zeggen een protocol zonder gegarandeerde levering). Kan worden gebruikt op een lokaal netwerk waar transmissiesnelheid belangrijker is. In de praktijk wordt er zelden gebruik van gemaakt.

FTP- het programma wordt gestart vanaf de opdrachtregel.

Windows Commander- kan werken als een FTP-client. Hiermee kunt u op dezelfde manier met externe mappen werken als met lokale mappen.

NetVampire - Een gespecialiseerde FTP-client waarmee u grote bestanden kunt downloaden en downloaden via slechte kanalen.

SQL (Structured Query Language) is een gestructureerde querytaal voor relationele databases. In deze taal kunt u uitdrukkingen (query's) formuleren die de benodigde gegevens ophalen, wijzigen, tabellen maken en hun structuur wijzigen, toegangsrechten tot gegevens bepalen en nog veel meer.

Query's worden uitgevoerd door een databasebeheersysteem (DBMS). Bent u geen specialist in databaseontwikkeling en -beheer, dan bent u wellicht een databasegebruiker die gegevens in bestaande tabellen bekijkt en/of wijzigt. In veel gevallen worden deze en andere databasebewerkingen uitgevoerd met behulp van speciale applicaties die de gebruiker een handige interface bieden. Meestal worden applicaties geschreven in speciale programmeertalen (C, Pascal, Visual Basic, enz.) en worden ze meestal gemaakt met behulp van geïntegreerde ontwikkelomgevingen, bijvoorbeeld Delphi, C++ Builder, enz. Toegang tot de database kan echter verkregen zonder hen - met alleen SQL. Er moet ook worden opgemerkt dat gespecialiseerde toepassingen gewoonlijk SQL-codefragmenten gebruiken bij de toegang tot de database.

SQL is dus een veelgebruikte standaardtaal voor het werken met relationele databases. De syntaxis van deze taal is zo eenvoudig dat deze door gewone gebruikers kan worden gebruikt, niet alleen door programmeurs. Tegenwoordig zou de gemiddelde computergebruiker minimaal vaardig moeten zijn in een tekstverwerker (zoals Microsoft Word) en een spreadsheetprogramma (zoals Microsoft Excel). Het is goed als hij ook weet hoe hij databases moet gebruiken. Er zijn veel verschillende DBMS'en, maar er is maar één universele tool voor het werken met databases: SQL. Kennis van SQL, althans de basis ervan, en het vermogen om het te gebruiken om gegevens te zoeken en te analyseren, is een fundamenteel onderdeel van computerkennis, zelfs voor gewone gebruikers.

De eerste ontwikkelingen op het gebied van relationele databasebeheersystemen (relationele DBMS) werden begin jaren zeventig bij IBM uitgevoerd. Tegelijkertijd werd er een datataal gecreëerd om in deze systemen te werken. De experimentele versie van deze taal heette SEQUEL - uit het Engels. Gestructureerde Engelse QUErytaal (gestructureerde Engelse querytaal). De officiële versie heette echter korter: SQL (Structured Query Language). Om precies te zijn, SQL is een data-subtaal, omdat het DBMS andere taalhulpmiddelen bevat.

In 1981 bracht IBM de relationele DBMS SQL/DS uit. Tegen die tijd heeft Relation Software Inc. (tegenwoordig is het Oracle Corporation) heeft zijn relationele DBMS al uitgebracht. Deze producten werden meteen de standaard voor databasebeheersystemen. Deze producten omvatten ook SQL, dat de de facto standaard werd voor data-subtalen. Fabrikanten van andere DBMS'en hebben hun eigen versies van SQL uitgebracht. Ze omvatten meer dan alleen de kernmogelijkheden van IBM-producten. Om enig voordeel te behalen voor “hun” DBMS, introduceerden fabrikanten enkele SQL-extensies. Tegelijkertijd werd begonnen met het creëren van een algemeen erkende SQL-standaard.

In 1986 bracht het American National Standards Institute (ANSI) de officiële standaard SQL-86 uit, die in 1989 werd bijgewerkt en omgedoopt tot SQL-89. In 1992 kreeg deze standaard de naam SQL-92 (ISO/IEC 9075:1992). De nieuwste versie van de SQL-standaard is SQL:2003 (ISO/IEC 9075X:2003).

Elke implementatie van SQL in een specifiek DBMS wijkt enigszins af van de standaard waaraan de fabrikant verklaart te voldoen. Veel DBMS'en (bijvoorbeeld Microsoft Access 2003, PostgreSQL 7.3) ondersteunen SQL-92 dus niet volledig, maar alleen met een bepaald niveau van compliance. Daarnaast ondersteunen ze ook elementen die niet in de standaard zijn opgenomen. DBMS-ontwikkelaars streven er echter naar om ervoor te zorgen dat nieuwe versies van hun producten zo goed mogelijk voldoen aan de SQL-standaard.

Aandacht. In deze zelfstudie worden SQL2003-elementen beschreven, die niet allemaal worden ondersteund door bestaande DBMS'en. Voordat u ze in de praktijk brengt, moet u ervoor zorgen dat ze in uw DBMS werken. U kunt hierover meer informatie vinden in de technische documentatie. De meeste beschreven elementen komen overeen met eerdere versies van SQL, in het bijzonder het veelgebruikte SQL-92.

SQL is opgevat als een eenvoudige zoektaal voor een relationele database, die dicht bij de natuurlijke (meer precies, Engelse) taal ligt. Er werd gehoopt dat de nauwere vorm van natuurlijke taal SQL tot een hulpmiddel zou maken dat op grote schaal zou kunnen worden gebruikt door gewone databasegebruikers, en niet alleen door programmeurs. Aanvankelijk bevatte SQL geen van de besturingsstructuren die in conventionele programmeertalen voorkomen. Verzoeken, waarvan de syntaxis vrij eenvoudig is, werden achtereenvolgens rechtstreeks vanaf de console ingevoerd en in dezelfde volgorde uitgevoerd. SQL is echter nooit een hulpmiddel geworden voor bankmedewerkers, verkopers van vlieg- en treinkaartjes, economen en andere medewerkers van verschillende bedrijven die informatie gebruiken die is opgeslagen in databases. Voor hen bleek eenvoudige SQL te complex en onhandig, ondanks dat het dicht bij de natuurlijke taal van vragen lag.

In de praktijk wordt er meestal met een database gewerkt via applicaties die door programmeurs zijn geschreven in proceduretalen, bijvoorbeeld C, Visual Basic, Pascal, Java, enz. Applicaties worden vaak gemaakt in speciale visuele ontwikkelomgevingen, zoals Delphi, Microsoft Access, Visual dBase, etc. n. Tegelijkertijd hoeft de applicatie-ontwikkelaar praktisch geen programmacodes te schrijven, omdat het ontwikkelsysteem dat voor hem doet. Het werk met de programmacode blijkt in ieder geval minimaal. Deze applicaties hebben een gebruiksvriendelijke grafische interface die de gebruiker niet dwingt om direct queries in SQL in te voeren. De applicatie doet dit in plaats daarvan. De toepassing kan echter wel of niet SQL gebruiken om toegang te krijgen tot de database. SQL is niet de enige, hoewel het een zeer effectief middel is om gegevens op te halen, toe te voegen en te wijzigen, en als het mogelijk is om het in een applicatie te gebruiken, dan moet dat gedaan worden.

Relationele databases kunnen onafhankelijk bestaan ​​van de applicaties die de gebruikersinterface verzorgen. Als er om de een of andere reden zo'n interface niet bestaat, is de database toegankelijk via SQL, via de console of een applicatie waarmee u verbinding kunt maken met de database, een SQL-query kunt invoeren en verzenden (bijvoorbeeld Borland SQL Explorer ).

De SQL-taal wordt beschouwd als een declaratieve (beschrijvende) taal, in tegenstelling tot de talen waarin programma's worden geschreven. Dit betekent dat SQL-expressies beschrijven wat er moet gebeuren, en niet hoe.

Om bijvoorbeeld informatie over de namen en functies van medewerkers van afdeling 102 uit de medewerkerstabel te selecteren, voert u gewoon de volgende query uit:

SELECT Achternaam, Functie FROM Werknemers WHERE Afdeling=102;

In het Russisch klinkt deze uitdrukking als volgt:

KIEZEN Achternaam, functie VAN Medewerkers MITS Afdeling = 102;

De waarde wijzigen " Ivanov "op" Petrov " kolom Achternaam , voer gewoon de volgende query uit:

UPDATE Medewerkers SET Achternaam = "Petrov" WHERE Achternaam = "Ivanov";

In het Russisch ziet deze uitdrukking er als volgt uit:

UPDATE Medewerkers GEÏNSTALLEERD Achternaam GELIJKWAARDIG " Petrov " WAAR Achternaam = "Ivanov" ;

U hoeft de acties die het DBMS moet uitvoeren om de in de query opgegeven gegevens uit de tabel te selecteren, niet in detail te beschrijven. Je beschrijft eenvoudig wat je wilt ontvangen. Als resultaat van het uitvoeren van de query retourneert het DBMS een tabel met de door u opgevraagde gegevens. Als er geen gegevens in de database zijn die overeenkomen met de zoekopdracht, wordt er een lege tabel geretourneerd.

Recente versies van SQL ondersteunen echter computationele besturingsinstructies die eigen zijn aan procedurele besturingstalen (voorwaardelijke vertakkings- en lusinstructies). Daarom is SQL nu geen puur declaratieve taal.

Naast het ophalen, toevoegen, wijzigen en verwijderen van gegevens uit tabellen, kunt u met SQL alle noodzakelijke acties uitvoeren om databases te maken, wijzigen en beveiligen. Al deze mogelijkheden zijn verdeeld over drie SQL-componenten:

· DML (Datamanipulatietaal - taal voor datamanipulatie ) is bedoeld ter ondersteuning van de database: selectie ( SELECTEER ), toevoegingen ( INVOEGEN ), wijzigingen ( UPDATE ) en verwijdering ( VERWIJDEREN ) gegevens uit tabellen. Deze operatoren (opdrachten) kunnen expressies bevatten, inclusief berekende, maar ook subquery's - query's die in een andere query zijn opgenomen. Over het algemeen kan een query-expressie zo complex zijn dat u niet meteen kunt zien wat deze doet. Een complexe vraag kan echter mentaal worden opgesplitst in delen die gemakkelijker te analyseren zijn. Op dezelfde manier worden complexe query's gemaakt op basis van relatief eenvoudig te begrijpen uitdrukkingen (subquery's).

· DDL (Datadefinitietaal - taal voor gegevensdefinitie ) is ontworpen om tabellen en de gehele database aan te maken, te wijzigen en te verwijderen. Voorbeelden van uitspraken in DDL zijn MAAK TABEL (Tabel maken)," CREËER UITZICHT (weergave maken), CREËER SHEMA (maak een diagram), WIJZIG TABEL (verander tabel), DRUPPEL (verwijderen), enz.

· DCL (Datacontroletaal - taal voor gegevensbeheer ) is ontworpen om de database te beschermen tegen verschillende soorten schade. Het DBMS biedt automatisch enige gegevensbescherming. In sommige gevallen moeten echter aanvullende maatregelen van de DCL worden overwogen.

SQL-taalfunctionaliteit

De belangrijkste functionaliteit van de SQL-taal wordt hieronder gegeven.

Definitie van gegevens. Deze SQL-functie is een beschrijving van de structuur van de ondersteunde gegevens en de organisatie van relationele relaties (tabellen). Operators voor het maken van een database, het maken van tabellen en het verkrijgen van toegang tot gegevens zijn bedoeld om deze te implementeren.

Een database maken. Gebruik de instructie CREATE DATABASE om een ​​nieuwe database te maken. De instructiestructuur specificeert de naam van de database die moet worden gemaakt.

Tabellen maken. De basistabel wordt gemaakt met behulp van de instructie CREATE TABLE. Deze instructie specificeert de veldnamen, de gegevenstypen daarvoor en de lengte (voor sommige gegevenstypen). SQL gebruikt de volgende gegevenstypen:

INTEGER – geheel getal;

CHAR – tekenwaarde;

VARCHAR – tekenwaarde, alleen niet-lege tekens worden opgeslagen;

DECIMAL – decimaal getal;

FLOAT – drijvende-kommagetal;

DUBBELE PRECISIE – zwevende komma met dubbele precisie;

DATETIME – datum en tijd;

BOOL – Booleaanse waarde.

De instructie voor het maken van een tabel specificeert beperkingen voor kolomwaarden en voor de tabel. Mogelijke beperkingen worden weergegeven in de tabel. 4.8

Tabel 4.8 Beperkingen op gedefinieerde gegevens

Voor een relationeel datamodel is het specificeren van een externe sleutel (FOREIGNKEY) essentieel. Bij het declareren van externe sleutels moet u de juiste beperkingen aan de kolom opleggen, bijvoorbeeld NOT NULL.

In een SQL-instructie duidt CHECK semantische beperkingen aan die de gegevensintegriteit garanderen, zoals het beperken van de set geldige waarden voor een bepaalde kolom.

U kunt de instructie create table niet meer dan één keer in dezelfde tabel gebruiken. Als er na de creatie onnauwkeurigheden in de definitie worden ontdekt, kunnen er wijzigingen worden aangebracht met behulp van de ALTER TABLE-instructie. Deze verklaring is bedoeld om de structuur van een bestaande tabel te wijzigen: u kunt een veld verwijderen of toevoegen aan een bestaande tabel.

Gegevensmanipulatie. Met SQL kan een gebruiker of toepassingsprogramma de inhoud van een database wijzigen door nieuwe gegevens in te voegen, bestaande gegevens te verwijderen of te wijzigen.

Nieuwe gegevens invoegen is een procedure voor het toevoegen van rijen aan een database en wordt uitgevoerd met behulp van de INSERT-instructie.

Gegevenswijziging omvat wijzigingen in waarden in een of meer kolommen van een tabel en wordt uitgevoerd met behulp van een UPDATE-instructie. Voorbeeld:

SET-bedrag=bedrag+1000,00

WAAR bedrag>0

Rijen verwijderen vanuit een tabel met behulp van de DELETE-instructie. De syntaxis van de operator is:

VAN tafel

De WHERE-clausule is optioneel, maar als deze niet is opgenomen, worden alle vermeldingen in de tabel verwijderd. Het is handig om de SELECT-instructie te gebruiken met dezelfde syntaxis als de DELETE-instructie om vooraf te controleren welke records worden verwijderd.

Zorgen voor gegevensintegriteit. Met de SQL-taal kunt u tamelijk complexe integriteitsbeperkingen definiëren, waarvan de naleving wordt gecontroleerd voor alle databasewijzigingen. Het monitoren van de resultaten van transacties, het verwerken van fouten die optreden en het coördineren van parallel werk met de database van verschillende applicaties of gebruikers wordt verzorgd door de COMMIT (registreert de succesvolle voltooiing van de huidige transactie en het begin van een nieuwe) en ROLLBACK (de noodzaak voor een rollback - automatisch herstel van de databasestatus naar het begin van de transactie) operators.

Gegevensbemonstering is een van de belangrijkste databasefuncties die overeenkomt met de SELECT-instructie. Een voorbeeld van het gebruik van de operator is in de vorige sectie besproken.

In SQL kunt u geneste reeksen query's (subquery's) maken. Er zijn bepaalde typen query's die het beste kunnen worden geïmplementeerd met behulp van subquery's. Deze zoekopdrachten omvatten zogenaamde bestaanscontroles. Laten we aannemen dat u gegevens wilt verkrijgen over studenten die geen zevenpuntscijfer hebben. Als een lege set wordt geretourneerd, betekent dit maar één ding: elke student heeft minstens één zo'n cijfer.

Tabellen koppelen. Met SQL-instructies kunt u gegevens uit meer dan één tabel ophalen. Eén manier om dit te doen is door tabellen te koppelen met behulp van één gemeenschappelijk veld.

De SELECT-instructie moet een beperking bevatten voor het matchen van de waarden van een specifieke kolom (veld). Vervolgens worden alleen die rijen waarin de waarden van de opgegeven kolom overeenkomen, uit de gerelateerde tabellen opgehaald. De kolomnaam wordt alleen samen met de tabelnaam aangegeven; anders zal de verklaring dubbelzinnig zijn.

U kunt andere typen tabelkoppelingen gebruiken: de INTER JOIN-operator (inner join) zorgt ervoor dat de resulterende set records overeenkomende waarden in gerelateerde velden bevat. Met Outer joins (OUTER JOIN) kunt u in het queryresultaat alle rijen uit de ene tabel en de overeenkomstige rijen uit een andere tabel opnemen

Toegangscontrole. SQL zorgt voor synchronisatie van databaseverwerking door verschillende applicatieprogramma's en bescherming van gegevens tegen ongeautoriseerde toegang.

Gegevenstoegang in een omgeving met meerdere gebruikers wordt beheerd met behulp van GRANT- en REVOKE-instructies. In elke instructie is het noodzakelijk om de gebruiker, het object (tabel, weergave) waarvoor de machtigingen zijn ingesteld, en de machtigingen zelf te specificeren. De GRANT-instructie geeft gebruiker X bijvoorbeeld de mogelijkheid om gegevens uit de PRODUCT-tabel op te halen:

VERLEEN SELECTIE OP PRODUCT AAN X

De REVOKE-instructie trekt alle eerder verleende machtigingen in.

SQL insluiten in applicatieprogramma's. Echte applicaties worden meestal in andere talen geschreven die SQL-code genereren en deze als ASCII-tekst doorgeven aan het DBMS.

De IBM-standaard voor SQL-producten regelt het gebruik van de ingebouwde SQL-taal. Bij het schrijven van een applicatieprogramma is de tekst een combinatie van opdrachten uit de hoofdprogrammeertaal (bijvoorbeeld C, Pascal, Cobol, Fortran, Assembler) en SQL-opdrachten met bijvoorbeeld een speciaal voorvoegsel. ExecSQL. De structuur van SQL-instructies is uitgebreid om hosttaalvariabelen in een SQL-constructie op te nemen.



De SQL-processor wijzigt het type programma in overeenstemming met de vereisten van de compiler van de hoofdprogrammeertaal. De functie van de compiler is het vertalen (vertalen) van een programma van de bronprogrammeertaal naar een taal die dicht bij de machinetaal ligt. Na compilatie is het applicatieprogramma (applicatie) een onafhankelijke module.

SQL-dialecten

Moderne relationele DBMS'en gebruiken dialecten van de SQL-taal om gegevens te beschrijven en te manipuleren. Een subset van de SQL-taal waarmee u een database kunt maken en beschrijven, wordt DDL (Data Definition Language) genoemd.

Aanvankelijk heette de SQL-taal SEQUEL (Structured English Query Language), vervolgens SEQUEL/2 en vervolgens eenvoudigweg SQL. Tegenwoordig is SQL de de facto standaard voor relationele DBMS'en.

De eerste taalstandaard verscheen in 1989: SQL-89 en werd ondersteund door vrijwel alle commerciële relationele DBMS'en. Het was algemeen van aard en onderhevig aan ruime interpretatie. De voordelen van SQL-89 kunnen worden beschouwd als de standaardisatie van de syntaxis en semantiek van operators voor bemonstering en gegevensmanipulatie, evenals de fixatie van middelen om de integriteit van de database te beperken. Er ontbrak echter zo'n belangrijk onderdeel als manipulatie van databaseschema's. De onvolledigheid van de SQL-89-standaard leidde tot de verschijning in 1992. de volgende versie van de SQL-taal.

SQL2 (of SQL-92) omvat vrijwel alle noodzakelijke zaken: manipulatie van databaseschema's, transactie- en sessiebeheer, ondersteuning voor client-server-architecturen of tools voor applicatieontwikkeling.

De volgende stap in de ontwikkeling van de taal is de SQL 3-versie. Deze versie van de taal wordt aangevuld met een triggermechanisme, definitie van een willekeurig gegevenstype en objectextensie.

Momenteel zijn er drie niveaus van de taal: beginner, gemiddeld en compleet. Veel fabrikanten van hun DBMS gebruiken hun eigen SQL-implementaties, tenminste gebaseerd op het initiële niveau van de overeenkomstige ANSI-standaard, en met enkele uitbreidingen die specifiek zijn voor een bepaald DBMS. In tabel 4.9 geeft voorbeelden van SQL-dialecten.

Tabel 4.9 SQL-dialecten

DBMS Zoektaal
Systeem R DBMS SQL
DB2 SQL
Toegang SQL
SYBASE SQL overal Watcom-SQL
SYBASE SQL-server Transact_SQL
Mijn SQL SQL
Orakel PL/SQL

Objectgeoriënteerde databases gebruiken de objectquerytaal OQL (Object Query Language). De OQL-taal was gebaseerd op het SELECT-commando van de SQL2-taal en voegde de mogelijkheid toe om een ​​query naar een object of verzameling objecten te sturen, evenals de mogelijkheid om methoden aan te roepen binnen een enkele query.

De compatibiliteit van veel gebruikte SQL-dialecten bepaalt de compatibiliteit van het DBMS. Het SYBASE SQL Anywhere DBMS is dus zo compatibel mogelijk voor een DBMS van deze klasse met het SYBASE SQL Server DBMS. Een van de aspecten van deze compatibiliteit is de ondersteuning in SYBASE SQL Anywhere van een dergelijk dialect van de SQL-taal als Transact-SQL. Dit dialect wordt gebruikt in SYBASE SQL Server en kan samen met het eigen SQL-dialect in SYBASE SQL Anywhere worden gebruikt - Watcom-SQL.

Beveiligingsvragen

1. Hoe kan een DBMS worden geclassificeerd?

2. Welke databasemodellen bestaan ​​er?

3. Wat zijn de belangrijkste elementen van informatiemodellen?

4. Welke soorten relaties tussen entiteiten bestaan ​​er?

5. Wat zijn ER-diagrammen en waarvoor worden ze gebruikt?

6. Wat kunt u doen met de tabelnormalisatieprocedure?

7. Wat zijn de taal- en softwaretools van het DBMS?

8. Welk type MS Access DBMS is het?

9. Wat zijn de belangrijkste doelstellingen van het MS Access DBMS?

10. Waar worden de belangrijkste SQL-operatoren voor gebruikt?