1. Obtener todos los datos de todos los empleados.
SELECT * FROM emp;
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-----------+------+------------+---------+---------+--------
7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | | 30
7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30
7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30
7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30
7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30
7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | | 30
7839 | KING | PRESIDENT | | 1981-11-17 | 5000.00 | | 10
7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | | 20
7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | | 20
7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | | 20
7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | | 10
7788 | SCOTT | ANALYST | 7566 | 1982-12-09 | 3000.00 | | 20
7876 | ADAMS | CLERK | 7788 | 1983-01-12 | 1100.00 | | 20
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | | 10
(14 rows)
2. Obtener todos los datos de todos los departamentos.
SELECT * FROM dept;
deptno | dname | loc
--------+------------+----------
10 | ACCOUNTING | NEW YORK
20 | RESEARCH | DALLAS
30 | SALES | CHICAGO
40 | OPERATIONS | BOSTON
3. Obtener todos los datos de los administrativos (su trabajo es, en inglés, 'CLERK').
SELECT *FROM emp WHERE job='CLERK';
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-------+------+------------+---------+------+--------
7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | | 30
7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | | 20
7876 | ADAMS | CLERK | 7788 | 1983-01-12 | 1100.00 | | 20
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | | 10
(4 rows)
4. Idem, pero ordenado por el nombre.
SELECT *FROM emp WHERE job='CLERK' ORDER BY ename;
empno | ename | job | mgr | hiredate | sal | comm | deptno
-------+--------+-------+------+------------+---------+------+--------
7876 | ADAMS | CLERK | 7788 | 1983-01-12 | 1100.00 | | 20
7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | | 30
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | | 10
7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | | 20
(4 rows)
5. Obten el mismo resultado de la pregunta anterior, pero modifcando la sentencia SQL.
SELECT empno, ename, job, mgr, hiredate, sal, deptno FROM emp WHERE job='CLERK' ORDER BY ename;
empno | ename | job | mgr | hiredate | sal | deptno
-------+--------+-------+------+------------+---------+--------
7876 | ADAMS | CLERK | 7788 | 1983-01-12 | 1100.00 | 20
7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | 30
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | 10
7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | 20
(4 rows)
6. Obtén el número (código), nombre y salario de los empleados.
SELECT empno, ename, sal FROM emp;
empno | ename | sal
-------+--------+---------
7698 | BLAKE | 2850.00
7499 | ALLEN | 1600.00
7521 | WARD | 1250.00
7654 | MARTIN | 1250.00
7844 | TURNER | 1500.00
7900 | JAMES | 950.00
7839 | KING | 5000.00
7566 | JONES | 2975.00
7902 | FORD | 3000.00
7369 | SMITH | 800.00
7782 | CLARK | 2450.00
7788 | SCOTT | 3000.00
7876 | ADAMS | 1100.00
7934 | MILLER | 1300.00
(14 rows)
7. Lista los nombres de todos los departamentos.
SELECT dname FROM dept;
dname
------------
ACCOUNTING
RESEARCH
SALES
OPERATIONS
(4 rows)
8.Idem, pero ordenándolos por nombre.
SELECT dname FROM dept ORDER BY dname;
dname
------------
ACCOUNTING
OPERATIONS
RESEARCH
SALES
(4 rows)
9.Idem, pero ordenándolo por la ciudad (no se debe seleccionar la ciudad en el resultado).
SELECT dname FROM dept ORDER BY loc ;
dname
------------
OPERATIONS
SALES
RESEARCH
ACCOUNTING
(4 rows)
10.Idem, pero el resultado debe mostrarse ordenado por la ciudad en orden inverso.
SELECT dname FROM dept ORDER BY loc desc ;
dname
------------
ACCOUNTING
RESEARCH
SALES
OPERATIONS
(4 rows)
11. Obtener el nombre y empleo de todos los empleados, ordenado por salario.
SELECT ename, job FROM emp ORDER BY sal desc;
ename | job
--------+-----------
KING | PRESIDENT
SCOTT | ANALYST
FORD | ANALYST
JONES | MANAGER
BLAKE | MANAGER
CLARK | MANAGER
ALLEN | SALESMAN
TURNER | SALESMAN
MILLER | CLERK
WARD | SALESMAN
MARTIN | SALESMAN
ADAMS | CLERK
JAMES | CLERK
SMITH | CLERK
(14 rows)
12. Obtener el nombre y empleo de todos los empleados, ordenado primero por su trabajo y luego
por su salario.
SELECT ename, job FROM emp ORDER BY job,sal;
ename | job
--------+-----------
FORD | ANALYST
SCOTT | ANALYST
MILLER | CLERK
ADAMS | CLERK
JAMES | CLERK
SMITH | CLERK
JONES | MANAGER
BLAKE | MANAGER
CLARK | MANAGER
KING | PRESIDENT
ALLEN | SALESMAN
TURNER | SALESMAN
MARTIN | SALESMAN
WARD | SALESMAN
(14 rows)
13.Idem, pero ordenando inversamente por empleo y normalmente por salario.
SELECT ename, job FROM emp ORDER BY job desc, sal;
ename | job
--------+-----------
MARTIN | SALESMAN
WARD | SALESMAN
TURNER | SALESMAN
ALLEN | SALESMAN
KING | PRESIDENT
CLARK | MANAGER
BLAKE | MANAGER
JONES | MANAGER
SMITH | CLERK
JAMES | CLERK
ADAMS | CLERK
MILLER | CLERK
FORD | ANALYST
SCOTT | ANALYST
(14 rows)
14. Obten los salarios y las comisiones de los empleados del departamento 30.
SELECT sal, comm FROM emp WHERE deptno=30;
sal | comm
---------+---------
2850.00 |
1600.00 | 300.00
1250.00 | 500.00
1250.00 | 1400.00
1500.00 | 0.00
950.00 |
(6 rows)
15.Idem, pero ordenado por comisión.
SELECT sal, comm FROM emp WHERE deptno=30 ORDER BY comm ;
sal | comm
---------+---------
1500.00 | 0.00
1600.00 | 300.00
1250.00 | 500.00
1250.00 | 1400.00
2850.00 |
950.00 |
(6 rows)
16. (a) Obtén las comisiones de todos los empleados. (b) Obtén las comisiones de los empleados de
forma que no se repitan.
a. SELECT comm, ename FROM emp;
comm | ename
---------+--------
| BLAKE
300.00 | ALLEN
500.00 | WARD
1400.00 | MARTIN
0.00 | TURNER
| JAMES
| KING
| JONES
| FORD
| SMITH
| CLARK
| SCOTT
| ADAMS
| MILLER
(14 rows)
b. SELECT DISTINCT comm, ename FROM emp;
comm | ename
---------+--------
| JONES
| JAMES
500.00 | WARD
300.00 | ALLEN
| FORD
| SCOTT
1400.00 | MARTIN
| SMITH
| ADAMS
0.00 | TURNER
| BLAKE
| CLARK
| MILLER
| KING
(14 rows)
17. Obtén el nombre de empleado y su comisión SIN FILAS repetidas.
SELECT DISTINCT comm, ename FROM emp;
comm | ename
---------+--------
| JONES
| JAMES
500.00 | WARD
300.00 | ALLEN
| FORD
| SCOTT
1400.00 | MARTIN
| SMITH
| ADAMS
0.00 | TURNER
| BLAKE
| CLARK
| MILLER
| KING
(14 rows)
18. Obtén los nombres de los empleados y sus salarios, de forma que no se repitan las.
SELECT DISTINCT ename, sal FROM emp;
ename | sal
--------+---------
MILLER | 1300.00
FORD | 3000.00
SCOTT | 3000.00
WARD | 1250.00
ALLEN | 1600.00
JAMES | 950.00
TURNER | 1500.00
JONES | 2975.00
CLARK | 2450.00
MARTIN | 1250.00
KING | 5000.00
SMITH | 800.00
ADAMS | 1100.00
BLAKE | 2850.00
(14 rows)
19. Obtén las comisiones de los empleados y sus números de departamento, de forma que no se
repitan las filas.
SELECT DISTINCT ename, deptno, comm FROM emp;
ename | deptno | comm
--------+--------+---------
KING | 10 |
WARD | 30 | 500.00
TURNER | 30 | 0.00
SMITH | 20 |
CLARK | 10 |
MARTIN | 30 | 1400.00
ADAMS | 20 |
ALLEN | 30 | 300.00
JAMES | 30 |
MILLER | 10 |
BLAKE | 30 |
FORD | 20 |
SCOTT | 20 |
JONES | 20 |
(14 rows)
20. Obtén los nuevos salarios de los empleados del departamento 30, que resultaran de sumar a su
salario una graticación de 1000. Muestra también los nombres de los empleados.
SELECT ename, sal+1000 FROM emp WHERE deptno=30;
ename | ?column?
--------+----------
BLAKE | 3850.00
ALLEN | 2600.00
WARD | 2250.00
MARTIN | 2250.00
TURNER | 2500.00
JAMES | 1950.00
(6 rows)
21. Lo mismo que la anterior, pero mostrando también su salario original, y haz que la columna que
almacena el nuevo salario se denomine NUEVO SALARIO.
SELECT ename,sal+1000 nuevo_salario , sal FROM emp WHERE deptno=30;
ename | nuevo_salario | sal
--------+---------------+---------
BLAKE | 3850.00 | 2850.00
ALLEN | 2600.00 | 1600.00
WARD | 2250.00 | 1250.00
MARTIN | 2250.00 | 1250.00
TURNER | 2500.00 | 1500.00
JAMES | 1950.00 | 950.00
(6 rows)
22. Halla los empleados que tienen una comisión superior a la mitad de su salario.
SELECT ename, comm FROM emp WHERE comm>0.5*SAL;
ename | comm
--------+---------
MARTIN | 1400.00
(1 row)
23. Halla los empleados que no tienen comisión, o que la tengan menor o igual que el 25 % de su
salario.
SELECT ename, comm FROM emp WHERE comm<=0.25*sal;
ename | comm
--------+--------
ALLEN | 300.00
TURNER | 0.00
(2 rows)
24. Obtén una lista de nombres de empleados y sus salarios, de forma que en la salida aparezca en
todas las filas \Nombre:" y \Salario:" antes del respectivo campo. Hazlo de forma que selecciones
exactamente tres expresiones.
SELECT 'Nombre: '||ename nombre,'Salario: '|| sal salario,'Salario
total: '|| sal+comm salario_total FROM emp;
nombre |
salario | salario_total
----------------+------------------+------------------------
Nombre: BLAKE | Salario: 2850.00 |
Nombre: ALLEN | Salario: 1600.00 | Salario total: 1900.00
Nombre: WARD | Salario: 1250.00 | Salario total: 1750.00
Nombre: MARTIN | Salario: 1250.00
| Salario total: 2650.00
Nombre: TURNER | Salario: 1500.00
| Salario total: 1500.00
Nombre: JAMES | Salario: 950.00 |
Nombre: KING | Salario: 5000.00 |
Nombre: JONES | Salario: 2975.00 |
Nombre: FORD | Salario: 3000.00 |
Nombre: SMITH | Salario: 800.00 |
Nombre: CLARK | Salario: 2450.00 |
Nombre: SCOTT | Salario: 3000.00 |
Nombre: ADAMS | Salario: 1100.00 |
Nombre: MILLER | Salario: 1300.00 |
(14 rows)
25. Hallar el código, salario y comisión de los empleados cuyo código sea mayor que 7500.
SELECT mgr, sal, comm FROM emp WHERE empno>7500;
mgr | sal | comm
------+---------+---------
7839 | 2850.00 |
7698 | 1250.00 | 500.00
7698 | 1250.00 | 1400.00
7698 | 1500.00 | 0.00
7698 | 950.00 |
| 5000.00 |
7839 | 2975.00 |
7566 | 3000.00 |
7839 | 2450.00 |
7566 | 3000.00 |
7788 | 1100.00 |
7782 | 1300.00 |
(12 rows)
26. Obtén todos los datos de los empleados que estén (considerando una ordenación ASCII por
nombre) a partir de la J, inclusive.
SELECT*FROM emp WHERE ename>'J' ORDER BY ename;
empno | ename | job
| mgr | hiredate
| sal |
comm | deptno
-------+--------+-----------+------+------------+---------+---------+--------
7900 | JAMES | CLERK
| 7698 | 1981-12-03 | 950.00
| | 30
7566 | JONES | MANAGER
| 7839 | 1981-04-02 | 2975.00 |
| 20
7839 | KING | PRESIDENT | | 1981-11-17 | 5000.00 | |
10
7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00
| 30
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | |
10
7788 | SCOTT | ANALYST
| 7566 | 1982-12-09 | 3000.00 |
| 20
7369 | SMITH | CLERK
| 7902 | 1980-12-17 | 800.00
| | 20
7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 |
30
7521 | WARD | SALESMAN
| 7698 | 1981-02-22 | 1250.00 |
500.00 | 30
27. Obtén el salario, comisión y salario total (salario+comisión) de los empleados con comisión,
ordenando el resultado por número de empleado.
SELECT sal, comm , sal+comm Salario_total FROM emp WHERE comm>0 ORDER BY empno;
sal | comm | salario_total
---------+---------+---------------
1600.00 | 300.00 | 1900.00
1250.00 | 500.00 | 1750.00
1250.00 | 1400.00 | 2650.00
(3 rows)
28. Lista la misma información, pero para los empleados que no tienen comisión.
SELECT sal, comm , sal+comm Salario_total FROM emp WHERE comm=0 ORDER BY empno;
sal | comm | salario_total
---------+------+---------------
1500.00 | 0.00 | 1500.00
(1 row)
29. Muestra el nombre de los empleados que, teniendo un salario superior a 1000, tengan como jefe
al empleado cuyo código es 7698.
SELECT ename FROM emp WHERE sal > 1000 and mgr = 7698;
ename
-------
ALLEN
WARD
MARTIN
TURNER
(4 rows)
30. Halla el conjunto complementario del resultado del ejercicio anterior.
SELECT ename FROM emp WHERE sal < 1000 and mgr <> 7698 OR mgr IS NULL;
ename
-------
BLAKE
JAMES
KING
JONES
FORD
SMITH
CLARK
SCOTT
ADAMS
MILLER
(10 rows)
31. Indica para cada empleado el porcentaje que supone su comisión sobre su salario, ordenando el
resultado por el nombre del mismo.
SELECT ename, comm, (comm/sal)*100 Porcentaje from emp;
ename | comm | porcentaje
--------+---------+-------------------------
BLAKE | |
ALLEN | 300.00 | 18.75000000000000000000
WARD | 500.00 | 40.00000000000000000000
MARTIN | 1400.00 | 112.0000000000000000
TURNER | 0.00 | 0.00000000000000000000
JAMES | |
KING | |
JONES | |
FORD | |
SMITH | |
CLARK | |
SCOTT | |
ADAMS | |
MILLER | |
(14 rows)
32. Hallar los empleados del departamento 10 cuyo nombre no contiene la cadena LA.
SELECT ename FROM emp WHERE deptno=10 AND ename LIKE '%LA%';
ename
-------
CLARK
(1 row)
33. Obtén los empleados que no son supervisados por ningún otro.
SELECT ename FROM emp WHERE mgr is NULL;
ename
-------
KING
(1 row)
34. Obtén los nombres de los departamentos que no sean Ventas (SALES) ni investigación (RESEARCH).
Ordena el resultado por la localidad del departamento.
SELECT dname FROM dept WHERE dname<>'SALES'AND dname<>'RESEARCH' ORDER BY loc;
dname
------------
OPERATIONS
ACCOUNTING
(2 rows)
35. Deseamos conocer el nombre de los empleados y el código del departamento de los administra-
tivos(CLERK) que no trabajan en el departamento 10, y cuyo salario es superior a 800, ordenado
por fecha de contratación.
SELECT ename FROM emp WHERE job='CLERK' AND deptno<>10 AND sal>800;
ename
-------
JAMES
ADAMS
(2 rows)
36. Para los empleados que tengan comisión, obtén sus nombres y el cociente entre su salario y su
comisión (excepto cuando la comisión sea cero), ordenando el resultado por nombre.
SELECT ename, sal/comm cociente FROM emp WHERE comm > 0 ORDER BY
ename;
ename | cociente
--------+------------------------
ALLEN |
5.3333333333333333
MARTIN | 0.89285714285714285714
WARD |
2.5000000000000000
(3 rows)
37. Lista toda la información sobre los empleados cuyo nombre completo tenga exactamente 5 car-
acteres.
SELECT *FROM emp WHERE ename LIKE'______'; (6 _)
38. Lo mismo, pero para los empleados cuyo nombre tenga al menos cinco letras.
SELECT*FROM emp WHERE ename>='_____'; (5_)
39. Halla los datos de los empleados que, o bien su nombre empieza por A y su salario es superior
a 1000, o bien reciben comisión y trabajan en el departamento 30.
SELECT ename FROM emp WHERE (ename like 'A%' anD sal>1000) OR (comm=0 AND deptno=30);
40. Halla el nombre, el salario y el sueldo total de todos los empleados, ordenando el resultado
primero por salario y luego por el sueldo total. En el caso de que no tenga comisión, el sueldo
total debe reflejar solo el salario.
SELECT ename, sal, sal+ comm Sueldo_total FROM emp ORDER BY sal , sal+comm;
41. Obtén el nombre, salario y la comisión de los empleados que perciben un salario que está entre
la mitad de la comisión y la propia comisión.
SELECT ename, sal, comm FROM emp WHERE sal BETWEEN comm/2 AND comm;
42. Obtén el complementario del anterior.
SELECT ename, sal, comm FROM emp WHERE sal NOT BETWEEN comm/2 AND comm;
43. Lista los nombres y empleos de aquellos empleados cuyo empleo acaba en MAN y cuyo nombre
empieza por A.
SELECT ename, job FROM emp WHERE job LIKE'%MAN' AND ename LIKE'A%';
44. Intenta resolver la pregunta anterior con un predicado simple, es decir, de forma que en la
cláusula WHERE no haya conectores lógicos como AND, OR, etc. Si ayuda a resolver la pregunta, se
puede suponer que el nombre del empleado tiene al menos cinco letras.
SELECT ename, job FROM emp WHERE ename||job LIKE 'A%MAN';
45. Halla los nombres de los empleados cuyo nombre tiene como máximo cinco caracteres.
SELECT ename FROM emp WHERE ename LIKE '_____';
46. Suponiendo que el año próximo la subida del sueldo total de cada empleado será del 6 %, y el
siguiente del 7 %, halla los nombres y el salario total actual, del año próximo y del siguiente, de
cada empleado. Indique además con SI o NO, si el empleado tiene comisión. Como en la pregunta
40, si no tiene comisión, el total se considera igual al salario. Se supone que no existen comisiones
negativas.
SELECT ename, sal, sal+ comm
Salario_actual, sal+comm+(sal+comm)*0.6
Salario_proximo, sal+comm+(sal+comm)*0.7 Salario_dos_proximo, 'Si'
Comision FROM emp WHERE comm>0 UNION SELECT ename, sal, sal+ comm Salario_actual, sal+comm+(sal+comm)*0.6 Salario_proximo, sal+comm+(sal+comm)*0.7
Salario_dos_proximo, 'No' Comision FROM emp WHERE comm IS NULL;
ename | sal
| salario_actual | salario_proximo | salario_dos_proximo | comision
--------+---------+----------------+-----------------+---------------------+----------
SMITH |
800.00 | | | | No
SCOTT | 3000.00 | | | | No
JONES | 2975.00 | | | | No
FORD | 3000.00 | | | | No
CLARK | 2450.00 | | | | No
ALLEN | 1600.00 | 1900.00 | 3040.000 | 3230.000 | Si
MILLER | 1300.00 | | | | No
ADAMS | 1100.00 | | | | No
JAMES |
950.00 | | | | No
KING | 5000.00 | | | | No
WARD | 1250.00 | 1750.00 | 2800.000 | 2975.000 | Si
MARTIN | 1250.00 | 2650.00 | 4240.000 | 4505.000 | Si
BLAKE |
2850.00 | | | | No
(13 rows)
47. Lista los nombres y fecha de contratación de aquellos empleados que no son vendedores (SALESMAN).
SELECT ename, hiredate FROM emp WHERE job<>'SALESMAN';
48. Obtén la información disponible de los empleados cuyo número es uno de los siguientes: 7844,
7900, 7521, 7521, 7782, 7934, 7678 y 7369, pero que no sea uno de los siguientes: 7902, 7839, 7499
ni 7878. La sentencia no debe complicarse innecesariamente, y debe dar el resultado correcto
independientemente de lo empleados almacenados en la base de datos.
SELECT*FROM emp WHERE((empno=7844) OR (empno=7900) OR (empno=7521) OR
(empno=7782) OR (empno=7934) OR (empno=7678) OR
(empno=7369))AND((empno<>7902)OR(empno<>7839)OR(empno<>7499)OR(empno<>
7878));
empno | ename | job
| mgr | hiredate
| sal |
comm | deptno
-------+--------+----------+------+------------+---------+--------+--------
7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 |
500.00 | 30
7844 | TURNER | SALESMAN | 7698
| 1981-09-08 | 1500.00 | 0.00 | 30
7900 | JAMES | CLERK
| 7698 | 1981-12-03 | 950.00
| | 30
7369 | SMITH | CLERK
| 7902 | 1980-12-17 | 800.00
| | 20
7782 | CLARK | MANAGER
| 7839 | 1981-06-09 | 2450.00 |
| 10
7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | |
10
(6 rows)
49. Ordena los empleados por su código de departamento, y luego de manera descendente por su
número de empleado.
SELECT ename, deptno, empno FROM emp ORDER BY deptno, empno desc;
50. Para los empleados que tengan como jefe a un empleado con código mayor que el suyo, obtén
los que reciben de salario más de 1000 y menos de 2000, o que están en el departamento 30.
SELECT ename, mgr, sal FROM emp WHERE mgr>empno AND ((sal<2000 AND
sal>1000)OR(deptno=30));
ename | mgr |
sal
--------+------+---------
BLAKE | 7839 | 2850.00
ALLEN | 7698 | 1600.00
WARD | 7698 | 1250.00
MARTIN | 7698 | 1250.00
(4 rows)
muy practico!!
ResponderEliminarpara usar el valor de la comision en el caso de que este sea null y poder operar con el matemáticamente, puede usarse la funcion IFNULL (comm,0) la cual nos debolverá 0 en el caso en el que la comisión tenga el valor null.
Saludos.
muchas gracias por todo esta valiosa infomarcion
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminar
ResponderEliminarтвоя мопс плохая чертова
цветная дверь суки