La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

© 2007 Fundamentos de Bases de Datos L. Gómez1 Fundamentos de Bases de Datos El lenguaje estándar para acceso y manipulación de Bases de Datos: Structured.

Presentaciones similares


Presentación del tema: "© 2007 Fundamentos de Bases de Datos L. Gómez1 Fundamentos de Bases de Datos El lenguaje estándar para acceso y manipulación de Bases de Datos: Structured."— Transcripción de la presentación:

1 © 2007 Fundamentos de Bases de Datos L. Gómez1 Fundamentos de Bases de Datos El lenguaje estándar para acceso y manipulación de Bases de Datos: Structured Query Language (SQL)

2 © 2007 Fundamentos de Bases de Datos L. Gómez2 Base de datos Northwind Esta BD contiene información de pedidos, clientes, empleados, productos, proveedores, etc. Las llaves primarias están en negritas

3 © 2007 Fundamentos de Bases de Datos L. Gómez3 Consultando la información de Northwind Para consultar los datos que están almacenados en una Base de datos se utiliza el lenguaje de manipulación de datos SQL Para obtener la información de las compañías que envían los paquetes se ejecuta el siguiente comando o query Atributos Tabla

4 © 2007 Fundamentos de Bases de Datos L. Gómez4 Ejemplo usando Select * La consulta más compacta es obtener todos los atributos de una tabla Por ejemplo para obtener toda la información de los clientes, utilizamos el siguiente query El (*) asterisco indica que se deben obtener todos los atributos del cliente: select * from Customers

5 © 2007 Fundamentos de Bases de Datos L. Gómez5 Ejecutando las consultas Utilizando Microsoft SQL Server Management Studio: Query Base de datos utilizada Ejecutar query Resultados

6 © 2007 Fundamentos de Bases de Datos L. Gómez6 SQL: STRUCTURED QUERY LANGUAGE Los ejemplos anteriores muestran un ejemplo sencillo del SQL, para hacer consultas más elaboradas se requiere conocer la sintaxis del SQL: SELECT [DISTINCT | ALL] {* | [columnExpression [AS newName]] [,...] } FROM TableName [alias] [,...] [WHEREcondition] [GROUP BYcolumnList] [HAVINGcondition] [ORDER BYcolumnList]

7 © 2007 Fundamentos de Bases de Datos L. Gómez7 El estatuto SELECT SELECT Especifica las columnas a mostrar en el resultado FROM Especifica la(s) tabla(s) a utilizar. WHERE Filtra renglones de acuerdo a la condición especificada. GROUP BY Forma grupos de renglones con el mismo valor en la columna HAVING Filtra grupos de acuerdo a la condición especificada. ORDER BY Especifica como ordenar el resultado.

8 © 2007 Fundamentos de Bases de Datos L. Gómez8 Mostrar solo algunos atributos Obtener solo algunos atributos y todos los registros de una tabla SELECT A 1, A 2, …, A n FROM r 1

9 © 2007 Fundamentos de Bases de Datos L. Gómez9 Evitar tuplas duplicadas Mostrar en que ciudades hay clientes Se repiten las ciudades Usar DISTINCT No se repiten

10 © 2007 Fundamentos de Bases de Datos L. Gómez10 Especificando una condición Obtener nombre de compañía y del contacto de los clientes que viven en London

11 © 2007 Fundamentos de Bases de Datos L. Gómez11 Especificando una condición con patrones Obtener nombre de compañía y del contacto de los clientes cuya ciudad comienza con B patrones % Ignora los valores de cero o más caracteres _ Ignora el valor de un caracter

12 © 2007 Fundamentos de Bases de Datos L. Gómez12 Especificando una condición con patrones Obtener nombre de compañía y del contacto de los clientes cuya ciudad tenga como penultima letra una e % cero o más caracteres _ 1 sólo caracter

13 © 2007 Fundamentos de Bases de Datos L. Gómez13 Especificando varias condiciones (OR) Obtener nombre de compañía y del contacto de los clientes cuya ciudad sea London o Buenos Aires

14 © 2007 Fundamentos de Bases de Datos L. Gómez14 Especificando varias condiciones (AND) Obtener nombre de compañía y del contacto de los clientes cuya ciudad sea London y que la persona contacto sea un Agente de ventas (Sales Agent)

15 © 2007 Fundamentos de Bases de Datos L. Gómez15 Uso de Conjuntos en una Condición (IN) Obtener nombre de compañía, nombre y titulo del contacto de los clientes cuya persona contacto sea un Agente de ventas (Sales Agent) o un representante de ventas (Sales Representative) o un asociado de ventas (Sales Associate)

16 © 2007 Fundamentos de Bases de Datos L. Gómez16 Conjuntos en una condición (NOT IN) Obtener nombre de compañía, nombre y titulo del contacto de los clientes cuya persona contacto NO sea un Agente de ventas (Sales Agent) o un representante de ventas (Sales Representative) o un asociado de ventas (Sales Associate)

17 © 2007 Fundamentos de Bases de Datos L. Gómez17 Verificando valores NULL Obtener Id del cliente, nombre de la compañía y la Region para aquellos clientes cuya Region sea NULL Null Valor que significa que al atributo no se le asignó un valor o se le asignó NULL

18 © 2007 Fundamentos de Bases de Datos L. Gómez18 Verificando valores NOT NULL Obtener Id del cliente, nombre de la compañía y la Region para aquellos clientes cuya Region tenga un valor asignado

19 © 2007 Fundamentos de Bases de Datos L. Gómez19 Ordenando los resultados (ascendente) Obtener el nombre del producto y su precio unitario ordenando del producto más barato al más caro El default es ordenar de menor a mayor

20 © 2007 Fundamentos de Bases de Datos L. Gómez20 Ordenando los resultados (descendente) Obtener el nombre del producto y su precio unitario ordenando del producto más caro al más barato Usar la clausula DESC

21 © 2007 Fundamentos de Bases de Datos L. Gómez21 Funciones en SQL Las siguientes funciones aplican a valores numéricos y no numéricos: COUNT Regresa cuantos valores (diferentes de NULL) existen en la columna especificada. COUNT(*) Regresa el número de registros en la tabla especificada MIN Regresa el mínimo de los contenidos de la columna especificada. Primero elimina NULLs MAX Regresa el máximo de los contenidos de la columna especificada. Primero elimina NULLs

22 © 2007 Fundamentos de Bases de Datos L. Gómez22 Funciones en SQL Las siguientes funciones aplican SOLO a valores numéricos : SUM Regresa la suma de los contenidos de la columna especificada. Primero elimina NULLs AVG Regresa el promedio de los contenidos de la columna especificada. Primero elimina NULLs NOTA: En algunos DBMSs, si existe un NULL puede marcar un error de ejecución

23 © 2007 Fundamentos de Bases de Datos L. Gómez23 Ejemplos del uso del count La tabla de Clientes tiene 91 registros Los primeros 2 ejemplos cuentan el número de registros que tienen un valor diferente de NULL en el atributo region. El Ejemplo 3, cuenta los registros que tienen valores NULL en region count(atributo) elimina atributos NULL, count(*) no elimina region con NULL

24 © 2007 Fundamentos de Bases de Datos L. Gómez24 COUNT eliminando valores duplicados Usar DISTINCT para eliminar regiones que se repiten. Comparar los resultados obtenidos con cada query

25 © 2007 Fundamentos de Bases de Datos L. Gómez25 Ejemplo de MIN y MAX Obtener el costo del producto mas barato Obtener el costo del producto más caro

26 © 2007 Fundamentos de Bases de Datos L. Gómez26 Ejemplo de AVG y SUM Obtener el precio promedio de todos los productos Obtener el número total de unidades en inventario de todos los productos

27 © 2007 Fundamentos de Bases de Datos L. Gómez27 Misceláneo: MIN, MAX, AVG Varias funciones en el estatuto Select

28 © 2007 Fundamentos de Bases de Datos L. Gómez28 Uso de Funciones IMPORTANTE Las funciones COUNT, MIN, MAX, SUM, AVG sólo pueden usarse en SELECT HAVING (se verá más adelante)

29 © 2007 Fundamentos de Bases de Datos L. Gómez29 GROUP BY En el reporte puede verse que tengo varios productos de la misma categoría. Si quisiera saber cuantos productos tengo de cada categoría como podría hacerle? Podría agrupar y contar todos los registros que tienen el mismo valor en CategoryID Por ejemplo, tengo 12 productos de categoría 1

30 © 2007 Fundamentos de Bases de Datos L. Gómez30 group by GROUP BY CategoryID Agrupa todos los registros que tienen el mismo valor en el atributo especificado (CategoryID) Se utiliza con otra función, por ejemplo COUNT para saber cuantos registros fueron agrupados SELECT CategoryID, count(CategoryID) FROM Products GROUP BY CategoryID ID 1 12 prod.

31 © 2007 Fundamentos de Bases de Datos L. Gómez31 Count y Group by Se obtiene el número de productos que existen de cada categoría

32 © 2007 Fundamentos de Bases de Datos L. Gómez32 ID o nombre? El tener un número de categoría no indica nada, es mejor poner el nombre de la categoría como en el resultado siguiente: Pero, como se escribe el query? Con un JOIN entre la llave foránea FK IDCategory y la llave Primaria Categories(IDCategory)

33 © 2007 Fundamentos de Bases de Datos L. Gómez33 Join El nombre de la categoría está en la tabla Categories y nuestra consulta utiliza la tabla de Productos Poner en el query las 2 tablas y especificar una condición donde la FK=PK

34 © 2007 Fundamentos de Bases de Datos L. Gómez34 Join entre 2 tablas Nombre del producto, Id de categoría y Nombre de la categoría FK PK

35 © 2007 Fundamentos de Bases de Datos L. Gómez35 Count y Group by número de productos existentes de cada categoría

36 © 2007 Fundamentos de Bases de Datos L. Gómez36 Count, Group by, Having número de productos existentes de cada categoría para los que el número de productos sea menor a 10

37 © 2007 Fundamentos de Bases de Datos L. Gómez37 Count, Group by, Having, alias número de productos existentes de cada categoría para los que el número de productos sea menor a 10 Se utilizan alias para las tablas

38 © 2007 Fundamentos de Bases de Datos L. Gómez38 SQL y Algebra Relacional SQL query tipico SELECT A 1, A 2, …, A n FROM r 1, r 2, …, r m WHERE P Es equivalente al siguiente estatuto de álgebra relacional: π A1, A2,…,A3 (σ P (r 1 x r 2 … x r m )).

39 © 2007 Fundamentos de Bases de Datos L. Gómez39 Operadores Union, Interseccion y Diferencia Operaciones con tablas

40 © 2007 Fundamentos de Bases de Datos L. Gómez40 SQL y Algebra Relacional El asterisco (*) se refiere a todos los atributos o columnas de la tabla. Algebra RelacionalSQL r U s(select * from r) union (select * from s) r – s(select * from r) except (select * from s) r x sSelect * from r,s σ P (r)Select * from r where P π A (r)Select A from r

41 © 2007 Fundamentos de Bases de Datos L. Gómez41 Union Obtener todos los países donde hay un cliente o un proveedor

42 © 2007 Fundamentos de Bases de Datos L. Gómez42 Interseccion Obtener todos los países donde hay proveedores y clientes

43 © 2007 Fundamentos de Bases de Datos L. Gómez43 Diferencia (Except) Obtener los países donde hay proveedores, pero no hay clientes Obtener los países donde sólo hay clientes y no hay provedores

44 © 2007 Fundamentos de Bases de Datos L. Gómez44 Ejemplos en SQL cse_majors U eee_majors: Select * from cse_majors union select * from eee_majors cse_majors – eee_majors: Select * from cse_majors minus select * from eee_majors cse_profs x cse_courses: Select * from cse_profs, cse_courses  CLASS=‘SR’ (cse_majors): Select * from cse_majors where class= ‘SR’ IdNameClass 1111Student1Fr 2222Student2So 3333Student3Jr 4444Student4Sr 5555Student5Gr IdNameClass 2222Student2So 4444Student4Sr 6666Student6Sr cse_majors eee_majors cse_courses CrsidCrstitle PR1Programacion 1 DB1Bases de Datos DB2Bases de Datos Avanzadas Cse_profs NameOffice Prof1Office1 Prof2Office2

45 © 2007 Fundamentos de Bases de Datos L. Gómez45 Ejemplos adicionales π ID, NAME (cse_majors): Select id, name from cse_majors cse_majors ∩ eee_majors: Select * from cse_majors intersect select * from eee_majors cse_profs teaches: Select * from cse_profs P, teaches T where P.name = T.name cse_profs cse_courses teaches: Select P.name, P.office, C.crsid, C.crstitle from cse_profs P, cse_courses C, teaches T where P.name = T.name and T.crsid = C.crsid IdNameClass 1111Student1Fr 2222Student2So 3333Student3Jr 4444Student4Sr 5555Student5Gr IdNameClass 2222Student2So 4444Student4Sr 6666Student6Sr cse_majors eee_majors cse_courses CrsidCrstitle PR1Programacion 1 DB1Bases de Datos DB2Bases de Datos Avanzadas teaches namecrsid Prof1PR1 Prof1DB1 Prof2DB2 Prof1DB2 Cse_profs NameOffice Prof1Office1 Prof2Office2

46 © 2007 Fundamentos de Bases de Datos L. Gómez46 Ejercicio 1 Obtenga el nombre de los empleados que tomaron el curso BD1 en Junio 25, 1990 emp(id, name) takes( id, crsid, date) course(crsid, name) SELECT name FROM emp E, takes T WHERE E.id = T.id AND T.date = ’25Jun90’ AND T.crsid = ‘BD1’

47 © 2007 Fundamentos de Bases de Datos L. Gómez47 Ejercicio SQL Quien es el Jefe del empleado ‘John Smith’ ? Obtenga el nombre y el departamento del jefe. Emp(id, nombre, dnum) Dept(dnum, nombre, idJefe) SELECT M.nombre, D.nombre FROM emp E, emp M, dept D WHERE E.nombre= ‘John Smith’ and E.dnum = D.dnum AND D.idJefe = M.id

48 © 2007 Fundamentos de Bases de Datos L. Gómez48 SQL Encuentre los empleados con los salarios mas altos emp(ID, NOMBRE, SALARIO, SUPERID, DNO) Select id, nombre, salario From emp Where salario = (select max(salario) from emp)

49 © 2007 Fundamentos de Bases de Datos L. Gómez49 Queries Anidados Encuentre los alumnos que tienen una especialidad (major) en computer science y en electrical engineering. select id, name from cse_majors where id in ( select id from eee_majors) Evaluacion: (1) query anidado (2) query externo utilizando los resultados del query interno

50 © 2007 Fundamentos de Bases de Datos L. Gómez50 Subqueries Encuentre los empleados que no han tomado algun curso SQL:select name from emp E where not exists (select * from takes T where T.id = E.id) Para cada tupla de empleado, el query anidado selecciona todas las tuplas de TAKES cuyo ID es igual al ID del empleado; Si el resultado del subquery está vacío, entonces significa que el empleado no ha tomado algun curso y entonces esa tupla se incluye en el resultado. EXISTS subquery: VERDADERO si el subquery SI regresa tuplas FALSO si el subquery no regresa tuplas NOT EXISTS subquery = NOT(EXISTS subquery) emp(id, name) takes( id, crsid, date) course(crsid, name)

51 © 2007 Fundamentos de Bases de Datos L. Gómez51 DB IdNameClass 1111Student1Fr 2222Student2So 3333Student3Jr 4444Student4Sr 5555Student5Gr IdNameClass 2222Student2So 4444Student4Sr 6666Student6Sr cse_majors ee_majors Cse_profs cse_courses Has_taught NameOffice Prof1Office1 Prof2Office2 CrsidCrstitle PR1Programacion 1 DB1Bases de Datos DB2Bases de Datos Avanzadas namecrsid Prof1PR1 Prof1DB1 Prof2DB2 Prof1DB2

52 © 2007 Fundamentos de Bases de Datos L. Gómez52 Definición de tablas en SQL(Create) Crear una relación o tabla CREATE TABLE ( [NOT NULL], …); ej. create table cse_majors (idchar(9)not null, namevarchar(24)not null, classchar(2)not null).

53 © 2007 Fundamentos de Bases de Datos L. Gómez53 Borrar, Modificar estructura Borrar una tabla DROP TABLE Agregar un atributo a una tabla ALTER TABLE ADD

54 © 2007 Fundamentos de Bases de Datos L. Gómez54 SQL- Modificar la estructura de la BD INSERT INTO VALUES (…) INSERT INTO DELETE FROM WHERE UPDATE SET Ej. update enrollment set grade = ‘E’ where grade = ‘I’ CREATE VIEW AS View – tabla virtual. CREATE SNAPSHOT AS Snapshot – Vista materializada


Descargar ppt "© 2007 Fundamentos de Bases de Datos L. Gómez1 Fundamentos de Bases de Datos El lenguaje estándar para acceso y manipulación de Bases de Datos: Structured."

Presentaciones similares


Anuncios Google