Base de Datos:    Lenguaje SQL Profesor: MS. Luis Serna J.
Objetivos de Hoy <ul><li>Introducción al SQL Basico </li></ul><ul><li>Sentencias DDL: </li></ul><ul><ul><li>CREATE TABLE <...
SENTENCIAS DDL
CREATE TABLE <ul><li>Las tablas se definen en tres pasos: </li></ul><ul><ul><li>Dar el nombre a la tabla </li></ul></ul><u...
CREATE TABLE <ul><li>CREATE TABLE  nombre-tabla </li></ul><ul><li>{ campo1  (tipo tamaño / dominio)  [NOT NULL], </li></ul...
<ul><li>Nombre-tabla: Es el nombre de la tabla que se va a crear. </li></ul><ul><li>Campo i: son los nombres de los campos...
<ul><li>Primary Key: especifica las columnas que conforman la clave primaria de la tabla. </li></ul><ul><li>Foreign key: i...
Ejemplos: CREATE TABLE <ul><ul><li>CREATE TABLE Clientes </li></ul></ul><ul><ul><li>(id-cliente char(5) not null, </li></u...
Ejemplos: CREATE TABLE <ul><ul><li>CREATE TABLE Cuenta </li></ul></ul><ul><ul><li>(id-cuenta char(10) not null, </li></ul>...
Uso de Constraints <ul><li>Una restricción es similar a un índice, aunque también se puede utilizar para establecer una re...
Uso de Constraints <ul><li>CONSTRAINT nombre </li></ul><ul><li>{PRIMARY KEY (principal1 [,principal2 [, ...]]) | </li></ul...
Uso de Constraints <ul><li>Nombre: Es el nombre de la restricción que se va a crear. </li></ul><ul><li>principal1, princip...
Uso de Constraints <ul><li>negadonulo1, negadonulo2: Son los nombres de campos que se van a limitar a valores no Null. </l...
Uso de Constraints <ul><li>Tabla_externa: Es el nombre de la tabla externa que contiene el campo o los campos especificado...
ALTER TABLE <ul><li>ALTER TABLE  nombre-tabla </li></ul><ul><li>{ADD | MODIFY  </li></ul><ul><li>[COLUMN  campo tipo  [( t...
ALTER TABLE <ul><li>Tabla: Es el nombre de la tabla que se va a modificar. </li></ul><ul><li>Campo: Es el nombre del campo...
Ejemplos: ALTER TABLE <ul><li>Adicionar un campo:  </li></ul><ul><ul><li>ALTER TABLE Empleados ADD COLUMN Salario number(1...
Ejemplos: ALTER TABLE <ul><li>Adicionar una clave foránea: </li></ul><ul><ul><li>ALTER TABLE Pedidos ADD CONSTRAINT Pedido...
DROP <ul><li>DROP {TABLE tabla | INDEX índice ON tabla} </li></ul><ul><li>tabla: Es el nombre de la tabla que se va a elim...
Ejemplos: DROP <ul><li>Ejemplo de como se elimina el índice Mi_Indice de la tabla Empleados: </li></ul><ul><ul><li>DROP IN...
SENTENCIAS DML
Introducción al SQL - SQL DML <ul><li>Sentencias de Manipulación de Datos </li></ul>SELECT INSERT UPDATE DELETE
<ul><li>SELECT ..... FROM .... WHERE </li></ul><ul><li>SELECT  corresponde a la operación  Proyección  (  ). Lista los at...
Sentencia SELECT <ul><li>[SELECT ...]  </li></ul><ul><ul><li>[INTO ...]   </li></ul></ul><ul><li>[FROM ...] </li></ul><ul>...
Cláusula SELECT <ul><li>En la cláusula SELECT se especifican las columnas que van a ser mostradas en pantalla </li></ul><u...
Cláusula FROM <ul><li>Específica la(s) fuente(s) de donde van a ser tomadas las columnas mostradas y/o operadas en la sent...
Cláusula INTO <ul><li>La cláusula  INTO , permite guardar los resultados intermedios de una consulta </li></ul><ul><ul><li...
Cláusula WHERE <ul><li>Donde se especifican las condiciones de búsqueda y join  para las filas que conforman el conjunto r...
Ejemplos de la Sentencia SELECT SELECT  distinct emp_id, fecha_nac, direccion FROM  EMPLEADO WHERE nombre = “Juan” AND ape...
Ejemplos de la Sentencia SELECT <ul><li>‘ Mostrar la relación de clientes que han obtenido un préstamo en alguna sucursal ...
Condiciones de Búsqueda <ul><li>Las condiciones de búsqueda pueden incluir: </li></ul><ul><li>Operadores de Comparación (=...
Condiciones de Búsqueda <ul><li>Operadores de comparación: </li></ul><ul><ul><li>WHERE  SueldoBásico > 1000 </li></ul></ul...
Comodines (Wildcards) en la cláusula WHERE Cualquier carácter único que no está dentro de un rango. [!] Cualquier carácter...
Operadores y Wildcards en la cláusula WHERE <ul><li>… .WHERE  Nombre </li></ul><ul><ul><li>LIKE “Ma%”  busca todos los nom...
Operadores y Wildcards en la cláusula WHERE <ul><li>LIKE “_va” busca todos los nombres de tres letras que  terminan en “va...
Operadores y Wildcards en la cláusula WHERE <ul><li>CARACTERES DE ESCAPE: </li></ul><ul><li>Para que los patrones puedan c...
Tablas Combinadas <ul><li>Permite especificar la tabla resultante de una operación de reunión natural en la cláusula FROM,...
Tablas Combinadas <ul><ul><li>SELECT  DISTINCT  nombre-cliente </li></ul></ul><ul><ul><li>FROM  PRESTATARIO PRS [INNER] JO...
Cláusula GROUP BY <ul><li>Especifica las columnas  por las que las filas van a estar agrupadas o particionadas. Los result...
<ul><li>SELECT {{ columnas_de_agrupación ,…}, {función_de_agregación,…}} </li></ul><ul><li>FROM … </li></ul><ul><li>[WHERE...
Funciones de Agregación más usadas Número de filas seleccionadas COUNT(*) Número de veces que se repite el valor de la exp...
<ul><li>‘ Mostrar la suma de sueldo básico de los empleados activos, por Departamento’ </li></ul><ul><li>SELECT Nombre_Dep...
<ul><li>“ Obtener el número de titulares de cuenta de cada sucursal” </li></ul><ul><li>SELECT nombre_sucursal, COUNT ( DIS...
<ul><li>Especifica una restricción  que aplica a las funciones de agregación  de los grupos. Esto afecta a las filas que s...
<ul><li>SELECT {{ columnas_de_agrupación,… }, {función_de_agregación,…}} </li></ul><ul><li>FROM … </li></ul><ul><li>[WHERE...
GROUP BY y HAVING <ul><li>“ Mostrar el sueldo promedio de los Departamentos con promedio superior a 1000” </li></ul><ul><l...
<ul><li>“ Saldo promedio de cada cliente de Surco que tiene como mínimo 3 cuentas” </li></ul><ul><li>SELECT TC. Nombre-cli...
GROUP BY - HAVING - WHERE <ul><li>Procedimiento: </li></ul><ul><li>Si en una misma consulta aparece una cláusula WHERE y u...
Cláusula ORDER BY <ul><li>Ordena el resultado de los querys por los valores de las columnas mencionadas. Solamente se pued...
<ul><li>SELECT {columna 1, columna 2,…} </li></ul><ul><li>FROM … </li></ul><ul><li>[WHERE …] </li></ul><ul><li>[GROUP BY.....
<ul><li>SELECT Nombre 'Departamento',  </li></ul><ul><ul><li>AVG(SueldoBasico) 'Promedio Sueldos' </li></ul></ul><ul><li>F...
<ul><li>Permite manipular los resultados de dos o mas querys, combinándolos en un único conjunto de datos. Muestra las fil...
<ul><li>Query1 [UNION [ALL]] QueryN  </li></ul><ul><li>[ORDER BY…..] </li></ul><ul><li>donde: </li></ul>Operador UNION Que...
<ul><li>Todas las select-list mencionadas con la sentencia UNION, deben tener el mismo número de expresiones (columnas, ex...
<ul><li>“ Todos los clientes que poseen una cuenta, un préstamo o ambos” </li></ul><ul><li>(SELECT nombre-cliente </li></u...
OUTER JOINS <ul><li>Los outer joins extienden los resultados de un join simple. Retornan las filas coincidentes y también ...
OUTER JOINS <ul><li>SELECT  IDPersona, NombreCompleto,  </li></ul><ul><ul><li>IDDepartamento, SueldoBasico </li></ul></ul>...
OUTER JOINS <ul><li>SELECT DE.Nombre_Dpto, IDEmpleado, SueldoBasico </li></ul><ul><li>FROM  EMPLEADO  RIGHT JOIN  DEPARTAM...
Uso de Subqueries <ul><li>Un Subquery es una sentencia SELECT anidada dentro de otras sentencias SQL como SELECT, INSERT, ...
Uso de Subqueries <ul><li>Subqueries con IN / NOT IN: </li></ul><ul><li>El resultado, es  una lista  de cero o mas valores...
Uso de Subqueries <ul><li>SELECT  NombreCompleto, SueldoBasico </li></ul><ul><li>FROM  PERSONA, EMPLEADO </li></ul><ul><li...
Uso de Subqueries <ul><li>Subqueries con Operadores de comparación.  </li></ul><ul><li>Son los subquerys que se introducen...
Uso de Subqueries <ul><li>Operadores de comparación modificados por ANY o ALL. Estos subqueries  retornan cero o muchos va...
Uso de Subqueries. <ul><li>Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a todos los sueldos de ...
Uso de Subqueries. <ul><li>Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a alguno de los sueldos...
Uso de Subqueries. <ul><li>Subqueries con el uso de la palabra EXISTS: </li></ul><ul><li>Funciona como un test de existenc...
Uso de Subqueries. <ul><li>“ Muestra los códigos de los empleados que tienen alguna sanción” </li></ul><ul><li>SELECT  IDE...
Subqueries correlativos <ul><li>Aquellos queries anidados donde el Subquery depende del outer query para devolver sus valo...
Subqueries Correlativos <ul><li>SELECT  a.IDEmpleado, a.SueldoBasico </li></ul><ul><li>FROM   EMPLEADO a  </li></ul><ul><l...
Sentencia INSERT <ul><li>INSERT es otra sentencia DML base, usada para incorporar nuevas filas a una tabla de base de dato...
Ejemplos de la Sentencia INSERT <ul><li>Fabricantes   ( Nfabricante , país) </li></ul><ul><li>INSERT INTO FABRICANTES (Nfa...
Sentencia UPDATE <ul><li>Modifica los datos existentes en filas de una tabla de Base de Datos </li></ul><ul><ul><li>UPDATE...
Sentencia UPDATE <ul><li>Cambiar aquellos cigarrillos de clase “Normal”, con filtro, fabricados por “Tabacalera Nacional”,...
Sentencia DELETE <ul><li>Elimina filas de una tabla de Base de Datos </li></ul><ul><li>DELETE FROM  {table-name | view-nam...
Sentencia DELETE <ul><li>Eliminar todos los fabricantes que no manufacturen cigarrillos de clase “Ultra Light” </li></ul><...
Próxima SlideShare
Cargando en…5
×

Sql basico parte_i_

3.447 visualizaciones

Publicado el

0 comentarios
5 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
3.447
En SlideShare
0
De insertados
0
Número de insertados
1
Acciones
Compartido
0
Descargas
319
Comentarios
0
Recomendaciones
5
Insertados 0
No insertados

No hay notas en la diapositiva.

Sql basico parte_i_

  1. 1. Base de Datos: Lenguaje SQL Profesor: MS. Luis Serna J.
  2. 2. Objetivos de Hoy <ul><li>Introducción al SQL Basico </li></ul><ul><li>Sentencias DDL: </li></ul><ul><ul><li>CREATE TABLE </li></ul></ul><ul><ul><li>ALTER TABLE </li></ul></ul><ul><ul><li>DROP TABLE </li></ul></ul><ul><li>Sentencia DML: </li></ul><ul><ul><li>SELECT </li></ul></ul><ul><ul><ul><li>Cláusulas SELECT, FROM, INTO, WHERE </li></ul></ul></ul><ul><ul><ul><li>Cláusulas GROUP BY, HAVING </li></ul></ul></ul><ul><ul><ul><li>Cláusula ORDER BY </li></ul></ul></ul><ul><ul><ul><li>Tipos de JOIN </li></ul></ul></ul><ul><ul><ul><li>Subqueries </li></ul></ul></ul><ul><ul><li>Sentencias INSERT, UPDATE y DELETE </li></ul></ul>
  3. 3. SENTENCIAS DDL
  4. 4. CREATE TABLE <ul><li>Las tablas se definen en tres pasos: </li></ul><ul><ul><li>Dar el nombre a la tabla </li></ul></ul><ul><ul><li>Definir cada columna, posiblemente incluyendo restricciones de columna </li></ul></ul><ul><ul><li>Definir las restricciones de la tabla </li></ul></ul>SENTENCIAS DDL
  5. 5. CREATE TABLE <ul><li>CREATE TABLE nombre-tabla </li></ul><ul><li>{ campo1 (tipo tamaño / dominio) [NOT NULL], </li></ul><ul><li>[ campo2 (tipo tamaño / dominio) [NOT NULL]], [ PRIMARY KEY (c1, c2, ..., cn) ], </li></ul><ul><li>[ FOREIGN KEY (c1) REFERENCES tabla-x ], </li></ul><ul><li> [ CHECK (P) ]} </li></ul>SENTENCIAS DDL
  6. 6. <ul><li>Nombre-tabla: Es el nombre de la tabla que se va a crear. </li></ul><ul><li>Campo i: son los nombres de los campos de la tabla. </li></ul><ul><li>Tipo: Es el tipo de datos del campo. </li></ul><ul><li>Tamaño:Es el tamaño del campo en caracteres </li></ul><ul><li>Dominio: es el nombre del dominio asignado al campo. </li></ul>CREATE TABLE SENTENCIAS DDL
  7. 7. <ul><li>Primary Key: especifica las columnas que conforman la clave primaria de la tabla. </li></ul><ul><li>Foreign key: indica las columnas que constituyen clave externa en la tabla </li></ul><ul><li>References: indica la tabla que provee la clave foránea. </li></ul><ul><li>Check (P): especifica un predicado que debe satisfacer cada fila de la tabla </li></ul>CREATE TABLE SENTENCIAS DDL
  8. 8. Ejemplos: CREATE TABLE <ul><ul><li>CREATE TABLE Clientes </li></ul></ul><ul><ul><li>(id-cliente char(5) not null, </li></ul></ul><ul><ul><li>nombre-cliente char(20), </li></ul></ul><ul><ul><li>calle-cliente char(30), </li></ul></ul><ul><ul><li>primary key id-cliente) </li></ul></ul>SENTENCIAS DDL
  9. 9. Ejemplos: CREATE TABLE <ul><ul><li>CREATE TABLE Cuenta </li></ul></ul><ul><ul><li>(id-cuenta char(10) not null, </li></ul></ul><ul><ul><li>id-cliente char(5), </li></ul></ul><ul><ul><li>saldo integer </li></ul></ul><ul><ul><li>check ( saldo >= 0), </li></ul></ul><ul><ul><li>primary key id-cuenta </li></ul></ul><ul><ul><li>foreign key id-cliente references clientes) </li></ul></ul>SENTENCIAS DDL
  10. 10. Uso de Constraints <ul><li>Una restricción es similar a un índice, aunque también se puede utilizar para establecer una relación con otra tabla. </li></ul><ul><li>Puede utilizar la cláusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar restricciones. </li></ul><ul><li>Hay dos tipos de cláusulas CONSTRAINT: una para crear una restricciones en un único campo y otra para crear una restricción en más de un campo. </li></ul>SENTENCIAS DDL
  11. 11. Uso de Constraints <ul><li>CONSTRAINT nombre </li></ul><ul><li>{PRIMARY KEY (principal1 [,principal2 [, ...]]) | </li></ul><ul><li>UNIQUE (único1 [,único2 [, ...]]) | </li></ul><ul><li>NOT NULL (negadonulo1 [,negadonulo2 [, ...]]) | </li></ul><ul><li>FOREIGN KEY (referencia1 [,referencia2 [, ...]]) REFERENCES tabla_externa [(campo_externo1 [,campo_externo2 [, ...]])]} </li></ul>SENTENCIAS DDL
  12. 12. Uso de Constraints <ul><li>Nombre: Es el nombre de la restricción que se va a crear. </li></ul><ul><li>principal1, principal2: Son los nombres de los campos que se van a designar como clave principal. </li></ul><ul><li>único1, único2: Son los nombres de los campos que se van a designar como clave única. </li></ul>SENTENCIAS DDL
  13. 13. Uso de Constraints <ul><li>negadonulo1, negadonulo2: Son los nombres de campos que se van a limitar a valores no Null. </li></ul><ul><li>referencia1, referencia2: Son los nombres de los campos de la clave externa a los que se hace referencia en otra tabla. </li></ul>SENTENCIAS DDL
  14. 14. Uso de Constraints <ul><li>Tabla_externa: Es el nombre de la tabla externa que contiene el campo o los campos especificados por campo_externo. </li></ul><ul><li>Campo_externo1, campo_externo2: Son los nombres de los campos en tabla_externa especificados por referencia1, referencia2. Puede omitir esta cláusula si el campo al que se hace referencia es la clave principal de tabla_externa. </li></ul>SENTENCIAS DDL
  15. 15. ALTER TABLE <ul><li>ALTER TABLE nombre-tabla </li></ul><ul><li>{ADD | MODIFY </li></ul><ul><li>[COLUMN campo tipo [( tamaño )] [NOT NULL] [CONSTRAINT nombre-constraint tipo-constraint ]] | </li></ul><ul><li>[CONSTRAINT nombre-constraint tipo-constraint (campo,…)]} </li></ul>SENTENCIAS DDL
  16. 16. ALTER TABLE <ul><li>Tabla: Es el nombre de la tabla que se va a modificar. </li></ul><ul><li>Campo: Es el nombre del campo que se va a agregar o eliminar de tabla. </li></ul><ul><li>Tipo: Es el tipo de datos del campo. </li></ul><ul><li>Tamaño:Es el tamaño del campo en caracteres </li></ul>SENTENCIAS DDL
  17. 17. Ejemplos: ALTER TABLE <ul><li>Adicionar un campo: </li></ul><ul><ul><li>ALTER TABLE Empleados ADD COLUMN Salario number(15,2) </li></ul></ul><ul><li>Quitar el campo Salario de la tabla Empleados: </li></ul><ul><ul><li>ALTER TABLE Empleados DROP COLUMN Salario; </li></ul></ul>SENTENCIAS DDL
  18. 18. Ejemplos: ALTER TABLE <ul><li>Adicionar una clave foránea: </li></ul><ul><ul><li>ALTER TABLE Pedidos ADD CONSTRAINT PedidosEmpleados FOREIGN KEY (IdEmpleado) REFERENCES Empleados (IdEmpleado) </li></ul></ul><ul><li>Quitar la clave externa existente de la tabla Pedidos: </li></ul><ul><ul><li>ALTER TABLE Pedidos DROP CONSTRAINT PedidosEmpleados; </li></ul></ul>SENTENCIAS DDL
  19. 19. DROP <ul><li>DROP {TABLE tabla | INDEX índice ON tabla} </li></ul><ul><li>tabla: Es el nombre de la tabla que se va a eliminar o la tabla de la cual se va a eliminar un índice. </li></ul><ul><li>Índice: Es el nombre del índice que se va a eliminar de tabla. </li></ul>SENTENCIAS DDL
  20. 20. Ejemplos: DROP <ul><li>Ejemplo de como se elimina el índice Mi_Indice de la tabla Empleados: </li></ul><ul><ul><li>DROP INDEX Mi_Indice ON Empleados; </li></ul></ul><ul><li>Ejemplo de cómo se elimina una tabla: </li></ul><ul><ul><li>DROP TABLE Practicas; </li></ul></ul>SENTENCIAS DDL
  21. 21. SENTENCIAS DML
  22. 22. Introducción al SQL - SQL DML <ul><li>Sentencias de Manipulación de Datos </li></ul>SELECT INSERT UPDATE DELETE
  23. 23. <ul><li>SELECT ..... FROM .... WHERE </li></ul><ul><li>SELECT corresponde a la operación Proyección (  ). Lista los atributos deseados en el resultado de la consulta. </li></ul><ul><li>FROM corresponde a la operación Producto Cartesiano (X). Lista las relaciones que se deben analizar. </li></ul><ul><li>WHERE corresponde al predicado Selección (  ), y se refiere a los atributos de las relaciones listadas en FROM. </li></ul>Sentencia SELECT – Estructura Básica
  24. 24. Sentencia SELECT <ul><li>[SELECT ...] </li></ul><ul><ul><li>[INTO ...] </li></ul></ul><ul><li>[FROM ...] </li></ul><ul><li>[WHERE ...] </li></ul><ul><li>[GROUP BY …] </li></ul><ul><li>[HAVING ...] </li></ul><ul><li>[ORDER BY ...] </li></ul><ul><ul><li>[UNION ...] </li></ul></ul>
  25. 25. Cláusula SELECT <ul><li>En la cláusula SELECT se especifican las columnas que van a ser mostradas en pantalla </li></ul><ul><ul><li>SELECT [ all | distinct] </li></ul></ul><ul><ul><li>{ * | tabla.* | [tabla.]campo1 [encab1] , [tabla.]campo2 [encab2] , ...} </li></ul></ul>
  26. 26. Cláusula FROM <ul><li>Específica la(s) fuente(s) de donde van a ser tomadas las columnas mostradas y/o operadas en la sentencia Select. </li></ul><ul><ul><li>[SELECT…] </li></ul></ul><ul><ul><li>FROM expresión tabla [as] t_alias [, ...] </li></ul></ul>
  27. 27. Cláusula INTO <ul><li>La cláusula INTO , permite guardar los resultados intermedios de una consulta </li></ul><ul><ul><li>[SELECT ...] INTO tabla_into </li></ul></ul><ul><ul><li>[FROM ...] </li></ul></ul>
  28. 28. Cláusula WHERE <ul><li>Donde se especifican las condiciones de búsqueda y join para las filas que conforman el conjunto resultado. </li></ul><ul><ul><li>[SELECT ...] </li></ul></ul><ul><ul><li>[FROM ...] </li></ul></ul><ul><ul><li>WHERE condiciones_de_búsqueda </li></ul></ul><ul><li>Tipos de condiciones </li></ul><ul><ul><li>Condiciones de comparación, de Join, o de Subquery. </li></ul></ul>
  29. 29. Ejemplos de la Sentencia SELECT SELECT distinct emp_id, fecha_nac, direccion FROM EMPLEADO WHERE nombre = “Juan” AND apellido = “Perez”  fecha_nac, direccion (  nombre = “Juan” AND apellido = “Perez” (EMPLEADO))
  30. 30. Ejemplos de la Sentencia SELECT <ul><li>‘ Mostrar la relación de clientes que han obtenido un préstamo en alguna sucursal de Miraflores’ </li></ul><ul><ul><li>SELECT DISTINCT nombre-cliente </li></ul></ul><ul><ul><li>FROM PRESTATARIO PRS, PRESTAMO PTR </li></ul></ul><ul><ul><li>WHERE PRS.idpréstamo = PRT.numpréstamo AND </li></ul></ul><ul><ul><li>nombre-sucursal = “Miraflores” </li></ul></ul>
  31. 31. Condiciones de Búsqueda <ul><li>Las condiciones de búsqueda pueden incluir: </li></ul><ul><li>Operadores de Comparación (=, <>, < y >). </li></ul><ul><li>Porciones de cadenas de caracteres (SUBSTR) </li></ul><ul><li>Rangos (BETWEEN y NOT BETWEEN). </li></ul><ul><li>Listas (IN, NOT IN). </li></ul><ul><li>Patrones de caracteres (LIKE y NOT LIKE). </li></ul><ul><li>Valores desconocidos (IS NULL y IS NOT NULL). </li></ul><ul><li>Combinaciones con conjunciones (AND, OR). </li></ul>
  32. 32. Condiciones de Búsqueda <ul><li>Operadores de comparación: </li></ul><ul><ul><li>WHERE SueldoBásico > 1000 </li></ul></ul><ul><ul><li>WHERE SUBSTR(CodigoPostal, 1, 3)= “SAN” </li></ul></ul><ul><li>Rangos (BETWEEN / NOT BETWEEN): </li></ul><ul><ul><li>WHERE SueldoBásico BETWEEN 1000 AND 5000 </li></ul></ul><ul><li>Listas (IN / NOT IN): </li></ul><ul><ul><li>WHERE Departamento NOT IN ('ADM', 'SIS') </li></ul></ul><ul><li>Coincidencia de patrones o cadenas de caracteres (LIKE / NOT LIKE)) </li></ul><ul><ul><li>WHERE NombreCompleto LIKE “LET%” </li></ul></ul>
  33. 33. Comodines (Wildcards) en la cláusula WHERE Cualquier carácter único que no está dentro de un rango. [!] Cualquier carácter único dentro de un rango. [-] Cualquier carácter/ número único. ?, #, _ Cualquier cadena de cero o mas caracteres. * % Significado Wildcard
  34. 34. Operadores y Wildcards en la cláusula WHERE <ul><li>… .WHERE Nombre </li></ul><ul><ul><li>LIKE “Ma%” busca todos los nombres que comiencen con “Ma” </li></ul></ul><ul><ul><ul><li>(Ej.: María, Mariana, Manuel, Martín) </li></ul></ul></ul><ul><ul><li>LIKE “%ía” busca todos los nombres que terminen con “ía”. </li></ul></ul><ul><ul><ul><li>(Ej.: Sofía, María, Estefanía). </li></ul></ul></ul><ul><ul><li>LIKE “%ar%” busca todos los nombres que tengan las letras “ar”. </li></ul></ul><ul><ul><ul><li>(Ej.:Carlos, Arturo, Eleazar). </li></ul></ul></ul>
  35. 35. Operadores y Wildcards en la cláusula WHERE <ul><li>LIKE “_va” busca todos los nombres de tres letras que terminan en “va”. (Ej.: Eva, Iva, Ava). </li></ul><ul><li>LIKE “[CM]arlo[ns]” busca todos los nombres: Carlon, Marlon, Carlos y Marlos. </li></ul><ul><li>LIKE “[B-D]elia” busca todos los nombres que terminan en “elia” y que comiencen con las letras de la </li></ul><ul><li>B a la D. (Ej.: Delia, Celia). </li></ul><ul><li>LIKE “_ _ _” busca todas las cadenas de exactamente 3 caracteres. </li></ul><ul><li>LIKE “_ _ _ %” busca las cadenas de al menos 3 caracteres. </li></ul>
  36. 36. Operadores y Wildcards en la cláusula WHERE <ul><li>CARACTERES DE ESCAPE: </li></ul><ul><li>Para que los patrones puedan contener los caracteres especiales comodín, se especifica un caracter de escape. </li></ul><ul><li>LIKE “%ab_cd” escape “” busca todas las cadenas que terminen con “ab_cd”. </li></ul><ul><li>LIKE “ab_cd%” escape “” busca las cadenas que empiecen con “ab_cd”. </li></ul>
  37. 37. Tablas Combinadas <ul><li>Permite especificar la tabla resultante de una operación de reunión natural en la cláusula FROM, en lugar de colocar las condiciones de JOIN en el WHERE </li></ul><ul><ul><li>[SELECT] </li></ul></ul><ul><ul><li>FROM TABLA1 [INNER] JOIN TABLA2 </li></ul></ul><ul><ul><li>ON TABLA1.COLUMNA1 = TABLA2.COLUMNA1 </li></ul></ul><ul><ul><li>[WHERE] </li></ul></ul>
  38. 38. Tablas Combinadas <ul><ul><li>SELECT DISTINCT nombre-cliente </li></ul></ul><ul><ul><li>FROM PRESTATARIO PRS [INNER] JOIN PRESTAMO PTR </li></ul></ul><ul><ul><li>On PRS.idpréstamo = PRT.numpréstamo </li></ul></ul><ul><ul><li>WHERE nombre-sucursal = “Miraflores” </li></ul></ul>
  39. 39. Cláusula GROUP BY <ul><li>Especifica las columnas por las que las filas van a estar agrupadas o particionadas. Los resultados del query contienen un valor o conjunto de valores para cada conjunto de valores indicado por las funciones_de_agregación nombradas en la lista del Select </li></ul>
  40. 40. <ul><li>SELECT {{ columnas_de_agrupación ,…}, {función_de_agregación,…}} </li></ul><ul><li>FROM … </li></ul><ul><li>[WHERE …] </li></ul><ul><li>GROUP BY { columnas_de_agrupación ,…} </li></ul>Cláusula GROUP BY
  41. 41. Funciones de Agregación más usadas Número de filas seleccionadas COUNT(*) Número de veces que se repite el valor de la expresión. COUNT([ ALL |DISTINCT] expresión) Calcula el máximo valor de una expresión numérica para las filas involucradas. MAX([ ALL |DISTINCT] expresión) Calcula el mínimo valor de una expresión numérica para las filas involucradas MIN([ ALL |DISTINCT] expresión) Calcula el promedio de una expresión numérica para las filas involucradas. AVG([ ALL |DISTINCT] expresión) Calcula el total de una expresión numérica para todas las filas o sólo las distintas. SUM([ ALL |DISTINCT] expresión)
  42. 42. <ul><li>‘ Mostrar la suma de sueldo básico de los empleados activos, por Departamento’ </li></ul><ul><li>SELECT Nombre_Depto, SUM(SueldoBasico) </li></ul><ul><li>FROM EMPLEADO EM, DEPARTAMENTO DE </li></ul><ul><li>WHERE EM.IDDepartamento = DE.IDDepartamento AND </li></ul><ul><ul><li>EstadoEmpleado= 'ACT’ </li></ul></ul><ul><li>GROUP BY Nombre_Depto </li></ul>Cláusula GROUP BY
  43. 43. <ul><li>“ Obtener el número de titulares de cuenta de cada sucursal” </li></ul><ul><li>SELECT nombre_sucursal, COUNT ( DISTINCT nombre-cliente) </li></ul><ul><li>FROM TITULAR-CUENTA TC, CUENTA CUE </li></ul><ul><li>WHERE TC.numero-cuenta = CUE. numero-cuenta </li></ul><ul><li>GROUP BY nombre-sucursal </li></ul>Cláusula GROUP BY
  44. 44. <ul><li>Especifica una restricción que aplica a las funciones de agregación de los grupos. Esto afecta a las filas que son devueltas como resultado y no al cálculo de las funciones de agregación. </li></ul><ul><li>La cláusula WHERE si condiciona el número de filas que intervienen en el cálculo de las funciones de agregación. </li></ul>Cláusula HAVING
  45. 45. <ul><li>SELECT {{ columnas_de_agrupación,… }, {función_de_agregación,…}} </li></ul><ul><li>FROM … </li></ul><ul><li>[WHERE …] </li></ul><ul><li>GROUP BY { columnas_de_agrupación,… } </li></ul><ul><li>HAVING condiciones_de_búsqueda </li></ul>Cláusula HAVING
  46. 46. GROUP BY y HAVING <ul><li>“ Mostrar el sueldo promedio de los Departamentos con promedio superior a 1000” </li></ul><ul><li>SELECT Nombre_Depto, AVG(SueldoBasico) </li></ul><ul><li>FROM EMPLEADO EM, DEPARTAMENTO DE </li></ul><ul><li>WHERE EM.IDDepartamento = DE.IDDepartamento AND </li></ul><ul><ul><li>EstadoEmpleado= 'ACT' </li></ul></ul><ul><li>GROUP BY Nombre_Depto </li></ul><ul><li>HAVING AVG(SueldoBasico) > 1000 </li></ul>
  47. 47. <ul><li>“ Saldo promedio de cada cliente de Surco que tiene como mínimo 3 cuentas” </li></ul><ul><li>SELECT TC. Nombre-cliente, AVG (saldo) </li></ul><ul><li>FROM TITULAR-CUENTA TC, CUENTA CUE, CLIENTE CLI </li></ul><ul><li>WHERE TC.numero-cuenta = CUE.numero-cuenta AND </li></ul><ul><li>TC.nombre-cliente = CLI.nombre-cliente AND </li></ul><ul><li>ciudad-cliente = “Surco” </li></ul><ul><li>GROUP BY TC.nombre-cliente </li></ul><ul><li>HAVING COUNT (DISTINCT TC.numero-cuenta) >= 3 </li></ul>GROUP BY y HAVING
  48. 48. GROUP BY - HAVING - WHERE <ul><li>Procedimiento: </li></ul><ul><li>Si en una misma consulta aparece una cláusula WHERE y una cláusula HAVING, se aplica primero el predicado de la cláusula WHERE. </li></ul><ul><li>Las tuplas que satisfagan la condición, se colocan en grupos según la cláusula GROUP BY. </li></ul><ul><li>La cláusula HAVING se aplica luego a cada grupo. Los grupos que no la satisfagan se eliminan. </li></ul><ul><li>La cláusula SELECT utiliza los grupos restantes para generar las tuplas resultado de la consulta. </li></ul>
  49. 49. Cláusula ORDER BY <ul><li>Ordena el resultado de los querys por los valores de las columnas mencionadas. Solamente se puede ordenar por las columnas especificadas en el SELECT. </li></ul><ul><ul><li>ASC : Es el valor por defecto e indica que los resultados se van a presentar ascendentemente. </li></ul></ul><ul><ul><li>DESC: Debe especificarse al lado de la columna cuyo orden se desea ver en forma descendente. </li></ul></ul><ul><li>Consideración : ordenar un gran número de tuplas puede ser costoso. Es conveniente ordenar sólo cuando sea estrictamente necesario . </li></ul>
  50. 50. <ul><li>SELECT {columna 1, columna 2,…} </li></ul><ul><li>FROM … </li></ul><ul><li>[WHERE …] </li></ul><ul><li>[GROUP BY...] </li></ul><ul><li>[HAVING ...] </li></ul><ul><li>ORDER BY columna 1 [ASC|DESC],.... </li></ul>Cláusula ORDER BY
  51. 51. <ul><li>SELECT Nombre 'Departamento', </li></ul><ul><ul><li>AVG(SueldoBasico) 'Promedio Sueldos' </li></ul></ul><ul><li>FROM EMPLEADO EM, DEPARTAMENTO DE </li></ul><ul><li>WHERE EM.Departamento = DE.Departamento </li></ul><ul><li>GROUP BY Nombre </li></ul><ul><li>ORDER BY AVG(SueldoBasico) DESC </li></ul>Cláusula ORDER BY
  52. 52. <ul><li>Permite manipular los resultados de dos o mas querys, combinándolos en un único conjunto de datos. Muestra las filas recuperadas por cualquiera de los query </li></ul><ul><li>A diferencia del SELECT, que por omisión conserva los duplicados, la operación de unión normalmente los suprime. </li></ul><ul><li>A fin de evitar esto, es necesario colocar a continuación del operador UNION la palabra clave ALL </li></ul>Operador UNION
  53. 53. <ul><li>Query1 [UNION [ALL]] QueryN </li></ul><ul><li>[ORDER BY…..] </li></ul><ul><li>donde: </li></ul>Operador UNION Query1: SELECT select-list [INTO] [FROM] [WHERE] [GROUP BY] [HAVING] y QueryN SELECT select-list [FROM] [WHERE] [GROUP BY] [HAVING]
  54. 54. <ul><li>Todas las select-list mencionadas con la sentencia UNION, deben tener el mismo número de expresiones (columnas, expresiones aritméticas, funciones de agregación, etc.). </li></ul><ul><li>Las columnas que se corresponden, deben tener el mismo tipo de dato, sino es así, debe existir una conversión de datos implícita o explícita con una función de conversión de por medio. </li></ul>Operador UNION
  55. 55. <ul><li>“ Todos los clientes que poseen una cuenta, un préstamo o ambos” </li></ul><ul><li>(SELECT nombre-cliente </li></ul><ul><li>FROM TITULAR-CUENTA) </li></ul><ul><li>UNION </li></ul><ul><li>(SELECT nombre-cliente </li></ul><ul><li>FROM PRESTATARIO) </li></ul>Operador UNION
  56. 56. OUTER JOINS <ul><li>Los outer joins extienden los resultados de un join simple. Retornan las filas coincidentes y también las filas de una de las tablas que no tiene elementos en común con la otra. </li></ul><ul><ul><li>[Select] </li></ul></ul><ul><ul><li>From tabla1, tabla2 </li></ul></ul><ul><ul><li>WHERE tabla1.columna1 = tabla2.columna1 (+) </li></ul></ul><ul><ul><li>[Select] </li></ul></ul><ul><ul><li>From tabla1 LEFT [OUTER] JOIN TABLA2 </li></ul></ul><ul><ul><li>ON tabla1.columna1 = tabla2.columna1 </li></ul></ul><ul><ul><li>… ..devuelven todas las filas de la tabla1 aunque no tengan coincidencias con la tabla2 en la columna1. </li></ul></ul>
  57. 57. OUTER JOINS <ul><li>SELECT IDPersona, NombreCompleto, </li></ul><ul><ul><li>IDDepartamento, SueldoBasico </li></ul></ul><ul><ul><li>FROM PERSONA, EMPLEADO </li></ul></ul><ul><ul><li>WHERE IDPersona = IDEmpleado (+) </li></ul></ul><ul><li>SELECT IDPersona, NombreCompleto, </li></ul><ul><ul><li>IDDepartamento, SueldoBasico </li></ul></ul><ul><ul><li>FROM PERSONA LEFT JOIN EMPLEADO </li></ul></ul><ul><ul><li>ON IDPersona = IDEmpleado </li></ul></ul><ul><ul><li>(Seleccionan todas las personas, aún las que no figuran en la tabla EMPLEADO) </li></ul></ul>
  58. 58. OUTER JOINS <ul><li>SELECT DE.Nombre_Dpto, IDEmpleado, SueldoBasico </li></ul><ul><li>FROM EMPLEADO RIGHT JOIN DEPARTAMENTO </li></ul><ul><li>ON EMPLEADO.IDDepartamento = DEPARTAMENTO.IDDepartamento </li></ul><ul><li>(Selecciona todos los departamentos, aún los que no tienen empleados) </li></ul><ul><li>Un join simple descarta las filas no coincidentes. </li></ul><ul><li>Un outer join preserva filas que de otra forma serían descartadas. </li></ul>
  59. 59. Uso de Subqueries <ul><li>Un Subquery es una sentencia SELECT anidada dentro de otras sentencias SQL como SELECT, INSERT, UPDATE o DELETE, o dentro de otro Subquery. </li></ul><ul><li>A una sentencia SELECT, que contiene uno o mas Subqueries, se la denomina Nested Query o SELECT anidado. </li></ul>
  60. 60. Uso de Subqueries <ul><li>Subqueries con IN / NOT IN: </li></ul><ul><li>El resultado, es una lista de cero o mas valores. Una vez que el Subquery devuelve resultados, el Outer query los usa, por inclusión o negación. </li></ul><ul><li>Con la palabra IN se puede resolver el operador relacional de Intersección </li></ul><ul><li>Empleando NOT IN se resuelve el operador Diferencia </li></ul>
  61. 61. Uso de Subqueries <ul><li>SELECT NombreCompleto, SueldoBasico </li></ul><ul><li>FROM PERSONA, EMPLEADO </li></ul><ul><li>WHERE IDPersona=IDEmpleado and </li></ul><ul><li> IDEmpleado NOT IN </li></ul><ul><li>(SELECT IDEmpleado FROM </li></ul><ul><li>SANCIONES_EMPLEADO) </li></ul>
  62. 62. Uso de Subqueries <ul><li>Subqueries con Operadores de comparación. </li></ul><ul><li>Son los subquerys que se introducen con algún operador de comparación como =, <>, <, <=, >, >=, etc. </li></ul><ul><li>Estos subqueries retornan un solo valor . </li></ul>
  63. 63. Uso de Subqueries <ul><li>Operadores de comparación modificados por ANY o ALL. Estos subqueries retornan cero o muchos valores . </li></ul><ul><ul><li>> ALL, significa que todos los valores retornados por el subquery son menores al valor de comparación del outer. </li></ul></ul><ul><ul><li>> ANY, significa que por lo menos un valor retornado por el subquery es menor al valor de comparación del outer. </li></ul></ul>
  64. 64. Uso de Subqueries. <ul><li>Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a todos los sueldos de la tabla CARGO </li></ul><ul><li>SELECT IDEmpleado, NombreCompleto, SueldoBasico </li></ul><ul><li>FROM EMPLEADO, PERSONA </li></ul><ul><li>WHERE IDEmpleado = IDPersona </li></ul><ul><li>AND SueldoBasico > ALL </li></ul><ul><ul><li>(SELECT Sueldo FROM CARGO) </li></ul></ul>
  65. 65. Uso de Subqueries. <ul><li>Mostrar ID, nombre y sueldo de todos los empleados cuyo sueldo es mayor a alguno de los sueldos de la tabla CARGO </li></ul><ul><li>SELECT IDEmpleado, NombreCompleto, SueldoBasico </li></ul><ul><li>FROM EMPLEADO, PERSONA </li></ul><ul><li>WHERE IDEmpleado = IDPersona </li></ul><ul><li>AND SueldoBasico > ANY </li></ul><ul><ul><li>(SELECT Sueldo FROM CARGO) </li></ul></ul>
  66. 66. Uso de Subqueries. <ul><li>Subqueries con el uso de la palabra EXISTS: </li></ul><ul><li>Funciona como un test de existencia. La cláusula WHERE, examina la existencia de filas devueltas por el Subquery. El Subquery devuelve los valores de TRUE o FALSE . </li></ul>
  67. 67. Uso de Subqueries. <ul><li>“ Muestra los códigos de los empleados que tienen alguna sanción” </li></ul><ul><li>SELECT IDEmpleado </li></ul><ul><li>FROM EMPLEADO EM </li></ul><ul><li>WHERE EXISTS </li></ul><ul><li>(SELECT * FROM SANCIONES_EMPLEADO SE </li></ul><ul><li>WHERE EM.IDEmpleado = SE.IDEmpleado) </li></ul>
  68. 68. Subqueries correlativos <ul><li>Aquellos queries anidados donde el Subquery depende del outer query para devolver sus valores. </li></ul><ul><li>Esto significa que el Subquery se ejecuta repetidamente, una vez por cada fila seleccionada por el Outer query. </li></ul>
  69. 69. Subqueries Correlativos <ul><li>SELECT a.IDEmpleado, a.SueldoBasico </li></ul><ul><li>FROM EMPLEADO a </li></ul><ul><li>WHERE a.SueldoBasico >= </li></ul><ul><ul><li>(SELECT b.SueldoBasico FROM EMPLEADO b </li></ul></ul><ul><ul><li>WHERE a.IDJefe = b.IDEmpleado ) </li></ul></ul><ul><li>Muestra código y sueldo de los empleados cuyos sueldos son mayores o iguales a los sueldos de sus respectivos jefes </li></ul>
  70. 70. Sentencia INSERT <ul><li>INSERT es otra sentencia DML base, usada para incorporar nuevas filas a una tabla de base de datos. </li></ul><ul><li>INSERT [INTO] </li></ul><ul><ul><ul><li>{table-name | view-name} [(column-list)] </li></ul></ul></ul><ul><ul><li>{VALUES | (values-list) | select-statement } </li></ul></ul>
  71. 71. Ejemplos de la Sentencia INSERT <ul><li>Fabricantes ( Nfabricante , país) </li></ul><ul><li>INSERT INTO FABRICANTES (Nfabricante, País) </li></ul><ul><ul><li>VALUES (“Reynolds Tobacco CO.”, “EEUU”) </li></ul></ul><ul><li>Marcas ( marca , Nfabricante, cartón, embalaje) </li></ul><ul><li>INSERT INTO MARCAS </li></ul><ul><ul><li>VALUES (“Camel”, “Reynolds Tobacco CO.”, 10, 20) </li></ul></ul>
  72. 72. Sentencia UPDATE <ul><li>Modifica los datos existentes en filas de una tabla de Base de Datos </li></ul><ul><ul><li>UPDATE {table-name | view-name} </li></ul></ul><ul><ul><li>SET{column-list </li></ul></ul><ul><ul><ul><li>| variable-list </li></ul></ul></ul><ul><ul><ul><li>| variable_and_column-list},….. </li></ul></ul></ul><ul><ul><ul><li>[ WHERE { condition }] </li></ul></ul></ul>
  73. 73. Sentencia UPDATE <ul><li>Cambiar aquellos cigarrillos de clase “Normal”, con filtro, fabricados por “Tabacalera Nacional”, de modo que ahora no tengan filtro </li></ul><ul><li>UPDATE CIGARRILLOS </li></ul><ul><li>SET filtro = “N” </li></ul><ul><li>WHERE marca in </li></ul><ul><li>(SELECT marca FROM MARCAS </li></ul><ul><li> WHERE Nfabricante = “Tabacalera Nacional” </li></ul><ul><li>And filtro = “S” and clase = “Normal”) </li></ul>
  74. 74. Sentencia DELETE <ul><li>Elimina filas de una tabla de Base de Datos </li></ul><ul><li>DELETE FROM {table-name | view-name} </li></ul><ul><li>[WHERE {condition} ] </li></ul>
  75. 75. Sentencia DELETE <ul><li>Eliminar todos los fabricantes que no manufacturen cigarrillos de clase “Ultra Light” </li></ul><ul><li>DELETE FROM FABRICANTES </li></ul><ul><li>WHERE Nfabricante NOT IN </li></ul><ul><li>(SELECT DISTINCT Nfabricante </li></ul><ul><li>FROM MARCAS </li></ul><ul><li>WHERE marca IN </li></ul><ul><li>(SELECT marca FROM CIGARRILLOS </li></ul><ul><li>WHERE clase = “Ultra Light”)) </li></ul>

×