SQL 2: Structured Query Language Paul Leger http://pleger.cl
¿Para que sirve “order by”? SQL Repaso de la clase anterior: CREAR TABLA: create table INSERTAR: Insert SELECCIONAR: Select * from table RENOMBRAR: As PRODUCTO CARTESIANO: , NATURAL JOIN: Natural Join ¿Para que sirve “order by”?
Modificar UPDATE TABLA SET atributo1=valor1, atributo2=valor2,... WHERE algúnAtributo = nuevoValor; Ejemplo: Update dueno set nombre = «Paul» where rut_d = 9872342 Responda qué problemas puede generar está instrucción … Modificar la primary key Modificar una foreign key Modificar datos sin usar la primary key en la condición
Borrar Ejemplo: Delete from Dueno where rut_d = 9872342 DELETE FROM table_name WHERE some_column=some_value Ejemplo: Delete from Dueno where rut_d = 9872342 ¿Qué pasa cuando se borra un tupla de una entidad que está relacionada con otras entidades (ej. Alumno y Tipo de Alumno)?
SELECT Rut_d FROM Dueno UNION SELECT Rut_a FROM Arrienda Unión SELECT Rut_d FROM Dueno UNION SELECT Rut_a FROM Arrienda No muestra los elementos repetidos. UNION ALL muestra los elementos repetidos Las tablas deben tener el mismo número de columna Similarmente a algebra relacional, en algunos motores, es necesario renombrar los atributos y que sean del mismo dominio
Intersección SELECT Rut_d as rut FROM Dueno INTERSECT SELECT Rut_a as rut FROM Arrienda Las tablas deben tener el mismo número de columna Similarmente a algebra relacional, en algunos motores, es necesario renombrar los atributos y que sean del mismo dominio
Diferencia SELECT RUT_D as rut FROM Dueno EXCEPT SELECT RUT_A as rut FROM Arrendatario Las tablas deben tener el mismo número de columna Similarmente a algebra relacional, en algunos motores es necesario renombrar los atributos y que sean del mismo dominio (recomendación: usted siempre renombre)
¿Cuál es la diferencia entre ellos? Agregación Se pueden usar funciones count, max, min y otras funciones Select count(*) from dueno Select count(distinct nombre) from dueno Select count(*) as cuenta from dueno ¿Cuál es la diferencia entre ellos?
Agregación por Agrupación Select rut, count(*) from telefono group by rut Select rut_a, sum(deuda) from arrienda group by rut_a NOTA: En algunos motores, uno puede escribir cualquier atributo al lado izquierdo de la consulta, es decir, no necesariamente debe ser el mismo atributo a ambos lados. Sin embargo, esto trae resultados inesperados. Siempre que sea posible, siga la norma/convención de algebra relacional (= repetir el mismo atributo).
Ejemplo Select rut, sum(deuda) from arrienda group by rut En algunos motores, es simplemente “sum” Rut Id_Casa deuda 1 10000 2 2000 3 4 40000 5 Rut Sum(deuda) 1 50000 2 2000
Condiciones de grupo Select rut, sum(deuda) from arrienda group by rut having sum(deuda) > 3000 Rut Id_Casa deuda 1 10000 2 2000 3 4 40000 5 Rut Sum(deuda) 1 50000 2 2000
Condición de tupla y condición de grupo Select rut, sum(deuda) from arrienda where deuda < 3000 group by rut having sum(deuda) > 0 Rut Id_Casa deuda 1 10000 2 2000 3 4 40000 5 Rut Sum(deuda) 1 2 2000
Sub-consultas Es posible escribir una consulta dentro de otra consulta Select * from (select rut_a as rut from arrienda where deuda > 0) natural join telefono Y a esta tabla, se realiza un natural join con “Telefono” Rut_a Id_Casa deuda 1 10000 2 2000 3 4 40000 5 Rut 1 2
Simple ¿no? Se puede parecer mucho al join (natural) Exist SELECT * FROM Telefono WHERE EXISTS (select * from dueno where Telefono.rut = dueno.rut_d) Simple ¿no? Se puede parecer mucho al join (natural)
División: TAREA … para ahora NOTA Y RECOMENDACIÓN: APRENDER DE MEMORIA ESTA OPERACIÓN