Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

C06 Practicas SQL

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 7

Para realizar los ejemplos deberá crear un usuario donde almacenar los datos dentro de su

base de datos Oracle, por ejemplo el usuario aplicaciones donde deberá: Conectarse a la
base de datos con un usuario con suficientes privilegios de DBA para crear su usuario:
create user aplicacion identified by aplicacion;
grant connect to aplicacion;
grant dba to aplicacion;

Luego deberá de conectarse con su nuevo usuario crear acá sus tablas para correr los
ejemplos:

REM ******** Datos para ejemplos de Ejercicios: *************

DROP TABLE DEPART cascade constraints;

CREATE TABLE DEPART (


DEPT_NO NUMBER(2) NOT NULL,
DNOMBRE VARCHAR2(14),
LOC VARCHAR2(14) );

INSERT INTO DEPART VALUES (10,'CONTABILIDAD','SEVILLA');


INSERT INTO DEPART VALUES (20,'INVESTIGACIÓON','MADRID');
INSERT INTO DEPART VALUES (30,'VENTAS','BARCELONA');
INSERT INTO DEPART VALUES (40,'PRODUCCIÓN','BILBAO');
COMMIT;

REM ******** TABLA EMPLE: *************

ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY';

DROP TABLE EMPLE cascade constraints;

CREATE TABLE EMPLE (


EMP_NO NUMBER(4) NOT NULL,
APELLIDO VARCHAR2(10) ,
OFICIO VARCHAR2(10) ,
DIR NUMBER(4) ,
FECHA_ALT DATE ,
SALARIO NUMBER(10),
COMISION NUMBER(10),
DEPT_NO NUMBER(2) NOT NULL) ;

INSERT INTO EMPLE VALUES (7369,'SÁNCHEZ','EMPLEADO',7902,'17/12/1980',


104000,NULL,20);
INSERT INTO EMPLE VALUES (7499,'ARROYO','VENDEDOR',7698,'20/02/1980',
208000,39000,30);
INSERT INTO EMPLE VALUES (7521,'SALA','VENDEDOR',7698,'22/02/1981',
162500,65000,30);
INSERT INTO EMPLE VALUES (7566,'JIMÉNEZ','DIRECTOR',7839,'02/04/1981',
386750,NULL,20);
INSERT INTO EMPLE VALUES (7654,'MARTÍN','VENDEDOR',7698,'29/09/1981',
162500,182000,30);
INSERT INTO EMPLE VALUES (7698,'NEGRO','DIRECTOR',7839,'01/05/1981',
370500,NULL,30);
INSERT INTO EMPLE VALUES (7782,'CEREZO','DIRECTOR',7839,'09/06/1981',
318500,NULL,10);
INSERT INTO EMPLE VALUES (7788,'GIL','ANALISTA',7566,'09/11/1981',
390000,NULL,20);
INSERT INTO EMPLE VALUES (7839,'REY','PRESIDENTE',NULL,'17/11/1981',
650000,NULL,10);
INSERT INTO EMPLE VALUES (7844,'TOVAR','VENDEDOR',7698,'08/09/1981',
195000,0,30);
INSERT INTO EMPLE VALUES (7876,'ALONSO','EMPLEADO',7788,'23/09/1981',
143000,NULL,20);
INSERT INTO EMPLE VALUES (7900,'JIMENO','EMPLEADO',7698,'03/12/1981',
123500,NULL,30);
INSERT INTO EMPLE VALUES (7902,'FERNÁNDEZ','ANALISTA',7566,'03/12/1981',
390000,NULL,20);
INSERT INTO EMPLE VALUES (7934,'MUÑOZ','EMPLEADO',7782,'23/01/1982',
169000,NULL,10);

COMMIT;

REM ******** TABLA NOTAS_ALUMNOS: ***********

Drop table notas_alumnos cascade constraints;

create table notas_alumnos


(
NOMBRE_ALUMNO VARCHAR2(25) NOT NULL ,
nota1 number(2),
nota2 number(2),
nota3 number(2)
);

insert into NOTAS_ALUMNOS VALUES ('Alcalde García, M. Luisa',5,5,5);


insert into NOTAS_ALUMNOS VALUES ('Benito Martín, Luis',7,6,8);
insert into NOTAS_ALUMNOS VALUES ('Casas Martínez, Manuel',7,5,5);
insert into NOTAS_ALUMNOS VALUES ('Corregidor Sánchez, Ana',6,9,8);
insert into NOTAS_ALUMNOS VALUES ('Díaz Sánchez, María',NULL,NULL,7);
COMMIT;

REM ******** TABLA LIBRERIA: *************


Drop table LIBRERIA cascade constraints;

create table LIBRERIA


(TEMA CHAR(15) NOT NULL ,
ESTANTE CHAR(1),
EJEMPLARES NUMBER(2)
);

INSERT INTO LIBRERIA VALUES ('Informática', 'A',15);


INSERT INTO LIBRERIA VALUES ('Economía', 'A',10);
INSERT INTO LIBRERIA VALUES ('Deportes', 'B',8);
INSERT INTO LIBRERIA VALUES ('Filosofía', 'C',7);
INSERT INTO LIBRERIA VALUES ('Dibujo', 'C',10);
INSERT INTO LIBRERIA VALUES ('Medicina', 'C',16);
INSERT INTO LIBRERIA VALUES ('Biología', 'A',11);
INSERT INTO LIBRERIA VALUES ('Geología', 'D',7);
INSERT INTO LIBRERIA VALUES ('Sociedad', 'D',9);
INSERT INTO LIBRERIA VALUES ('Labores', 'B',20);
INSERT INTO LIBRERIA VALUES ('Jardinería', 'E',6);
COMMIT;

REM ******** TABLAS ALUMNOS, ASIGNATURAS, NOTAS: ***********


DROP TABLE ALUMNOS cascade constraints;

CREATE TABLE ALUMNOS


(
DNI VARCHAR2(10) NOT NULL,
APENOM VARCHAR2(30),
DIREC VARCHAR2(30),
POBLA VARCHAR2(15),
TELEF VARCHAR2(10)
);

DROP TABLE ASIGNATURAS cascade constraints;

CREATE TABLE ASIGNATURAS


(
COD NUMBER(2) NOT NULL,
NOMBRE VARCHAR2(25)
);

DROP TABLE NOTAS cascade constraints;

CREATE TABLE NOTAS


(
DNI VARCHAR2(10) NOT NULL,
COD NUMBER(2) NOT NULL,
NOTA NUMBER(2)
);

INSERT INTO ASIGNATURAS VALUES (1,'Prog. Leng. Estr.');


INSERT INTO ASIGNATURAS VALUES (2,'Sist. Informáticos');
INSERT INTO ASIGNATURAS VALUES (3,'Análisis');
INSERT INTO ASIGNATURAS VALUES (4,'FOL');
INSERT INTO ASIGNATURAS VALUES (5,'RET');
INSERT INTO ASIGNATURAS VALUES (6,'Entornos Gráficos');
INSERT INTO ASIGNATURAS VALUES (7,'Aplic. Entornos 4ªGen');

INSERT INTO ALUMNOS VALUES


('12344345','Alcalde García, Elena', 'C/Las Matas, 24','Madrid','917766545');

INSERT INTO ALUMNOS VALUES


('4448242','Cerrato Vela, Luis', 'C/Mina 28 - 3A', 'Madrid','916566545');

INSERT INTO ALUMNOS VALUES


('56882942','Díaz Fernández, María', 'C/Luis Vives 25', 'Móstoles','915577545');

INSERT INTO NOTAS VALUES('12344345', 1,6);


INSERT INTO NOTAS VALUES('12344345', 2,5);
INSERT INTO NOTAS VALUES('12344345', 3,6);

INSERT INTO NOTAS VALUES('4448242', 4,6);


INSERT INTO NOTAS VALUES('4448242', 5,8);
INSERT INTO NOTAS VALUES('4448242', 6,4);
INSERT INTO NOTAS VALUES('4448242', 7,5);

INSERT INTO NOTAS VALUES('56882942', 4,8);


INSERT INTO NOTAS VALUES('56882942', 5,7);
INSERT INTO NOTAS VALUES('56882942', 6,8);
INSERT INTO NOTAS VALUES('56882942', 7,9);

COMMIT;
REM ******** FIN ***********************

Ejemplo de aplicación:

Consulta de los empleados cuyo oficio sea ‘ANALISTA’ ordenado por Numero de
empleado (emp_no);
Select * from emple where oficio = ‘ANALISTA’ order by emp_no;

Seleccionar de la tabla EMPLE aquellas filas del departamento 10 y cuyo oficio sea
‘ANALISTA’. La consulta se ha de ordenar de modo descendente por APELLIDO y
también de manera descendente por número de empleado (emp_no)
Select * from emple where dept_no=10 and oficio=’ANALISTA’ order by apellido
desc, emp_no desc;

Usando un alias para mostrar datos:


Select dnombre as “Departamento”, dept_no as “Número Departamento” from
depart;

Operadores Aritméticos:
Se trata de obtener la nota media de cada alumno, visualizar por cada uno de ellos su
nombre y su nota media:
Select nombre_alumno as Alumno, (nota1+nota2+nota3)/3 as Promedio from
notas_alumnos;

A partir de notas_alumnos, deseamos 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;

Comparación de cadena
A partir de la tabla emple, obtener aquellos apellidos que empiecen por una ‘J’:
Select apellido from emple where apellido like ‘J%’;

Obtener aquellos apellidos que tengan una ‘R’ en la segunda posición:


Select apellido from emple where apellido like ‘_R%’;

Obtener aquellos apellidos que empiecen por ‘A’ y tengan una ‘O’ en su interior:
Select apellido from emple where apellido like ‘A%O%’;

Consultamos las filas de la tabla librería cuyo tema sea ‘Labores’; usamos el operador =
Select * from libreria where tema=’Labores’;

Realizar la consulta anterior usando el operador LIKE:


Select * from libreria where tema like ’Labores%’;

Consultar los apellidos de los empleados cuya comision es nula:


Select apellido from emple where comision IS NULL;
Y los que no son nulos
Select apellido from emple where comision IS NOT NULL;

Conjuntos de valores
Consultar los apellidos de la tabla emple cuyo numero de departamento sea 10 o 30
Select apellido from emple where dept_no in(10,30);

Consultar los apellidos de la tabla emple cuyo numero de departamento no sea 10 o 30


Select apellido from emple where dept_no not in(10,30);

Consultar los apellidos de la table emple cuyo oficio no sea vendedor, analista o
empleado:
Select apellido from emple where where oficio in(‘ANALISTA’, ‘VENDEDOR’,
‘EMPLEADO’);

A partir de la tabla emple obtener el apellido y el salario de los empleados cuyo salario
este comprendido entre 150000 y 200000
Select apellido, salario from emple where salario between 150000 and 200000;

A partir de la tabla emple, oener el apellido, salario y dept_no de los empleados cuyo
salario sea mayor de 200000 en los departamentos 20 y 30
Select apellido, salario, dept_no from emple where salario>200000 and
(dept_no=10 or dept_no=20);
Que pasa si no usa parentesis (pruebelo)
Tambien se puede hacer recurriendo al operador in
Select apellido, salario, dept_no from emple where salario>200000 and
dept_no in(10,20);

Subconsultas
Con la table emple, obtener el apellido de los empleados con el mismo oficio que ‘Gil’: se
descompone en dos consultas: primero
Select oficio from emple where apellido =’Gil’;
Luego visualizamos el apellido de lso empleados con el mismo oficio que ‘Gil’:
Select apellido from emple where oficio=’ANALISTA’;
Ahora resumalas uniéndolas:
Select apellido from emple where oficio=(select oficio from emple where apellido
=’Gil’);

Cuando la subconsulta devuelve más de una fila no se puede recurrir al operador =. Todos
los operadores lógicos para valores simples se pueden usar con subconsultas, siempre que
lo que devuelvan sean valores simples (como las anteriores): ejemplo:
Select apellido from emple where oficio in
(select oficio from emple where dept_no=20);

Consultar los apellidos y oficios de todos los empleados del departamento 20 cuyo trabajo
sea identico al de cualquiera de los empleados del departamento ‘VENTAS’:
Select apellido, oficio, from emple where dept_no=20 and oficio in (
Select oficio from emple where dept_no= (
Select dept_no from depart where dnombre=’VENTAS’));

Combinación de tablas:
Realizar una consulta para obtener el nombre de alumno, su asignatura y su nota:
Select apenom, nombre, nota from alumnos, asignaturas, notas
Where alumnos.dni=notas.dni and notas.cod=asignaturas.cod;

Obtener los nombres de alumnos matriculados en ‘FOL’:


Select apenom from alumnos, asignaturas, notas where alumnos.dni=notas.dni and
Notas.cod=asignaturas.cod and nombre=’FOL’;

Tarea:
Tablas emple y depart:
1. Seleccionar de la tabla emple aquellas filas cuyo apellido empiece por “A” y el
oficio tenga una “E” en cualquier posición.
2. Seleccionar el apellido, el oficio y la localidad de los departamentos donde trabajan
los ANALISTAS.
3. Mostrar los empleados (nombre, oficio, salario y fecha de alta) que desempeñen el
mismo oficio que “JIMENEZ” o que tengan un salario mayor o igual que
“FERNANDEZ”.
4. Mostrar en pantalla el nombre, oficio y salario de los empleados del departamento
de “FERNANDEZ” que tenga su mismo salario.
5. Presentar los nombres y oficios de los empleados que tienen el mismo trabajo que
“JIMENEZ”.

Tabla Libreria
6. Visualizar el tema, estante y ejemplares de las filas de librería con ejemplares
comprendidos ete 8 y 15.
7. Visualizar las columnas tema, estante y ejemplares de las filas cuyo estante no este
comprendido entre la “B” y la “D”.
8. Visualizar con una sola orden select todos los temas de librería cuyo número de
ejemplares sea inferior a los que hay en “Medicina”.
9. Visualizar los temas de librería cuyo número de ejemplares no este entre 15 y 20,
ambos incluidos.

Tablas alumnos, asignaturas y notas


10. Visualizar todas las asignaturas que contengan tres letras “o” en su interior y
tengan alumnos matriculados de “Madrid”.
11. Visualizar los nombres de alumnos que tengan una nota ente 7 y 8 en la asignatura
de “FOL”.
12. Visualizar los nombres de asignaturas que no tengan suspensos.
13. Visualizar los nombres de alumnos de “Madrid” que tengan alguna asignatura
suspendida.
14. Mostrar los nombres de alumnos que tengan la misma nota que tiene “Díaz
Fernández, María” en “FOL” en alguna asignatura.

También podría gustarte