Apunte de S.Q.L. AÑO 2011 Prof Guillermo Reina Terminología de Bases de Datos Concepto RDBMS Tabla Fila Columna Campo Clave Primaria Descripción Sistema manejador de bases de datos relacionales Estructura de almacenamiento básica de un RDBMS. Consiste en una o más columnas y cero o más filas. Combinación de valores de columnas de una tabla. Un tipo de datos en una tabla. Se encuentra en la intersección de una fila y una columna. Puede contener datos, si no los tiene, se dice que es nulo. Columna o conjunto de columnas que identifican unívocamente cada fila de una tabla. Debe contener un valor. No admite valores nulos. Generalmente no se pueden modificar. Objetos de la Base de Datos Objeto Tabla Vista Secuencia Indice Descripción Unidad básica de almacenamiento compuesta por filas y columnas. Representa lógicamente subconjuntos de datos de una o más tablas. Genera valores de claves primarias. Mejora la performance de algunas consultas. Campo por el que puede accederse a la tabla Comandos SQL Tipo de Comando Recuperación de Datos Comandos Descripción SELECT Recupera los datos de la base de Datos. Es el comando utilizado con mayor frecuencia. Bloque de Consulta Básico Una sentencia SELECT recupera información desde la base de datos, implementando todos los operadores algebraicos. En su forma más simple, una sentencia SELECT puede incluir: Una cláusula SELECT, que especifica las columnas a ser visualizadas. Una cláusula FROM, que especifica la tabla que contiene las columnas listadas en la cláusula SELECT Escritura de Comandos SQL Los Comandos pueden constar de una o varias líneas Pueden ubicarse las cláusulas en diferentes líneas y usar tabulaciones e indentaciones para mayor legibilidad y facilidad de edición. No están permitidas las abreviaturas y separación de palabras. Un comando SQL se ingresa en el prompt SQL y las líneas subsiguientes están numeradas. Hay que escribir un punto y coma (;) al final de la última cláusula Ejemplo: Selección de Todas las Columnas y Filas SQL> SELECT * 2 FROM Examenes; Ejemplo: Selección Columnas específicas SQL> SELECT Alumnos.Codialum, Alumnos.Apellido, Alumnos.Domicilio 2 FROM Alumnos; Expresiones Aritméticas Pueden crearse expresiones aritméticas sobre tipos de datos numéricos y fechas. Una expresión aritmética puede contener nombres de columnas, valores numéricos, constantes y operadores aritméticos. Pueden usarse los operadores aritméticos en cualquier sentencia de SQL excepto en la cláusula FROM. Operadores + * / Descripción Suma Resta Multiplicación División Ejemplo: SQL> SELECT Alumnos.Apellido, Alumnos.Promedio, Alumnos.Promedio / 12 2 FROM Alumnos; Precedencia de Operadores La multiplicación y la división tienen prioridad sobre la suma y la resta. Los operadores de igual prioridad se evalúan de izquierda a derecha. Pueden usarse paréntesis para cambiar la prioridad de evaluación o para clarificar la sentencia. Ejemplos: Mostrar el apellido, la suma de las notas y el promedio de cada alumno. Calcular el promedio dividiendo por 12 la suma de las notas y sumándole 2 puntos, por la presentación de los trabajos prácticos SQL> SELECT Alumnos.Apellido, Alumnos.Sumanotas, (Alumnos.Sumanotas/12) + 2 2 FROM Alumnos; La cláusula ORDER BY El orden de las filas recuperadas por una consulta es indefinido. La cláusula ORDER BY se puede usar para ordenar las filas. SELECT expr FROM tabla [ORDER BY {columna, expr} [ASC | DESC] ] ; Donde: ORDER BY especifica e orden en el cual se muestran las filas recuperadas. ASC ordena las filas en orden ascendente. Este es el valor por defecto. DESC ordena las filas en orden descendente. Ejemplo SQL> SELECT Alumnos.Apellido, Alumnos.Domicilio, Alumnos.Localidad 2 FROM Alumnos 3 ORDER BY Alumnos.Localidad; Ordenamiento de datos por defecto El orden por defecto es ascendente, para invertir el orden en el cual las filas se recuperan, se especifica el comando DESC después del nombre de la columna afectada. Los valores nulos se muestran últimos en las secuencias ascendentes y primeros en la secuencias descendentes. Ordenamiento por Varias Columnas Se puede ordenar el resultado de una consulta por varias columnas. El límite es la cantidad de columnas de la tabla. En la cláusula ORDER BY se especifican los nombres de las columnas separadas por comas. Si desea invertirse el orden de una columna se especifica DESC después de su nombre o posición. Puede ordenarse por columnas que no se encuentran en la lista SELECT. SQL> SELECT Alumnos.Apellido, Alumnos.Domicilio, Alumnos.Localidad 2 FROM Alumnos 3 ORDER BY Alumnos.Apellido, Alumnos.Domicilio DESC; Restricción de las Filas seleccionadas con la cláusula WHERE Pueden restringirse las filas recuperadas usando la cláusula WHERE. Una Cláusula WHERE contiene la condición que debe cumplirse y se ubica a continuación de la cláusula FROM. SELECT expr FROM tabla [WHERE condicion(es) ] [ORDER BY expr ] ; Donde: WHERE restringe la consulta a las filas que cumplen una condición. condición se compone de nombres de columnas, expresiones, constantes y operadores de comparación. La cláusula WHERE se ubica a continuación de la cláusula FROM. Las condiciones consisten en lo siguiente: Nombre de columna, expresión, constante. Operador de comparación. Literal Ejemplo SQL> SELECT Alumnos.Apellido, Alumnos.Domicilio, Alumnos.Localidad 2 FROM Alumnos 3 WHERE Alumnos.Localidad = “Lomas de Zamora”; Operadores de Comparación Operador = > >= < <= Significado Igual a Mayor que Mayor o igual que Menor que Menor o igual que BETWEEN...AND... IS NULL Entre dos valores (inclusive) Es un valor nulo Operadores Lógicos Operador AND OR Significado Si ambos componentes de la condición son verdaderos, el resultado también Si algún componente de la condición es verdadero, el resultado también lo es Operador BETWEEN Selecciona las filas que se encuentran dentro de un rango de valores. El rango que se especifica contiene un valor inferior y otro superior, debe especificarse primero el límite inferior del rango. Los valores especificados con el operador BETWEEN se incluyen. Ejemplo Seleccionar los alumnos cuyas notas estén entre 4 y 6 inclusive. SQL> SELECT Alumnos.Apellido, Alumnos.Nota 2 FROM Alumnos 3 WHERE Alumnos.Nota BETWEEN 4 AND 6; Consultas de Datos con Condiciones Múltiples Pueden especificarse criterios complejos combinando varias condiciones. Los operadores AND y OR pueden usarse para componer expresiones lógicas. El operador AND retorna VERDADERO si ambas condiciones evaluadas son VERDADERAS. El operador OR retorna VERDADERO si alguna de las condiciones es VERDADERA. En los dos ejemplos siguientes, las condiciones son las mismas, pero el operador es diferente. Observar cómo los resultados cambian sustancialmente. Ejemplo 1 Mostrar el apellido, Domicilio, código de carrera que cursa y materia “Costos” para todos los que cursan la carrera 12. SQL> SELECT Alumnos.Apellido, Alumnos.Domicilio, Alumnos.Codcarrera, Alumnos.Materia 2 FROM Alumnos 3 WHERE Alumnos.Codcarrera = 12 4 AND Alumnos.Materia = 'Costos' ; Ejemplo 2 Mostrar el apellido, salario, número de departamento y cargo para todos los empleados que son representantes de ventas o que trabajen en el departamento 31. SQL> SELECT Empleados.Apellido, Empleados.Salario, Empleados.Nrodepto, Empleados.Cargo 2 FROM Empleados 3 WHERE Empleados.Nrodepto = 31 4 OR Empleados.Cargo = 'Ventas'; Reglas de Precedencia Pueden combinarse los operadores AND y OR en la misma expresión lógica. Los resultados de todas las condiciones se combinan en el orden determinado por la precedencia de los operadores conectores. Cuando los operadores tienen igual precedencia, se ejecutan de izquierda a derecha. Cada AND se ejecuta primero y luego cada OR. AND tiene prioridad más alta que OR. Cuando se usa negación de expresiones, los operadores de comparación también se evalúan primero. Para modificar las reglas de precedencia usar paréntesis, de ese modo, primero se evaluarán las expresiones entre paréntesis. Cada vez que se presenten dudas acerca de qué operación será ejecutada primero al evaluar una expresión, usar paréntesis para clarificar la sentencia. Orden de Evaluación Operador 1 Todos los Operadores de Comparación (=, <>, >, >=, <, <=, IN, LIKE, IS NULL, BETWEEN) 2 AND 3 OR En los siguientes ejemplos se muestra cómo se modifica el orden de precedencia y, consecuentemente, el resultado de la consulta, mediante el uso de paréntesis. Ejemplo 1 Mostrar el apellido, domicilio y código de carrera para aquellos alumnos de la carrera 14 que aprobaron 15 o más, como así también todos los alumnos de la carrera 12. SQL> SELECT Alumnos.Apellido, Alumnos.Domic, Alumnos.CodCarrera 2 FROM Alumnos 3 WHERE Alumnos.MaterAprob >= 15 4 AND Alumnos.CodCarrera = 14 5 OR Alumnos.CodCarrera = 12; Ejemplo 2 Mostrar el apellido, domicilio y código de carrera para aquellos alumnos de las carreras 12 o 14 y que hayan aprobado 15 materias o más. SQL> SELECT Alumnos.Apellido, Alumnos.Domic, Alumnos.CodCarrera 2 FROM Alumnos 3 WHERE Alumnos.MaterAprob >= 15 4 AND (Alumnos.CodCarrera = 14 5 OR Alumnos.CodCarrera = 12); Ver que la única diferencia en el código es la inclusión de los paréntesis que cambian el sentido de la expresión Generalidades Consulta con varias tablas Cuando se requieren datos a partir de más de una tabla se usa una condición de inclusión de esos datos. Esto se obtiene relacionando dos o mas tablas Las filas de una tabla pueden ser combinadas con las de otra tabla de acuerdo con valores comunes existentes en las columnas correspondientes, es decir en las claves primarias y externas. Relaciones entre Tablas En el siguiente esquema, la tabla Alumnos se relaciona con la tabla Exámenes por el número de Alumno, y la tabla Exámenes se relaciona con Materias por el número de materia. ALUMNOS Codalum EXAMENES Codalum CodMater MATERIAS CodMater Producto Cartesiano Cuando se define una condición para relacionar dos tablas que es inválida o se omite completamente el campo que relaciona ambas tablas, se establece como resultado un Producto Cartesiano, en el cual se muestran las combinaciones de todas las filas. Se combinan todas las filas de la primer tabla con todas las filas de la segunda. Ejemplo La tabla Alumnos tiene 12 filas y la tabla Materias tiene 25, la combinación de todas las filas de Alumnos con todas las filas de Materias da 300 filas. SQL> SELECT Alumnos.Apellido, Examenes NombreMater 2 FROM Alumnos, Examenes; Esto se evita incluyendo en el FROM una condición de vínculo apropiada: SQL> SELECT Alumnos.Apellido, Examenes NombreMater 2 FROM Alumnos, Examenes; (Alumnos.Codalum = Examenes.Codalum) Consulta Simple Cuando se escribe una sentencia SELECT que combina tablas, es conveniente preceder el nombre de la columna con el nombre de la tabla por claridad y para mejorar el acceso a la base de datos. Si el mismo nombre de columna aparece en más de una tabla, es necesario prefijar la columna con el nombre de la tabla correspondiente. Para combinar tablas, se necesita como mínimo una cantidad de condiciones equivalentes a la cantidad de tablas menos uno. Por lo tanto, para combinar cuatro tablas, se requerirán un mínimo de tres condiciones. Esta regla no puede aplicarse si la tabla contiene una clave primaria concatenada, en dicho caso, se requieren más de una columna para identificar unívocamente a cada fila. Sintaxis SELECT tabla.columna, tabla.columna, ... FROM tabla1, tabla2; tabla1.columna1 = tabla2.columna2; Donde: tabla.columna tabla1, tabla2 tabla1.columna1=tabla2.columna2 tablas. denota la tabla y columna seleccionadas. identifica las tablas que contienen la información es la condición que combina (o relaciona) las Consulta Múltiple Se denomina Consulta múltiple a la consulta que involucra dos o más tablas cuya condición de vínculo es una igualdad. La condición de vínculo entre las tablas se especifica con la cláusula FROM. Frecuentemente, las columnas que componen la condición de vínculo son claves primarias. Ejemplo Combinar las tablas de Alumnos y Exámenes para visualizar el nombre del Alumno, número de legajo y código de la materia rendida. SQL> SELECT Alumnos.Nleg, Alumnos.Apellido, Materias.CodMater 2 FROM Alumnos, Materias; (Alumnos.Nleg = materias.Nleg); Ahora cada Alumno tiene su código de materias. Las filas de la tabla Alumnos se combinan con las de la tabla Exámenes y se obtienen sólo aquellas cuyos valores de número de legajo sean iguales. Condiciones de Búsqueda Adicionales Es posible incorporar criterios adicionales para la cláusula WHERE., las condiciones restantes deben agregarse usando el operador AND. Ejemplo Mostrar el apellido, el número de legajo del alumno y la nota del examen, para todos los alumnos con notas mayores a 4. SQL> SELECT Alumnos.Apellido, Examenes.Nota, Materias.Nommateria 2 FROM Alumnos, Examenes, Materias, (Alumnos.Nleg=materias.Nleg), (examenes.Codmater = Materias. Codmater) 3 WHERE Nota>4; También podemos querer establecer una relación en la cual ninguna columna de la primera tabla se corresponde directamente con una columna de la segunda tabla. La relación se obtiene usando un operador distinto del igual (=). Ejemplo Crear una consulta para evaluar las notas de los alumnos. Estas notas deben estar entre cualquier valor del par comprendido entre las notas 7 y 9. SQL> SELECT Alumnos.Apellido, Examenes.Fchexamen, Examenes.Nota 2 FROM Alumnos.Nleg=Examenes.Nleg 3 WHERE Nota BETWEEN 7 AND 9; SELECT Tabla1.Campo1, Tabla2.Campo1 FROM Tabla1, Tabla2, (Tabla1.Campo1 = Tabla2.Campo1) WHERE ((Tabla1.Campo1)<> 4) ORDER BY Tabla1.Campo1 Asc;