SQL "voor dummies": wat moeten beginners weten? UPDATE-query en WHERE-voorwaarde. Wat is een relationele database?

Klantprogramma's

TFTP-protocol

TFTP- Dezelfde FTP-protocol, maar bovenaan UDP-protocol(d.w.z. een protocol zonder gegarandeerde levering). Kan gebruikt worden lokaal netwerk, waarbij de 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 kunt downloaden grote bestanden en downloaden via slechte kanalen.

SQL (Structured Query Language) is dat wel gestructureerde taal zoekopdrachten naar 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 ter beschikking stellen gebruiksvriendelijke interface. 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 eenvoudig genoeg zodat gewone gebruikers, en niet alleen programmeurs, deze kunnen gebruiken. Tegenwoordig moet de gemiddelde computergebruiker er minimaal over beschikken teksteditor(Bijvoorbeeld, Microsoft Word) En spreadsheets(bijvoorbeeld Microsoft Excel). Het is goed als hij ook weet hoe hij databases moet gebruiken. Er zijn veel verschillende DBMS'en, en universele remedie Er is maar één manier om met databases te werken: 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 het relationele DBMS SQL/DS uit. Tegen die tijd, Relatie 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 aanvaarde 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-toegang 2003, PostgreSQL 7.3) ondersteunen SQL-92 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 informatie krijgen van technische documentatie. De meeste van de beschreven elementen komen overeen of meer eerdere versies 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 aangenomen dat de gelijkenis in vorm met natuurlijke taal zal SQL een hulpmiddel maken dat beschikbaar is voor wijdverbreid gebruik gewone gebruikers databases, en niet alleen 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 luchtvaartmaatschappijen, treinkaartjes, economen en andere werknemers diverse bedrijven gebruikmaken van informatie die is opgeslagen in databases. Voor hen eenvoudige SQL bleek te complex en onhandig, ondanks de nabijheid van de natuurlijke taal van vragen.

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. Hoe dan ook: meewerken programmacode blijkt minimaal te zijn. Deze toepassingen zijn handig GUI, waardoor de gebruiker niet wordt gedwongen om rechtstreeks query's 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, ook al is het wel heel erg effectief middel gegevens ontvangen, toevoegen en wijzigen, en als het mogelijk is deze in een applicatie te gebruiken, dan moet dat gebeuren.

Relationele databases kunnen onafhankelijk bestaan ​​van de applicaties die de gebruikersinterface bieden. 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.

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

SELECT Achternaam, Functie FROM Werknemers WHERE Afdeling=102;

In het Russisch deze uitdrukking klinkt 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 het verzoek, 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-TAAL: GEGEVENSMANIPULATIE

IN DEZE LEZING...

· Doel van de Structure Query Language (SQL) en zijn bijzondere rol bij het werken met databases.

· Geschiedenis van oorsprong en ontwikkeling SQL-taal.

· Schrijven van SQL-statements.

· Informatie ophalen uit databases met behulp van de SELECT-instructie.

· constructie SQL-instructies, gekarakteriseerd de volgende kenmerken:

· het gebruik van de WHERE-constructie om rijen te selecteren die aan verschillende voorwaarden voldoen;

· het sorteren van zoekopdrachtresultaten met behulp van de ORDER BY-constructie;

· gebruik van SQL-aggregatiefuncties;

· het groeperen van geselecteerde gegevens met behulp van het GROUP BY-construct;

· gebruik van subquery's;

· gebruik van tabeljoins;

· toepassing van bewerkingen met verzamelingen (UNION, INTERSECT, EXCEPT).

· Wijzigingen aanbrengen in de database met behulp van INSERT-, UPDATE- en DELETE-instructies.

Een van de talen die ontstond als gevolg van de ontwikkeling relationeel model data is SQL, dat nu zeer wijdverbreid is geworden en feitelijk de standaardtaal voor relationele databases is geworden. De SQL-taalstandaard werd in 1986 vrijgegeven door het Amerikaanse National Standards Institute (ANSI) en in 1987 nam de International Organization for Standardization (ISO) deze standaard over als een internationale standaard. Momenteel wordt de SQL-taal ondersteund door honderden verschillende typen DBMS die zijn ontwikkeld voor een breed scala aan computerplatforms, variërend van personal computers en eindigend met mainframes.

Deze lezing gebruikt de ISO-definitie van SQL.

Inleiding tot SQL

In dit deel zullen we kijken naar het doel van de SQL-taal, kennis maken met de geschiedenis ervan en de redenen analyseren waarom deze tegenwoordig zo populair is geworden. grote waarde voor databasetoepassingen.

Doel van de SQL-taal

Elke taal die is ontworpen om met databases te werken, moet de gebruiker de volgende mogelijkheden bieden:

· maak databases en tabellen met volledige beschrijving hun structuren;



· Basisbewerkingen voor gegevensmanipulatie uitvoeren, zoals het invoegen, wijzigen en verwijderen van gegevens uit tabellen;

· Voer eenvoudige en complexe query's uit.

Bovendien moet de databasetaal alle bovengenoemde problemen oplossen minimale inspanning van de kant van de gebruiker, en de structuur en syntaxis van de opdrachten moeten vrij eenvoudig en toegankelijk zijn voor studie.

En ten slotte moet de taal universeel zijn, d.w.z. voldoen aan een erkende standaard, die het gebruik van dezelfde syntaxis en opdrachtstructuur mogelijk maakt bij het overstappen van het ene DBMS naar het andere. De moderne SQL-taalstandaard voldoet aan bijna al deze eisen.

SQL is een voorbeeld van een taal voor gegevenstransformatie, of een taal die is ontworpen om met tabellen te werken om invoergegevens om te zetten in de gewenste uitvoervorm. De SQL-taal, gedefinieerd door de ISO-standaard, bestaat uit twee hoofdcomponenten:

· Data-taal Definition Language (DDL), ontworpen om databasestructuren te definiëren en de toegang tot gegevens te controleren;

· Data Manipulation Language (DML), ontworpen voor het ophalen en bijwerken van gegevens.

Vóór de komst van de SQL3-standaard bevatte SQL alleen opdrachten voor het definiëren en manipuleren van gegevens; het ontbrak aan commando's om de voortgang van berekeningen te controleren. Met andere woorden, deze taal had geen IF ... THEN ...ELSE, GO TO, DO ... WHILE en andere commando's die waren ontworpen om de voortgang van het rekenproces te controleren. Soortgelijke problemen moesten worden opgelost programmatisch, met behulp van programmeer- of taakcontroletalen, of interactief, als resultaat van acties die door de gebruiker zelf worden uitgevoerd. Vanwege deze onvolledigheid zou de SQL-taal vanuit het oogpunt van de organisatie van het computerproces op twee manieren kunnen worden gebruikt. De eerste voorzien interactief werk, waarbij de gebruiker individuele SQL-instructies invoert vanaf de terminal. De tweede was het inbedden van SQL-instructies in procedurele taalprogramma's.

Voordelen van de SQL3-taal, waarvan de formele definitie in 1999 werd aangenomen:

· De SQL-taal is relatief eenvoudig te leren.

· Het is een niet-procedurele taal, dus er moet worden gespecificeerd welke informatie moet worden verkregen, en niet hoe deze kan worden verkregen. Met andere woorden: voor de SQL-taal zijn geen methoden voor gegevenstoegang vereist.

· Zoals de meesten moderne talen SQL ondersteunt een gratis formaat voor het schrijven van instructies. Dit betekent dat individuele operatorelementen niet aan vaste posities op het scherm worden gekoppeld terwijl u typt.

· De structuur van opdrachten wordt gespecificeerd door een set trefwoorden, vertegenwoordigend gewone woorden Engels, zoals CREATE TABLE - Een tabel maken, INSERT - Invoegen, SELECT - Selecteren.

Bijvoorbeeld:

MAAK TABEL [Verkoop] ​​( (S), [Objectnaam] VARCHAR(15), [Kosten] DECIMAL(7,2));

INSERT IN [Object] WAARDEN ("SG16", "Bruin", 8300);

SELECT , [Objectnaam], [Kosten];

VAN [Verkoop]

WAAR [Kosten] > 10000;

· De SQL-taal kan worden gebruikt door een breed scala aan gebruikers, waaronder databasebeheerders (DBA's), bedrijfsmanagementpersoneel, applicatieprogrammeurs en vele andere eindgebruikers van verschillende categorieën.

Momenteel zijn er internationale normen, waarbij het formeel wordt gedefinieerd als een standaardtaal voor het maken en manipuleren van relationele databases, wat het in feite ook is.

Geschiedenis van de SQL-taal

De geschiedenis van het relationele datamodel, en indirect van de SQL-taal, begon in 1970 met de publicatie van een baanbrekend artikel van E.F. Codd, die destijds werkte bij het onderzoekslaboratorium van IBM Corporation in San Jose. In 1974 publiceerde D. Chamberlain, die in hetzelfde laboratorium werkte, een definitie van een taal genaamd "Structured English Query Language", of SEQUEL. Een herziene versie van deze taal, SEQUEL/2, werd in 1976 uitgebracht; vervolgens moest de naam om juridische redenen worden gewijzigd in SQL - de afkorting SEQUEL werd al door filologen gebruikt. Maar tot op de dag van vandaag spreken veel mensen het SQL-acroniem nog steeds uit als "sequel", hoewel het officieel wordt aanbevolen om het te lezen als "es-qu-el".

In 1976 bracht IBM een prototype DBMS uit, gebaseerd op de SEQUEL/2-taal, genaamd "System R". Het doel hiervan proefversie bestond uit het testen van de haalbaarheid van de implementatie van het relationele model. Naast andere positieve aspecten kan het belangrijkste resultaat van dit project worden beschouwd als de ontwikkeling van de SQL-taal zelf. De wortels van deze taal gaan echter terug naar de SQUARE-taal (Specifying Queries as Rational Expressions), die de voorloper was van de SQL-taal. System R-project De SQUARE-taal is ontwikkeld als een onderzoeksinstrument voor het implementeren van relationele algebra door middel van in het Engels gecomponeerde zinnen.

Eind jaren zeventig bracht het bedrijf dat nu Oracle Corporation is geworden, het Oracle DBMS uit. Misschien is dit de allereerste commerciële implementatie van een relationeel DBMS gebouwd met behulp van de SQL-taal.

Even later verscheen het INGRES DBMS, met behulp van de QUEL-querytaal.

Deze taal was meer gestructureerd dan SQL, maar de semantiek ervan kwam minder dicht bij het gewone Engelse taal. Later, toen SQL werd aangenomen als de standaardtaal voor relationele databases, werd het INGRES DBMS volledig geconverteerd om het te gebruiken. In 1981 bracht IBM zijn eerste commerciële relationele DBMS uit, genaamd SQL/DS (voor de DOS/VSE-omgeving). In 1982 werd een versie van dit systeem uitgebracht voor de VM/CMS-omgeving, en in 1983 - voor de MVS-omgeving, maar al onder de naam DB2.

In 1982 begon het Amerikaanse National Standards Institute (ANSI) te werken aan de Relation Database Language (RDL), op basis van conceptdocumenten ontvangen van IBM Corporation. In 1983 raakte de Internationale Organisatie voor Standaardisatie (ISO) bij dit werk betrokken. De gezamenlijke inspanningen van beide organisaties culmineerden in de release van de SQL-taalstandaard. De naam RDL werd in 1984 verlaten en de concepttaal werd opnieuw ontworpen om dichter bij bestaande implementaties van de SQL-taal te staan.

De originele versie van de standaard, die in 1987 door ISO werd uitgebracht, lokte een golf van kritiek uit. In het bijzonder wees Date, een bekende onderzoeker op dit gebied, erop dat de standaard kritische functies weglaat, inclusief controles op referentiële integriteit, en enkele relationele operatoren.

Bovendien merkte hij de buitensporige overtolligheid van de taal op: hetzelfde verzoek kon in meerdere talen worden geschreven verschillende opties. Het merendeel van de kritiek werd als eerlijk erkend en de nodige aanpassingen werden aan de norm aangebracht voordat deze werd gepubliceerd. Er werd echter besloten dat het belangrijker was om de standaard zo snel mogelijk vrij te geven, zodat deze zijn rol kon vervullen gemeenschappelijke basis, waarin zowel de taal zelf als de implementaties ervan verder kunnen worden ontwikkeld, in plaats van te wachten totdat alle functies die verschillende specialisten als verplicht beschouwen voor een dergelijke taal zijn gedefinieerd en overeengekomen.

In 1989 publiceerde ISO een amendement op de standaard die functies voor gegevensintegriteit definieerde. In 1992 werd de eerste substantieel herziene versie van de ISO-standaard, ook wel SQL2 of SQL-92 genoemd, uitgebracht. Hoewel sommige functies voor het eerst in deze standaard zijn gedefinieerd, zijn veel ervan al geheel of gedeeltelijk geïmplementeerd in een of meer commerciële implementaties van de SQL-taal.

En de volgende versie van de standaard, die gewoonlijk SQL3 wordt genoemd, werd pas in 1999 uitgebracht. Deze versie biedt aanvullende ondersteuning voor objectgeoriënteerde gegevensbeheerfuncties.

Functies die door ontwikkelaars van commerciële implementaties aan de taalstandaard worden toegevoegd, worden extensies genoemd. De SQL-taalstandaard definieert bijvoorbeeld zes verschillende soorten gegevens die in databases kunnen worden opgeslagen. In veel implementaties wordt deze lijst aangevuld met verschillende extensies. Elke implementatie van een taal wordt een dialect genoemd. Er zijn geen twee dialecten die volledig identiek zijn en er is momenteel geen dialect dat volledig voldoet aan de ISO-norm.

Bovendien breiden databaseontwikkelaars, naarmate databaseontwikkelaars nieuwe functionaliteit aan hun systemen toevoegen, voortdurend hun SQL-dialecten uit, waardoor individuele dialecten steeds meer van elkaar gaan verschillen. De basiskern van de SQL-taal blijft echter min of meer gestandaardiseerd voor alle implementaties.

Hoewel de oorspronkelijke concepten van de SQL-taal door IBM waren ontwikkeld, bracht het belang ervan al snel andere ontwikkelaars ertoe om deze te creëren eigen implementaties. Momenteel zijn er letterlijk honderden producten op de markt verkrijgbaar die zijn gebouwd met behulp van de SQL-taal, en we horen voortdurend over de release van steeds meer nieuwe versies.

databases die op talloze computersystemen van verschillende typen zouden kunnen functioneren. Met zijn hulp kunnen gebruikers gegevens manipuleren, ongeacht of ze op een pc, een netwerkwerkstation of een mainframe werken.

Een van de talen die ontstond als resultaat van de ontwikkeling van het relationele datamodel is de SQL-taal (Structured Query Language), die inmiddels zeer wijdverspreid is geworden en feitelijk is geworden standaard taal relationele databases. Standaard SQL werd in 1986 uitgebracht door het American National Standards Institute (ANSI) en werd in 1987 internationaal overgenomen door de International Standards Organization (ISO). De huidige SQL-standaard staat bekend als SQL/92.

Het gebruik van welke standaard dan ook gaat niet alleen gepaard met talrijke en vrij voor de hand liggende voordelen, maar ook met bepaalde nadelen. In de eerste plaats sturen normen de ontwikkeling van de betreffende industrie in een bepaalde richting; In het geval van SQL leidt het hebben van sterke onderliggende principes uiteindelijk tot compatibiliteit tussen de verschillende implementaties ervan en helpt het de overdraagbaarheid te verbeteren. software en databases in het algemeen, en de veelzijdigheid van het werk van databasebeheerders. Aan de andere kant beperken standaarden de flexibiliteit en functionaliteit van een bepaalde implementatie. Onder taal implementatie SQL wordt begrepen softwareproduct SQL van de overeenkomstige fabrikant. Om de functionaliteit uit te breiden, voegen veel ontwikkelaars die zich houden aan geaccepteerde standaarden toe standaard taal SQL diverse uitbreidingen. Opgemerkt moet worden dat de normen elke voltooiing vereisen taalimplementaties SQL-aanwezigheid van bepaalde kenmerken en in algemene schets weerspiegelen belangrijke trends die niet alleen leiden tot compatibiliteit tussen alle concurrerende implementaties, maar ook de waarde van SQL-programmeurs en -gebruikers helpen vergroten relationele databases op moderne markt software.

Allemaal specifiek taalimplementaties verschillen enigszins van elkaar. Het is in het belang van de fabrikanten om ervoor te zorgen dat hun implementaties voldoen aan de huidige ANSI-normen voor draagbaarheid en gebruikerservaring. Elke implementatie van SQL bevat echter verbeteringen om aan de vereisten van een bepaalde databaseserver te voldoen. Deze verbeteringen of uitbreidingen van de SQL-taal zijn aanvullende opdrachten en opties die aanvullingen zijn op het standaardpakket en beschikbaar zijn in die specifieke implementatie.

Momenteel wordt de SQL-taal ondersteund door vele tientallen DBMS'en van verschillende typen, ontwikkeld voor een grote verscheidenheid aan computerplatforms, variërend van personal computers tot mainframes.

Alle talen voor gegevensmanipulatie die vóór de komst van veel DBMS'en zijn gemaakt relationele databases, waren gericht op bewerkingen waarbij gegevens werden gepresenteerd in de vorm van logische bestandsrecords. Uiteraard vereiste dit dat de gebruiker gedetailleerde kennis had van de organisatie van de gegevensopslag en dat hij zich serieus moest inspannen om te specificeren welke gegevens nodig waren, waar deze zich bevonden en hoe deze konden worden verkregen.

De beschouwde SQL-taal is gericht op bewerkingen waarbij gegevens worden gepresenteerd in de vorm van logisch onderling verbonden sets relatietabellen. Belangrijkste kenmerk de structuren zijn gericht op het eindresultaat van de gegevensverwerking, en niet op de procedure voor deze verwerking. De SQL-taal bepaalt zelf waar de gegevens zich bevinden, de indexen en zelfs wat de meest efficiënte volgorde van bewerkingen moet worden gebruikt om het resultaat te verkrijgen, dus het is niet nodig om deze details in de databasequery op te geven.

Inleiding tot client-servertechnologie

In verband met de uitbreiding van de markt voor informatiediensten begonnen softwarefabrikanten steeds intelligenter en dus omvangrijker te produceren softwaresystemen. Veel organisaties en individuele gebruikers konden gekochte producten vaak niet op hun eigen computers plaatsen. Om informatie uit te wisselen en te verspreiden, werden computernetwerken gecreëerd en werden generaliserende programma's en gegevens op speciale bestandsservers geïnstalleerd.

Dankzij DBMS'en die met bestandsservers werken, hebben veel gebruikers toegang tot dezelfde databases. Vereenvoudigt de ontwikkeling van verschillende geautomatiseerde systemen management van organisaties. Met deze aanpak wordt echter alle verwerking van verzoeken van programma's of van computerterminals van gebruikers hierop uitgevoerd, om zelfs eenvoudig verzoek van gelezen moet worden bestandsserver of schrijf er hele bestanden naar, en dit leidt tot conflictsituaties en netwerkcongestie. Om deze tekortkomingen weg te nemen, werd voorgesteld client-server-technologie, maar tegelijkertijd was er een gemeenschappelijke taal nodig voor de communicatie met de server - de keuze viel op SQL.

Client-server-technologie betekent deze manier van interactie softwarecomponenten, waarin ze één systeem vormen. Zoals de naam zelf al doet vermoeden, is er een cliëntproces dat dit vereist bepaalde middelen, en ook serverproces, die deze middelen levert. Het is niet nodig dat ze op dezelfde computer staan. Het is doorgaans gebruikelijk om de server op één knooppunt van het lokale netwerk te plaatsen, en clients op andere knooppunten.

In een databasecontext heeft de client de controle gebruikersinterface en applicatielogica, die fungeert als een werkstation waarop databaseapplicaties draaien. De client accepteert een verzoek van de gebruiker, controleert de syntaxis en genereert een databasequery in SQL of een andere databasetaal die geschikt is voor de applicatielogica. Vervolgens stuurt het een bericht naar de server, wacht op een antwoord en formatteert de ontvangen gegevens voor presentatie aan de gebruiker. De server ontvangt en verwerkt verzoeken aan de database en stuurt de resultaten vervolgens terug naar de client. Deze verwerking omvat het verifiëren van de inloggegevens van de klant, het waarborgen van integriteitsvereisten, het voldoen aan het verzoek en het bijwerken van de gegevens. Bovendien worden gelijktijdigheidscontrole en herstel ondersteund.

Client-server-architectuur heeft een aantal voordelen.

Bent u nieuw bij het programmeren of heeft u in het verleden eenvoudigweg het leren van SQL vermeden? Dan ben je het tegengekomen naar het juiste adres, aangezien elke ontwikkelaar uiteindelijk 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 dit kort overzicht de syntaxis van eenvoudige SQL-query's zal de geïnteresseerde ontwikkelaar en iedereen die het nodig heeft, helpen.

Wat is een SQL-database?

Gestructureerde querytaal ( S gestructureerd Q uery L taal) is een databasecommunicatiestandaard die wordt ondersteund door ANSI. Het meest nieuwste versie– SQL-99, hoewel er al een nieuwe standaard in ontwikkeling is. De meeste databases houden zich strikt aan de ANSI-92-standaard. Er is veel discussie geweest over de introductie van meer moderne normen, maar commerciële databaseleveranciers stappen hiervan af met nieuwe concepten voor het opslaan van opgeslagen gegevens. Bijna elke afzonderlijke database gebruikt er enkele uniek setje syntaxis, hoewel zeer vergelijkbaar met de ANSI-standaard. In de meeste gevallen is deze syntaxis een uitbreiding van de basisstandaard, hoewel er gevallen zijn waarin deze syntaxis verschillende resultaten oplevert voor verschillende databases. Het is altijd een goed idee om de databasedocumentatie te raadplegen, vooral als u onverwachte resultaten krijgt.

Als SQL nieuw voor u is, zijn er enkele basisconcepten die u moet begrijpen.

In algemene termen is dit een "database". gemeenschappelijke naam Voor relationeel systeem databasebeheer(RDBMS). Voor sommige systemen verwijst "database" ook naar een groep tabellen, gegevens en configuratie-informatie die inherent is apart deel van andere soortgelijke ontwerpen. In dit geval elke installatie SQL-database gegevens kunnen 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 te bevatten gerelateerde informatie. 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". Het tekenreeksveld is minimaal onderdeel tafels. Elke kolom in een tabel heeft een specifieke naam, gegevenstype en grootte. Kolomnamen moeten uniek zijn binnen de tabel.

Elke regel (of record) vertegenwoordigt een verzameling attributen van een specifiek object, die een regel bijvoorbeeld kan bevatten identificatienummer werknemer, de hoogte van zijn salaris, zijn geboortejaar, enz. 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 kritische operaties, die worden uitgevoerd bij het werken met gegevens, is de selectie van informatie die in de database is opgeslagen. 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– rijen uit tabellen selecteren;
  • INVOEGEN– rijen toevoegen aan de tabel;
  • UPDATE– rijen in de tabel wijzigen;
  • VERWIJDEREN– rijen in de tabel verwijderen;

Elk van deze vragen heeft diverse exploitanten en functies die worden gebruikt om bepaalde acties met de gegevens uit te voeren. De SELECT-query heeft de meeste groot aantal opties. Er zijn ook extra soorten query's die worden 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. Basisactie Deze zoekopdracht is beperkt tot één tabel, hoewel er ontwerpen zijn waarmee steekproeven uit meerdere tabellen tegelijk kunnen worden genomen. 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 wildcard *:

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 lijn 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.

Is al aan het veranderen bestaande informatie in de database op een vergelijkbare manier.

UPDATE-query en WHERE-voorwaarde

UPDATE wordt gebruikt om bestaande waarden te wijzigen of een veld achter elkaar vrij te maken, zodat de nieuwe waarden moeten overeenkomen bestaande soort gegevens en aanvaardbare waarden bieden. 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.

Gestructureerde querytaal of SQL is een declaratieve programmeertaal voor gebruik in quasi-relationele databases. Veel van de oorspronkelijke kenmerken van SQL zijn overgenomen uit de tupelrekening, maar recente uitbreidingen van SQL omvatten steeds meer relationele algebra.
SQL is oorspronkelijk gemaakt door IBM, maar veel leveranciers hebben hun eigen dialecten ontwikkeld. Het werd als standaard aangenomen door het American National Standards Institute (ANSI) in 1986 en ISO in 1987. In de taalstandaard SQL-programmering ANSI verklaarde dat de officiële uitspraak van SQL "es qu el" is. Veel databasespecialisten gebruikten echter de "jargon"-uitspraak "Sequel", die de oorspronkelijke naam van de taal, Sequel, weerspiegelt, die later werd gewijzigd vanwege conflicten. merken en namen van IBM. Programmeren voor beginners.
SQL-programmeertaal werd herzien in 1992 en deze versie staat bekend als SQL-92. 1999 werd vervolgens opnieuw herzien om SQL:1999 (AKA SQL3) te worden. Programmeren voor dummies. SQL 1999 ondersteunt objecten die voorheen niet in andere versies werden ondersteund, maar vanaf eind 2001 ondersteunden slechts enkele databasebeheersystemen SQL-implementaties: SQL 1999.
SQL, hoewel gedefinieerd als ANSI en ISO, kent vele variaties en uitbreidingen, waarvan de meeste hun eigen kenmerken hebben, zoals de "PL/SQL"-implementatie van Oracle Corporation of Sybase en de implementatie van Microsoft genaamd "Transact-SQL", wat verwarrend kan zijn voor die bekend zijn met de basisprincipes van programmeren. Het is ook niet ongebruikelijk dat commerciële implementaties ondersteuning voor de belangrijkste kenmerken van de standaard achterwege laten, zoals gegevenstypen als datum en tijd, en de voorkeur geven aan een aantal van hun eigen varianten. Als gevolg hiervan kunnen SQL-programmeertaalquery's, in tegenstelling tot ANSI C of ANSI Fortran, die gewoonlijk van platform naar platform kunnen worden geporteerd zonder grote structurele veranderingen, zelden worden geporteerd tussen verschillende systemen databases zonder noemenswaardige wijzigingen. De meeste mensen in de database-industrie zijn van mening dat dit gebrek aan compatibiliteit opzettelijk is, om elke ontwikkelaar zijn eigen databasebeheersysteem te bieden en de koper aan een specifieke database te binden.
Zoals de naam al doet vermoeden, is de programmeertaal SQL ontworpen voor specifieke, beperkte doeleinden: het opvragen van gegevens in een relationele database. Als zodanig is het een reeks programmeertaalinstructies voor het maken van datavoorbeelden, in plaats van een procedurele taal zoals C of BASIC, die zijn ontworpen om een ​​veel breder scala aan problemen op te lossen. Taalextensies zoals "PL/SQL" zijn ontworpen om deze beperking op te lossen door procedurele elementen aan SQL toe te voegen terwijl de voordelen van SQL behouden blijven. Een andere benadering is het inbedden van procedurele programmeertaalopdrachten in SQL-query's en interactie met de database. Oracle en anderen ondersteunen bijvoorbeeld Java-taal in de database, terwijl u met PostgreSQL functies in Perl, Tcl of C kunt schrijven.
Eén grapje over SQL: "SQL is noch gestructureerd, noch een taal." Het punt van de grap is dat SQL geen Turing-taal is. .

Selecteer * uit T
C1 C2
1 A
2 B
C1 C2
1 A
2 B
Selecteer C1 uit T
C1
1
2
C1 C2
1 A
2 B
Selecteer * uit T waarbij C1=1
C1 C2
1 A

Gegeven de T-tabel, Selecteer verzoek* uit T toont alle elementen van alle rijen in de tabel.
Vanuit dezelfde tabel geeft de query Select C1 from T de elementen uit kolom C1 van alle rijen in de tabel weer.
Uit dezelfde tabel toont de query Select * from T waarbij C1=1 alle elementen van alle rijen waarin de waarde van kolom C1 "1" is.

SQL-trefwoorden

SQL-woorden zijn onderverdeeld in een aantal groepen.

De eerste is Datamanipulatietaal of DML(taal voor gegevensbeheer). DML is een subset van de taal die wordt gebruikt om databases te doorzoeken en gegevens toe te voegen, bij te werken en te verwijderen.

  • SELECT is een van de meest gebruikte DML-opdrachten en stelt de gebruiker in staat een zoekopdracht op te geven als een vaste beschrijving van het gewenste resultaat. De query specificeert niet hoe de resultaten moeten worden gerangschikt - het vertalen van de query naar een vorm die in de database kan worden uitgevoerd, is de taak van het databasesysteem, meer bepaald de query-optimalisatie.
  • INSERT wordt gebruikt om rijen (formele set) aan een bestaande tabel toe te voegen.
  • UPDATE wordt gebruikt om gegevenswaarden in een bestaande tabelrij te wijzigen.
  • DELETE-definitie bestaande rijen, die van de tabel wordt verwijderd.

Er kan worden gezegd dat drie andere trefwoorden in de DML-groep vallen:

  • BEGIN WORK (of START TRANSACTION, afhankelijk van het SQL-dialect) kan worden gebruikt om het begin van een databasetransactie te markeren die geheel wordt voltooid of helemaal niet wordt uitgevoerd.
  • COMMIT stelt dat alle gegevenswijzigingen die zijn aangebracht nadat bewerkingen zijn uitgevoerd, worden opgeslagen.
  • ROLLBACK specificeert dat alle gegevenswijzigingen na de laatste commit of rollback vernietigd moeten worden, tot het punt dat in de database werd vastgelegd als een “rollback”.

COMMIT en ROLLBACK worden gebruikt op gebieden zoals transactiecontrole en vergrendeling. Beide instructies voltooien alle huidige transacties (sets van bewerkingen in de database) en verwijderen alle blokkeringen bij het wijzigen van gegevens in tabellen. De aanwezigheid of afwezigheid van een BEGIN WORK of soortgelijke instructie hangt af van de specifieke SQL-implementatie.

De tweede groep trefwoorden behoort tot de groep Data Definition Language of DDL (Data Definition Language). DDL stelt de gebruiker in staat nieuwe tabellen en de bijbehorende elementen te definiëren. De meeste commerciële bases SQL-gegevens hebben hun eigen extensies in DDL die controle mogelijk maken over niet-standaard, maar meestal vitale elementen van een bepaald systeem.
De belangrijkste punten van de DDL zijn de opdrachten voor maken en verwijderen.

  • CREATE specificeert de objecten (zoals tabellen) die in de database zullen worden gemaakt.
  • DROP specificeert welke bestaande objecten in de database meestal permanent worden verwijderd.
  • Sommige databasesystemen ondersteunen ook de opdracht ALTER, waarmee de gebruiker een bestaand object op verschillende manieren kan wijzigen, zoals het toevoegen van kolommen aan een bestaande tabel.

De derde groep sleutels SQL-woorden is Data Control Language of DCL (Data Control Language). DCL is verantwoordelijk voor de toegangsrechten tot gegevens en stelt de gebruiker in staat te bepalen wie toegang heeft om gegevens in de database te bekijken of te manipuleren. Er zijn hier twee belangrijke trefwoorden:

  • GRANT - stelt de gebruiker in staat bewerkingen uit te voeren
  • REVOKE - Verwijdert of beperkt de mogelijkheid van de gebruiker om bewerkingen uit te voeren.

Databasesystemen die SQL gebruiken

  • InterBase
  • MySQL
  • Orakel
  • PostgreSQL
  • SQL-server

Hoe word je een website-ontwikkelingsprofessional en begin je geld te verdienen? Voordelige videocursussen met een inleidende introductie.