select

Anuncio
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;
Descargar