SQL (Structured Query Lenguaje/Lenguaje de Consulta Estructurado). Antecedentes: Cuando el Dr. Codd introdujo el concepto de Base de Datos Relacional, se diseñó un sistema real de gestión de bases de datos relacional, System R (diseñado por IBM), el cual no era más que un prototipo, cuyo propósito era construir un Sistema Relacional utilizable para solucionar problemas reales. Este sistema incorporaba un sublenguaje de datos que permitía realizar cualquier acceso a la Base de Datos, que se llamó SEQUEL que posteriormente se le llamó SQL. Varias modificaciones y adecuaciones se han realizado hasta la fecha, y durante todo este tiempo ha ganado un reconocimiento por ser el procedimiento que se estima como más eficiente y rápido para manejo de consultas, presentando en sus últimas versiones la posibilidad de estructurar ‘disparadores’ o ‘triggers’ para realizar ciertas acciones como respuesta a eventos programados automáticamente, así como manejo de privilegios, especificar restricciones e implementar medidas de seguridad en el control de acceso. SQL-89 En 1986, el Instituto Nacional Norteamericano de Normalización (ANSI) publicó las primeras normas para la sintaxis y semántica de SQL. En 1989, el mismo organismo ANSI definió el SQL89, basado en el anterior, pero la definición de claves primarias, integridad de datos, etc, pero la principal característica de esta versión fue la poder utilizarse en forma interactiva o dentro del contexto de una aplicación. SQL92 o SQL2 En 1992, SQL-92 fue desarrollado por el comité técnico del ANSI: NCITS H2, quien tenía como responsabilidad el desarrolla de estándares para la sintaxis y semántica de los lenguajes de bases de datos, mejorando substancialmente las versiones anteriores. Estandares intermedios: CLI-95 El estándar SQL/CLI (CLI por Call Level Interface), cuya implementación más conocida es el estándar ODBC (Open Database Connectivity). PSM-96 El estándar SQL/PSM (PSM por Persistent Stored Modules), el cual especifica la sintaxis de la lógica procedimental de los módulos del servidor de SQL. OLB-98 El estándar SQL/OLB (OLB por Object Language Bindings) provee la habilidad de incluir comandos de SQL en programas de Java y está basado en el el driver JDBC. SQL99 o SQL3 Al final de los 90’s, los Sistemas Manejadores de Bases de Datos Orientados a Objetos OODBMS) y los Sistemas Manejadores de Bases de Datos Relacionales (ORDBMS) dejaron de estar en conflicto, cuando mejoraron las funciones ofrecidas por los OODBMS y mejoraron sus facilidades para soportar un lenguaje de consulta declarativo (con la definición de OQL – Object Query Language, que es muy parecido a SQL-3). Las principales diferencias en estos productos actualmente se concentran en los siguientes aspectos: Los OODBMS proveen persistencia para los objetos creados con los lenguajes OO, como Java, C++ y Smalltalk; los programadores definen clases y crean objetos de esas clases. En los ORDBMS se introduce un API separada (basado en SQL) para manipular los datos almacenados, las definiciones de clase se deben “\mapear" a los tipos de datos soportados por el sistema de base de datos. En 1999, después de la secuencia de estándares intermedios mencionados anteriormente, es aceptado y publicado el SQL3 o SQL:1999, participando en su diseño las dos organizaciones oficialmente activas en la estandarización de SQL: ANSI e ISO (International Organization for Standardization). SQL 2003 En el año 2003 salió un nuevo estandar de SQL, SQL:2003, el cual introduce la noción de XML y estandariza los generadores de secuencias o valores auto generados, esto incluye columnas que se utilizan como identificadores. Sql3 incluye PSM (Persistent Stored Modules). Algunos lenguajes para bases de datos: • QBE (Query By Example). Lenguaje de cálculo de dominios.Lenguaje de manipulación de datos basado en cálculo relacional de dominios. • Datalog (Database Logic).- es un lenguaje lógico desarrollado para el modelo relacional. Datalog sin recursión tiene el mismo poder expresivo que el álgebra relacional. Datalog recursivo permite expresar consultas. Datalog está basado en Prolog, en su sintaxis, pero su semántica operacional es distinta, ya que requiere de librerías especiales para poder implementarse. • SQL (Structured Query Language). Lenguaje relacional estándar de facto superconjunto del álgebra relacional. Componentes del SQL El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos. Tipos de Datos: Referente a los valores lógicos True o False, no son reconocidos en ORACLE, ni en SQLSERVER Existen los campos de tipo "SI/NO" de ACCESS; en estos sistemas se utilizan los campos BIT que permiten almacenar valores de 0 ó 1. Internamente, ACCESS, almacena en estos campos valores de 0 ó -1, así que todo se complica bastante, pero aprovechando la coincidencia del 0 para los valores FALSE, se puede utilizar la sintaxis siguiente que funciona en todos los casos: si se desea saber si el campo es falso "... CAMPO = 0" y para saber los verdaderos "CAMPO <> 0" Tipos de Datos Sinónimos BINARY BIT LOGICAL LOGICAL1 YESNO BYTE COUNTER CURRENCY DATETIME TIME TIMESTAMP SINGLE IEEESINGLE REAL DOUBLE FLOAT8 IEEEDOUBLE NUMBER NUMERIC SHORT SMALLINT LONG INTEGER INTEGER4 LONGBINARY OLEOBJECT LONGTEXT MEMO NOTE TEXT CHAR CHARACTER STRING VARCHAR VARIANT (No Admitido) VARBINARY BOOLEAN INTEGER1 AUTOINCREMENT MONEY DATE FLOAT4 FLOAT INTEGER2 INT GENERAL LONGCHAR ALPHANUMERIC VALUE Comandos Existen dos tipos de comandos SQL: • Los DLL que permiten crear y definir nuevas bases de datos, campos e índices. • Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos. Comandos DLL: Create crear Alter modificar Drop eliminar Comandos DML: Select Consultar Insert Agregar registro Delete Eliminar registro Update Modificar registro Cláusulas utilizadas en la evaluación de condiciones: From (identificación de las tablas que se utilizarán en la expresión) Where (permite establecer una condicional dentro de una expresión) Group by (permite agrupar una consulta) Having (se utiliza con group by para aplicar un filtro en la información agrupada) Order by (se utiliza para ordenar el resultado de una consulta) Operadores: AND (operador lógico) OR (operador lógico) NOT (operador lógico) BETWEEN (se utiliza para establecer un rango o intervalo de valores) LIKE (permite especializar una condición) IN (especifica condiciones en registros o se utiliza en subconsultas) <, >, <>, >=, <=, = Funciones de agregado o especiales: AVG (obtiene el promedio) COUNT (obtiene el total de registros de una tabla) SUM (obtiene el resultado de la suma de valores de un campo) MAX (obtiene el valor más alto del campo especificado) MIN (obtiene el valor más bajo del campo especificado) Predicados de consultas: ALL (regresa todos los campos de la tabla especificada) TOP (regresa un los primeros n registros de una tabla o de una consulta) DISTINCT (Obtiene solamente un registro con el valor especificado en un campo del registro, omitiendo otras tuplas que contengan el mismo valor en el mismo campo) DISTINCTROW (Evita repeticiones tomando en cuenta todos los campos del registro) Algunas reglas sintácticas básicas de SQL: Los retornos de carro, tabuladores y espacios en blanco no tienen ningún significado especial a la hora de la ejecución de sentencias. Las listas de objetos están delimitados por comas (,) cuando es necesario, y se pueden utilizar paréntesis para agruparlos. El Lenguaje de Programación o Sistema Gestor de Base de Datos que permita implementar el Sql incrustado, respetará la sintaxis de SQL en forma general, pero pueden presentarse algunas variaciones. SQL no es sensible a mayúsculas o minúsculas, excepto.en las cadenas que se almacenen en las tablas como valores, y esto debe tomarse en cuenta al realizar operaciones de comparación. En SQL, las columnas definidas como claves primarias no pueden aceptar valores nulos.