jueves, 16 de mayo de 2013

Consultas Sql

CREAR TABLAS

CREATE TABLE prueba( codigo number (5),constraint prueba_pk primary (codigo) ); 

CREATE TABLE prueba2 (codigo number (5), nombre varchar (40), fk_prueba number (5),constraint prueba2_pk primary (codigo),
constraint prueba2_prueba_fk foreign key (fk_prueba) references prueba on delete restrict ); 


CREATE TABLE prueba3 (codigo number (5),edad number (5), nombre varchar (40), fk_prueba number (5),constraint prueba2_pk primary (codigo)); 
alter table prueba3 add descripcion varchar (50) not null; 
alter table prueba3 add constraint prueba3_foreign foreign key (fk_prueba) references prueba2 ;
alter table prueba3 add unicidad constraint unique (codigo, nombre); 
alter table prueba3 add comprobacion check (length (descripcion)>5 and edad>17); 
alter table prueba3 drop column edad;
alter table prueba3 modify descripcion  number (100);
insert into prueba3 values (346,34,'Jorge', 'hm')
insert into prueba3 (codigo, nombre) values (342,34,'Jorge); 
insert into prueba3 (codigo, nombre) values (341,34,(NULL));
insert into prueba3 (codigo, nombre) select campos form tabla; 






-- LISTAR TODOS LOS EMPLEADOS
SELECT * FROM employees e ;
--PERSONAS CUYO PRIMER NOMBRE ES:
SELECT * FROM employees e where e.first_name Like 'Ellen';
SELECT * FROM employees e where e.first_name = 'Bruce';
--PERSONAS CUYO NOMBRE EMPIEZA EN "E"
SELECT * FROM employees e where e.first_name like'E%';
--PERSONAS NOMBRE COMPUESTO
SELECT * FROM employees e where e.first_name like'% %';
--NOMBRES QUE EMPIEZAN O TERMINAN POR A
SELECT * FROM employees e where e.first_name like'A%' OR e.first_name like'%a' ;
SELECT * FROM employees e where upper( e.first_name) like'A%' OR  upper(e.first_name) like'%A';
--Palabras que tienen E S E en el orden
SELECT * FROM employees e where upper( e.first_name) like '%E%S%E%';
--Correos validos
SELECT * FROM employees e where upper( e.mail) like '__%@__%.__%';
--Empieza por S (comodin para un caracter ) y despues van 5 caracteres
SELECT * FROM employees e where upper( e.first_name) like 'S_____';
--EMPLEADOS QUE SE LLAMAN STEVEN
SELECT * FROM employees e where upper( e.first_name) like 'STEVEN%';
--Empleados que ganen mas de 2000 contratados en el 98 que tengan en su nombre minimo 6 caracteres
--y que su nombre y apellido tenga la misma cantidad de caracteres ordenanar el resultado por nombre y apellido
SELECT * FROM employees e  where e.Hire_Date like '%98' and e.Salary >2000 and e.first_Name like '______%'
--ODENAR POR NOMBRE Y APELLIDO
and LENGTH (e.first_Name) = LENGTH (e.last_name) order by e.first_name, e.last_name;
--Listar nombre de empleados y año en el que fueron contratados
SELECT  first_name,  to_char( Hire_Date , 'YYYY') FROM employees e;
SELECT  first_name,  to_char( Hire_Date , 'MM') FROM employees e;
--Nombre del Mes
SELECT  first_name,  to_char( Hire_Date , ' MONTH') FROM employees e;
--OPERADORES PRINCIPALES DE ALGEBRA RELACIONAL
--LISTAR LOS NOMBRES DE LOS EMPLEADOS DEL DEPARTAMENTO 50 QUE NO TIENEN TOCAYOS EN EL DEPARTAMENTO 70
--RESTA
SELECT  first_name  FROM employees e Where e.DEPARTMENT_ID=60 minus
SELECT  first_name  FROM employees e Where e.DEPARTMENT_ID=50;
--UNION
SELECT  first_name  FROM employees e Where e.DEPARTMENT_ID=10 union
SELECT  first_name  FROM employees e Where e.DEPARTMENT_ID=50;
--UNION CON REPETIDOS
SELECT  first_name  FROM employees e Where e.DEPARTMENT_ID=10 union ALL
SELECT  first_name  FROM employees e Where e.DEPARTMENT_ID=50;
--INTERSECCION
SELECT  first_name  FROM employees e Where e.DEPARTMENT_ID=10  intersect
SELECT  first_name  FROM employees e Where e.DEPARTMENT_ID=50;
--Listar codigo de empleados que no han cambiado de trabajo
--- quienes esten en jobHistory
SELECT EMPLOYEE_ID  FROM employees MINUS  SELECT  EMPLOYEE_ID  FROM Job_History;
---empleados que ganan mas de 4000 y han cambiado de trabajo
SELECT EMPLOYEE_ID  FROM employees where salary>4000 intersect SELECT  EMPLOYEE_ID  FROM Job_History ;
--JOIN
SELECT r.region_name, r.region_id,c.region_id,  c.country_name FROM regions r, countries c;
--JOIN CON CONDICION
SELECT r.region_name, r.region_id,c.region_id,  c.country_name FROM regions r, countries c WHERE c.region_id=r.region_id;
--INNER JOIN
SELECT r.region_name, r.region_id,c.region_id,  c.country_name  FROM  regions r  Join countries c on r.region_id=c.region_id;
--JOIN ENTRE VARIAS TABLAS
SELECT r.region_name, r.region_id,c.region_id,  c.country_name  , l.city FROM  regions r  Join countries c on r.region_id=c.region_id
Join Locations  l on l.country_id =c.country_id;


JOIN



select empleados e join departamento d on e.depto=d.id where (upper(nombre) like 'A%' or     u) and upper(e.nombre )like '%A' or ...c
and lower(d.nombre)='ventas'


esta completando  los datos  a la foranea
empleado e join dpto d  on e.dpto_id=id.dpto_id


select from empleado e1 join empleado e2 on  e1.manager_id=e2.id

 en e2 están todos los datos de la foránea
               id, nombre, jefe          id, nombre, jefe
              10, jorge , 1                 1, juan, 2


 
                                                                                                                                                                                                                                                  


producto p1 join producto p2 on pi.cod=p2.sprod


-- listar nombre del empleado  y del jefe del jefe
select emp.first_name, jefe.first_name from employees  emp join employees jefe on  jefe.employee_id=emp.manager_id
join employees jefeP on  jefep.employee_id=jefe.manager_id;


--natural Join
select * from countries natural join regions;
select * from employees natural join departments ;

select * from  departments d  left join employees e on d.department_id=e.department_id;

---a traves  emplados del departamento  hay departamentos sin empleados
select  d.*, e.first_name from  departments d  left join employees e on d.department_id=e.department_id;
--empleados   hay uno que no  pertenece a ningun departamento
select  d.*, e.first_name from   employees e left join departments d on d.department_id=e.department_id;
select  d.*, e.first_name from  departments d  join employees e on d.department_id=e.department_id;

1 comentario:

  1. no tenes comentarios porque no explicas nimierda bueno si sabias pero bueno

    ResponderEliminar