Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

SQL: DDL, DML y SQL

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Nächste SlideShare
SQL-DDL
SQL-DDL
Wird geladen in …3
×

Hier ansehen

1 von 90 Anzeige
Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Andere mochten auch (20)

Anzeige
Anzeige

Aktuellste (20)

SQL: DDL, DML y SQL

  1. 1. UF2 · SQL ASIX – Gestión de bases de datos DAM – Bases de datos 1 Departamento de Informática - Carmen Soler
  2. 2. UD2.1. DDL (Data Description Language) 1. Creación de una tabla 1. Integridad de datos 2. Restricciones en CREATE TABLE 2. Supresión de tablas 3. Modificación de tablas 4. Secuencias 2 Departamento de Informática - Carmen Soler
  3. 3. 1. Creación de una tabla  A tener en cuenta antes de crear una tabla  El nombre de la tabla  Debe ser un nombre que identifique el contenido  Ha de tener entre 1 y 30 caracteres de longitud y no puede ser una palabra reservada de Oracle  Por ejemplo, llamaremos ALUMNOS a una tabla que contenga datos sobre alumnos  El nombre de cada columna de la tabla  Debe ser autodescriptivo  Por ejemplo, DNI, NOMBRE o APELLIDOS  El tipo de dato y tamaño que tendrá cada columna  Las columnas que serán obligatorias, los valores por defecto, las restricciones, etc. 3 Departamento de Informática - Carmen Soler
  4. 4. 1. Creación de una tabla CREATE TABLE NombreTabla ( Columna1 Tipo_dato [NOT NULL], Columna2 Tipo_dato [NOT NULL], … ) CREATE TABLE ALUMNOS ( NUMERO_MATRICULA NUMBER(6) NOT NULL, NOMBRE VARCHAR(2) NOT NULL, FECHA_NACIMIENTO DATE, DIRECCION VARCHAR2(30), LOCALIDAD VARCHAR2(15) ) 4 Departamento de Informática - Carmen Soler
  5. 5. 1.1. Integridad de datos  Una restricción de integridad es una regla que restringe el rango de valores para una o más columnas de la tabla.  Una columna que no pueda almacenar números negativos  Una cadena de caracteres que sólo pueda contener mayúsculas  La integridad referencial es la que controla los valores de una columna de una tabla que dependen de otra.  VENTAS y ARTICULOS Que no haya una venta con productos inexistentes 5 Departamento de Informática - Carmen Soler
  6. 6. 1.2. Restricciones en CREATE TABLE  CREATE TABLE permite definir distintos valores de restricciones sobre una tabla:  Claves primarias  Claves foráneas  Campos obligatorios  Valores de los campos por defecto  Verificación de condiciones  Para definir restricciones usamos CONSTRAINT 6 Departamento de Informática - Carmen Soler
  7. 7. 1.2. Restricciones en CREATE TABLE CREATE TABLE BLOQUES_PISOS ( CALLE VARCHAR2(30),  Definir claves primarias NUMERO NUMBER(3), PISO NUMBER(2),  Es una columna o conjunto de columnas PUERTA CHAR(1),  Debe ser un campo único, no nulo y obligatorio CODIGO_POSTAL NUMBER(5), COMENTARIOS VARCHAR2(60),  Usamos la restricción PRIMARY KEY COD_ZONA NUMBER(2), DNI VARCHAR2(10), PRIMARY KEY ( CREATE TABLE ZONAS( CALLE, NUMERO, PISO, PUERTA) COD_ZONA NUMBER(3), ); NOMBREZONA VARCHAR2(15) NOT NULL, CREATE TABLE ZONAS( MASDATOS VARCHAR2(60), COD_ZONA NUMBER(3) CONSTRAINT PK_ZONAS PRIMARY KEY, PRIMARY KEY(COD_ZONA) NOMBREZONA VARCHAR2(15) ); NOT NULL, MASDATOS VARCHAR2(60) ); 7 Departamento de Informática - Carmen Soler
  8. 8. 1.2. Restricciones en CREATE TABLE  Definir claves foráneas  Es una o más columnas que están asociadas a una clave primaria de otra o de la misma tabla  El valor de las columnas definidas como claves foráneas debe ser NULL o igual a un valore de la tabla referenciada (Integridad referencial) PERSONAS PROVINCIAS DNI COD_PROV NOMBRE NOM_PROV DIRECCION COD_PROV 8 Departamento de Informática - Carmen Soler
  9. 9. 1.2. Restricciones en CREATE TABLE  Definir claves foráneas CREATE TABLE PERSONAS ( DNI NUMBER(8) PRIMARY KEY, CREATE TABLE PROVINCIAS ( NOMBRE VARCHAR2(15), COD_PROV NUMBER(2) DIRECCION VARCHAR2(25), PRIMARY KEY, COD_PROV NUMBER(2) NOM_PROV VARCHAR2(15) NOT NULL ); REFERENCES PROVINCIAS ); CREATE TABLE PERSONAS ( CREATE TABLE PERSONAS ( DNI NUMBER(8) PRIMARY KEY, DNI NUMBER(8) PRIMARY KEY, NOMBRE VARCHAR2(15), NOMBRE VARCHAR2(15), DIRECCION VARCHAR2(25), DIRECCION VARCHAR2(25), COD_PROV NUMBER(2) NOT NULL, COD_PROV NUMBER(2) NOT NULL, FOREIGN KEY (COD_PROV) CONSTRAINT FK_PER_PRO REFERENCES PROVINCIAS FOREIGN KEY (COD_PROV) ); REFERENCES PROVINCIAS ); 9 Departamento de Informática - Carmen Soler
  10. 10. 1.2. Restricciones en CREATE TABLE  Definir claves foráneas  Si se quiere que al borrar una provincia, las personas que tengan esa provincia también sean eliminadas: CREATE TABLE PERSONAS ( DNI NUMBER(8) PRIMARY KEY, NOMBRE VARCHAR2(15), DIRECCION VARCHAR2(25), COD_PROV NUMBER(2) NOT NULL, FOREIGN KEY (COD_PROV) REFERENCES PROVINCIAS ON DELETE CASCADE );  Si no se define ONDELETE CASCADE, si la provincia pertenece a alguna persona, no podrá ser borrada 10 Departamento de Informática - Carmen Soler
  11. 11. 1.2. Restricciones en CREATE TABLE  Obligatoriedad  Obliga a que la columna no pueda tener valores nulos. CREATE TABLE PERSONAS ( DNI NUMBER(8) PRIMARY KEY, NOMBRE VARCHAR2(15), DIRECCION VARCHAR2(25), COD_PROV NUMBER(2) NOT NULL, FOREIGN KEY (COD_PROV) REFERENCES PROVINCIAS ); 11 Departamento de Informática - Carmen Soler
  12. 12. 1.2. Restricciones en CREATE TABLE  Valores por defecto  Obliga a que la columna no pueda tener valores nulos. CREATE TABLE EJEMPLO ( DNI VARCHAR2(10) NOT NULL, NOMBRE VARCHAR2(30) NOT NULL DEFAULT „No definido‟, EDAD NUMBER(2), FECHA DATE DEFAULT SYSDATE ); 12 Departamento de Informática - Carmen Soler
  13. 13. 1.2. Restricciones en CREATE TABLE  Verificación de condiciones  Limita los valores de los campos a un rango o a unas condiciones: CREATE TABLE EJEMPLO ( DNI VARCHAR2(10) PRIMARY KEY, NOMBRE VARCHAR2(30) NOT NULL CHECK (NOMBRE=UPPER(NOMBRE)), EDAD NUMBER(2) CHECK (EDAD BETWEEN 5 AND 20), CURSO NUMBER(2) CHECK (CURSO IN(1,2,3))); 13 Departamento de Informática - Carmen Soler
  14. 14. 1.2. Restricciones en CREATE TABLE  Verificación de condiciones  Limita los valores de los campos a un rango o a unas condiciones: CREATE TABLE EJEMPLO ( DNI VARCHAR2(10) PRIMARY KEY, NOMBRE VARCHAR2(30) NOT NULL, EDAD NUMBER(2), CURSO NUMBER(2), CONSTRAINT COMP_EDAD CHECK (EDAD BETWEEN 5 AND 20), CONSTRAINT NOMBRE_MAY CHECK (NOMBRE=UPPER(NOMBRE)), CONSTRAINT COMP_CURSO CHECK (CURSO IN(1,2,3)); 14 Departamento de Informática - Carmen Soler
  15. 15. 1.2. Restricciones en CREATE TABLE  La restricción UNIQUE  Evita valores repetidos de la misma columna CREATE TABLE EJEMPLO ( DNI VARCHAR2(10) PRIMARY KEY, NOMBRE VARCHAR2(30) UNIQUE, EDAD NUMBER(2) ); 15 Departamento de Informática - Carmen Soler
  16. 16. 1.2. Restricciones en CREATE TABLE  Las restricciones en tablas de sistema  Existen una serie de vistas que contienen información general referente a las restricciones definidas en las tablas: USER_CONSTRAINTS Definiciones de restricciones de tablas propiedad del usuario ALL_CONSTRAINTS Definiciones de restricciones de tablas a las que puede acceder el usuario DBA_CONSTRAINTS Todas las definiciones de restricciones sobre todas las tablas 16 Departamento de Informática - Carmen Soler
  17. 17. 2. Supresión de tablas  Con la orden DROP TABLE  Cada usuario puede borrar sus propias tablas  Sólo el administrador de la base de datos puede borrar las tablas de los demás.  Ejemplo:  DROP TABLE EMPLEADO;  DROP TABLE PROVINCIAS;  DROP TABLE PROVINCIAS CASCADE CONSTRAINT; 17 Departamento de Informática - Carmen Soler
  18. 18. 3. Modificación de tablas  Con la orden ALTER TABLE  Sintaxis general ALTER TABLE nombretabla {[ADD (columna [, columna] …)] [MODIFY (columna [, columna] …)] [ADD CONSTRAINT restricción] [DROP CONSTRAINT restricción]}; 18 Departamento de Informática - Carmen Soler
  19. 19. 3. Modificación de tablas  Ejemplos ALTER TABLE EJEMPLO ADD (SEXO CHAR(1), EDAD NUMBER(2)); ALTER TABLE EJEMPLO MODIFY (SEXO CHAR(1) NOT NULL, EDAD NUMBER(4)); ALTER TABLE EMPLEADO ADD CONSTRAINT APELLIDO_UQ UNIQUE(apellido); ALTER TABLE EMPLEADO DROP CONSTRAINT APELLIDO_UQ; 19 Departamento de Informática - Carmen Soler
  20. 20. 4. Secuencias  Oracle proporciona objetos de secuencia para la generación de números autonuméricos.  A la hora de generarlo, podemos utilizar todos los parámetros posibles (primer caso), o bien, simplificar la orden aceptando los valores por defecto (segundo caso). 20 Departamento de Informática - Carmen Soler
  21. 21. 4. Secuencias  Para ir obteniendo los valores de esta secuencia tenemos dos formas:  Que me dé el siguiente valor que corresponde (caso 1)  Que me dé el último valor que se asignó (caso 2)  Para eliminarlas, igual que con todos los objetos de la base de datos. 21 Departamento de Informática - Carmen Soler
  22. 22. 4. Secuencias  Las secuencias nos serán útiles en diferentes ocasiones:  Cuando queramos obtener el último valor de primary key que se insertó en la tabla.  Cuando hacemos un insert de un valor nuevo y queremos obtener qué valor es el siguiente de primary key.  Las secuencias son muy útiles a la hora de programar con PL/SQL. 22 Departamento de Informática - Carmen Soler
  23. 23. UD2.2. DML (Data Manipulation Language) 1. Inserción de datos: INSERT 2. Modificación de datos: UPDATE 3. Borrado de filas: DELETE 4. Restricciones 23 Departamento de Informática - Carmen Soler
  24. 24. 1. Inserción de datos: INSERT INSERT INTO NombreTabla [ (columna [, columna]…) ] VALUES (valor [, valor]);  Las columnas que no estén en la lista recibirán un NULL  Si la columna está definida como NOT NULL y además, la columna no aparece en la lista, el INSERT fallará. 24 Departamento de Informática - Carmen Soler
  25. 25. 1. Inserción de datos: INSERT CREATE TABLE ALUMNOS ( NUMERO_MATRICULA NUMBER(6) NOT NULL, NOMBRE VARCHAR(12) NOT NULL, FECHA_NACIMIENTO DATE, DIRECCION VARCHAR2(30), LOCALIDAD VARCHAR2(15) ) INSERT INTO ALUMNOS (NUMERO_MATRICULA, NOMBRE, FECHA_NACIMIENTO) VALUES (123456, „Pepito‟, SYSDATE); 25 Departamento de Informática - Carmen Soler
  26. 26. 2. Modificación de datos: UPDATE UPDATE NombreTabla SET columna1 = valor1, …, columnan = valorn WHERE condición;  Con el WHERE seleccionamos las filas que se van a actualizar.  Si no ponemos nada, la actualización afectará a todas las filas de la tabla. 26 Departamento de Informática - Carmen Soler
  27. 27. 2. Modificación de datos: UPDATE CREATE TABLE ALUMNOS ( NUMERO_MATRICULA NUMBER(6) NOT NULL, NOMBRE VARCHAR(12) NOT NULL, FECHA_NACIMIENTO DATE, DIRECCION VARCHAR2(30), LOCALIDAD VARCHAR2(15) ) UPDATE ALUMNOS SET NOMBRE = „Pepito2‟ WHERE NUMERO_MATRICULA = „123456‟; 27 Departamento de Informática - Carmen Soler
  28. 28. 3. Borrado de filas: DELETE DELETE FROM NombreTabla WHERE condición;  Con el WHERE seleccionamos las filas que se van a eliminar.  Hay que ir con mucho cuidado porque si no ponemos WHERE, se eliminarán todas las filas de la tabla. 28 Departamento de Informática - Carmen Soler
  29. 29. 3. Borrado de datos: DELETE CREATE TABLE ALUMNOS ( NUMERO_MATRICULA NUMBER(6) NOT NULL, NOMBRE VARCHAR(12) NOT NULL, FECHA_NACIMIENTO DATE, DIRECCION VARCHAR2(30), LOCALIDAD VARCHAR2(15) ) DELETE FROM ALUMNOS WHERE NUMERO_MATRICULA = „123456‟; 29 Departamento de Informática - Carmen Soler
  30. 30. 4. Restricciones 30 Departamento de Informática - Carmen Soler
  31. 31. 4. Restricciones  Sobre el modelo anterior  Si queremos dejar definidas las claves primarias y foráneas en su creación, ¿en qué orden deberíamos crear las tablas?  ¿Y si definiéramos claves primarias y foráneas después de crear las tablas?  Suponemos que la base de datos está vacía y todas las columnas son NOT NULL. Quiero insertar algo en la tabla de PERSONAS y no podré, ¿por qué? ¿cómo lo solucionaría?  Si hay datos en todas las tablas y no quiero hacer un borrado en cascada, ¿en qué orden debo eliminarlos? 31 Departamento de Informática - Carmen Soler
  32. 32. UD2.3. Consultas 1. Estructura general de una consulta 8. Valor NULL 2. DESC / DESCRIBE 9. ORDER BY 3. Tipos de datos. Características. 10. Tabla DUAL 4. DISTINCT 11. Funciones simples 5. AS (alias) 1. De VARCHAR 2. De NUMBER 6. WHERE 3. De DATE 1. AND y BETWEEN 2. OR e IN 12. Funciones de grupo 3. NOT 13. Subconsultas 4. LIKE 14. Combinación de tablas 7. Operaciones aritméticas 32 Departamento de Informática - Carmen Soler
  33. 33. 1. Estructura general de una consulta SELECT [ALL | DISTINCT] [expre_column1, expre_column2, …, expre_column|*] FROM [nombre_tabla1, nombre_tabla2, …, nombre_tablan] [WHERE condicion] [ORDER BY expre_column [DESC|ASC] [,expre_column [DESC|ASC]]]  Ejemplos FROM: SELECT nom_alum, nota FROM ALUMNOS; SELECT A.nom_alum, A.nota FROM ALUMNOS A; 33 Departamento de Informática - Carmen Soler
  34. 34. 1. Estructura general de una consulta  Selección por columnas (proyección) Selección por filas (selección) SELECT NOMBRE, DEPT_NO FROM DEPART; SELECT EMP_NO, APELLIDO, OFICIO, DEPT_NO FROM EMPLE WHERE DEPT_NO = 20 ORDER BY APELLIDO; SELECT * FROM EMPLE WHERE OFICIO=„ANALISTA‟; SELECT * FROM EMPLE WHERE DEPT_NO=10 AND OFICIO=„ANALISTA‟ ORDER BY APELLIDO DESC, EMP_NO DESC; 34 Departamento de Informática - Carmen Soler
  35. 35. 2. DESC / DESCRIBE  Sirve para consultar la estructura de una tabla. DESCRIBE HR.REGIONS 35 Departamento de Informática - Carmen Soler
  36. 36. 3. Tipos de datos. Características.  Resumen de los más importantes:  VARCHAR2(n) Para almacenar texto. Es una evolución del antiguo CHAR(n) La ventaja que tiene VARCHAR2 es que, si no ocupa los n caracteres, el resto de espacio no queda asignado.  NUMBER(n,d) Valores numéricos con o sin decimales No es obligatorio indicar las cifras n y d, pero si se hace: N es el número de dígitos total que tiene el número D es el número de decimales que tiene (va incluido en N) 36 Departamento de Informática - Carmen Soler
  37. 37. 3. Tipos de datos. Características.  Resumen de los más importantes:  DATE Guarda valores de fecha y hora.  Otros tipos: Timestamp  guarda una fecha expresada en segundos. BLOB  Para almacenar contenido multimedia. 37 Departamento de Informática - Carmen Soler
  38. 38. 4. DISTINCT  Ejemplos DISTINCT: SELECT DEPT_NO FROM EMPLE; (1) SELECT DISTINCT DEPT_NO FROM EMPLE; (2) DEPT_NO (1) DEPT_NO (2) 20 10 30 20 30 30 20 10 10 30 20 10 38 Departamento de Informática - Carmen Soler
  39. 39. 5. AS (alias) SELECT FIRST_NAME as “Nombre”, LAST_NAME Apellido, SALARY “Salario actual” FROM EMPLOYEES 39 Departamento de Informática - Carmen Soler
  40. 40. 6. WHERE  Ejemplos WHERE: -- La nota está entre 5 y 10 (incluidos) WHERE (NOTA <= 10) AND (NOTA >= 5) WHERE NOTA BETWEEN 5 AND 10 -- La nota no está entre 5 y 10, debe ser una nota - --fuera de estos límites WHERE NOTA NOT BETWEEN 5 AND 10; -- La nota es ó 5 ó 10 WHERE (NOTA = 10) OR (NOTA = 5) WHERE NOTA IN (5, 10) -- La nota no es ni 5 ni 10 WHERE NOTA NOT IN (5, 10) 40 Departamento de Informática - Carmen Soler
  41. 41. 6. WHERE  Más ejemplos de IN  Para comprobar si una columna pertenece o no a un conjunto de valores SELECT APELLIDO FROM EMPLE WHERE DEPT_NO IN(10,30); SELECT APELLIDO FROM EMPLE WHERE DEPT_NO NOT IN(10, 30);  Más ejemplos de BETWEEN SELECT APELLIDO, SALARIO FROM EMPLE WHERE SALARIO BETWEEN 1100 and 1200; SELECT APELLIDO, SALARIO FROM EMPLE WHERE NOT BETWEEN 1100 and 1200; 41 Departamento de Informática - Carmen Soler
  42. 42. 6. WHERE  Combinación de AND y OR SELECT APELLIDO, SALARIO, DEPT_NO FROM EMPLE WHERE SALARIO>1500 AND (DEPT_NO=10 OR DEPT_NO=20); APELLIDO SALARIO DEPT_NO JIMENEZ 1800 20 CEREZO 1600 10 GIL 1700 20 REY 2500 10 FERNANDEZ 1900 20 SELECT APELLIDO, SALARIO, DEPT_NO FROM EMPLE WHERE SALARIO>1500 AND DEPT_NO IN(10,20); 42 Departamento de Informática - Carmen Soler
  43. 43. 6. WHERE  Combinación de AND y OR SELECT APELLIDO, SALARIO, DEPT_NO FROM EMPLE WHERE SALARIO>1500 AND DEPT_NO=10 OR DEPT_NO=20; APELLIDO SALARIO DEPT_NO SANCHEZ 1400 20 JIMENEZ 1800 20 CEREZO 1600 10 GIL 1700 20 REY 2500 10 ALONSO 1350 20 FERNANDEZ 1900 20 43 Departamento de Informática - Carmen Soler
  44. 44. 6. WHERE  Hay una forma especial para comparar cadenas de caracteres  Usamos el operador LIKE  Tenemos caracteres especiales: ‘%’  es un comodín, representa una cadena de 0 o más caracteres ‘_’  Marcador de posición. Representa un carácter cualquiera.  Ejemplos  LIKE ‘Director’  Igual a la cadena ‘Director’  LIKE ‘M%’  Que empiece por ‘M’  LIKE ‘%X%’  Que contenga una ‘X’  LIKE ‘__M’  Que tenga 3 caracteres y acabe en ‘M’  LIKE ‘_R%’  Cualquier cadena que la segunda letra sea ‘R’ 44 Departamento de Informática - Carmen Soler
  45. 45. 7. Operaciones aritméticas  Sirven para formar expresiones con constantes, valores de columnas y funciones de valores de columnas SELECT col1*col2, col1-col2 FROM tabla1 WHERE col1+col2=34;  Operadores aritméticos y operación asociada:  +  Suma  -  Resta  *  Multiplicación  /  División 45 Departamento de Informática - Carmen Soler
  46. 46. 7. Operaciones aritméticas  Sirven para formar expresiones con constantes, valores de columnas y funciones de valores de columnas NOMBRE_ALUMNO NOTA1 NOTA2 NOTA3 Luís Benito 5 5 5 Manuel Casas 7 6 8 Ana Sánchez 3 5 5 Antonio García 6 4 5  Sacar la nota media de cada alumno SELECT NOMBRE_ALUMNO, (NOTA1+NOTA2+NOTA3)/3 FROM NOTAS_ALUMNOS; 46 Departamento de Informática - Carmen Soler
  47. 47. 7. Operaciones aritméticas  Ejemplo NOMBRE_ALUMNO NOTA1 NOTA2 NOTA3 Luís Benito 5 5 5 Manuel Casas 7 6 8 Ana Sánchez 3 5 5 Antonio García 8 4 5  Obtener aquellos nombres de alumnos que tengan un 7 en NOTA1 y cuya media sea mayor que 6 SELECT NOMBRE_ALUMNO FROM NOTAS_ALUMNOS WHERE NOTA1=7 AND (NOTA1+NOTA2+NOTA3)/3>6; 47 Departamento de Informática - Carmen Soler
  48. 48. 8. Valor NULL  Consideramos que una columna es NULL si no tiene ningún valor asignado.  No es null un número que sea cero y, no es null un varchar2 vacío.  Para comprobar si es NULL o no empleamos:  Columna IS NULL  Columna IS NOT NULL SELECT APELLIDO FROM EMPLE WHERE COMISION IS NULL; SELECT APELLIDO FROM EMPLE WHERE COMISION IS NOT NULL; 48 Departamento de Informática - Carmen Soler
  49. 49. 8. Valor NULL  Al ser un valor especial, se comporta de manera especial en estos casos:  En operaciones aritméticas con un valor null, el resultado es null;  En concatenaciones con un valor null, no tiene efecto. Ni siquiera aparece ‘null’ en el resultado, es como si no estuviera. -- El resultado es NULL SELECT SALARIO*1.25+NULL FROM EMPLE -- El resultado es el valor del Apellido SELECT APELLIDO||NULL FROM EMPLE 49 Departamento de Informática - Carmen Soler
  50. 50. 9. ORDER BY  Ejemplo: SELECT * FROM ALUMNOS ORDER BY NOM_ALUM, CURSO DESC;  El primer criterio de ordenación es el principal, si hay varios iguales, se ordenarán según el secundario.  Se ordena por nom_alum ascendente y por curso descendente.  Por defecto es ordenación ascendente. Si se quiere descendente se debe indicar explícitamente. 50 Departamento de Informática - Carmen Soler
  51. 51. 10. Tabla DUAL  La tabla DUAL es una tabla de sistema que sirve para hacer pruebas.  Si yo escribo: SELECT 1*2 FROM REGIONS, porque quiero probar cómo funciona una operación de *, me saldrá la * 4 veces, una por cada fila de regions.  Si sólo se quiere hacer pruebas, DUAL es muy útil porque tiene sólo una columna y una fila creadas: 51 Departamento de Informática - Carmen Soler
  52. 52. 11. Funciones simples  Se llaman simples porque se aplican por cada uno de los resultados del select.  DE VARCHAR2: SELECT INITCAP(first_name||' '|| last_name) as "Nombre completo", LENGTH(first_name||' '|| last_name) as "Longitud", FROM EMPLOYEES WHERE (LOWER(last_name) like '%a%' or UPPER(first_name) like '%E%')  Además de las del ejemplo tenemos: SUBSTR, INSTR, RPAD, LPAD, TRIM y REPLACE 52 Departamento de Informática - Carmen Soler
  53. 53. 11. Funciones simples  DE NUMBER:  ROUND(12.62)  Da 13  ROUND(12.37)  Da 12  ROUND(12.37,1)  Redondea a 1 decimal  12.4  ROUND(12.62,1)  Redondea a 1 decimal  12.6  TRUNC(12.62)  Elimina los decimales  12  TRUNC(12.37,1)  Deja sólo 1 decimal  12.3 53 Departamento de Informática - Carmen Soler
  54. 54. 11. Funciones simples  DE DATE:  MONTHS_BETWEEN(fecha2, fecha1) Da el número de meses que hay entre las dos fechas. Puede retornar un valor decimal  ADD_MONTHS(fecha, numMeses) Añade a una fecha el número de meses que se indique.  LAST_DAY(fecha) Nos da el último día de mes de la fecha indicada  NEXT_DAY(fecha, ‘día semana’) Si dia semana es Lunes, nos da la fecha del próximo lunes partiendo de la fecha que se indica. 54 Departamento de Informática - Carmen Soler
  55. 55. 12. Funciones de grupo  A diferencia de las funciones simples, se aplican sobre un conjunto de filas de la tabla.  Las que utilizaremos son: COUNT, SUM, AVG, MAX, MIN -- Cuenta los empleados que hay -- Retorna un único número. SELECT COUNT(*) FROM EMPLE -- Cuenta los salarios que hay -- si hay un valor null, no lo cuenta SELECT COUNT(SALARY) FROM EMPLE -- Cuentas los trabajos diferentes que hay SELECT COUNT(DISTINCT SALARY) FROM EMPLE 55 Departamento de Informática - Carmen Soler
  56. 56. 12. Funciones de grupo -- Calcula la media de sueldo de los empleados -- de un departamento concreto SELECT AVG(salary) FROM EMPLE WHERE DEP_ID=30 -- Salario más alto de la empresa -- podemos utilizar 2 funciones de grupo -- en la misma consulta SELECT MAX(SALARY), MIN(SALARY) FROM EMPLE  ¿Es lo mismo? 56 Departamento de Informática - Carmen Soler
  57. 57. 12. Funciones de grupo  Visualizar el número de empleados que hay en cada departamento.  Tenemos que agrupar las filas de la tabla EMPLE por departamento (GROUP BY DEPT_NO) y contarlas (COUNT(*)) SELECT DEPT_NO, COUNT(*) FROM EMPLE GROUP BY DEPT_NO;  COUNT es una función de grupo y da información sobre un grupo de filas, no sobre filas individuales de cada tabla.  GROUP BY obliga a COUNT a contar las filas que se han agrupado por cada departamento. 57 Departamento de Informática - Carmen Soler
  58. 58. 12. Funciones de grupo  Ejemplo de HAVING:  Visualizar los departamentos con más de 4 empleados. SELECT DEPT_NO, COUNT(*) FROM EMPLE GROUP BY DEPT_NO HAVING COUNT(*)>4  HAVING es similar al WHERE, pero trabaja con grupos de filas. Puede preguntar por el resultado de funciones de grupo, como es este caso.  Además, podemos ordenar la salida: SELECT DEPT_NO, COUNT(*) FROM EMPLE GROUP BY DEPT_NO HAVING COUNT(*)>4 ORDER BY COUNT(*) DESC; 58 Departamento de Informática - Carmen Soler
  59. 59. 12. Funciones de grupo  En tiempo de ejecución de la query, las cláusulas siguen este orden:  WHERE  Para seleccionar las filas  GROUP BY  Agrupa estas filas  HAVING  Filtra los grupos  ORDER BY  Clasifica la salida. Ordena los grupos. 59 Departamento de Informática - Carmen Soler
  60. 60. 13. Subconsultas  Seguimos haciendo consultas de una sola tabla, pero ahora vamos a combinar varias consultas en una sola.  Esta es una consulta con subconsultas en la que podemos saber, a día de hoy, cuántos empleados y departamentos tenemos: SELECT SYSDATE HOY, (SELECT COUNT(*) FROM DEPARTMENTS) NUM_DEPT, (SELECT COUNT(*) FROM EMPLOYEES) EMP_COUNT FROM DUAL; 60 Departamento de Informática - Carmen Soler
  61. 61. 13. Subconsultas  A veces para realizar consultas, necesitamos los datos devueltos por otras consultas.  Queremos saber los apellidos de aquellas personas que tienen el mismo oficio que el que se apellida ‘Bates’ (suponemos que sólo hay un ‘Bates’).  PASO 1 Averiguar el oficio de Bates: SELECT JOB_ID FROM EMPLOYEES WHERE LAST_NAME = ‘Bates’  PASO 2 El JOB_ID es ‘SA_REP’ SELECT APELLIDO FROM EMPLE WHERE JOB_ID = ‘SA_REP’ AND LAST_NAME <> ‘Bates’ 61 Departamento de Informática - Carmen Soler
  62. 62. 13. Subconsultas  Esto se puede resumir en una única consulta SELECT LAST_NAME FROM EMPLOYEES WHERE JOB_ID = (SELECT JOB_ID FROM EMPLOYEES WHERE LAST_NAME = ‘Bates’ ) AND LAST_NAME <> ‘Bates’; 62 Departamento de Informática - Carmen Soler
  63. 63. 13. Subconsultas  Subconsultas con valores simples  Devuelven una fila o un valor de la fila  El ejemplo anterior devuelve un solo valor que puedo igualar a oficio con ‘=‘. SELECT LAST_NAME FROM EMPLOYEES WHERE JOB_ID = (SELECT JOB_ID FROM EMPLOYEES WHERE LAST_NAME = ‘Bates’ ) AND LAST_NAME <> ‘Bates’; 63 Departamento de Informática - Carmen Soler
  64. 64. 13. Subconsultas  Subconsultas con valores simples  Pero si digo lo siguiente: SELECT LAST_NAME FROM EMPLOYEES WHERE JOB_ID = (SELECT JOB_ID FROM EMPLOYEES WHERE DEPTARTMENT_ID = 20 ) Esto devuelve más de un oficio y, por lo tanto, dará un error. 64 Departamento de Informática - Carmen Soler
  65. 65. 13. Subconsultas  Subconsultas que generan listas de valores  Si devuelve más de un valor, debemos usar el operador IN. SELECT LAST_NAME FROM EMPLOYEES WHERE JOB_ID IN (SELECT JOB_ID FROM EMPLOYEES WHERE DEPTARTMENT_ID = 20 ) 65 Departamento de Informática - Carmen Soler
  66. 66. 13. Subconsultas  Ejercicio  Obtén los departamentos que estén situados en Seattle (1) SELECT LOCATION_ID FROM LOCATIONS WHERE CITY = ‘Seattle’  LOCATION_ID = 1700 (2) SELECT DEPARTMENT_NAME FROM DEPARTMENTS WHERE LOCATION_ID = 1700 (2) Cómo juntamos (1) y (2)??? 66 Departamento de Informática - Carmen Soler
  67. 67. 13. Subconsultas  Ejercicio  Obtener el apellido de los empleados con el mismo oficio que ‘Bates’ y un salario inferior (comparación doble) 67 Departamento de Informática - Carmen Soler
  68. 68. 13. Subconsultas  Sacar el apellido de los empleados que cobren menos que el salario medio de todos los empleados: SELECT LAST_NAME FROM EMPLOYEES WHERE SALARY < (SELECT AVG(SALARY) FROM EMPLOYEES)  Sacar el apellido de los empleados que cobren menos que el salario medio dentro de su mismo departamento: SELECT LAST_NAME FROM EMPLOYEES Q WHERE SALARY < (SELECT AVG(SALARY) FROM EMPLOYEES S WHERE S.DEPARTMENT_ID = Q.DEPARTMENT_ID) 68 Departamento de Informática - Carmen Soler
  69. 69. 13. Subconsultas  Sacar el apellido del empleado que más cobra de la empresa: SELECT LAST_NAME FROM EMPLOYEES WHERE SALARY = (SELECT MAX(SALARY) FROM EMPLOYEES)  Sacar el apellido de los empleados que sean jefe de algún otro empleado: SELECT LAST_NAME FROM EMPLOYEES WHERE EMPLOYEE_ID IN (SELECT MANAGER_ID FROM EMPLOYEES) 69 Departamento de Informática - Carmen Soler
  70. 70. 14. Combinación de tablas  Para consultas que necesiten varias tablas.  Reglas a tener en cuenta:  Es posible hacer la consulta de tantas tablas como queramos  Desde SELECT podemos referirnos a columnas de cualquier tabla  Si hay columnas de diferentes tablas con el mismo nombre, las distinguiremos así: NombreTabla.NombreColumna  La forma de combinar las tablas se especifica en WHERE. Si no se indica nada, se hará un producto cartesiano 70 Departamento de Informática - Carmen Soler
  71. 71. 14. Combinación de tablas  Ejemplos SELECT LAST_NAME, JOB_ID, EMPLOYEE_ID, DEPARTMENT_NAME, LOCATION_ID FROM EMPLOYEES E, DEPARTMENTS D WHERE E.DEPARTMENT_ID = D.DEPTARTMENT_ID SELECT LAST_NAME, JOB_ID, EMPLOYEE_ID, DEPARTMENT_NAME, LOCATION_ID FROM EMPLOYEES E, DEPARTMENTS D 71 Departamento de Informática - Carmen Soler
  72. 72. 14. Combinación de tablas  Ejemplo join 72 Departamento de Informática - Carmen Soler
  73. 73. 14. Combinación de tablas  Para hacer joins, tenemos 2 formas:  Poner todas las condiciones en el WHERE como acabamos de ver.  Utilizar un INNER JOIN.  A efectos de resultados, el INNER JOIN es exactamente lo mismo.  Lo que cambia es el nivel de eficiencia. Si los campos de unión de tablas tienen definidos índices, el INNER JOIN es capaz de aprovechar estos índices para hacer la consulta más rápidamente. 73 Departamento de Informática - Carmen Soler
  74. 74. 14. Combinación de tablas  Explicamos brevemente cómo crear un índice: (1)CREATE INDEX I_DEPT_NAME ON DEPARTMENTS(DEPARTMENT_NAME) (2)CREATE UNIQUE INDEX UI_DEPARTMENT_NAME ON DEPARTMENTS(DEPARTMENT_NAME) (3)DROP INDEX I_DEPT_NAME  El caso (1), permite que en esa columna haya repetidos  El caso (2) no permite repetidos, podría usarse como índice de una clave primaria  El caso (3) es para eliminar un índice.  Si el índice se está usando junto con una PK, primero habrá que eliminar la PK y luego el índice. 74 Departamento de Informática - Carmen Soler
  75. 75. 14. Combinación de tablas  Inner Join  Poniendo condiciones en el WHERE SELECT tCoches.matricula, tMarcas.marca, tCoches.modelo, tCoches.color, tCoches.numero_kilometros, tCoches.num_plazas FROM tCoches, tMarcas WHERE tCoches.marca = tMarcas.codigo  Utilizando INNER JOIN SELECT tCoches.matricula, tMarcas.marca, tCoches.modelo, tCoches.color, tCoches.numero_kilometros, tCoches.num_plazas FROM tCoches INNER JOIN tMarcas ON tCoches.marca = tMarcas.codigo 75 Departamento de Informática - Carmen Soler
  76. 76. 14. Combinación de tablas  En la diapo 42, vemos que, en el listado de resultados que aparecerá sólo veremos aquellas marcas que tengan asignadas algún coche. Las marcas 2, 4 y 5 no aparecerán en el listado.  Si quiero ver cada coche y su marca y también quiero que aparezcan en el listado las marcas que no tienen coche, con lo que sabemos hasta ahora no es posible hacerlo.  Una posible solución que veremos ahora será el left y el right join. 76 Departamento de Informática - Carmen Soler
  77. 77. 14. Combinación de tablas  Left Join SELECT tCoches.matricula, tMarcas.marca, tCoches.modelo, tCoches.color, tCoches.numero_kilometros, tCoches.num_plazas FROM tCoches LEFT JOIN tMarcas ON tCoches.marca = tMarcas.codigo 77 Departamento de Informática - Carmen Soler
  78. 78. 14. Combinación de tablas  Right Join SELECT tCoches.matricula, tMarcas.marca, tCoches.modelo, tCoches.color, tCoches.numero_kilometros, tCoches.num_plazas FROM tCoches RIGHT JOIN tMarcas ON tCoches.marca = tMarcas.codigo 78 Departamento de Informática - Carmen Soler
  79. 79. 14. Combinación de tablas  Sobre la base de datos del ejercicio 4, haz estas consultas: 1. Obtén un listado en el que aparezca en nombre y ciudad del comercio y el nombre y versión de los programas que ha distribuido. Si un comercio no ha distribuido ningún programa también tiene que aparecer. 2. Sacar un listado con el nombre de los clientes y los medios que han utilizado para registrar programas. Si un cliente no ha hecho nunca un registro también tiene que aparecer. Que no aparezcan repetidos. 3. Obtén una lista de los programas que ha desarrollado cada fabricante. Si un fabricante no ha desarrollado ningún programa también tiene que aparecer. 4. Obtén una lista de todos los programas que no se hayan registrado. 79 Departamento de Informática - Carmen Soler
  80. 80. UD2.4. Varios 1. UNION, INTERSECT 2. Crear una tabla a partir de una consulta 3. Creación y uso de vistas 4. Inserción utilizando select 5. Actualización utilizando select 6. Borrado utilizando select 80 Departamento de Informática - Carmen Soler
  81. 81. 1. Union, intersect  Ejemplo de UNION  Tenemos dos tablas: ALUMNOS y NUEVOS que tienen la misma estructura y queremos juntarlas: SELECT NOMBRE FROM ALUMNOS UNION SELECT NOMBRE FROM NUEVOS;  El UNION combina el resultado de las dos consultas. Si hay filas duplicadas, las reduce a una. UNION ALL no compacta, mantiene todos los resultados aunque hayan repetidos. SELECT NOMBRE FROM ALUMNOS UNION ALL SELECT NOMBRE FROM NUEVOS; 81 Departamento de Informática - Carmen Soler
  82. 82. 1. Union, intersect  Ejemplo de INTERSECT  Tenemos dos tablas: ALUMNOS y ANTIGUOS que tienen la misma estructura y queremos ver las tuplas comunes: SELECT NOMBRE FROM ALUMNOS INTERSECT SELECT NOMBRE FROM ANTIGUOS;  El INTERSECT es equivalente a esto: SELECT NOMBRE FROM ALUMNOS WHERE NOMBRE IN (SELECT NOMBRE FROM ANTIGUOS); 82 Departamento de Informática - Carmen Soler
  83. 83. 2. Crear una tabla a partir de una consulta  Ejemplos CREATE TABLE EJEMPLO_COPY AS SELECT * FROM EJEMPLO; CREATE TABLE EJEMPLO_COPY(COL1, COL2, COL3, COL4) AS SELECT * FROM EJEMPLO; CREATE TABLE EMPLEYDEPART AS SELECT E.APELLIDO, D.NOMBRE FROM EMPLE E, DEPART D WHERE E.DEPT_NO=D.DEPT_NO 83 Departamento de Informática - Carmen Soler
  84. 84. 3. Creación y uso de vistas  Para obtener datos, a veces hay que hacer consultas complejas:  Podemos crear vistas que contengan el resultado de esta consulta.  Así en lugar de hacer la consulta compleja, siempre tenemos el resultado en esa vista.  La vista es una tabla lógica, no tiene información en sí misma, sino que depende de lo que contienen otras tablas (tablas base)  A las vistas se accede igual que lo haríamos a una tabla. 84 Departamento de Informática - Carmen Soler
  85. 85. 3. Creación y uso de vistas  Ejemplos  Mostrar apellidos y salario de los empleados del departamento 30: CREATE VIEW DEP30 AS SELECT APELLIDO,SALARIO FROM EMPLE WHERE DEPT_NO=30;  También puedo seleccionar las columnas que se mostrarán y cambiar su nombre: CREATE VIEW DEP30 (APE, OFI, SAL) AS SELECT APELLIDO, OFICIO, SALARIO FROM EMPLE WHERE DEPT_NO=30 85 Departamento de Informática - Carmen Soler
  86. 86. 3. Creación y uso de vistas  Si borro la tabla de la que depende la vista, cuando consultemos la vista, se lanzará un error, pero la vista continuará existiendo  Para eliminar una vista: DROP VIEW DEP30; 86 Departamento de Informática - Carmen Soler
  87. 87. 3. Creación y uso de vistas  Actualización/borrado de filas a través de una vista:  Para poder hacerlo, la vista se ha de crear: Con las filas de una sola tabla Sin usar GROUP BY ni DISTINCT Sin utilizar funciones SQL  Insertar filas a través de una vista:  Se han de tener en cuenta las restricciones anteriores y además: TODAS las columnas obligatorias de la tabla deben estar incluidas en la vista. Sino será como si estuviéramos insertando un valor NULL para esa columna y dará error. 87 Departamento de Informática - Carmen Soler
  88. 88. 4. Inserción utilizando Select  Hasta ahora podíamos insertar una tupla cada vez.  Combinándolo con un select, podemos añadir tantas filas como devuelva la consulta:  Ejemplo: INSERT INTO EMPLE30(EMP_NO, APELLIDO, OFICIO, SALARIO, COMISION, DEPT_NO) ( SELECT EMP_NO, APELLIDO, OFICIO, SALARIO, COMISION, DEPT_NO FROM EMPLE WHERE DEPT_NO = 30); 88 Departamento de Informática - Carmen Soler
  89. 89. 5. Actualización utilizando Select  Ejemplo: UPDATE CENTROS SET (DIRECCION, NUMPLAZAS) = (SELECT DIRECCION, NUMPLAZAS FROM CENTROS WHERE COD_CENTRO=50) WHERE COD_CENTRO=10; 89 Departamento de Informática - Carmen Soler
  90. 90. 6. Borrado utilizando Select  Ejemplo: DELETE FROM DEPART WHERE DEPT_NO IN (SELECT DEPT_NO FROM EMPLE GROUP BY DEPT_NO HAVING COUNT(*)<4); 90 Departamento de Informática - Carmen Soler

×