SlideShare una empresa de Scribd logo
1 de 30
LENGUAJE ESTRUCTURADO DE CONSULTA –SQL<br />INTRODUCCION<br />SQL, sigla proveniente de Structured Query Language, es una interfase interactiva que proporciona acceso en linea a la base de datos. Esta diseñado para usarse en consultas, manejo, creación y control de datos. Es una herramienta para organizar, gestionar y recuperar datos almacenados en una base de datos.<br />SQL fue el resultado del proyecto de investigación System R de IBM. Al final de los setenta, SQL pasó a formar parte del /dominio público y estuvo primero disponible como lenguaje para un sistema comercial de Oracle Corporation. SQL-92 es una mejora significativa de las primeras versiones del estándar SQL.<br />No es en sí mismo un sistema de gestión de base de datos, ni un producto autónomo. Es parte integral de un sistema de gestión de base de datos, un lenguaje y una herramienta para comunicarse con el DBMS (Database Management System) típico. Es un sublenguaje de base de datos, consistente en unas treinta sentencias especializadas para tareas de gestión de base de datos.<br />Existe un estandar SQL, lo que permite portabilidad hasta cierto punto, pero no garantiza la portabilidad una portabilidad completa. Diferencias como códigos de error, tipos de datos, tablas del sistema, SQL interactivo, interfaz de programa, SQL dinámico, diferencias semánticas, secuencias de ordenamiento y estructura de la base de datos, que son significativas obligan a ubicarse en el sistema en particular.<br />SQL-92, a diferencia de las versiones anteriores, permite a los usuarios definir esquemas múltiples. Los esquemas múltiples se pueden agrupar en catálogos (colecciones de esquemas), los cuales van muy vinculados con cada usuario.<br />Podemos tomar varios grupos de sentencias SQL, algunas relacionadas con el Lenguaje de Definición de Datos (DDL) y otras con el Lenguaje de Manipulación de Datos (DML).<br />El DDL consta de instrucciones como CREATE, DROP y ALTER, para crear estructura y objetos, eliminarlos y modificarlos.<br />Las proposiciones de DML permiten la consulta de la base de datos SELECT, adición de datos INSERT, supresión de datos DELETE y actualización de la base de datos UPDATE.<br />El lenguaje SQL define un panorama general de la seguridad de la base de datos.  El esquema de seguridad SQL se basa en tres conceptos principales:<br />Los usuarios, los objetos de las bases de datos y los privilegios. Las sentencias usadas son GRANT y REVOKE y en ocasiones se les agrupa dentro de un sublenguaje de datos conocido como DCL (Data Control Language).<br />Entre los tipos de datos definidos por SQL-92 se encuentran los siguientes:<br />Integer: para números enteros<br />Small integer: enteros pequeños<br />Numeric(p,e): numéricos con p dígitos en total, de los cuales e dígitos son están a la derecha del punto decimal.<br />Decimal(p,e)<br />Real<br />Double precision<br />Float<br />Caracter(n): cadenas de caracteres de longitud n<br />Date: tipo fecha<br />Time: tipo hora<br />DEFINICIÓN DE DATOS<br />SQL-92 permite la definición de un esquema, de la siguiente manera:<br />CREATE SCHEMA BIBLIOTECA<br />AUTHORIZATION LUZ_MARINA<br />Definición de dominios<br />Definición de tablas<br />Definición de vistas ...<br />SQL-92 permite la creación de dominios como por ejemplo:<br />CREATE DOMAIN IDENTIFICADOR NUMERIC (3) DEFAULT 0<br />CHECK (VALUE IS NOT NULL)<br />Lo anterior quiere decir que el dominio IDENTIFICADOR corresponde a un tipo de datos numérico de tres dígitos, su valor por defecto es cero y no puede ser nulo. Después de definido, una columna puede definirse con este dominio en lugar de usar un tipo de dato convencional.<br />En algunos productos comerciales, los esquemas pueden ser creados implícitamente, cada vez que se crea un usuario, y todo lo que este cree, pertenece a su propio esquema.<br />Las tablas se definen dando el nombre de la tabla, definiendo cada columna, posiblemente incluyendo restricciones sobre ella y definiendo las restricciones sobre la tabla.<br />Esquema y tablas de un caso<br />Para crear un esquema para una tienda de video, consistente de las tablas Almacén, Unidad (de producto de video), Producto (el identificado en el mercado), Título, Categoría y Actores, se puede proceder de la siguiente manera:<br />CREATE SCHEMA DISTRIBUIDORA_VIDEO<br />    AUTHORIZATION JGARCIA<br />Definiciones de dominios...<br />CREATE TABLE ALMACEN (<br />COD_ALMACENNUMERIC(2,0)PRIMARY KEY<br />NOMBRECARACTER(12))<br />CREATE TABLE CATEGORÍA (<br />CLASIFICACIONCARACTER(3)PRIMARY KEY,<br />DESCRIPCIÓNCARACTER(12))<br />CREATE TABLE TITULO (<br />COD_TITULOCARACTER(4)PRIMARY KEY, DESC_TITULOCARACTER(30),<br />CLASIFICACIONCARACTER(3),<br />COLOR_S_NCARACTER(1) DEFAULT ‘S’<br />CHECK COLOR_S_N=’S’ OR COLOR_S_N=’N’,<br />DURACIÓNNUMERIC(3)<br />FOREIGN KEY CLASIFICACIONREFERENCES CATEGORIA)<br />CREATE TABLE PRODUCTO (<br />COD_PRODUCTOCARACTER(6)PRIMARY KEY,<br />PRECIONUMERIC(6,0),<br />CANTNUMERIC(2,0),<br />COD_TITULOCARACTER(4),<br />FOREIGN KEY COD_TITULO REFERENCES TITULO)<br />CREATE TABLE UNIDAD (<br />NUM_UNIDADNUMERIC(4)PRIMERY KEY, COD_PRODUCTOCARACTER(6),<br />COD_ALMACENNUMERIC(2,0),<br />FOREIGN KEY COD_PRODUCTO REFERENCES PRODUCTO,<br />FOREIGN KEY COD_ALMACEN REFERENCES ALMACEN)<br />CREATE TABLE ACTORES (<br />NOMBRECARACTER(20)PRIMARY KEY,<br />COD_TITULOCARACTER(4),<br />FOREIGN KEY COD_TITULO REFERENCES TITULO)<br />La instrucción CREATE TABLE identifica el nombre de la tabla, que debe ser única dentro del esquema. Después de CREATE TABLE van entre paréntesis y separadas por coma las instrucciones que definen las columnas y las restricciones sobre la tabla.<br />Cada columna se define dando su nombre, su tipo de dato, opcionalmente su valor por defecto y algunas restricciones propias de la columna, tales como NOT NULL (atributo con valor diferente de nulo), PRIMARY KEY para llave primaria o restricciones CHECK para limitar los posibles valores que pueden asignarse a la columna.<br />La cláusula FOREIGN KEY sirve para identificar llaves foráneas, las cuales permiten establecer relaciones con otras tablas.<br />Junto con la instrucción CREATE TABLE para definir una nueva tabla, SQL-92 ofrece también instrucciones para modificar la estructura de una tabla tal como ALTER TABLE para adicionar una columna, modificar la definición de una columna o eliminar una columna de una tabla. DROP TABLE es otra instrucción DDL que permite borrar la estructura de una tabla completamente.<br />Las vistas<br />Una vista es una consulta almacenada que se convierte en una tabla virtual. Sus beneficios son:<br />Fácil de usar:  Algunas consultas resultan complicadas, luego de ser almacenada en una vista el usuario obtiene los resultados deseados sin preocuparse por los mecanismos.<br />Fácil de compartir:  Diferentes usuarios pueden tener diferentes resultados en una consulta a una misma tabla. Es una ventana de acceso a los datos.<br />Independencia de datos: Todos los cambios en los datos son automáticamente reflejados en la vista.<br />Para evitar mostrar el precio de los productos, creamos una vista sobre la tabla producto proyectando todos sus atributos a excepción del atributo precio, así:<br />CREATE VIEW v_producto AS<br />SELECT cod_producto, cant, cod_titulo<br />FROM producto<br />TABLA producto<br />COD_PRODUCTOCANTIDADCOD_TITULOPRECIOP428-V3P42830.000P428-B1P42820.000P781-C1P78132.000<br />VISTA v_producto<br />La instrucción SELECT cod_producto, cant, cod_titulo FROM producto, genera una proyección de estas columnas sobre la tabla producto. (la instrucción SELECT se verá en la siguiente sección).<br />En general, el formato para crear una vista es de la siguiente manera:<br />CREATE VIEW nombre_vista AS<br />SELECT columna1, ..., columnan<br />FROM tabla1, ..., tablam<br />WHERE condiciones.<br />El proceso de selección (SELECT) se analizará en detalle en la siguiente sección.<br />MANIPULACIÓN DE DATOS<br />La manipulación de datos abarca tanto la consulta como la actualización. SQL-92 soporta las operaciones de selección, proyección y producto de una manera elemental e implementa directamente las operaciones del álgebra relacional como la unión, la intersección, la diferencia y el join. La división, de acuerdo con Hansen y Hansen, es soportada de una manera engorrosa.<br />Datos ilustrativos para las consultas<br />ALMACEN (COD_ALMACEN, NOMBRE)<br />10VISION<br />12CINEASTA<br />UNIDAD (NUM_UNIDAD, COD_PRODUCTO, COD_ALMACEN)<br />  1P428-V10<br />2P428-V10<br />3P428-V12<br />4P428-B12<br />5P781-C12<br />PRODUCTO (COD_PRODUCTO, PRECIO, CANT, COD_TITULO)<br />P428-V30.0003P428<br />P428-B20.0001P428<br />5P781-C32.0001P781<br />TITULO (COD_TITULO,DESC_TITULO,CLASIF,COLOR_S_N, DURACIÓN )<br />P428   LA Z...FICS   95<br />P781   EL AMOR…ROMN   120<br />CATEGORÍA (CLASIFICACION, DESCRIPCIÓN)<br />    FIC    FICCIÓN<br />    ROM    ROMÁNTICA<br />ACTORES (NOMBRE, COD_TITULO)<br />ANNA...P428<br />HENRY...P428<br />JIM...P781<br />Consultas simples<br />Lças consultas en SQL se hacen con el comando SELECT. La forma general del comando SELECT es:<br />SELECT lista-del-select FROM nombres-tablas<br />[WHERE condición]<br />[GROUP BY lista-columnas] [HAVING condición]<br />[ORDER BY nombre-columna]<br />[INTO TEMP nombre-tabla]<br />Sólo son obligatorias las cláusulas SELECT y FROM. Si se usan otras cláusulas ellas deben aparecer en el orden que se muestra.<br />La cláusula INTO TEMP  es usada para crear una tabla temporal que puede ser usada en queries posteriores. La tabla temporal puede ser juntada a las permanentes de la base de datos. la tabla es borrada automáticamente del disco cuando se hace salida del RDBMS.<br />Una consulta simple es una consulta sobre una única tabla de la base de datos. Ejemplos: <br />Obtener los nombres de todos los almacenes:<br />SELECT nombre FROM almacen<br />Resultado:<br />NOMBRE<br />VISION<br />CINEASTA<br />Si se requiere la consulta de registros bajo condiciones especiales, es posible mediante la cláusula WHERE, por ejemplo:<br />Obtener los títulos de las películas en blanco y negro:<br />SELECT desc_titulo FROM titulo<br />WHERE color_s_n = ‘N’<br />Resultado:<br />DESC_TITULO<br />EL AMOR…<br />Se debe tener presente que para las tablas que contienen un gran número de filas, cualquier instrucción que tiene una cláusula WHERE será más eficiente si la columna en la cláusula WHERE es indexada.<br />Las condiciones pueden ser de igualdad  (=), desigualdad (<>), mayor que (>), menor que (<), mayor o igual a (>=) o menor o igual a (<=).<br />Para múltiples condiciones se pueden usar los operadores lógicos AND, OR, IN (incluidos) y NOT. Se sigue las reglas del álgebra booleana:<br />Listar los números de unidad de los almacenes 10 y 12:<br />SELECT num_unidad FROM unidad<br />WHERE cod_almacen = 10 OR cod_almacen = 12<br />Resultado:<br />               NUM_UNIDAD<br />1<br />2<br />3<br />4<br />5<br />También se puede consultar así:<br />SELECT num_unidad FROM unidad<br />WHERE cod_almacen IN (10,12)<br />Es posible usar el comodín asterisco (*), para significar que todas las columnas deben desplegarse. Ejemplo: Obtener toda la información sobre unidades de video:<br />SELECT *  FROM unidad<br />Resultado:<br />NUM_UNIDAD COD_PCOD_A<br />1P428-V10<br />2P428-V10<br />3P428-V12<br />4P428-B12<br />5P781-C12<br />Dentro del SELECT se puede hacer uso de expresiones, por ejemplo para calcular el precio total de cada producto en existencia. Además podemos ordenarlo ascendentemente por código de producto:<br />SELECT cod_producto, precio*cant FROM producto<br />ORDER BY cod_producto<br />Resultado:<br />COD_PRODUCTOPRECIO*CANT<br />   P428-B20.000<br />   P428-V90.000<br />   P781-C32.000<br />El ORDER BY ordena por defecto en forma ascendente. La sintaxis para el ordenamiento es:<br />SELECT ...<br />ORDER BY columna o expresión [ASC/DESC]<br />Para obtener resultados entre rangos se permite el operador BETWEEN, y se puede usar de la siguiente manera para obtener los números de unidad entre el 2 y el 4:<br />SELECT * FROM unidad<br />WHERE num_unidad BETWEEN 2 AND 4<br />Resultado:<br />NUM_UNIDAD COD_PCOD_ALM<br />2P428-V10<br />3P428-V12<br />4P428-B12<br />En general se puede usar así:<br />WHERE columna o expresión BETWEEN mínimo AND máximo.<br />También se permite usar el operador  NOT BETWEEN.<br />Se pueden usar caracteres comodines que son símbolos especiales que valen lo que cualquier cadena no especificada de caracteres, usando la cláusula LIKE. El comodín % se usa para cero o más caracteres mientras el comodín _ se utiliza para exactamente un carácter.<br />Encontrar los títulos de películas que comienzan por la partícula ‘LA’:<br />SELECT desc_titulo FROM titulo<br />WHERE desc_titulo LIKE ‘LA%’<br />Encontrar los títulos y duraciones de las películas que comienzan por A y terminan en R pero sólo tienen cuatro letras.<br />SELECT desc_titulo, duracion FROM titulo<br />WHERE desc_titulo LIKE ‘A_ _R’<br />Para algunos casos es probable que el valor de una columna sea innecesario o desconocido, el valor NULL puede ser asignado. El valor NULL no es igual a cero. La comparación se usa de la siguiente forma:<br />SELECT …<br />WHERE columna ó expression IS [NOT] NULL<br />La cláusula DISTINCT facilita la supresión de valores duplicados en una columna seleccionada para la salida:<br />SELECT DISTINCT cod_titulo FROM producto<br />Resultado:<br />COD_TITULO<br />P428<br />P781<br />Funciones integradas<br />Existen diversas funciones tanto estadísticas como de manejo de cadenas de caracteres para dar mayor flexibilidad al manejo de SQL.<br />En ocasiones se requiere de examinar un conjunto de filas en una tabla y producir un valor. Para esto se requiere de uso de funciones como SUM, AVG, COUNT, MAX y MIN.<br />SUM sirve para calcular la sumatoria de los valores de una columna o una expresión basada en columnas. Así, podemos calcular la cantidad de películas en existencia:<br />SELECT SUM(cant) FROM producto<br />Resultado:<br />               SUM(cant)<br />5<br />También podemos calcular el valor total de las películas en existencia:<br />SELECT SUM(precio*cant) FROM producto<br />Resultado:<br />               SUM(precio*cant)<br />142.000<br />AVG sirve para calcular el valor promedio sobre una columna.<br />MAX encuentra el valor máximo de una columna.<br />MIN encuentra el valor mínimo de una columna.<br />COUNT sirve para contar, pero tiene las siguientes connotaciones:<br />COUNT (*):  Cuenta el número de filas, incluyendo nulos.<br />COUNT (columna):  Cuenta los valores no nulos en una simple columna.<br />COUNT (DISTINCT columna):  Cuenta los valores distintos no nulos de una simple columna.<br />Ejemplo: Contar el número de unidades de video del almacén número 12.<br />SELECT COUNT(*) FROM unidad<br />WHERE cod_almacen = 12<br />Resultado:<br />               COUNT(*)<br />3<br />En las expresiones pueden aparecer los operadores aritméticos convencionales: +, *, -, /<br />Entre las funciones que manejan cadenas de caracteres se encuentran las siguientes:<br />cad1||cad2: Concatena las cadenas de caracteres. Los nombres de columnas son cadenas validas.<br />LENGTH (cadena):  Encuentra la longitud de la cadena.<br />SUBSTR (cad,posic_inicial [,long]):  Encuentra la subcadena de quot;
longquot;
 caracteres, empezando en quot;
posic_inicialquot;
.<br />UPPER (cadena):  Cambia los caracteres minúsculas por mayúsculas.<br />LOWER (cadena):  Cambia los caracteres mayúsculas por minúsculas.<br />TO_NUMBER (cadena):  Convierte los datos carácter (compuestos por números) en valore numéricos.<br />TO_CHAR (cadena):  Convierte un campo numérico en tipo carácter.<br />LPAD (cadena,long_n [,carac]):  Rellena la izquierda de la cadena con el quot;
caracquot;
  especificado  (por defecto blancos), hasta que la  longitud de la cadena nueva sea quot;
long_nquot;
.<br />RPAD (cad,long_n [,caract]):  Rellena la derecha de la cadena con el quot;
caracquot;
 especificado (por defecto blancos), hasta que la longitud de la cadena nueva sea quot;
long_nquot;
.<br />NVL (cad1,cad2):  Si cad1 es nulo retorna cad2.  En otro caso retorna cad1.<br />DECODE (cadena,caso1,rcad1, .,defecto):  La salida es el resultado  quot;
rcad1quot;
 donde la cadena iguale la ocurrencia de caso1 y asi sucesivamente.  El último argumento es el valor por defecto.<br />INITCAP(cadena): Vuelve mayúscula la letra inicial de la cadena.<br />LTRIM(cadena,grupo): Va removiendo de izquierda a derecha los caracteres que se encuentran en el grupo.<br />RTRIM(cadena,grupo): Va removiendo de derecha a izquierda los caracteres que se encuentran en el grupo.<br />TO_CHAR (fecha,formato): Convierte una fecha a cadena de caracteres para poder imprimirse.<br />TO_DATE (fecha,formato):  Convierte cadena de caracteres a fechas.<br />Manejo de grupos: GROUP BY y HAVING<br />La cláusula GROUP BY nos entrega resúmenes de datos. Un registro de información resumida es retornado para cada valor distinto encontrado en la columna sobre la cual se hizo la agrupación:<br />Un grupo es un conjunto de filas que contienen el mismo valor en una columna dada. <br />Cuando se agrupen datos, sólo las columnas incluidas en la cláusula GROUP BY o las funciones agregadas pueden aparecer en la lista del SELECT. Sinembargo una columna en la lista del GROUP BY no necesita estar en la lista del SELECT.<br />La cláusula HAVING se usa para restringir los grupos que son seleccionados para la salida después de que los datos han sido agrupados mediante GROUP BY.<br />Ejemplo: Contar el número de unidades de video de cada almacén. Para resolver este problema, se deben dividir las unidades en grupos, en las que en cada grupo estén las unidades que tengan el mismo código de almacén (cod_almacen). Luego se determina el número de registros en cada grupo. Esto se hace en SQL de la siguiente manera:<br />SELECT cod_almacén, COUNT(*) FROM unidad<br />GROUP BY cod_almacen<br />Resultado:<br />               Cod_almacenCOUNT(*)<br />10   3<br />12   2<br />Ejemplo: Contar el número de unidades de video de cada almacén pero teniendo en cuenta aquellos almacenes que tengan por lo menos tres unidades.<br />SELECT cod_almacén, COUNT(*) FROM unidad<br />GROUP BY cod_almacen<br />HAVING COUNT(*) >= 3<br />Resultado:<br />               Cod_almacenCOUNT(*)<br />10   3<br />También se puede involucrar la cláusula WHERE, la cual verifica la restricción antes de proceder a agrupar. Así por ejemplo: Calcular la cantidad de unidades de video, en formato VHS, de cada almacén para aquellos almacenes que tengan por lo menos dos de éstas unidades. Se asume que las de formato VHS son las que tienen una V como último caracter en el código.<br />SELECT cod_almacén, COUNT(*) FROM unidad<br />WHERE cod_producto LIKE ‘%V’<br />GROUP BY cod_almacen<br />HAVING COUNT(*) >= 2<br />Resultado:<br />               Cod_almacenCOUNT(*)<br />10   2<br />La diferencia entre la cláusula WHERE y la cláusula HAVING es que la cláusula WHERE se aplica a las filas, mientreas que la cláusula HAVING se aplica a los grupos.<br />Consultas multi-tablas<br />En el álgebra relacional la conexión entre tablas se logra mediante el uso del JOIN. En SQL se debe verificar, igual que en álgebra relacional, que existan campos relacionadores entre las tablas objeto de la consulta.<br />Ejemplo: Seleccionar el número de unidad y el nombre del almacén de todas las películas.<br />SELECT num_unidad, nombre<br />FROM almacen, unidad<br />WHERE almacen.cod_almacen = unidad.cod_almacen<br />Resultado:<br />               NUM_UNIDADNOMBRE<br />1VISION<br />2VISION<br />3CINEASTA<br />4CINEASTA<br />5CINEASTA<br />La condición de la cláusula WHERE constituye el Join: almacen.cod_almacen = unidad.cod_almacen. La columna sobre la cual se hace el join no necesariamente debe ser seleccionada.<br />¿Cómo se procesa la instrucción del join? Como es usual, la cláusula FROM se ejecuta primero. Pero como hay dos tablas en la cláusula, el sistema crea un producto cartesiano entre las filas de las tablas almacén y unidad. En este caso como hay cinco filas de la tabla unidad y dos filas de la tabla almacén, se genera una tabla de diez filas (el producto entre las cardinalidades). Y como hay tres columnas en unidad y dos columnas en almacén, el número de columnas es de cinco.<br />Después de crear la tabla resultante del producto cartesiano, se aplica la restricción de la cláusula WHERE, descartando las filas que no satisfacen la condición. Finalmente se seleccionan las columnas relacionadas en la cláusula SELECT.<br />Un alias es un nombre alternativo que se da a una relación con el fin de evitar escribir repetidamente los nombre de las tablas y abreviar la escritura de la instrucción. Se pueden dar a los nombres de las tablas alias en la cláusula FROM. Debe entonces usarse el nombre del alias en todas las cláusulas del comando SELECT. <br />Ejemplo: Obtener el número de unidad y título para todas las películas blanco y negro<br />SELECT num_unidad, desc_titulo<br />FROM unidad u, producto p, titulo t<br />WHERE u.cod_producto=p.cod_producto<br />AND p.cod_titulo=t.cod_titulo<br />AND color_s_n='N'<br />En el ejemplo anterior, en la cláusula WHERE, la columna color_s_n  no necesita alias ya que no presenta ambigüedad, pues es claro que pertenece a la tabla título. Obsérvese también que de las tres condiciones de la cláusula WHERE, las dos primeras corresponden al join mientras que la tercera es una restricción propia del problema: las películas que no son de color (color_s_n=’N’).<br />El Join sobre una misma tabla (self-join) se forma con base en columnas que tengan el mismo tipo de información.<br />Finalmente, por razones de desempeño, cuando los joins afectan el rendimiento, las columnas del join deben ser indexadas.<br />Subconsultas<br />Una subconsulta es una consulta dentro de otra consulta también conocida como consulta anidada. Puede ponerse dentro de la cláusula WHERE de una consulta y es encerrada entre paréntesis. Esta es evaluada primero.<br />El formato general de una subconsulta puede ser:<br />SELECT colum1, ..., column FROM tabla1, ..., tablam<br />WHERE columi = (SELECT colum1,… column FROM tabla<br />    WHERE criterio de selección)<br />AND join sobre tabla1,... tablam o restricción consulta<br />Las consultas internas pueden retornar un simple resultado y este es usado como una constante en la consulta externa.<br />Las subconsultas pueden retornar una lista de valores. En tales casos los operadores IN y NOT IN deberán ser usados para encadenar la consulta externa con la lista de valores resultado de la subconsulta.<br />Las consultas pueden ser enlazadas por más de una columna. Se requiere que el orden de la columnas nombradas en la cláusula WHERE de la consulta externa corresponda al orden de las columnas seleccionadas por la consulta interna. Se encadenan con IN y NOT IN.<br />Seleccionar la descripción de la categoría de la película titulada ‘EL AMOR...’:<br />SELECT descripcion FROM categoría<br />WHERE clasificacion=(SELECT clasificacion FROM titulo<br /> WHERE desc_titulo=’EL AMOR...’)<br />De acuerdo con los datos ilustrativos del comienzo y teniendo en cuenta que la consulta interna se ejecuta primero arrojando el valor ‘ROM’, la subconsulta se convierte, durante su ejecución, en la siguiente consulta simple:<br />SELECT descripcion FROM categoría<br />WHERE clasificacion=’ROM’<br />El resultado final es ‘ROMANTICA’.<br />Veamos un ejemplo de subconsulta donde se involucra un join y además un operador relacional diferente de la igualdad:<br />Listar número de producto, título, en formato VHS, de las películas que cuestan menos de 50.000 y que duran menos que la película GHOSTBUSTERS<br />SELECT p.cod_producto, desc_titulo<br />FROM producto p, titulo t<br />WHERE p.cod_titulo=t.cod_titulo<br />AND p.cod_producto LIKE '%V'<br />AND precio < 50000<br />AND duracion < (SELECT duracion FROM titulo<br />               WHERE desc_titulo='Ghostbusters')<br />Comandos Adicionales del DML<br />Además del SELECT hay otros tres comandos del Lenguje de Manipulación de Datos y junto con sus opciones se listan a continuación. Estos comandos son usados para ingresar, borrar, y modificar los datos almacenados.<br />Para ingresar una fila en una tabla:<br />INSERT INTO nombre-tabla [(lista-columnas)]<br />VALUES (lista-valores)<br />Ejemplo:<br />INSERT INTO almacen (cod_almacen, nombre)<br />VALUES (15, ‘VIDEOCLUB’)<br />Como en la instrucción anterior se insertaron valores para todas las columnas, se puede omitir la lista de columnas y la instrucción se puede convertir en la siguiente:<br />INSERT INTO almacen<br />VALUES (15, ‘VIDEOCLUB’)<br />Cuando sólo se genera una fila incompleta, se debe especificar la lista de columnas en las que se insertarán datos. En este caso las demás columnas asumirán valores nulos.<br />Para modificar un subconjunto de columnas de un subconjunto de filas de una tabla:<br />UPDATE nombre-tabla<br />SET nombre-columna=expresión<br />[WHERE condición]<br />Ejemplo:<br />UPDATE almacen<br />SET nombre=’CENTRO CULTURAL’<br />WHERE cod_almacen=15;<br />Si se omite la cláusula WHERE, modificaría el nombre en todos los registros. Por otra parte, si la fila especificada en la cláusula del WHERE no existe, no se modifica ningún dato pero tampoco se genera error alguno.<br />Para eliminar un subconjunto de filas de una tabla:<br />DELETE FROM nombre-tabla<br />[WHERE condición]<br />Ejemplo:<br />DELETE FROM almacen<br />WHERE cod_almacen=15;<br />De manera similar a la instrucción UPDATE, si se omite la cláusula WHERE, el DELETE eliminaría todos los registros de la tabla almacén. Por otra parte, si la fila especificada en la cláusula del WHERE no existe, no se elimina ningún registro y tampoco se generaría.<br />EJERCICIOS PROPUESTOS<br />Cantidad de ejemplares por cada película de ficción<br />La cantidad de unidades por cada categoría<br />Listado de actores de las películas del almacén número 1<br />Títulos de películas que cuestan más del precio promedio de las películas en formato Beta<br />Todos los actores, sin repetir, ordenados alfabéticamente en forma descendente<br />Títulos de películas románticas ordenadas alfabéticamente<br />Títulos de los que no hay existencias en la tienda 2<br />Listado de títulos (descripciones) distribuidos por el almacén “LE CINEMA”<br />La cantidad de unidades por cada almacén<br />La película con mayor duración por cada categoría<br />El valor total a cargo de cada almacén<br />Los códigos de producto que tienen existencias superiores al promedio de cintas por producto<br />Nombres de los almacenes donde hay películas del actor BEN MURPHY<br />
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta
SQL Introducción Lenguaje Estructurado Consulta

Más contenido relacionado

La actualidad más candente

La actualidad más candente (8)

Manejo De Sentencias De Definicion
Manejo De Sentencias De DefinicionManejo De Sentencias De Definicion
Manejo De Sentencias De Definicion
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dml
 
Guía 02. Ejercicios de teoría sobre SQL - José J Sánchez H
Guía 02. Ejercicios de teoría sobre SQL - José J Sánchez HGuía 02. Ejercicios de teoría sobre SQL - José J Sánchez H
Guía 02. Ejercicios de teoría sobre SQL - José J Sánchez H
 
Sql comandos
Sql comandosSql comandos
Sql comandos
 
Instrucciones Transact S Q L
Instrucciones Transact  S Q LInstrucciones Transact  S Q L
Instrucciones Transact S Q L
 
Unidad IV SQL
Unidad IV SQLUnidad IV SQL
Unidad IV SQL
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
LDD
LDDLDD
LDD
 

Similar a SQL Introducción Lenguaje Estructurado Consulta

6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageInés Rosero
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageDoris Aguagallo
 
6 150113092523-conversion-gate01
6 150113092523-conversion-gate016 150113092523-conversion-gate01
6 150113092523-conversion-gate01Dyego de Alvaro
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageWilliam Lozano
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageChars Orden
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageAny Saula
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languagejhonny tenesaca
 
6. sql structured query language2
6. sql   structured query language26. sql   structured query language2
6. sql structured query language2Oscar Valdivieso
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageLiliana Charco
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageCesar Yupa
 
TEMA3-SQL-(PARTE 1).pdf
TEMA3-SQL-(PARTE 1).pdfTEMA3-SQL-(PARTE 1).pdf
TEMA3-SQL-(PARTE 1).pdfalukardconde1
 
lenguaje transact
lenguaje transactlenguaje transact
lenguaje transactbandida123
 
lenguaje transact
lenguaje transactlenguaje transact
lenguaje transactbandida123
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddlusamn
 

Similar a SQL Introducción Lenguaje Estructurado Consulta (20)

6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6 150113092523-conversion-gate01
6 150113092523-conversion-gate016 150113092523-conversion-gate01
6 150113092523-conversion-gate01
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
111
111111
111
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language2
6. sql   structured query language26. sql   structured query language2
6. sql structured query language2
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
Introduccion a SQL
Introduccion a SQL Introduccion a SQL
Introduccion a SQL
 
TEMA3-SQL-(PARTE 1).pdf
TEMA3-SQL-(PARTE 1).pdfTEMA3-SQL-(PARTE 1).pdf
TEMA3-SQL-(PARTE 1).pdf
 
lenguaje transact
lenguaje transactlenguaje transact
lenguaje transact
 
lenguaje transact
lenguaje transactlenguaje transact
lenguaje transact
 
MySQL
MySQLMySQL
MySQL
 
MySQL
MySQLMySQL
MySQL
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddl
 
Presentación1
Presentación1Presentación1
Presentación1
 

Último

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Último (20)

GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

SQL Introducción Lenguaje Estructurado Consulta

  • 1. LENGUAJE ESTRUCTURADO DE CONSULTA –SQL<br />INTRODUCCION<br />SQL, sigla proveniente de Structured Query Language, es una interfase interactiva que proporciona acceso en linea a la base de datos. Esta diseñado para usarse en consultas, manejo, creación y control de datos. Es una herramienta para organizar, gestionar y recuperar datos almacenados en una base de datos.<br />SQL fue el resultado del proyecto de investigación System R de IBM. Al final de los setenta, SQL pasó a formar parte del /dominio público y estuvo primero disponible como lenguaje para un sistema comercial de Oracle Corporation. SQL-92 es una mejora significativa de las primeras versiones del estándar SQL.<br />No es en sí mismo un sistema de gestión de base de datos, ni un producto autónomo. Es parte integral de un sistema de gestión de base de datos, un lenguaje y una herramienta para comunicarse con el DBMS (Database Management System) típico. Es un sublenguaje de base de datos, consistente en unas treinta sentencias especializadas para tareas de gestión de base de datos.<br />Existe un estandar SQL, lo que permite portabilidad hasta cierto punto, pero no garantiza la portabilidad una portabilidad completa. Diferencias como códigos de error, tipos de datos, tablas del sistema, SQL interactivo, interfaz de programa, SQL dinámico, diferencias semánticas, secuencias de ordenamiento y estructura de la base de datos, que son significativas obligan a ubicarse en el sistema en particular.<br />SQL-92, a diferencia de las versiones anteriores, permite a los usuarios definir esquemas múltiples. Los esquemas múltiples se pueden agrupar en catálogos (colecciones de esquemas), los cuales van muy vinculados con cada usuario.<br />Podemos tomar varios grupos de sentencias SQL, algunas relacionadas con el Lenguaje de Definición de Datos (DDL) y otras con el Lenguaje de Manipulación de Datos (DML).<br />El DDL consta de instrucciones como CREATE, DROP y ALTER, para crear estructura y objetos, eliminarlos y modificarlos.<br />Las proposiciones de DML permiten la consulta de la base de datos SELECT, adición de datos INSERT, supresión de datos DELETE y actualización de la base de datos UPDATE.<br />El lenguaje SQL define un panorama general de la seguridad de la base de datos. El esquema de seguridad SQL se basa en tres conceptos principales:<br />Los usuarios, los objetos de las bases de datos y los privilegios. Las sentencias usadas son GRANT y REVOKE y en ocasiones se les agrupa dentro de un sublenguaje de datos conocido como DCL (Data Control Language).<br />Entre los tipos de datos definidos por SQL-92 se encuentran los siguientes:<br />Integer: para números enteros<br />Small integer: enteros pequeños<br />Numeric(p,e): numéricos con p dígitos en total, de los cuales e dígitos son están a la derecha del punto decimal.<br />Decimal(p,e)<br />Real<br />Double precision<br />Float<br />Caracter(n): cadenas de caracteres de longitud n<br />Date: tipo fecha<br />Time: tipo hora<br />DEFINICIÓN DE DATOS<br />SQL-92 permite la definición de un esquema, de la siguiente manera:<br />CREATE SCHEMA BIBLIOTECA<br />AUTHORIZATION LUZ_MARINA<br />Definición de dominios<br />Definición de tablas<br />Definición de vistas ...<br />SQL-92 permite la creación de dominios como por ejemplo:<br />CREATE DOMAIN IDENTIFICADOR NUMERIC (3) DEFAULT 0<br />CHECK (VALUE IS NOT NULL)<br />Lo anterior quiere decir que el dominio IDENTIFICADOR corresponde a un tipo de datos numérico de tres dígitos, su valor por defecto es cero y no puede ser nulo. Después de definido, una columna puede definirse con este dominio en lugar de usar un tipo de dato convencional.<br />En algunos productos comerciales, los esquemas pueden ser creados implícitamente, cada vez que se crea un usuario, y todo lo que este cree, pertenece a su propio esquema.<br />Las tablas se definen dando el nombre de la tabla, definiendo cada columna, posiblemente incluyendo restricciones sobre ella y definiendo las restricciones sobre la tabla.<br />Esquema y tablas de un caso<br />Para crear un esquema para una tienda de video, consistente de las tablas Almacén, Unidad (de producto de video), Producto (el identificado en el mercado), Título, Categoría y Actores, se puede proceder de la siguiente manera:<br />CREATE SCHEMA DISTRIBUIDORA_VIDEO<br /> AUTHORIZATION JGARCIA<br />Definiciones de dominios...<br />CREATE TABLE ALMACEN (<br />COD_ALMACENNUMERIC(2,0)PRIMARY KEY<br />NOMBRECARACTER(12))<br />CREATE TABLE CATEGORÍA (<br />CLASIFICACIONCARACTER(3)PRIMARY KEY,<br />DESCRIPCIÓNCARACTER(12))<br />CREATE TABLE TITULO (<br />COD_TITULOCARACTER(4)PRIMARY KEY, DESC_TITULOCARACTER(30),<br />CLASIFICACIONCARACTER(3),<br />COLOR_S_NCARACTER(1) DEFAULT ‘S’<br />CHECK COLOR_S_N=’S’ OR COLOR_S_N=’N’,<br />DURACIÓNNUMERIC(3)<br />FOREIGN KEY CLASIFICACIONREFERENCES CATEGORIA)<br />CREATE TABLE PRODUCTO (<br />COD_PRODUCTOCARACTER(6)PRIMARY KEY,<br />PRECIONUMERIC(6,0),<br />CANTNUMERIC(2,0),<br />COD_TITULOCARACTER(4),<br />FOREIGN KEY COD_TITULO REFERENCES TITULO)<br />CREATE TABLE UNIDAD (<br />NUM_UNIDADNUMERIC(4)PRIMERY KEY, COD_PRODUCTOCARACTER(6),<br />COD_ALMACENNUMERIC(2,0),<br />FOREIGN KEY COD_PRODUCTO REFERENCES PRODUCTO,<br />FOREIGN KEY COD_ALMACEN REFERENCES ALMACEN)<br />CREATE TABLE ACTORES (<br />NOMBRECARACTER(20)PRIMARY KEY,<br />COD_TITULOCARACTER(4),<br />FOREIGN KEY COD_TITULO REFERENCES TITULO)<br />La instrucción CREATE TABLE identifica el nombre de la tabla, que debe ser única dentro del esquema. Después de CREATE TABLE van entre paréntesis y separadas por coma las instrucciones que definen las columnas y las restricciones sobre la tabla.<br />Cada columna se define dando su nombre, su tipo de dato, opcionalmente su valor por defecto y algunas restricciones propias de la columna, tales como NOT NULL (atributo con valor diferente de nulo), PRIMARY KEY para llave primaria o restricciones CHECK para limitar los posibles valores que pueden asignarse a la columna.<br />La cláusula FOREIGN KEY sirve para identificar llaves foráneas, las cuales permiten establecer relaciones con otras tablas.<br />Junto con la instrucción CREATE TABLE para definir una nueva tabla, SQL-92 ofrece también instrucciones para modificar la estructura de una tabla tal como ALTER TABLE para adicionar una columna, modificar la definición de una columna o eliminar una columna de una tabla. DROP TABLE es otra instrucción DDL que permite borrar la estructura de una tabla completamente.<br />Las vistas<br />Una vista es una consulta almacenada que se convierte en una tabla virtual. Sus beneficios son:<br />Fácil de usar: Algunas consultas resultan complicadas, luego de ser almacenada en una vista el usuario obtiene los resultados deseados sin preocuparse por los mecanismos.<br />Fácil de compartir: Diferentes usuarios pueden tener diferentes resultados en una consulta a una misma tabla. Es una ventana de acceso a los datos.<br />Independencia de datos: Todos los cambios en los datos son automáticamente reflejados en la vista.<br />Para evitar mostrar el precio de los productos, creamos una vista sobre la tabla producto proyectando todos sus atributos a excepción del atributo precio, así:<br />CREATE VIEW v_producto AS<br />SELECT cod_producto, cant, cod_titulo<br />FROM producto<br />TABLA producto<br />COD_PRODUCTOCANTIDADCOD_TITULOPRECIOP428-V3P42830.000P428-B1P42820.000P781-C1P78132.000<br />VISTA v_producto<br />La instrucción SELECT cod_producto, cant, cod_titulo FROM producto, genera una proyección de estas columnas sobre la tabla producto. (la instrucción SELECT se verá en la siguiente sección).<br />En general, el formato para crear una vista es de la siguiente manera:<br />CREATE VIEW nombre_vista AS<br />SELECT columna1, ..., columnan<br />FROM tabla1, ..., tablam<br />WHERE condiciones.<br />El proceso de selección (SELECT) se analizará en detalle en la siguiente sección.<br />MANIPULACIÓN DE DATOS<br />La manipulación de datos abarca tanto la consulta como la actualización. SQL-92 soporta las operaciones de selección, proyección y producto de una manera elemental e implementa directamente las operaciones del álgebra relacional como la unión, la intersección, la diferencia y el join. La división, de acuerdo con Hansen y Hansen, es soportada de una manera engorrosa.<br />Datos ilustrativos para las consultas<br />ALMACEN (COD_ALMACEN, NOMBRE)<br />10VISION<br />12CINEASTA<br />UNIDAD (NUM_UNIDAD, COD_PRODUCTO, COD_ALMACEN)<br /> 1P428-V10<br />2P428-V10<br />3P428-V12<br />4P428-B12<br />5P781-C12<br />PRODUCTO (COD_PRODUCTO, PRECIO, CANT, COD_TITULO)<br />P428-V30.0003P428<br />P428-B20.0001P428<br />5P781-C32.0001P781<br />TITULO (COD_TITULO,DESC_TITULO,CLASIF,COLOR_S_N, DURACIÓN )<br />P428 LA Z...FICS 95<br />P781 EL AMOR…ROMN 120<br />CATEGORÍA (CLASIFICACION, DESCRIPCIÓN)<br /> FIC FICCIÓN<br /> ROM ROMÁNTICA<br />ACTORES (NOMBRE, COD_TITULO)<br />ANNA...P428<br />HENRY...P428<br />JIM...P781<br />Consultas simples<br />Lças consultas en SQL se hacen con el comando SELECT. La forma general del comando SELECT es:<br />SELECT lista-del-select FROM nombres-tablas<br />[WHERE condición]<br />[GROUP BY lista-columnas] [HAVING condición]<br />[ORDER BY nombre-columna]<br />[INTO TEMP nombre-tabla]<br />Sólo son obligatorias las cláusulas SELECT y FROM. Si se usan otras cláusulas ellas deben aparecer en el orden que se muestra.<br />La cláusula INTO TEMP es usada para crear una tabla temporal que puede ser usada en queries posteriores. La tabla temporal puede ser juntada a las permanentes de la base de datos. la tabla es borrada automáticamente del disco cuando se hace salida del RDBMS.<br />Una consulta simple es una consulta sobre una única tabla de la base de datos. Ejemplos: <br />Obtener los nombres de todos los almacenes:<br />SELECT nombre FROM almacen<br />Resultado:<br />NOMBRE<br />VISION<br />CINEASTA<br />Si se requiere la consulta de registros bajo condiciones especiales, es posible mediante la cláusula WHERE, por ejemplo:<br />Obtener los títulos de las películas en blanco y negro:<br />SELECT desc_titulo FROM titulo<br />WHERE color_s_n = ‘N’<br />Resultado:<br />DESC_TITULO<br />EL AMOR…<br />Se debe tener presente que para las tablas que contienen un gran número de filas, cualquier instrucción que tiene una cláusula WHERE será más eficiente si la columna en la cláusula WHERE es indexada.<br />Las condiciones pueden ser de igualdad (=), desigualdad (<>), mayor que (>), menor que (<), mayor o igual a (>=) o menor o igual a (<=).<br />Para múltiples condiciones se pueden usar los operadores lógicos AND, OR, IN (incluidos) y NOT. Se sigue las reglas del álgebra booleana:<br />Listar los números de unidad de los almacenes 10 y 12:<br />SELECT num_unidad FROM unidad<br />WHERE cod_almacen = 10 OR cod_almacen = 12<br />Resultado:<br /> NUM_UNIDAD<br />1<br />2<br />3<br />4<br />5<br />También se puede consultar así:<br />SELECT num_unidad FROM unidad<br />WHERE cod_almacen IN (10,12)<br />Es posible usar el comodín asterisco (*), para significar que todas las columnas deben desplegarse. Ejemplo: Obtener toda la información sobre unidades de video:<br />SELECT * FROM unidad<br />Resultado:<br />NUM_UNIDAD COD_PCOD_A<br />1P428-V10<br />2P428-V10<br />3P428-V12<br />4P428-B12<br />5P781-C12<br />Dentro del SELECT se puede hacer uso de expresiones, por ejemplo para calcular el precio total de cada producto en existencia. Además podemos ordenarlo ascendentemente por código de producto:<br />SELECT cod_producto, precio*cant FROM producto<br />ORDER BY cod_producto<br />Resultado:<br />COD_PRODUCTOPRECIO*CANT<br /> P428-B20.000<br /> P428-V90.000<br /> P781-C32.000<br />El ORDER BY ordena por defecto en forma ascendente. La sintaxis para el ordenamiento es:<br />SELECT ...<br />ORDER BY columna o expresión [ASC/DESC]<br />Para obtener resultados entre rangos se permite el operador BETWEEN, y se puede usar de la siguiente manera para obtener los números de unidad entre el 2 y el 4:<br />SELECT * FROM unidad<br />WHERE num_unidad BETWEEN 2 AND 4<br />Resultado:<br />NUM_UNIDAD COD_PCOD_ALM<br />2P428-V10<br />3P428-V12<br />4P428-B12<br />En general se puede usar así:<br />WHERE columna o expresión BETWEEN mínimo AND máximo.<br />También se permite usar el operador NOT BETWEEN.<br />Se pueden usar caracteres comodines que son símbolos especiales que valen lo que cualquier cadena no especificada de caracteres, usando la cláusula LIKE. El comodín % se usa para cero o más caracteres mientras el comodín _ se utiliza para exactamente un carácter.<br />Encontrar los títulos de películas que comienzan por la partícula ‘LA’:<br />SELECT desc_titulo FROM titulo<br />WHERE desc_titulo LIKE ‘LA%’<br />Encontrar los títulos y duraciones de las películas que comienzan por A y terminan en R pero sólo tienen cuatro letras.<br />SELECT desc_titulo, duracion FROM titulo<br />WHERE desc_titulo LIKE ‘A_ _R’<br />Para algunos casos es probable que el valor de una columna sea innecesario o desconocido, el valor NULL puede ser asignado. El valor NULL no es igual a cero. La comparación se usa de la siguiente forma:<br />SELECT …<br />WHERE columna ó expression IS [NOT] NULL<br />La cláusula DISTINCT facilita la supresión de valores duplicados en una columna seleccionada para la salida:<br />SELECT DISTINCT cod_titulo FROM producto<br />Resultado:<br />COD_TITULO<br />P428<br />P781<br />Funciones integradas<br />Existen diversas funciones tanto estadísticas como de manejo de cadenas de caracteres para dar mayor flexibilidad al manejo de SQL.<br />En ocasiones se requiere de examinar un conjunto de filas en una tabla y producir un valor. Para esto se requiere de uso de funciones como SUM, AVG, COUNT, MAX y MIN.<br />SUM sirve para calcular la sumatoria de los valores de una columna o una expresión basada en columnas. Así, podemos calcular la cantidad de películas en existencia:<br />SELECT SUM(cant) FROM producto<br />Resultado:<br /> SUM(cant)<br />5<br />También podemos calcular el valor total de las películas en existencia:<br />SELECT SUM(precio*cant) FROM producto<br />Resultado:<br /> SUM(precio*cant)<br />142.000<br />AVG sirve para calcular el valor promedio sobre una columna.<br />MAX encuentra el valor máximo de una columna.<br />MIN encuentra el valor mínimo de una columna.<br />COUNT sirve para contar, pero tiene las siguientes connotaciones:<br />COUNT (*): Cuenta el número de filas, incluyendo nulos.<br />COUNT (columna): Cuenta los valores no nulos en una simple columna.<br />COUNT (DISTINCT columna): Cuenta los valores distintos no nulos de una simple columna.<br />Ejemplo: Contar el número de unidades de video del almacén número 12.<br />SELECT COUNT(*) FROM unidad<br />WHERE cod_almacen = 12<br />Resultado:<br /> COUNT(*)<br />3<br />En las expresiones pueden aparecer los operadores aritméticos convencionales: +, *, -, /<br />Entre las funciones que manejan cadenas de caracteres se encuentran las siguientes:<br />cad1||cad2: Concatena las cadenas de caracteres. Los nombres de columnas son cadenas validas.<br />LENGTH (cadena): Encuentra la longitud de la cadena.<br />SUBSTR (cad,posic_inicial [,long]): Encuentra la subcadena de quot; longquot; caracteres, empezando en quot; posic_inicialquot; .<br />UPPER (cadena): Cambia los caracteres minúsculas por mayúsculas.<br />LOWER (cadena): Cambia los caracteres mayúsculas por minúsculas.<br />TO_NUMBER (cadena): Convierte los datos carácter (compuestos por números) en valore numéricos.<br />TO_CHAR (cadena): Convierte un campo numérico en tipo carácter.<br />LPAD (cadena,long_n [,carac]): Rellena la izquierda de la cadena con el quot; caracquot; especificado (por defecto blancos), hasta que la longitud de la cadena nueva sea quot; long_nquot; .<br />RPAD (cad,long_n [,caract]): Rellena la derecha de la cadena con el quot; caracquot; especificado (por defecto blancos), hasta que la longitud de la cadena nueva sea quot; long_nquot; .<br />NVL (cad1,cad2): Si cad1 es nulo retorna cad2. En otro caso retorna cad1.<br />DECODE (cadena,caso1,rcad1, .,defecto): La salida es el resultado quot; rcad1quot; donde la cadena iguale la ocurrencia de caso1 y asi sucesivamente. El último argumento es el valor por defecto.<br />INITCAP(cadena): Vuelve mayúscula la letra inicial de la cadena.<br />LTRIM(cadena,grupo): Va removiendo de izquierda a derecha los caracteres que se encuentran en el grupo.<br />RTRIM(cadena,grupo): Va removiendo de derecha a izquierda los caracteres que se encuentran en el grupo.<br />TO_CHAR (fecha,formato): Convierte una fecha a cadena de caracteres para poder imprimirse.<br />TO_DATE (fecha,formato): Convierte cadena de caracteres a fechas.<br />Manejo de grupos: GROUP BY y HAVING<br />La cláusula GROUP BY nos entrega resúmenes de datos. Un registro de información resumida es retornado para cada valor distinto encontrado en la columna sobre la cual se hizo la agrupación:<br />Un grupo es un conjunto de filas que contienen el mismo valor en una columna dada. <br />Cuando se agrupen datos, sólo las columnas incluidas en la cláusula GROUP BY o las funciones agregadas pueden aparecer en la lista del SELECT. Sinembargo una columna en la lista del GROUP BY no necesita estar en la lista del SELECT.<br />La cláusula HAVING se usa para restringir los grupos que son seleccionados para la salida después de que los datos han sido agrupados mediante GROUP BY.<br />Ejemplo: Contar el número de unidades de video de cada almacén. Para resolver este problema, se deben dividir las unidades en grupos, en las que en cada grupo estén las unidades que tengan el mismo código de almacén (cod_almacen). Luego se determina el número de registros en cada grupo. Esto se hace en SQL de la siguiente manera:<br />SELECT cod_almacén, COUNT(*) FROM unidad<br />GROUP BY cod_almacen<br />Resultado:<br /> Cod_almacenCOUNT(*)<br />10 3<br />12 2<br />Ejemplo: Contar el número de unidades de video de cada almacén pero teniendo en cuenta aquellos almacenes que tengan por lo menos tres unidades.<br />SELECT cod_almacén, COUNT(*) FROM unidad<br />GROUP BY cod_almacen<br />HAVING COUNT(*) >= 3<br />Resultado:<br /> Cod_almacenCOUNT(*)<br />10 3<br />También se puede involucrar la cláusula WHERE, la cual verifica la restricción antes de proceder a agrupar. Así por ejemplo: Calcular la cantidad de unidades de video, en formato VHS, de cada almacén para aquellos almacenes que tengan por lo menos dos de éstas unidades. Se asume que las de formato VHS son las que tienen una V como último caracter en el código.<br />SELECT cod_almacén, COUNT(*) FROM unidad<br />WHERE cod_producto LIKE ‘%V’<br />GROUP BY cod_almacen<br />HAVING COUNT(*) >= 2<br />Resultado:<br /> Cod_almacenCOUNT(*)<br />10 2<br />La diferencia entre la cláusula WHERE y la cláusula HAVING es que la cláusula WHERE se aplica a las filas, mientreas que la cláusula HAVING se aplica a los grupos.<br />Consultas multi-tablas<br />En el álgebra relacional la conexión entre tablas se logra mediante el uso del JOIN. En SQL se debe verificar, igual que en álgebra relacional, que existan campos relacionadores entre las tablas objeto de la consulta.<br />Ejemplo: Seleccionar el número de unidad y el nombre del almacén de todas las películas.<br />SELECT num_unidad, nombre<br />FROM almacen, unidad<br />WHERE almacen.cod_almacen = unidad.cod_almacen<br />Resultado:<br /> NUM_UNIDADNOMBRE<br />1VISION<br />2VISION<br />3CINEASTA<br />4CINEASTA<br />5CINEASTA<br />La condición de la cláusula WHERE constituye el Join: almacen.cod_almacen = unidad.cod_almacen. La columna sobre la cual se hace el join no necesariamente debe ser seleccionada.<br />¿Cómo se procesa la instrucción del join? Como es usual, la cláusula FROM se ejecuta primero. Pero como hay dos tablas en la cláusula, el sistema crea un producto cartesiano entre las filas de las tablas almacén y unidad. En este caso como hay cinco filas de la tabla unidad y dos filas de la tabla almacén, se genera una tabla de diez filas (el producto entre las cardinalidades). Y como hay tres columnas en unidad y dos columnas en almacén, el número de columnas es de cinco.<br />Después de crear la tabla resultante del producto cartesiano, se aplica la restricción de la cláusula WHERE, descartando las filas que no satisfacen la condición. Finalmente se seleccionan las columnas relacionadas en la cláusula SELECT.<br />Un alias es un nombre alternativo que se da a una relación con el fin de evitar escribir repetidamente los nombre de las tablas y abreviar la escritura de la instrucción. Se pueden dar a los nombres de las tablas alias en la cláusula FROM. Debe entonces usarse el nombre del alias en todas las cláusulas del comando SELECT. <br />Ejemplo: Obtener el número de unidad y título para todas las películas blanco y negro<br />SELECT num_unidad, desc_titulo<br />FROM unidad u, producto p, titulo t<br />WHERE u.cod_producto=p.cod_producto<br />AND p.cod_titulo=t.cod_titulo<br />AND color_s_n='N'<br />En el ejemplo anterior, en la cláusula WHERE, la columna color_s_n no necesita alias ya que no presenta ambigüedad, pues es claro que pertenece a la tabla título. Obsérvese también que de las tres condiciones de la cláusula WHERE, las dos primeras corresponden al join mientras que la tercera es una restricción propia del problema: las películas que no son de color (color_s_n=’N’).<br />El Join sobre una misma tabla (self-join) se forma con base en columnas que tengan el mismo tipo de información.<br />Finalmente, por razones de desempeño, cuando los joins afectan el rendimiento, las columnas del join deben ser indexadas.<br />Subconsultas<br />Una subconsulta es una consulta dentro de otra consulta también conocida como consulta anidada. Puede ponerse dentro de la cláusula WHERE de una consulta y es encerrada entre paréntesis. Esta es evaluada primero.<br />El formato general de una subconsulta puede ser:<br />SELECT colum1, ..., column FROM tabla1, ..., tablam<br />WHERE columi = (SELECT colum1,… column FROM tabla<br /> WHERE criterio de selección)<br />AND join sobre tabla1,... tablam o restricción consulta<br />Las consultas internas pueden retornar un simple resultado y este es usado como una constante en la consulta externa.<br />Las subconsultas pueden retornar una lista de valores. En tales casos los operadores IN y NOT IN deberán ser usados para encadenar la consulta externa con la lista de valores resultado de la subconsulta.<br />Las consultas pueden ser enlazadas por más de una columna. Se requiere que el orden de la columnas nombradas en la cláusula WHERE de la consulta externa corresponda al orden de las columnas seleccionadas por la consulta interna. Se encadenan con IN y NOT IN.<br />Seleccionar la descripción de la categoría de la película titulada ‘EL AMOR...’:<br />SELECT descripcion FROM categoría<br />WHERE clasificacion=(SELECT clasificacion FROM titulo<br /> WHERE desc_titulo=’EL AMOR...’)<br />De acuerdo con los datos ilustrativos del comienzo y teniendo en cuenta que la consulta interna se ejecuta primero arrojando el valor ‘ROM’, la subconsulta se convierte, durante su ejecución, en la siguiente consulta simple:<br />SELECT descripcion FROM categoría<br />WHERE clasificacion=’ROM’<br />El resultado final es ‘ROMANTICA’.<br />Veamos un ejemplo de subconsulta donde se involucra un join y además un operador relacional diferente de la igualdad:<br />Listar número de producto, título, en formato VHS, de las películas que cuestan menos de 50.000 y que duran menos que la película GHOSTBUSTERS<br />SELECT p.cod_producto, desc_titulo<br />FROM producto p, titulo t<br />WHERE p.cod_titulo=t.cod_titulo<br />AND p.cod_producto LIKE '%V'<br />AND precio < 50000<br />AND duracion < (SELECT duracion FROM titulo<br /> WHERE desc_titulo='Ghostbusters')<br />Comandos Adicionales del DML<br />Además del SELECT hay otros tres comandos del Lenguje de Manipulación de Datos y junto con sus opciones se listan a continuación. Estos comandos son usados para ingresar, borrar, y modificar los datos almacenados.<br />Para ingresar una fila en una tabla:<br />INSERT INTO nombre-tabla [(lista-columnas)]<br />VALUES (lista-valores)<br />Ejemplo:<br />INSERT INTO almacen (cod_almacen, nombre)<br />VALUES (15, ‘VIDEOCLUB’)<br />Como en la instrucción anterior se insertaron valores para todas las columnas, se puede omitir la lista de columnas y la instrucción se puede convertir en la siguiente:<br />INSERT INTO almacen<br />VALUES (15, ‘VIDEOCLUB’)<br />Cuando sólo se genera una fila incompleta, se debe especificar la lista de columnas en las que se insertarán datos. En este caso las demás columnas asumirán valores nulos.<br />Para modificar un subconjunto de columnas de un subconjunto de filas de una tabla:<br />UPDATE nombre-tabla<br />SET nombre-columna=expresión<br />[WHERE condición]<br />Ejemplo:<br />UPDATE almacen<br />SET nombre=’CENTRO CULTURAL’<br />WHERE cod_almacen=15;<br />Si se omite la cláusula WHERE, modificaría el nombre en todos los registros. Por otra parte, si la fila especificada en la cláusula del WHERE no existe, no se modifica ningún dato pero tampoco se genera error alguno.<br />Para eliminar un subconjunto de filas de una tabla:<br />DELETE FROM nombre-tabla<br />[WHERE condición]<br />Ejemplo:<br />DELETE FROM almacen<br />WHERE cod_almacen=15;<br />De manera similar a la instrucción UPDATE, si se omite la cláusula WHERE, el DELETE eliminaría todos los registros de la tabla almacén. Por otra parte, si la fila especificada en la cláusula del WHERE no existe, no se elimina ningún registro y tampoco se generaría.<br />EJERCICIOS PROPUESTOS<br />Cantidad de ejemplares por cada película de ficción<br />La cantidad de unidades por cada categoría<br />Listado de actores de las películas del almacén número 1<br />Títulos de películas que cuestan más del precio promedio de las películas en formato Beta<br />Todos los actores, sin repetir, ordenados alfabéticamente en forma descendente<br />Títulos de películas románticas ordenadas alfabéticamente<br />Títulos de los que no hay existencias en la tienda 2<br />Listado de títulos (descripciones) distribuidos por el almacén “LE CINEMA”<br />La cantidad de unidades por cada almacén<br />La película con mayor duración por cada categoría<br />El valor total a cargo de cada almacén<br />Los códigos de producto que tienen existencias superiores al promedio de cintas por producto<br />Nombres de los almacenes donde hay películas del actor BEN MURPHY<br />