SQL: Structured Query Language Paul Leger http://pleger.cl
SQL Repaso de la clase anterior: CREAR TABLA: create table INSERTAR: Insert SELECCIONAR: Select * from table RENOMBRAR: As PRODUCTO CARTESIANO: , NATURAL JOIN: Natural Join
Atención Algebra relacional tiene un comportamiento funcional Es decir, cada ejecución generaba un resultado nuevo y no modificaba las relaciones existentes Las instrucciones de SQL como insert, delete, update no son funcionales, por lo tanto, modifican las tablas
Crear tablas de manera un atributo auto incremental CREATE TABLE Dpto( ID_dpto serial, calle VARCHAR(30), num int, PRIMARY KEY(id_dpto)) En SQLITE es «serial», pero en otros motores es «autoincrement» o una variante similar
¿Qué problemas puede generar está instrucción? Modificar UPDATE TABLA SET atributo1=valor1, atributo2=valor2,... WHERE algúnAtributo = nuevoValor; Ejemplo: Update dueno set nombre = «Paul» where rut_d = 9872342 ¿Qué problemas puede generar está instrucción?
Borrar Ejemplo: ¿Qué problemas puede generar está instrucción? DELETE FROM table_name WHERE some_column=some_value Ejemplo: Delete from Dueno where rut_d = 9872342 ¿Qué problemas puede generar está instrucción?
Restricciones de integridad Las operaciones de que vienen de algebra relacional no generan problemas de integridad de una base de datos ¿Por qué?
SELECT Rut_d FROM Dueno UNION SELECT Rut_a FROM Arrienda No muestra los elementos repetidos UNION ALL muestra los elementos repetidos En algunos motores, es necesario renombrar los atributos con el mismo nombre (similar a Algebra Relacional) y ser del mismo tipo
Intersección: SELECT Rut_d as rut FROM Dueno Intersect SELECT Rut_a as rut FROM Arrienda En algunos motores, es necesario renombrar los atributos con el mismo nombre (similar a Algebra Relacional) y ser del mismo tipo
Diferencia: SELECT RUT_D as rut FROM Dueno EXCEPT SELECT RUT_A as rut FROM Arrendatario En algunos motores, es necesario renombrar los atributos con el mismo nombre (similar a Algebra Relacional) y ser del mismo tipo
¿Cuál es la diferencia entre ambos? 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 ambos?
Agregación por Agrupación Select rut, count(*) from telefono group by rut Select rut_a, sum(deuda) from arrienda group by rut_a En algunos motores, uno puede escribir cualquier atributo al lado de la operación. Sin embargo, los resultados son inesperados!
Condiciones de grupo Condición de tupla con condición de grupo Select rut_a, sum(deuda) from arrienda group by rut_a having sum(deuda) > 0 Condición de tupla con condición de grupo Select rut_a, sum(deuda) from arrienda where deuda < 100000 group by rut_a having sum(deuda) > 0 ¿Qué es esto último?
Sub-consultas Es posible escribir una consulta dentro de otra consulta. Nota recuerde ser eficiente y evita sub-consultas Select * from (select rut_a as rut from arrienda where deuda > 0) natural join telefono
Exist: SELECT * FROM Telefono WHERE EXISTS (select * from dueno where Telefono.rut = dueno.rut_d) Simple ¿no?
TAREA … para ahora NOTA: APRENDERSE DE MEMORIA ESTA OPERACIÓN División: TAREA … para ahora NOTA: APRENDERSE DE MEMORIA ESTA OPERACIÓN
Hacking a Web Page con SQL Injection VER VIDEO
ALTER TABLE TAREA: Investigue las operaciones que se pueden hacer con alter table. Nota: hay más de un alter table, por lo menos 4 http://www.tutorialspoint.com/sql/sql-alter-command.htm
El uso de «IN» en «WHERE» TAREA: Investigue el uso de «IN» en SQL ¿Dónde podría ser útil? Delete from Telefono where rut in (select rut from Dueno)
¡Quedan más …!