Structured Query Language
SQL (Structured Query Language o Llenguatge d'interrogació estructurat) és un llenguatge estàndard de comunicació amb bases de dades relacionals. És a dir, un llenguatge normalitzat que permet treballar amb la majoria de bases de dades relacionals. L'SQL es pot hostatjar (es pot utilitzar) dins d'altres llenguatges de programació. La principal característica d'aquest llenguatge és la seua simplicitat, ja que amb pocs coneixements es poden fer consultes bàsiques sobre una base de dades, encara que no per això deixa de ser un llenguatge complet, tant relacionalment com computacionalment (a partir de la versió SQL3 publicada el 1999).
El llenguatge SQL es pot dividir en tres conjunts d'instruccions o sentències segons la seva funció:
- Les sentències de definició (DDL Data Definition Language) permeten crear, modificar i esborrar estructures de dades.
- Les sentències de manipulació (DML Data Manipulation Language) permeten llegir, inserir, modificar i esborrar registres.
- Les sentències de control (DCL Data Control Language) permeten finalitzar o rebutjar transaccions i autoritzar o revocar els permisos dels usuaris.
L'SQL també estandarditza les sentències que s'utilitzen per hostatjar-se dins d'altres llenguatges.
Orígens i evolució[modifica]
Els orígens de l'SQL estan lligats a les bases de dades relacionals. El 1970 Codd proposa el model relacional, i associat a aquest un subllenguatge d'accés a les dades basat en el càlcul de predicats. A partir d'aquestes idees els laboratoris d'IBM defineixen el llenguatge SEQUEL (Structured English QUEry Language) que més tard fou àmpliament implementat pel SGBD experimental System R, desenvolupat el 1977 també per IBM. Tot i així, va ser Oracle qui el va introduir per primer cop el 1979 en un programa comercial.
El SEQUEL acabà sent el predecessor de SQL, que n'és una versió evolucionada. El SQL passa a ser el llenguatge per excel·lència dels diversos SGBD relacionals sorgits als anys següents i per fi és estandarditzat el 1986 per l'ANSI, donant lloc a la primera versió estàndard d'aquest llenguatge, el SQL-86 o SQL1. L'any següent aquest estàndard és adoptat per l'ISO.
Tot i així aquest primer estàndard no cobreix totes les necessitats dels desenvolupadors i inclou funcionalitats de definició d'emmagatzematges que es consideren eliminar. Així el 1992 es llença un nou estàndard ampliat i revisat d'SQL anomenat SQL-92 o SQL2.
Actualment SQL és l'estàndard de facto de la immensa majoria dels SGBD comercials. I, tot i que creix la diversitat de complements particulars que inclouen les diferents implementacions comercials del llenguatge, el suport estàndard SQL-92 és general i molt ampli.
L'ANSI SQL va sofrir diverses revisions i ampliacions al llarg del temps:
Any | Nom | Àlies | Comentaris |
---|---|---|---|
1986 | SQL-86 | SQL-87 | Primera publicació feta per ANSI. Confirmada per l'ISO el 1987 |
1989 | SQL-89 | FIPS 127-1 | Revisió menor |
1992 | SQL-92 | SQL2, FIPS 127-2 | Revisió major (ISO 9075) |
1999 | SQL:1999 | SQL3 | Es van afegir expressions regulars, consultes recursives (per relacions jeràrquiques), triggers i algunes característiques orientades a objectes |
2003 | SQL:2003 | Introdueix algunes característiques d'XML, canvis en les funcions, estandardització de l'objecte sequence i de les columnes auto-numèriques. | |
2006 | SQL:2006 | ISO/IEC 9075-14:2006 Defineix les maneres en les quales l'SQL es pot utilitzar conjuntament amb XML. Defineix maneres d'importar i desar dades XML en una base de dades SQL, manipulant-les dins de la base de dades i publicant l'XML i les dades SQL convencionals en forma XML. A més, proporciona facilitats que permeten a les aplicacions integrar dins del seu codi SQL l'ús de XQuery, llenguatge de consulta XML publicat pel W3C (World Wide Web Consortium) per a accés concurrent a dades ordinàries SQL i documents XML. |
Característiques generals[modifica]
SQL és un llenguatge d'accés a bases de dades que explota la flexibilitat i potència dels sistemes relacionals permetent de fer-hi una gran varietat d'operacions.
És un llenguatge declaratiu d'alt nivell o de no procediment, que gràcies a la seva forta base teòrica i la seva orientació a la gestió de conjunts de registres, i no a registres individuals, permet una altra productivitat de codificació. D'aquesta forma una sola sentència pot equivaldre a un o més programes que utilitzessin un llenguatge de baix nivell orientat a registre.
Funcionalitat[modifica]
SQL proporciona una rica funcionalitat més enllà de la simple consulta (o recuperació) de dades. Assumeix el paper de llenguatge de definició de dades (LDD), llenguatge de definició de vistes (LDV) i llenguatge de manipulació de dades (LMD). A més permet la concessió i denegació de permisos, la implementació de restriccions d'integritat i controls de transacció i l'alteració d'esquemes.
Les primeres versions de SQL incloïen funcions pròpies de llenguatge de definició d'emmagatzematge (LDA) però van ser suprimides pels estàndard més nous a fi de mantenir els estàndards més nous amb l'objectiu de mantenir el llenguatge només a nivell conceptual i extern.
Modes d'ús[modifica]
El SQL permet dos modes d'ús:
- Un ús interactiu, destinat principalment als usuaris finals avançats o ocasionals, en el que les diverses sentències SQL s'escriuen i s'executen a la línia d'ordres, o un entorn semblant.
- Un ús integrat, destinat a l'ús per part dels programadors dins de programes escrits en qualsevol llenguatge de programació amfitrió. En aquest cas SQL agafa el paper de subllenguatge de dades.
En el cas de fer un ús incrustat del llenguatge podem usar dues tècniques de programació. En una d'elles, en la que el llenguatge s'anomena SQL estàtic, les sentències usades no canvien durant l'execució del programa. En l'altre, on el llenguatge rep el nom de SQL dinàmic, es produeix una modificació total o parcial de les sentències en el transcurs de l'execució del programa.
La utilització de SQL dinàmic permet més flexibilitat i més complexitat en les sentències, però com a contrapunt obtenim una eficiència menor i l'ús de tècniques de programació més complexes en la gestió de memòria i variables.
Optimització[modifica]
Com ja s'ha comentat, i com sol ser comú en els llenguatges d'accés a bases de dades d'alt nivell, SQL és un llenguatge declaratiu. Això vol dir que especifica que és el que es necessita i no com aconseguir-ho, per tant una sentència no estableix explícitament una ordre d'execució.
L'ordre d'execució intern d'una sentència pot afectar greument l'eficiència del SGBD, per tant es fa necessari que aquest porti a terme una optimització abans de l'execució d'aquesta. Moltes vegades, l'ús d'índexs accelera una instrucció de consulta, però alenteix l'actualització de les dades. Depenent de l'ús de l'aplicació, es donarà prioritat a l'accés indexat o a una ràpida actualització de la informació. L'optimització varia sensiblement a cada motor de base de dades i depèn de molts factors.
Hi ha una ampliació de SQL coneguda com a FSQL (Fuzzy SQL, SQL difús) que permet l'accés a bases de dades difuses, usant la lògica difusa. Aquest llenguatge ha sigut implementat a nivell experimental i està evolucionant ràpidament.
Llenguatge de definició de dades (DDL)[modifica]
El llenguatge de definició de dades (en anglès Data Definition Language, o DDL), és el que s'encarrega de la modificació de l'estructura dels objectes de la base de dades. Existeixen quatre operacions bàsiques: CREATE, ALTER, DROP i TRUNCATE.
Disparadors[modifica]
Els disparadors, també coneguts com a desencadenants (triggers), són definits sobre la taula dins la que opera la sentència INSERT. Els desencadenants són avaluats en el context de l'operació. Els desencadenants BEFORE INSERT, permeten la modificació dels valors que insertarem a la taula. Els desencadenants AFTER INSERT, no poden modificar dades en endavant, però es poden utilitzar per iniciar accions en altres taules, com per exemple per aplicar mecanismes d'auditoria.