• Save
SQL: DDL, DML y SQL
Upcoming SlideShare
Loading in...5
×
 

SQL: DDL, DML y SQL

on

  • 12,588 views

Resumen de las instrucciones básicas de DDL, DML y SQL.

Resumen de las instrucciones básicas de DDL, DML y SQL.
En SQL se ven joins, subqueris y funciones de grupo.

Statistics

Views

Total Views
12,588
Views on SlideShare
12,494
Embed Views
94

Actions

Likes
16
Downloads
0
Comments
0

9 Embeds 94

https://es.coursesites.com 42
http://127.0.0.1 20
http://tecnologias.inpahu.edu.co 12
https://www.coursesites.com 9
http://frexlasticenlaeducacion.blogspot.com 4
http://frexlasticenlaeducacion.blogspot.mx 4
http://www.docshut.com 1
http://frexlasticenlaeducacion.blogspot.pt 1
http://frexlasticenlaeducacion.blogspot.com.es 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

SQL: DDL, DML y SQL SQL: DDL, DML y SQL Presentation Transcript

  • UF2 · SQLASIX – Gestión de bases de datosDAM – Bases de datos 1 Departamento de Informática - Carmen Soler
  • UD2.1. DDL(Data Description Language)1. Creación de una tabla 1. Integridad de datos 2. Restricciones en CREATE TABLE2. Supresión de tablas3. Modificación de tablas4. Secuencias 2 Departamento de Informática - Carmen Soler
  • 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
  • 1. Creación de una tablaCREATE 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • UD2.2. DML(Data Manipulation Language)1. Inserción de datos: INSERT2. Modificación de datos: UPDATE3. Borrado de filas: DELETE4. Restricciones 23 Departamento de Informática - Carmen Soler
  • 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
  • 1. Inserción de datos: INSERTCREATE 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
  • 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
  • 2. Modificación de datos: UPDATECREATE 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
  • 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
  • 3. Borrado de datos: DELETECREATE 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
  • 4. Restricciones 30 Departamento de Informática - Carmen Soler
  • 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
  • UD2.3. Consultas1. Estructura general de una consulta 8. Valor NULL2. DESC / DESCRIBE 9. ORDER BY3. Tipos de datos. Características. 10. Tabla DUAL4. DISTINCT 11. Funciones simples5. AS (alias) 1. De VARCHAR 2. De NUMBER6. 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 tablas7. Operaciones aritméticas 32 Departamento de Informática - Carmen Soler
  • 1. Estructura general de una consultaSELECT [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
  • 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
  • 2. DESC / DESCRIBE Sirve para consultar la estructura de una tabla. DESCRIBE HR.REGIONS 35 Departamento de Informática - Carmen Soler
  • 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
  • 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
  • 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
  • 5. AS (alias) SELECT FIRST_NAME as “Nombre”, LAST_NAME Apellido, SALARY “Salario actual” FROM EMPLOYEES 39 Departamento de Informática - Carmen Soler
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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 "Nombrecompleto",LENGTH(first_name|| || last_name) as "Longitud",FROM EMPLOYEESWHERE (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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 14. Combinación de tablas Ejemplo join 72 Departamento de Informática - Carmen Soler
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • UD2.4. Varios1. UNION, INTERSECT2. Crear una tabla a partir de una consulta3. Creación y uso de vistas4. Inserción utilizando select5. Actualización utilizando select6. Borrado utilizando select 80 Departamento de Informática - Carmen Soler
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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