Lenguaje SQL Características del lenguaje SQL • Es el lenguaje estándar para realizar operaciones en bases de datos relacionales. • Instrucciones: – SELECT – Consulta. Su implementación está basada en álgebra relacional – INSERT, UPDATE, DELETE – Lenguaje de Manipulación – CREATE, ALTER, DROP, RENAME, TRUNCATE – Lenguaje de Definición de Datos – COMMIT, ROLLBACK, SAVEPOINT – Control de transacciones – GRANT, REVOKE – Lenguaje de Control de Datos (Seguridad) El lenguaje PL/SQL • PL/SQL es un lenguaje procedimental que permite extender las capacidades de SQL • Las instrucciones de manipulación y consulta son incluidas en unidades de código llamadas procedimientos • Sus beneficios incluyen: – Agrupar varias instrucciones SQL en un solo bloque y enviar el bloque al servidor reduciendo el tráfico en la red. – Modularizar el desarrollo de programas. – Reutilizar código. El lenguaje PL/SQL • Permite declarar variables, cursores, constantes y excepciones. • Posee los constructores básicos de un lenguaje procedimental: secuenciación, condicional e iteración. • Permite mediante el uso de cursores procesar individualmente las tuplas de una relación. • Tiene mecanismos para el manejo de excepciones. Lenguaje de Manipulación de Datos (DML) • Una instrucción DML es ejecutada cuando: – Se añaden nuevas tuplas a una relación – Se modifican tuplas de una relación – Se eliminan tuplas de una relación • Una transacción consiste de una colección de instrucciones DML que conforman una unidad lógica de trabajo. Ejemplo: El proceso de transferencia de dinero de una cuenta a otra cuenta de un mismo cliente en un banco. La instrucción INSERT • Permite insertar una tupla a la vez con la siguiente sintaxis: INSERT INTO tabla [(columna [, columna …])] VALUES (value [, value….]); • Los valores deben estar en el mismo orden de las columnas en la relación. • Las columnas que tengan tipo cadena de caracteres, y las tipo fecha deben estar encerradas en comillas simples. • Para las columnas con valores nulos se coloca NULL. • Se puede insertar en una relación tuplas provenientes de otra relación a través de una subconsulta. Esta opción se verá en el punto de subconsultas de la instrucción SELECT. Ejemplos: INSERT INTO CARRERA VALUES(‘001’, ‘Música’) La instrucción UPDATE • Permite modificar las tuplas de una relación. • Se pueden modificar varias tuplas a la vez. • Su sintaxis es: UPDATE tabla SET columna = valor [, columna = valor] [WHERE condición] • Si no se especifica WHERE se modifican todas las tuplas de la relación. • Se puede actualizar una relación utilizando tuplas provenientes de otra relación a través de una subconsulta. Esta opción se verá en el punto de subconsultas de la instrucción SELECT. Ejemplo de UPDATE Ejemplo: Actualice todas las asignaturas de la carrera con el idcarrera ‘001’ aumentando en 1 su número de créditos UPDATE ASIGNATURA SET creditos = creditos + 1 WHERE idcarrera = ‘001’ La instrucción DELETE • Permite eliminar tuplas de una relación con la siguiente sintaxis: DELETE [FROM] table [WHERE condicion]; • La cláusula WHERE permite especificar las tuplas que serán borradas. Si no se coloca, todas las tuplas serán borradas. • Se puede eliminar tuplas de una relación basados en valores de tuplas de otra relación a través de una subconsulta. Esta opción se verá en el punto de subconsultas de la instrucción SELECT. La instrucción SELECT • Permite realizar los operadores de selección, proyección y Join del álgebra relacional. • El SELECT básico corresponde a la “proyección” del álgebra relacional tiene la forma: SELECT [DISTINCT] * | columna [alias] [, columna [alias] …] FROM tabla; • donde – – – – SELECT identifica cuales columnas FROM identifica cuál tabla DISTINCT elimina los duplicados * selecciona todas las columnas Ejemplo de SELECT Ejemplos: “Obtenga el carnet, apellidos y nombres y créditos inscritos de todos los estudiantes” SELECT carnet, apynombre, credins FROM ESTUDIANTE; “Obtener todas las asignaturas con secciones abiertas” SELECT DISTINCT codasig FROM SECCION; Uso de expresiones aritméticas • Se puede mostrar información calculada a partir de nombres de columnas, números y operadores aritméticos. • Las expresiones aritméticas que contienen algún valor NULL tienen como resultado NULL. Ejemplo: “Obtenga el código, nombre y número de horas semestrales de cada asignatura” SELECT codasig, horassem*16 FROM ESTUDIANTE; Definición de alias de columna • “Renombra” el nombre de la columna. • Es útil para expresiones aritméticas. • Sigue al nombre de la columna (palabra opcional AS entre el nombre de la columna y el alias). • Requieren comillas dobles si contiene espacios, caracteres especiales o mayúsculas y minúsculas. Ejemplo: SELECT codasig, horassem*16 AS “horas semestrales” FROM ASIGNATURA; Operador de concatenación y literales • El operador || concatena columnas o cadenas de caracteres a otras columnas. • Crea una columna resultante que es una expresión CHAR. • Un literal es un caracter, expresión, o número incluido en la lista del SELECT pero que no es una columna. • Los literales CHAR y DATE se encierran entre comillas simples, mientras que los números no se encierran entre comillas. • Para cada tupla de la respuesta se muestra el literal una vez. Ejemplo: SELECT apynombre || ‘ estudia ‘ || idcarrera AS “Estudiantes y carreras” FROM ESTUDIANTE; Seleccionando algunas tuplas • Corresponde a la “selección” del álgebra relacional y tiene la siguiente forma: SELECT [DISTINCT] *| columna [alias] [, columna [alias]…] FROM tabla [WHERE condicion(es) ]; • La condición es una expresión lógica que tiene la misma forma del álgebra relacional Ejemplo: “Obtenga las secciones de la asignatura AA0001” SELECT * FROM SECCION WHERE codasig = ‘AA0001’; Aspectos varios • Las cadenas de caracteres y fechas están encerrados entre comillas simples. • Los valores de tipo caracter son “casesensitive”, es decir que diferencia minúsculas y mayúsculas. • Los valores de tipo fecha son “formatsensitive” es decir que diferencia entre los diversos formatos. Ejemplo: SELECT * FROM ASIGNATURA WHERE nombre = ‘MUSICA’; No retorna tuplas. Otros operadores de comparación • BETWEEN-AND: Entre dos valores (ambos inclusive) • IN (lista): Que sea igual a cualquier elemento de una lista de valores. • LIKE: Que sea igual a un “patrón” de caracteres. – La condición puede contener caracteres literales o números. – % significa 0 o más caracteres. – _ significa un caracter. • IS NULL : Que sea un valor nulo. Ejemplo: “Obtenga las secciones de la 1 a la 3 de todas las materias que empiezan con la cadena de caracteres ‘AA’”. SELECT * FROM SECCION WHERE numsec BETWEEN 1 AND 3 AND codasig LIKE ‘AA%’; Reglas de precedencia Orden en la evaluación Operador 1 Todos los operadores de comparación 2 NOT 3 AND 4 OR Las reglas de precedencia se pueden cambiar mediante el uso de paréntesis. Ejemplo: Obtenga el código y nombre de las asignaturas de la carrera ‘102’ y más de 6 horas semanales, o que la carrera sea ‘101’ SELECT codasig, nombreFROM ASIGNATURA WHERE idcarrera = ‘101’ OR idcarrera = ‘102’AND horassem > 6; Ordenar • Se pueden ordenar las filas de una tabla utilizando la cláusula ORDER BY. – ASC: orden ascendente (defecto). – DESC: orden descendente. • La sintaxis es la siguiente: SELECT [DISTINCT] * | columna [alias] [, columna [alias]…] FROM tabla [WHERE condicion(es)] [ORDER BY col [ASC|DESC] [,col [ASC|DESC] …] ; • Se puede ordenar por una columna que no está en la lista de columnas del SELECT. • Se puede ordenar por un alias de una columna. • Se puede ordenar por más de una columna. Múltiples tablas • El SELECT de múltiples tablas sin condición es equivalente al producto cartesiano del álgebra relacional. • El SELECT de múltiples tablas con una condición entre columnas de las diferentes tablas es el join del álgebra relacional. • Si la condición es de igualdad es un equijoin. El equijoin SELECT tabla1.columna [,tabla1. columna ….], tabla2.columna [,tabla2. columna ….] FROM tabla1, tabla2 WHERE tabla1.columna1 = tabla2.columna2 [AND tabla1.columna1 = tabla2.columna2 …..]; • La condición del join está en la cláusula WHERE. • Se prefija el nombre de la tabla cuando existe el mismo nombre de columna en las dos tablas. Ejemplo: “Obtener los nombres de los estudiantes y el nombre de la carrera que estudian” SELECT apynombre, CARRERA.idcarrera FROM ESTUDIANTE, CARRERA WHERE ESTUDIANTE.idcarrera = CARRERA.idcarrera; Uso de alias de tablas Ejemplo: SELECT apynombre, C.idcarrera FROM ESTUDIANTE E, CARRERA C WHERE E.idcarrera = C.idcarrera; Outer join • Si una fila no satisface la condición join, la fila no aparecerá en el resultado de la consulta. • Se usa el outer join para ver también aquellas filas que no cumplen con la condición join. • El operador del outer join es el signo +. Se coloca en el “lado” del join en donde la información es insuficiente. Outer join SELECT tabla.columna [,tabla.columna…..] FROM tabla1, tabla2 WHERE tabla1.columna (+) = tabla2.columna; SELECT tabla.columna [,tabla.columna…..] FROM tabla1, tabla2 WHERE tabla1.columna = tabla2.columna (+); Ejemplo: “Obtener los carnets, apellidos y nombres de las carreras de todos los estudiantes. Incluir en el resultado los estudiantes que no tienen aún carrera asignada”. SELECT carnet, apynombre FROM ESTUDIANTE E, CARRERA C WHERE e.idcarrera (+) = c.idcarrera; Self joins • Existen consultas para las cuales una tabla debe hacer join consigo misma. Ocurre cuando en la tabla existe una clave foránea que se referencia a sí misma. Ejemplo: EMP(empid, nombre, empidger) Clave foránea empidger que referencia a EMP “Obtenga los nombres de los empleados y de sus gerentes” SELECT E1.nombre empleado, E2.nombre gerente FROM EMP E1, EMP E2 WHERE E1.empidger = E2.empid;