El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd publica su libro: "Un modelo de datos relacional para grandes bancos de datos compartidos". Ese libro dictara las directrices de las bases de datos relacionales. Apenas dos aos despus IBM (para quien trabajaba Codd) utiliza las directrices de Codd para crear el Standard English Query Language (Lenguaje Estndar Ingls para Consultas) al que se le llam SEQUEL. Ms adelante se le asignaron las siglas SQL (Standard Query Language, lenguaje estndar de consulta) aunque en ingls se siguen pronunciando secuel. En espaol se le llama esecuele.
En 1979 Oracle presenta la primera implementacin comercial del lenguaje. Poco despus se converta en un estndar en el mundo de las bases de datos avalado por los organismos ISO y ANSI. En el ao 1986 se toma como lenguaje estndar por ANSI de los SGBD relacionales. Un ao despus lo adopta ISO, lo que convierte a SQL en estndar mundial.
En 1989 aparece el estndar ISO (y ANSI) llamado SQL89 o SQL1. En 1992 aparece la nueva versin estndar de SQL (a da de hoy sigue siendo la ms conocida) llamada SQL92. En 1999 se aprueba un nuevo SQL estndar que incorpora mejoras que incluyen triggers, procedimientos, funciones, y otras caractersticas de las bases de datos objeto-relacionales; dicho estndar se conoce como SQL99. El ltimo estndar es el del ao 2003 (SQL2003) que aade secuencias y sobre todo el soporte para XML (un nuevo estndar en formatos de datos). El ANSI SQL sufri varias revisiones y agregados a lo largo del tiempo: Ao Nombre Alias Comentarios 1986 SQL-86 SQL-87 Primera publicacin hecha por ANSI. Confirmada por ISO en 1987. 1989 SQL-89 Revisin menor. 1992 SQL-92 SQL2 Revisin mayor. 1999 SQL:1999 SQL2000 Se agregaron expresiones regulares, consultas recursivas (para relaciones jerrquicas), triggers y algunas caractersticas orientadas a objetos. 2003 SQL:2003 Introduce algunas caractersticas de XML, cambios en las funciones, estandarizacin del objeto sequence y de las columnas autonumericas.
SELECT XMLELEMENT ( "Employee", X MLATTRIBUTES ( 'http://www.w3.org/2001/XMLSchema' AS "xmlns:xsi", 'http://www.oracle.com/Employee.xsd' AS "xsi:nonamespaceSchemaLocation" ), XMLForest(empno, ename, sal)) AS "result" FROM scott.emp WHERE deptno = 100;
<Employee xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:nonamespaceSchemaLocation="http://www.oracl e.com/Employee.xsd"> <EMPNO>1769</EMPNO> <ENAME>John</ENAME> <SAL>200000</SAL> </Employee> 2006 SQL:2006 ISO/IEC 9075-14:2006 Define las maneras en las cuales el SQL se puede utilizar conjuntamente con XML. Define maneras importar y guardar datos XML en una base de datos SQL, manipulndolos dentro de la base de datos y publicando el XML y los datos SQL convencionales en forma XML. Adems, proporciona facilidades que permiten a las aplicaciones integrar dentro de su cdigo SQL el uso de XQuery, lenguaje de consulta XML publicado por el W3C (World Wide Web Consortium) para acceso concurrente a datos ordinarios SQL y documentos XML.
ADMINISTRACION DE BASES DE DATOS EN ORACLE
ING. ROGER CALDERON MORENO 2 Funcionamiento de SQL
EL nombre Lenguaje estructurado de consulta es realmente y en cierta medida inapropiado. En primer lugar SQL es mucho mas que una herramienta de consulta, el SQL se utiliza para controlar todas las funciones bsicas que SGBD pueda proporcionar a sus usuarios. El SQL cuenta con los siguientes elementos:
DDL DML DCL Seleccin o de consulta Sql no es en s mismo un sistema de gestin de base datos, ni un producto autnomo. SQL es parte integral de un sistema de gestin de base de datos, un lenguaje y una herramienta para comunicarse con SGBD. El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones sobre los mismos. Es un lenguaje declarativo de "alto nivel" o "de no procedimiento", que gracias a su fuerte base terica y su orientacin al manejo de conjuntos de registros, y no a registros individuales, permite una alta productividad en codificacin y la orientacin a objetos. De esta forma una sola sentencia puede equivaler a uno o ms programas que utilizas en un lenguaje de bajo nivel orientado a registro. El SQL es un lenguaje declarativo. O sea, que especifica qu es lo que se quiere y no cmo conseguirlo, por lo que una sentencia no establece explcitamente un orden de ejecucin. El orden de ejecucin interno de una sentencia puede afectar gravemente a la eficiencia del SGBD, por lo que se hace necesario que ste lleve a cabo una optimizacin antes de la ejecucin de la misma. Muchas veces, el uso de ndices acelera una instruccin de consulta, pero ralentiza la actualizacin de los datos. Dependiendo del uso de la aplicacin, se priorizar el acceso indexado o una rpida actualizacin de la informacin. La optimizacin difiere sensiblemente en cada motor de base de datos y depende de muchos factores.
Proceso de las instrucciones SQL
El proceso de una instruccin SQL es el siguiente:
1. Se analiza la instruccin. Para comprobar la sintaxis de la misma 2. Si es correcta se valora si los metadatos de la misma son correctos. Se comprueba esto en el diccionario de datos. 3. Si es correcta, se optimiza, a fin de consumir los mnimos recursos posibles. 4. Se ejecuta la sentencia y se muestra el resultado al emisor de la misma.
Peticin SQL
Datos
SGBD Base de Datos Figura 1 ADMINISTRACION DE BASES DE DATOS EN ORACLE
ING. ROGER CALDERON MORENO 3
Normas de escritura
En SQL no se distingue entre maysculas y minsculas. Da lo mismo como se escriba. El final de una instruccin lo determina el signo del punto y coma. Los comandos SQL (SELECT, INSERT,...) pueden ser partidos por espacios o saltos de lnea antes de finalizar la instruccin. Se pueden tabular lneas para facilitar la lectura si fuera necesario. Los comentarios en el cdigo SQL comienzan por /* y terminan por */ (excepto en algunos SGBD).
SQL tiene diferentes funcionalidades dentro de la base datos como vemos en la figura 2. De aqu podemos deducir que:
SQL es un lenguaje de consultas interactivas. SQL es un lenguaje de programacin de la base de datos SQL es un lenguaje de administracin de la base de datos SQL es un lenguaje Cliente/Servidor SQL es un lenguaje de base de datos distribuidas SQL es un lenguaje pasarela de base de datos.
Caractersticas de SQL
Independiente del proveedor del SGBD. Portabilidad a travs de sistemas informticos. Esta estandarizado. Fundamento relacional. Claridad y sencillez de su sintaxis.
Base de Datos SGBD Internet Servidor Aplicaciones Consultas de Usuarios Equipo de Desarrollo DBA Figura 2 ADMINISTRACION DE BASES DE DATOS EN ORACLE
ING. ROGER CALDERON MORENO 4
DDL - Data Definition Language (Lenguaje de definicin de datos).
Permiten modificar las estructuras internas de la base de datos (tablas, vistas, ndices, trigger, usuarios, etc.). Lo forman las instrucciones CREATE, ALTER, DROP, RENAME y TRUNCATE.
Ejemplos:
DML - Data Manipulation Language (Lenguaje de manipulacin de datos).
Modifica filas (registros) de la base de datos. Lo forman las instrucciones INSERT, UPDATE, MERGE (Este comando se puede utilizar actualizar o insertar bajo una misma instruccin) y DELETE.
Ejemplos:
DCL - Data Control Language (Lenguaje de control de datos). Administran los derechos y restricciones de los usuarios. Lo forman las instrucciones GRANT y REVOKE.
ADMINISTRACION DE BASES DE DATOS EN ORACLE
ING. ROGER CALDERON MORENO 5
SELECT - Seleccin o consulta.
Es un comando que permite realizar consultas sobre los datos de la base de datos. Obtiene datos de la base de datos. Una consulta SQL es como una frase (escrita en ingls) con la que decimos lo que queremos obtener y de donde obtenerlo. Todas las sentencias empiezan con un verbo (palabra reservada que indica la accin a realizar), seguido del resto de clusulas, algunas obligatorias y otras opcionales que completan la frase. Todas las sentencias siguen una sintaxis para que se puedan ejecutar correctamente.
Consultas simples Tipo Estructura Ejemplo select select "nom_de_columna" from "nombre_tabla" select nombres from estudiante distinct select distinct "nombre_columna" from "nombre_tabla" select distinct tipo_documento from estudiante where select "nombre_columna" from "nombre_tabla" where "condition" select documento, nombres from estudiante where tipo_documento=CC condicionales select "nombre_columna" from "nombre_tabla" where "condicin simple" {[and|or] "condicin simple"} select documento, nombres from estudiante where tipo_documento=CC and edad>18 in y not in select "nombre_columna" from "nombre_tabla" where "nombre_columna" {[not | in] "(v1[,v2,vn])"} select documento, nombres from estudiante where edad in (18,20,25,30) is null is not null select "nombre_columna" from "nombre_tabla" where where "nombre_columna" {[is null | is not null]} select documento, nombres from estudiante where telfono is null between select "nombre_columna" from "nombre_tabla" where "nombre_columna" between 'valor1' and 'valor2' select documento, nombres from estudiante where edad between 18 and 20 like select "nombre_columna" from "nombre_tabla" where "nombre_columna" like {patrn} select documento, nombres from estudiante where nombres like Car% order by select "nombre_columna" from "nombre_tabla" [where "condicin"] order by "nombre_columna" [asc, desc] select documento, nombres from estudiante where tipo_documento=CC order by documento asc Consultas para totalizar y agrupar datos count, sum, avg,min,max select count("nombre_columna") from "nombre_tabla" select count(*) from estudiante group by select "nombre_columna 1", sum("nombre_columna 2") from "nombre_tabla" group by "nombre_columna 1" select colegio , count(*) from estudiante where tipo_documento=CC group by colegio having select "nombre_columna 1", sum("nombre_columna 2") from "nombre_tabla" group by "nombre_columna 1" having (condicin de funcin aritmtica) select colegio , count(*) from estudiante where tipo_documento=CC group by colegio having edad>16 ADMINISTRACION DE BASES DE DATOS EN ORACLE
ING. ROGER CALDERON MORENO 7
Consultas adicionales union. El propsito del comando union es el de combinar dos resultados de dos consultas distinta. Se utilizan para informacin relacionada en mltiples tablas. Una restriccin de union es que todas las columnas correspondientes necesitan ser del mismo tipo de datos. Tambin, cuando utilizamos union , slo se seleccionan valores distintos. [Instruccin SQL 1] union [Instruccin SQL 2] select codigo, nombre from estudiantes union select codigo, nombres from aspirantes union all. El propsito del comando union all es tambin combinar los resultados de dos consultas juntas. La diferencia entre union all y union es que, mientras union slo selecciona valores distintos, union all selecciona todos los valores. [Instruccin SQL 1] union all [Instruccin SQL 2] select codigo, nombre from estudiantes union all select codigo, nombres from aspirantes intersect. Parecido al comando union , intersect tambin opera en dos instrucciones SQL. La diferencia es que, mientras union acta fundamentalmente como un operador OR (O) (el valor se selecciona si aparece en la primera o la segunda instruccin), el comando intersect acta como un operador AND (Y) (el valor se selecciona si aparece en ambas instrucciones). [Instruccin SQL 1] intersect [Instruccin SQL 2] select codigo, nombre,fecha_n from estudiantes intersect select codigo, nombres, fecha_n from aspirantes minus. minus opera en dos instrucciones SQL. Toma todos los resultados de la primera instruccin SQL, y luego sustrae aquellos que se encuentran presentes en la segunda instruccin SQL para obtener una respuesta final. Si la segunda instruccin SQL incluye resultados que no estn presentes en la primera instruccin SQL, dichos resultados se ignoran. [Instruccin SQL 1] minus [Instruccin SQL 2] select codigo, nombre from estudiantes minus select codigo, nombres from aspirantes Case <expresion> when <valor1> then <valor_retorno> when <valor2> then <valor_retorno> when <valor3> then <valor_retorno>
[else <valor_retorno>] end
select "nombre_columna" case "nombre_columna" when <valor1> then <valor_retorno> end from "nombre_tabla" select documento, nombres , sexo case sexo when F then Femenino when M then Masculino else Indefinido end from estudiante
select documento, nombres , procedencia, valor case procedencia when Region then v_matricula * 0.05 when Indigena then v_matricula * 0.15 when Desplazado then v_matricula * 0.20 else Indefinido then v_matricula * 1 end from estudiante