Type to search…

Scott

Introducció

La base de dades Scott …

Diagrama

Restricció i classificació de les dades

Task

Fes una consulta per visualitzar el nom i el salari dels empleats que guanyen més de 2850$.

Show solution
sql
SELECT ename, sal
FROM emp
WHERE sal > 2850;

Modifica la consulta anterior per visualitzar el nom i el salari de tots els empleats que tinguin un salari entre 1500$ i 2850$.

Show solution
sql
SELECT ename, sal
FROM emp
WHERE sal BETWEEN 1500 AND 2850;

Fes una consulta per visualitzar el nom del empleat i el codi del departament per l’empleat amb codi 7566.

Show solution
sql
SELECT ename, deptno
FROM emp
WHERE empno = 7566;

Mostra el nom del empleat, ofici i data d’alta, dels empleats contractats entre el 20 de febrer del 1981 i el 1 de maig del 1981. Ordena la consulta en ordre ascendent per data d’alta.

Show solution
sql
SELECT ename, job, hiredate
FROM emp
WHERE hiredate BETWEEN '20/FEB/81' AND '01/MAY/81'
ORDER BY hiredate;

Mostra el cognom i número de departament de tots els empleats dels departaments 10 i 30. Ordena’ls de forma descendent per cognom.

Show solution
sql
SELECT ename, deptno
FROM emp
WHERE deptno IN (10,30)
ORDER BY ename DESC;

Treu un llistat del cognom i salari dels empleats que guanyen més de 1500$ dels departaments 10 o 30. Etiqueta les columnes “Employee” i “Monthly Salary”, respectivament.

Show solution
sql
SELECT ename "Employee", sal "Monthly Salary"
FROM emp
WHERE sal > 1500 AND deptno IN (10, 30)

Mostra el nom i la data d’alta de cada empleat contractat durant l’any 1982.

Show solution
sql
SELECT ename, hiredate
FROM emp
WHERE extract(YEAR FROM hiredate) = 1982;

Mostra el nom i l’ofici de tots els empleats que no tenen un cap assignat.

Show solution
sql
SELECT ename, job
FROM emp
WHERE mgr IS NULL;

Mostra el nom, salari i comissió de tots els empleats que guanyen comissions. Ordeneu per salari i comissió en ordre descendent.

Show solution
sql
SELECT ename, sal , comm
FROM emp
WHERE comm IS NOT NULL
ORDER BY sal DESC, comm DESC;

Mostra els noms de tots els empleats que tinguin una A en la tercera lletra del seu nom.

Show solution
sql
SELECT ename
FROM emp
WHERE ename LIKE '__A%';

Mostra el nom de tots els empleats que tinguin dos L en el seu nom i que siguin del departament 30 o que el seu cap sigui el 7782.

Show solution
sql
SELECT ename
FROM emp
WHERE ename LIKE '%L%L%' AND (deptno = 30 OR mgr = 7782);

Mostra el nom, ofici i salari de tots els empleats que tinguin com ofici Clerk o Analyst i el seu salari no sigui igual a 1000, 3000 o 5000 dòlars.

Show solution
sql
SELECT ename, job, sal
FROM emp
WHERE job IN ('CLERK', 'ANALYST') AND sal NOT IN (1000, 3000, 5000);

Mostra el nom, salari i comissió de tots els empleats que tinguin una comissió superior al seu salari incrementat un 10%.

Show solution
sql
SELECT ename "Employee", sal "Monthly Salary", comm
FROM emp
WHERE comm > sal * 1.1

Visualització de dades a partir de varies taules

Task

Fes una consulta per mostrar el nom, número de departament i nom de departament de tots els empleats.

Show solution
sql
SELECT e.ename, e.deptno, d.dname
FROM emp e natural join dept d

Mostra els oficis diferents que hi ha al departament 30.

Show solution
sql
SELECT distinct e.job, d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno AND d.deptno=30;

Fes una consulta per mostrar el nom de l’empleat, nom del departament i localitat de tots els empleats que tenen comissió.

Show solution
sql
SELECT e.ename, d.dname, d.loc
FROM emp e NATURAL JOIN dept d
WHERE e.comm IS NOT NULL;

Mostra el nom de l’empleat i nom del departament de tots els empleats que tenen una A en el seu nom..

Show solution
sql
SELECT e.ename, d.dname
FROM emp e NATURAL JOIN dept d
WHERE e.ename LIKE '%A%';

Fes una consulta per mostrar el nom, ofici, número del departament i nom del departament de tots els empleats que treballen a DALLAS.

Show solution
sql
SELECT e.ename, e.job, e.deptno, d.dname
FROM emp e NATURAL JOIN dept d
WHERE upper(d.loc) = 'DALLAS';

Mostra el nom de l’empleat i el número de l’empleat juntament amb el nom dels seus caps i el número del seu cap. Etiqueta les columnes com Employee, Emp#, Manager i Mgr#, respectivament.

Show solution
sql
SELECT e.ename "Employee", e.empno "Emp#", j.ename "Manager", j.empno "Mgr#"
FROM emp e JOIN emp j on e.mgr = j.empno;

Modifica la consulta perquè també inclogui a King (que no té cap).

Show solution
sql
SELECT e.ename "Employee", e.empno "Emp#", j.ename "Manager", j.empno "Mgr#"
FROM emp e LEFT JOIN emp j on e.mgr = j.empno

Fes una consulta que mostri el nom de l’empleat, número del departament juntament amb el nom dels seus companys de departament. Poseu etiquetes apropiades.

Show solution
sql
SELECT e.deptno DEPARTAMENT, e.ename EMPLOYEE, c.ename COLLEAGUE
FROM emp e JOIN emp c USING(deptno)
WHERE e.empno <> c.empno;

Mostra l’estructura de la taula SALGRADE. Crea una consulta que mostri el nom, ofici, nom del departament, salari i grau de tots els empleats.

Show solution
sql
SELECT e.ename, e.job, d.dname, e.sal, s.grade
FROM emp e join dept d using(deptno), salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal

Fes una consulta per mostrar el nom i data de contractació de qualsevol empleat contractat després de Blake.

Show solution
sql
SELECT e.ename, e.hiredate
FROM emp e, emp b
WHERE b.ename = 'BLAKE' AND e.hiredate > b.hiredate;

Mostra tots els noms dels empleats i les dates de contractació juntament amb el nom dels seus caps i dates de contractació de tots els empleats contractats abans que els seus caps. Etiqueta les columnes com Employee, Emp Hiredate, Manager i Mgr Hiredate respectivament.

Show solution
sql
SELECT e.ename "Employee", e.hiredate "Emp Hiredate", j.ename "Manager", j.hiredate "Mgr Hiredate"
FROM emp e, emp j
WHERE e.mgr = j.empno AND e.hiredate < j.hiredate;

Fes una consulta que mostri els noms dels empleats i el salari mitjançant asteriscs. Cada asterisc significa un centenar de dòlars. Ordena les dades en ordre descendent per salari. Mostra el resultat en una sola columna, amb l’etiqueta EMPLOYEE_AND_THEIR_SALARIES.

Show solution
sql
SELECT rpad(ename,10,' ') || lpad(' ',(sal/100) + 1,'*') EMPLOYEE_AND_THEIR_SALARIS
FROM emp
ORDER BY sal DESC;

Dades agregades. Funcions de grup

Task

Les funcions de grup treballen amb molts registres per a produir un resultat.

Show solution

Cert

Les funcions de grup inclouen nuls en els càlculs.

Show solution

Fals. Les funcions de grup ignoren els valors nuls. Per incloure valors nuls en els càlculs has d’utilitzar la funció coalesce en PostgreSql o NVL en Oracle.

La cláusula WHERE restringeix registres abans de la inclusió en un càlcul de grup.

Show solution

Cert

Mostra sobre el salari: màxim, mínim, suma i mitjana aritmètica, per a tots els empleats. Arrodoneix els resultats a la posició decimal.

Show solution
sql
    SELECT ROUND(MAX(sal),0) "Maximum",
        ROUND(MIN(sal),0) "Minimum",
        ROUND(SUM(sal),0) "Sum",
        ROUND(AVG(sal),0) "Average"
    FROM emp;
</Solution>

Modifica la consulta per mostrar: màxim, mínim, suma i mitjana aritmètica de salaris per a cada ofici.

<Solution>
    ```sql
    SELECT job, ROUND(MAX(sal),0) "Maximum",
        ROUND(MIN(sal),0) "Minimum",
        ROUND(SUM(sal),0) "Sum",
        ROUND(AVG(sal),0) "Average"
    FROM emp
    GROUP BY job;

Escriu una consulta que mostri el nombre de persones que tenen el mateix ofici.

Show solution
sql
SELECT job, COUNT(*)
FROM emp
GROUP BY job;

Determina el nombre total de directors. Etiqueta la columna com “nº de directors”.

Show solution
sql
SELECT COUNT(DISTINCT mgr) "Number of Managers"
FROM emp;

Escriu una consulta que mostri la diferència entre el salari més alt i el més baix de la empresa. Etiqueta la columna com “DIFFERENCE”.

Show solution
sql
SELECT MAX(sal)-MIN(sal) DIFFERENCE
FROM emp;

Mostra el número del director i salari de l’empleat amb menor salari amb dependència d’aquest director. Exclou a qualsevol empleat que no tingui director. Exclou qualsevol grup, que tingui un salari mínim inferior a 1000$. Classifica el resultat en ordre descendent de salaris.

Show solution
sql
SELECT mgr, MIN(sal)
FROM emp
WHERE mgr IS NOT NULL
GROUP BY mgr
HAVING MIN(sal) > 1000
ORDER BY MIN(sal) DESC;

Escriu una consulta que mostri el nom del departament, localitat, nombre d’empleats i la mitjana de salaris, per a tots els empleats de cada departament. Etiqueta les columnes com DNAME, LOC, Number of People i Salari, respectivament.

Show solution
sql
SELECT d.dname, d.loc, COUNT(*) "Number of People", ROUND(AVG(sal),2) "Salary"
FROM emp e natural join dept d
GROUP BY d.dname, d.loc;

Fes una consulta que mostri per cada any el número d’empleats que es van contractar.

Show solution
sql
select extract(year from hiredate), count(*)
from emp
group by extract(year from hiredate)

Crea una matriu que mostri l’ofici, salari corresponent segons departament i el salari total per aquest ofici de tots els departaments. Etiqueta les columnes com Job, Dept 10, Dept 20, Dept 30 i Total.

Show solution

Pendent oracle

sql
SELECT job "Job", SUM(DECODE(deptno, 10, sal)) "Dept 10",
SUM(DECODE(deptno, 20, sal)) "Dept 20",
SUM(DECODE(deptno, 30, sal)) "Dept 30",
SUM(sal) "Total"
FROM emp
GROUP BY job;

Subconsultes

Task

Escriu una consulta que mostri nom i data d’alta de tots els empleats que treballen en el mateix departament que Blake (exclou a Blake).

Show solution
sql
SELECT ename, hiredate
FROM emp
WHERE deptno = (   // si només hi ha un blake
    SELECT deptno
    FROM emp
    WHERE ename='BLAKE')
AND ename != 'BLAKE';

Fes una consulta que mostri el número i nom de tots els empleats que guanyen més que la mitjana de salaris. Classifica el resultat en ordre descendent de salaris.

Show solution
sql
SELECT empno, ename
FROM emp
WHERE sal > (
    SELECT AVG(sal)
    FROM emp )
ORDER BY sal DESC;

Escriu una consulta que mostri el número i nom de tots els empleats que treballen en un departament amb qualsevol empleat que tingui un nom que contingui una “T”.

Show solution
sql
SELECT empno, ename
FROM emp
WHERE deptno IN (
    SELECT deptno // distinct?
    FROM emp
    WHERE ename LIKE '%T%');

Mostra el nom, número de departament i ofici de tots els empleats que treballen en un departament que es trobi a Dallas.

Show solution
sql
SELECT ename, deptno, job
FROM emp
WHERE deptno IN (
    SELECT deptno
    FROM dept
    WHERE loc='DALLAS');

Mostra el nom i el salari de tots els empleats que depenguin de “King”.

Show solution
sql
SELECT ename, sal
FROM emp
WHERE mgr IN (
    SELECT empno
    FROM emp
    WHERE ename='KING');

Mostra el número, nom i ofici de tots els empleats del departament “Sales”.

Show solution
sql
SELECT deptno, ename, job
FROM emp
WHERE deptno IN (
    SELECT deptno
    FROM dept
    WHERE dname = 'SALES');

Modifica la consulta (3) per a que mostri el número, nom i salari de tots els empleats que guanyin més que la mitjana de salaris i que treballin en un departament en el que hi hagi algun empleat que contingui una “T” en el seu nom.

Show solution
sql
SELECT empno, ename, sal
FROM emp
WHERE sal > (
    SELECT AVG(sal)
    FROM emp)
AND deptno IN (
    SELECT deptno
    FROM emp
    WHERE ename LIKE '%T%');

Subconsultes multicolumna

Task

Escriu una consulta que mostri el nom, número de departament i salari de qualsevol empleat, que tinguin un número de departament i salari que es corresponguin -els dos- amb el número de departament i salari de qualsevol empleat que tingui comissió.

Show solution
sql
SELECT ename, deptno, sal
FROM emp
WHERE (deptno, sal) IN (
    SELECT deptno, sal
    FROM emp
    WHERE comm IS NOT NULL);

Mostra el nom, nom del departament i salari, de qualsevol empleat que tingui un salari i comissió que es corresponguin -els dos-, amb el salari i comissió de qualsevol empleat de Dallas.

Show solution
sql
SELECT ename, dname, sal
FROM emp natural join dept
WHERE (sal, coalesce(comm,0)) IN (
    SELECT sal , coalesce(comm,0)
    FROM emp natural join dept
WHERE loc = 'DALLAS');

Fes una consulta per mostrar el nom, data d’alta i salari de tots els empleats que tinguin el mateix salari i comissió que Scott.

Show solution
sql
SELECT ename, hiredate, sal
FROM emp
WHERE (sal, coalesce(comm,0)) = (
    SELECT sal , coalesce(comm,0)
    FROM emp
    WHERE upper(ename) = 'SCOTT')
AND upper(ename) <> 'SCOTT';

Fes una consulta per mostrar els empleats que guanyin un salari superior al salari de qualsevol empleat “CLERK”. Ordena el resultat pel salari de forma descendent.

Show solution
sql
SELECT ename, job, sal
FROM emp
WHERE sal > ANY (
    SELECT sal
    FROM emp
    WHERE job = 'CLERK')
AND job != 'CLERK'
ORDER BY sal DESC;
[Google Docs](https://docs.google.com/document/d/19If7Iib4F4Azr8fCXVulRO_BURH7Q69Od7GAn-0R-lU/edit?usp=drive_link)