Skip to content

Commit

Permalink
[TMP] Quick backup
Browse files Browse the repository at this point in the history
  • Loading branch information
sotogarcia committed Sep 5, 2017
1 parent d7e5790 commit c115ad2
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 13 deletions.
2 changes: 1 addition & 1 deletion PostgreSQL/UF1888-E4 Ejercicio SQL - Resuelto.html
Original file line number Diff line number Diff line change
Expand Up @@ -942,7 +942,7 @@ <h3 id="consultas">Consultas</h3>
<pre><code>SELECT nombre, apellido, codtra, numdirec
FROM temple1
INNER JOIN tdepar2 ON (temple1.dept = tdepar2.numdep)
WHERE salario &gt; 2000 AND feching &gt;= &#39;01/01/1975&#39;</code></pre>
WHERE salario &gt; 2000 AND feching &gt; &#39;01/01/1975&#39;</code></pre>
<p>3.- Obtener una lista con el apellido, número de departamento y salario mensual de los empleados de los departamentos ‘A00’, ‘B01’, ‘C01’ y ‘D01’. La salida se quiere en orden descendente de salario dentro de cada departamento.</p>
<pre><code>SELECT apellido, dept, salario
FROM temple1
Expand Down
64 changes: 57 additions & 7 deletions PostgreSQL/UF1888-E4 Ejercicio SQL - Resuelto.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,8 @@ SELECT nuempl, nombre, apellido, tlfn , nomdep
WHERE sexo='M' AND (tdepar2.nomdep LIKE 'D%' OR tdepar2.nomdep LIKE 'E%');
```

> **Rectificación** Con número de departamento
> **Rectificación** con numdept en vez de nondept
>
```
SELECT nuempl, nombre, apellido, tlfn , nomdep
FROM temple1
Expand All @@ -176,7 +176,7 @@ SELECT nuempl, nombre, apellido, tlfn , nomdep
SELECT nombre, apellido, codtra, numdirec
FROM temple1
INNER JOIN tdepar2 ON (temple1.dept = tdepar2.numdep)
WHERE salario > 2000 AND feching >= '01/01/1975'
WHERE salario > 2000 AND feching > '01/01/1975';
```

3.- Obtener una lista con el apellido, número de departamento y salario mensual de los empleados de los departamentos ‘A00’, ‘B01’, ‘C01’ y ‘D01’. La salida se quiere en orden descendente de salario dentro de cada departamento.
Expand All @@ -185,7 +185,7 @@ SELECT nombre, apellido, codtra, numdirec
SELECT apellido, dept, salario
FROM temple1
WHERE dept IN ( 'A00', 'B01', 'C01' , 'D01')
ORDER BY dept, salario DESC
ORDER BY dept, salario DESC;
```

4.- Se pide una lista que recupere el salario medio de cada departamento junto con el número de empleados que tiene. El resultado no debe incluir empleados que tengan un código de trabajo mayor que 54, ni departamentos con menos de tres empleados. Se quiere ordenada por número de departamento.
Expand All @@ -202,6 +202,18 @@ SELECT salario, numempl
ORDER BY dept ASC;
```

> Otra forma
```
SELECT dept, AVG(salario) , COUNT(*)
FROM temple1
WHERE codtra <= 54
GROUP BY dept
HAVING COUNT(*) > 2
ORDER BY dept
;
```

5.- Seleccionar todos los empleados de los departamentos ‘D11’ y ‘E11’ cuyo primer apellido empiece por S.

```
Expand All @@ -217,11 +229,24 @@ SELECT nombre, apellido, feching
FROM temple1
WHERE CAST(nuempl AS INT) IN (
SELECT CAST(numdirec AS INT) FROM tdepar2 WHERE numdirec <> ''
);
)
ORDER BY CAST(nuempl AS INT);
```

> Otra forma
```
SELECT nuempl, nombre, apellido, feching
FROM temple1 , tdepar2
WHERE temple1.nuempl = tdepar2.numdirec
ORDER BY CAST(nuempl AS INT)
;
```

7.- Obtener un listado de las mujeres de los departamentos que empiecen por D y por E cuyo nivel de educación sea superior a la media; en este caso también ordenados por número de personal.

> Ceñido al enunciado
```
SELECT nuempl, nombre, apellido, tlfn , nomdep
FROM temple1
Expand All @@ -230,7 +255,7 @@ SELECT nuempl, nombre, apellido, tlfn , nomdep
ORDER BY nuempl;
```

> **Rectificación** Con número de departamento
> Numdep en vez de nomdep
```
SELECT nuempl, nombre, apellido, tlfn , nomdep
Expand All @@ -240,14 +265,39 @@ SELECT nuempl, nombre, apellido, tlfn , nomdep
ORDER BY nuempl;
```

> Otra forma
```
SELECT nuempl, nombre, apellido
FROM temple1
WHERE sexo = 'M' AND (dept LIKE 'D%' OR dept LIKE 'E%')
AND niveduc > (SELECT AVG(niveduc) FROM temple1)
ORDER BY CAST(nuempl AS INT)
;
```

8.- Seleccionar todos los empleados cuyo nombre sea igual al de algunas personas del departamento D21 y cuyo código de trabajo sea diferente de todos los del E21 (la lista debe contener el número de personal, nombre, apellido, departamento y código de trabajo).

```
SELECT *
FROM temple1
WHERE nombre IN (SELECT nombre FROM temple1 WHERE dept='D21') AND
codtra NOT IN (SELECT codtra FROM temple1 WHERE dept='E21');
codtra NOT IN (SELECT codtra FROM temple1 WHERE dept='E21') AND
dept <> 'D21';
```

```
SELECT nuempl, nombre, apellido, dept, codtra
FROM temple1
WHERE nombre = ANY (SELECT nombre FROM temple1
WHERE dept = 'D21')
AND codtra <> ALL ( SELECT codtra FROM temple1
WHERE dept = 'E21')
AND dept <> 'D21'
;
```

> **NOTA:** *Se han excluido a los del propio departamento ya que son la referencia o patrón de comparación*.
9.- Listar los empleados que no sean directores (la información que debe aparecer es el número de personal, apellido y departamento).

Expand Down
Binary file modified PostgreSQL/UF1888-E4 Ejercicio SQL - Resuelto.pdf
Binary file not shown.
51 changes: 46 additions & 5 deletions PostgreSQL/UF1888-E4 Ejercicio SQL - Resuelto.sql
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ SELECT nuempl, nombre, apellido, tlfn , nomdep
INNER JOIN tdepar2 ON (temple1.dept = tdepar2.numdep)
WHERE sexo='M' AND (tdepar2.nomdep LIKE 'D%' OR tdepar2.nomdep LIKE 'E%');

-- Con numdept en vez de nondept

SELECT nuempl, nombre, apellido, tlfn , nomdep
FROM temple1
INNER JOIN tdepar2 ON (temple1.dept = tdepar2.numdep)
Expand All @@ -84,14 +86,14 @@ SELECT nuempl, nombre, apellido, tlfn , nomdep
SELECT nombre, apellido, codtra, numdirec
FROM temple1
INNER JOIN tdepar2 ON (temple1.dept = tdepar2.numdep)
WHERE salario > 2000 AND feching >= '01/01/1975'
WHERE salario > 2000 AND feching > '01/01/1975';

-- Obtener una lista con el apellido, número de departamento y salario mensual de los empleados de los departamentos ‘A00’, ‘B01’, ‘C01’ y ‘D01’. La salida se quiere en orden descendente de salario dentro de cada departamento.

SELECT apellido, dept, salario
FROM temple1
WHERE dept IN ( 'A00', 'B01', 'C01' , 'D01')
ORDER BY dept, salario DESC
ORDER BY dept, salario DESC;

-- Se pide una lista que recupere el salario medio de cada departamento junto con el número de empleados que tiene. El resultado no debe incluir empleados que tengan un código de trabajo mayor que 54, ni departamentos con menos de tres empleados. Se quiere ordenada por número de departamento.

Expand All @@ -105,6 +107,16 @@ SELECT salario, numempl
WHERE NOT numempl < 3
ORDER BY dept ASC;

-- Otra forma

SELECT dept, AVG(salario) , COUNT(*)
FROM temple1
WHERE codtra <= 54
GROUP BY dept
HAVING COUNT(*) > 2
ORDER BY dept
;

-- Seleccionar todos los empleados de los departamentos ‘D11’ y ‘E11’ cuyo primer apellido empiece por S.

SELECT *
Expand All @@ -118,31 +130,60 @@ SELECT nombre, apellido, feching
FROM temple1
WHERE CAST(nuempl AS INT) IN (
SELECT CAST(numdirec AS INT) FROM tdepar2 WHERE numdirec <> ''
);
)
ORDER BY CAST(nuempl AS INT);

-- Otra forma

SELECT nuempl, nombre, apellido, feching
FROM temple1 , tdepar2
WHERE temple1.nuempl = tdepar2.numdirec
ORDER BY CAST(nuempl AS INT)
;

-- Obtener un listado de las mujeres de los departamentos que empiecen por D y por E cuyo nivel de educación sea superior a la media; en este caso también ordenados por número de personal.

-- Ceñido al enunciado

SELECT nuempl, nombre, apellido, tlfn , nomdep
FROM temple1
INNER JOIN tdepar2 ON (temple1.dept = tdepar2.numdep)
WHERE sexo='M' AND (tdepar2.nomdep LIKE 'D%' OR tdepar2.nomdep LIKE 'E%') AND niveduc > ( SELECT AVG(niveduc) FROM temple1 )
ORDER BY nuempl;

-- Numdep en vez de nomdep

SELECT nuempl, nombre, apellido, tlfn , nomdep
FROM temple1
INNER JOIN tdepar2 ON (temple1.dept = tdepar2.numdep)
WHERE sexo='M' AND (tdepar2.numdep LIKE 'D%' OR tdepar2.numdep LIKE 'E%') AND niveduc > ( SELECT AVG(niveduc) FROM temple1 )
ORDER BY nuempl;

-- Otra forma

SELECT nuempl, nombre, apellido
FROM temple1
WHERE sexo = 'M' AND (dept LIKE 'D%' OR dept LIKE 'E%')
AND niveduc > (SELECT AVG(niveduc) FROM temple1)
ORDER BY CAST(nuempl AS INT)
;

-- Seleccionar todos los empleados cuyo nombre sea igual al de algunas personas del departamento D21 y cuyo código de trabajo sea diferente de todos los del E21 (la lista debe contener el número de personal, nombre, apellido, departamento y código de trabajo).

SELECT *
FROM temple1
WHERE nombre IN (SELECT nombre FROM temple1 WHERE dept='D21') AND
codtra NOT IN (SELECT codtra FROM temple1 WHERE dept='E21');

codtra NOT IN (SELECT codtra FROM temple1 WHERE dept='E21') AND
dept <> 'D21';

SELECT nuempl, nombre, apellido, dept, codtra
FROM temple1
WHERE nombre = ANY (SELECT nombre FROM temple1
WHERE dept = 'D21')
AND codtra <> ALL ( SELECT codtra FROM temple1
WHERE dept = 'E21')
AND dept <> 'D21'
;
-- Listar los empleados que no sean directores (la información que debe aparecer es el número de personal, apellido y departamento).


Expand Down

0 comments on commit c115ad2

Please sign in to comment.