P. 1
BLOG-BBDD

BLOG-BBDD

|Views: 12|Likes:
Published by jonhy1213
Ejercicios SQL,
Ejercicios SQL,

More info:

Published by: jonhy1213 on Aug 24, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

01/14/2014

pdf

text

original

EJERCICIOS

:

Utilizar para estos ejercicios la base de datos SEGUNDA_DB:

*CONSULTAR EL SALARIO MAXIMO QUE GANA LOS EMPLEADOS:

mysql> SELECT MAX(SALARIO),(OFICIO)
FROM EMPLE
GROUP BY OFICIO;

+--------------+------------+
| MAX(SALARIO) | OFICIO |
+--------------+------------+
| 3000 | ANALISTA |
| 3005 | DIRECTOR |
| 1690 | EMPLEADO |
| 4100 | PRESIDENTE |
| 1625 | VENDEDOR |
+--------------+------------+



*CONSULTAR EL SALARIO MINIMO DE LOS EMPLEADOS EN
ORDEN DESCENDENTE:

mysql> SELECT MIN(SALARIO),(OFICIO)
FROM EMPLE
GROUP BY OFICIO DESC;

+--------------+------------+
| MIN(SALARIO) | OFICIO |
+--------------+------------+
| 1350 | VENDEDOR |
| 4100 | PRESIDENTE |
| 1040 | EMPLEADO |
| 2885 | DIRECTOR |
| 3000 | ANALISTA |
+--------------+------------+


*CONCATENAR LA EXPRESION 'EL APELLIDO ES ' EN LA TABLA
EMPLE CUANDO MUESTRE LOS APELLIDOS:

mysql> SELECT CONCAT('EL APELLIDO ES ',APELLIDO)
FROM EMPLE;


+------------------------------------+
| CONCAT('EL APELLIDO ES ',APELLIDO) |
+------------------------------------+
| EL APELLIDO ES SANCHEZ |
| EL APELLIDO ES ARROYO |
| EL APELLIDO ES SALA |
| EL APELLIDO ES JIMENEZ |
| EL APELLIDO ES MARTIN |
| EL APELLIDO ES NEGRO |
| EL APELLIDO ES CEREZO |
| EL APELLIDO ES GIL |
| EL APELLIDO ES REY |
| EL APELLIDO ES TOVAR |
| EL APELLIDO ES ALONSO |
| EL APELLIDO ES JIMENO |
| EL APELLIDO ES FERNANDEZ |
| EL APELLIDO ES MUÑOZ |
+------------------------------------+


*CONCATENAR LAS COLUMNAS APELLIDO Y FUNCIONES DE
LA TABLA EMPLE CON UN ESPACIO DE '9' ENTRE LAS DOS
COLUMNAS:

mysql> SELECT CONCAT('NOMBRE ',APELLIDO) NAME,
CONCAT('TRABAJA EN ',OFICIO) DATOS
FROM EMPLE;

+------------------+-----------------------+
| NAME | DATOS |
+------------------+-----------------------+
| NOMBRE SANCHEZ | TRABAJA EN EMPLEADO |
| NOMBRE ARROYO | TRABAJA EN VENDEDOR |
| NOMBRE SALA | TRABAJA EN VENDEDOR |
| NOMBRE JIMENEZ | TRABAJA EN DIRECTOR |
| NOMBRE MARTIN | TRABAJA EN VENDEDOR |
| NOMBRE NEGRO | TRABAJA EN DIRECTOR |
| NOMBRE CEREZO | TRABAJA EN DIRECTOR |
| NOMBRE GIL | TRABAJA EN ANALISTA |
| NOMBRE REY | TRABAJA EN PRESIDENTE |
| NOMBRE TOVAR | TRABAJA EN VENDEDOR |
| NOMBRE ALONSO | TRABAJA EN EMPLEADO |
| NOMBRE JIMENO | TRABAJA EN EMPLEADO |
| NOMBRE FERNANDEZ | TRABAJA EN ANALISTA |
| NOMBRE MUÑOZ | TRABAJA EN EMPLEADO |
+------------------+-----------------------+


mysql> SELECT
CONCAT(CONCAT('NOMBRE: ',APELLIDO),CONCAT('FUNCIONES: ',OFICI
O)) DATOS
FROM EMPLE;

+--------------------------------------+
| DATOS |
+--------------------------------------+
| NOMBRE: SANCHEZFUNCIONES: EMPLEADO |
| NOMBRE: ARROYOFUNCIONES: VENDEDOR |
| NOMBRE: SALAFUNCIONES: VENDEDOR |
| NOMBRE: JIMENEZFUNCIONES: DIRECTOR |
| NOMBRE: MARTINFUNCIONES: VENDEDOR |
| NOMBRE: NEGROFUNCIONES: DIRECTOR |
| NOMBRE: CEREZOFUNCIONES: DIRECTOR |
| NOMBRE: GILFUNCIONES: ANALISTA |
| NOMBRE: REYFUNCIONES: PRESIDENTE |
| NOMBRE: TOVARFUNCIONES: VENDEDOR |
| NOMBRE: ALONSOFUNCIONES: EMPLEADO |
| NOMBRE: JIMENOFUNCIONES: EMPLEADO |
| NOMBRE: FERNANDEZFUNCIONES: ANALISTA |
| NOMBRE: MUÑOZFUNCIONES: EMPLEADO |
+--------------------------------------+


mysql> SELECT
CONCAT(CONCAT('NOMBRE: ',APELLIDO),CONCAT(SPACE(9),'FUNCIONE
S: ',OFICIO)) DATOS_EN_GENERAL
FROM EMPLE;

+-----------------------------------------------+
| DATOS_EN_GENERAL |
+-----------------------------------------------+
| NOMBRE: SANCHEZ FUNCIONES: EMPLEADO |
| NOMBRE: ARROYO FUNCIONES: VENDEDOR |
| NOMBRE: SALA FUNCIONES: VENDEDOR |
| NOMBRE: JIMENEZ FUNCIONES: DIRECTOR |
| NOMBRE: MARTIN FUNCIONES: VENDEDOR |
| NOMBRE: NEGRO FUNCIONES: DIRECTOR |
| NOMBRE: CEREZO FUNCIONES: DIRECTOR |
| NOMBRE: GIL FUNCIONES: ANALISTA |
| NOMBRE: REY FUNCIONES: PRESIDENTE |
| NOMBRE: TOVAR FUNCIONES: VENDEDOR |
| NOMBRE: ALONSO FUNCIONES: EMPLEADO |
| NOMBRE: JIMENO FUNCIONES: EMPLEADO |
| NOMBRE: FERNANDEZ FUNCIONES: ANALISTA |
| NOMBRE: MUÑOZ FUNCIONES: EMPLEADO |
+-----------------------------------------------+



mysql> SELECT
CONCAT(RPAD(CONCAT('NOMBRE: ',APELLIDO),20,'.'),CONCAT(SPACE(9
),'FUNCIONES: ',OFICIO)) DATOS_EN_GENERAL
FROM EMPLE;

+----------------------------------------------------+
| DATOS_EN_GENERAL |
+----------------------------------------------------+
| NOMBRE: SANCHEZ..... FUNCIONES: EMPLEADO |
| NOMBRE: ARROYO...... FUNCIONES: VENDEDOR |
| NOMBRE: SALA........ FUNCIONES: VENDEDOR |
| NOMBRE: JIMENEZ..... FUNCIONES: DIRECTOR |
| NOMBRE: MARTIN...... FUNCIONES: VENDEDOR |
| NOMBRE: NEGRO....... FUNCIONES: DIRECTOR |
| NOMBRE: CEREZO...... FUNCIONES: DIRECTOR |
| NOMBRE: GIL......... FUNCIONES: ANALISTA |
| NOMBRE: REY......... FUNCIONES: PRESIDENTE |
| NOMBRE: TOVAR....... FUNCIONES: VENDEDOR |
| NOMBRE: ALONSO...... FUNCIONES: EMPLEADO |
| NOMBRE: JIMENO...... FUNCIONES: EMPLEADO |
| NOMBRE: FERNANDEZ... FUNCIONES: ANALISTA |
| NOMBRE: MUÑOZ...... FUNCIONES: EMPLEADO |
+----------------------------------------------------+


*CALCULAR EL SALARIO MEDIO DE LOS EMPLEADOS DEL
DEPARTAMENTO “10”:


mysql> SELECT AVG(SALARIO)
FROM EMPLE
WHERE DEPT_NO LIKE 10;

+--------------+
| AVG(SALARIO) |
+--------------+
| 2891.6667 |
+--------------+


REDONDEAR EL SALARIO MINIMO :

mysql> SELECT ROUND(AVG(SALARIO))
FROM EMPLE;

+---------------------+
| ROUND(AVG(SALARIO)) |
+---------------------+
| 2176 |
+---------------------+


REDONDEAR EL SALARIO AÑADIENDO DOS DECIMALES:

mysql> SELECT ROUND(AVG(SALARIO),2)
FROM EMPLE
WHERE DEPT_NO LIKE 10;

+-----------------------+
| ROUND(AVG(SALARIO),2) |
+-----------------------+
| 2891.67 |
+-----------------------+


*OBTENER EL NUMERO DE EMPLEADOS QUE NO TRABAJAN EN EL
DEPARTAMENTO '20':

mysql> SELECT COUNT(*),DEPT_NO
FROM EMPLE
WHERE DEPT_NO <>20;

+----------+---------+
| COUNT(*) | DEPT_NO |
+----------+---------+
| 9 | 30 |
+----------+---------+

Ó

mysql> SELECT COUNT(*),DEPT_NO,OFICIO
FROM EMPLE
WHERE DEPT_NO <>20;

+----------+---------+----------+
| COUNT(*) | DEPT_NO | OFICIO |
+----------+---------+----------+
| 9 | 30 | VENDEDOR |
+----------+---------+----------+


* OBTENER EL NUMERO DE COMISIONES DE LA TABLA EMPLE:

mysql> SELECT COUNT(COMISION),APELLIDO
FROM EMPLE;

+-----------------+----------+
| COUNT(COMISION) | APELLIDO |
+-----------------+----------+
| 4 | SANCHEZ |
+-----------------+----------+


Ó CUANDO LA COMISION NO ES NULA:

mysql> SELECT COUNT(*)
FROM EMPLE
WHERE COMISION IS NOT NULL;

+----------+
| COUNT(*) |
+----------+
| 4 |
+----------+



*OBTENER EL SALARIO MAXIMO DE LOS EMPLEADOS CUYO
OFICIO SEA 'EMPLEADO':

mysql> SELECT MAX(SALARIO),APELLIDO,OFICIO
FROM EMPLE
WHERE OFICIO LIKE 'EMPLEADO';

+--------------+----------+----------+
| MAX(SALARIO) | APELLIDO | OFICIO |
+--------------+----------+----------+
| 1690 | SANCHEZ | EMPLEADO |
+--------------+----------+----------+


*MAYOR QUE LA MEDIA:

*OBTENER LOS APELLIDOS DE LA TABLA EMPLE CUYO SALARIO
SEA MAYOR A LA MEDIA DEL SALARIO DE LA TABLA EMPLE:

mysql> SELECT APELLIDO
FROM EMPLE
WHERE SALARIO >(SELECT AVG(SALARIO)
FROM EMPLE);
+-----------+
| APELLIDO |
+-----------+
| JIMENEZ |
| NEGRO |
| CEREZO |
| GIL |
| REY |
| FERNANDEZ |
+-----------+

Ó

mysql> SELECT APELLIDO,OFICIO,SALARIO
FROM EMPLE
WHERE SALARIO >(SELECT AVG(SALARIO)
FROM EMPLE);

+-----------+------------+---------+
| APELLIDO | OFICIO | SALARIO |
+-----------+------------+---------+
| JIMENEZ | DIRECTOR | 2900 |
| NEGRO | DIRECTOR | 3005 |
| CEREZO | DIRECTOR | 2885 |
| GIL | ANALISTA | 3000 |
| REY | PRESIDENTE | 4100 |
| FERNANDEZ | ANALISTA | 3000 |
+-----------+------------+---------+


*OBTENER LAS NOTAS MAS ALTAS DE “NOTA1,NOTA2,NOTA3” DE
LA TABLA NOTAS_ALUMNOS:

mysql> SELECT GREATEST(NOTA1,NOTA2,NOTA3),NOMBRE_ALUMNO
FROM NOTAS_ALUMNOS;

+-----------------------------+---------------------------+
| GREATEST(NOTA1,NOTA2,NOTA3) | NOMBRE_ALUMNO |
+-----------------------------+---------------------------+
| 5 | Alcalde García, M. Luisa |
| 8 | Benito Martín, Luis |
| 7 | Casas Martínez, Manuel |
| 9 | Corregidor Sánchez, Ana |
| NULL | Díaz Sánchez, Maria |
+-----------------------------+---------------------------+


Ó CON UN ALIAS “MEJORES_NOTAS”:

mysql> SELECT GREATEST(NOTA1,NOTA2,NOTA3)
MEJORES_NOTAS,NOMBRE_ALUMNO
FROM NOTAS_ALUMNOS;

+---------------+---------------------------+
| MEJORES_NOTAS | NOMBRE_ALUMNO |
+---------------+---------------------------+
| 5 | Alcalde García, M. Luisa |
| 8 | Benito Martín, Luis |
| 7 | Casas Martínez, Manuel |
| 9 | Corregidor Sánchez, Ana |
| NULL | Díaz Sánchez, Maria |
+---------------+---------------------------+


Ó MOSTRANDO LOS NOMBRES EN ORDEN DESCENDENTE:

mysql> SELECT GREATEST(NOTA1,NOTA2,NOTA3),NOMBRE_ALUMNO
FROM NOTAS_ALUMNOS
ORDER BY NOMBRE_ALUMNO DESC;

+-----------------------------+---------------------------+
| GREATEST(NOTA1,NOTA2,NOTA3) | NOMBRE_ALUMNO |
+-----------------------------+---------------------------+
| NULL | Díaz Sánchez, Maria |
| 9 | Corregidor Sánchez, Ana |
| 7 | Casas Martínez, Manuel |
| 8 | Benito Martín, Luis |
| 5 | Alcalde García, M. Luisa |
+-----------------------------+---------------------------+


Ó MOSTRANDO LOS VALORES SIN NULOS:

mysql> SELECT GREATEST(NOTA1,NOTA2,NOTA3),NOMBRE_ALUMNO
-> FROM NOTAS_ALUMNOS
-> WHERE NOTA1 IS NOT NULL AND NOTA2 IS NOT NULL AND
NOTA3 IS NOT NULL
-> ORDER BY NOMBRE_ALUMNO DESC;

+-----------------------------+---------------------------+
| GREATEST(NOTA1,NOTA2,NOTA3) | NOMBRE_ALUMNO |
+-----------------------------+---------------------------+
| 9 | Corregidor Sánchez, Ana |
| 7 | Casas Martínez, Manuel |
| 8 | Benito Martín, Luis |
| 5 | Alcalde García, M. Luisa |
+-----------------------------+---------------------------+


INSERTAR O SUSTITUIR UN VALOR POR OTRO CON INSERT:

*INSERTAR O SUSTITUIR EL VALOR DE 'PETER' POR 'JOSE':

mysql> SELECT INSERT('PETER MOTA',1,5,'JOSE')
VALOR_REEMPLAZADO;

+-------------------+
| VALOR_REEMPLAZADO |
+-------------------+
| JOSE MOTA |
+-------------------+


Ó

mysql> SELECT INSERT('PEDRO MOTA',7,4,'VALEZQUEZ')
VALOR_REEMPLAZADO;

+-------------------+
| VALOR_REEMPLAZADO |
+-------------------+
| PEDRO VALEZQUEZ |
+-------------------+


REEMPLAZAR O QUITAR VALORES CON REPLACE.

*OBTENER DE LA TABLE MISTEXTOS EL TITULO SIN LOS
CARACTES '.' Y '””':

TABLA ORIGINAL.
mysql> SELECT *
-> FROM MISTEXTOS;

+---------------------------------+-----------------+---------------+--------+
| TITULO | AUTOR | EDITORIAL | PAGINA |
+---------------------------------+-----------------+---------------+--------+
| METODOLOG�A DE LA PROGRAMACI�N. | ALCALDE GARC�A | MCGRAWHILL | 140 |
| "INFORM�TICA B�SICA." | GARC�A GARCER�N | PARANINFO | 130 |
| SISTEMAS OPERATIVOS | GARC�A STRUCH | OBSBORNE | 300 |
| SISTEMAS DIGITALES. | RU�Z LOPEZ | PRENTICE HALL | 190 |
| "MANUAL DE C." | RU�Z LOPEZ | MCGRAWHILL | 340 |
+---------------------------------+-----------------+---------------+--------+


QUITAMOS LAS COMILLAS:

mysql> SELECT REPLACE(TITULO,"""",'')
-> FROM MISTEXTOS;

+---------------------------------+
| REPLACE(TITULO,"""",'') |
+---------------------------------+
| METODOLOG�A DE LA PROGRAMACI�N. |
| INFORM�TICA B�SICA. |
| SISTEMAS OPERATIVOS |
| SISTEMAS DIGITALES. |
| MANUAL DE C. |
+---------------------------------+


QUITAMOS LOS PUNTOS Y LAS COMILLAS EN CONJUNTO:

mysql> SELECT REPLACE(REPLACE(TITULO,"""",''),'.','')
-> FROM MISTEXTOS;

+-----------------------------------------+
| REPLACE(REPLACE(TITULO,"""",''),'.','') |
+-----------------------------------------+
| METODOLOG�A DE LA PROGRAMACI�N |
| INFORM�TICA B�SICA |
| SISTEMAS OPERATIVOS |
| SISTEMAS DIGITALES |
| MANUAL DE C |
+-----------------------------------------+


*DE LA TABLA MIS TEXTOS, REEMPLAZAR LOS CARACTERES 'I'
POR EL CARACTER '-Y-':

TABLA ORIGINAL.

mysql> SELECT *
-> FROM MISTEXTOS;

+---------------------------------+-----------------+---------------+--------+
| TITULO | AUTOR | EDITORIAL | PAGINA |
+---------------------------------+-----------------+---------------+--------+
| METODOLOG�A DE LA PROGRAMACI�N. | ALCALDE GARC�A | MCGRAWHILL | 140 |
| "INFORM�TICA B�SICA." | GARC�A GARCER�N | PARANINFO | 130 |
| SISTEMAS OPERATIVOS | GARC�A STRUCH | OBSBORNE | 300 |
| SISTEMAS DIGITALES. | RU�Z LOPEZ | PRENTICE HALL | 190 |
| "MANUAL DE C." | RU�Z LOPEZ | MCGRAWHILL | 340 |
+---------------------------------+-----------------+---------------+--------+


Y REEMPLAZAMOS:

mysql> SELECT REPLACE(TITULO, 'I', '-Y-')
-> FROM MISTEXTOS;

+-----------------------------------+
| REPLACE(TITULO, 'I', '-Y-') |
+-----------------------------------+
| METODOLOG�A DE LA PROGRAMAC-Y-�N. |
| "-Y-NFORM�T-Y-CA B�S-Y-CA." |
| S-Y-STEMAS OPERAT-Y-VOS |
| S-Y-STEMAS D-Y-G-Y-TALES. |
| "MANUAL DE C." |
+-----------------------------------+


*OBTENER LAS LONGITUDES DE LOS CAMPOS DE TITULO Y
AUTOR SUMADAS ENTRE SI DE LA TABLA MISTEXTOS:

mysql> SELECT LENGTH(TITULO), LENGTH(AUTOR)
-> FROM MISTEXTOS;

+----------------+---------------+
| LENGTH(TITULO) | LENGTH(AUTOR) |
+----------------+---------------+
| 31 | 14 |
| 21 | 15 |
| 19 | 13 |
| 19 | 10 |
| 14 | 10 |
+----------------+---------------+


SUMA DE LONGITUDES DE TITULO + AUTOR:

mysql> SELECT LENGTH(TITULO) + LENGTH(AUTOR)
-> FROM MISTEXTOS;

+--------------------------------+
| LENGTH(TITULO) + LENGTH(AUTOR) |
+--------------------------------+
| 45 |
| 36 |
| 32 |
| 29 |
| 24 |
+--------------------------------+


*OBTENER LOS VALORES REEMPLAZADOS DE LOS OFICIOS
CUYOS OFICIO DE PRESIDENTE SE REEMPLACE POR '1' Y EL
OFICIO DE EMPLEADO SE REEMPLACE POR '2' DE LA TABLA
EMPLE:

TABLA ORIGINAL.

mysql> SELECT *
-> FROM EMPLE;

+--------+-----------+------------+------+------------+---------+----------+---------+
| EMP_NO | APELLIDO | OFICIO | DIR | FECHA_ALT | SALARIO | COMISION | DEPT_NO |
+--------+-----------+------------+------+------------+---------+----------+---------+
| 7369 | SANCHEZ | EMPLEADO | 7902 | 1990-12-17 | 1040 | NULL | 20 |
| 7499 | ARROYO | VENDEDOR | 7698 | 1990-02-20 | 1500 | 390 | 30 |
| 7521 | SALA | VENDEDOR | 7698 | 1991-02-22 | 1625 | 650 | 30 |
| 7566 | JIMENEZ | DIRECTOR | 7839 | 1991-04-02 | 2900 | NULL | 20 |
| 7654 | MARTIN | VENDEDOR | 7698 | 1991-09-29 | 1600 | 1020 | 30 |
| 7698 | NEGRO | DIRECTOR | 7839 | 1991-05-01 | 3005 | NULL | 30 |
| 7782 | CEREZO | DIRECTOR | 7839 | 1991-06-09 | 2885 | NULL | 10 |
| 7788 | GIL | ANALISTA | 7566 | 1991-11-09 | 3000 | NULL | 20 |
| 7839 | REY | PRESIDENTE | NULL | 1991-11-17 | 4100 | NULL | 10 |
| 7844 | TOVAR | VENDEDOR | 7698 | 1991-09-08 | 1350 | 0 | 30 |
| 7876 | ALONSO | EMPLEADO | 7788 | 1991-09-23 | 1430 | NULL | 20 |
| 7900 | JIMENO | EMPLEADO | 7698 | 1991-12-03 | 1335 | NULL | 30 |
| 7902 | FERNANDEZ | ANALISTA | 7566 | 1991-12-03 | 3000 | NULL | 20 |
| 7934 | MUÑOZ | EMPLEADO | 7782 | 1992-01-23 | 1690 | NULL | 10 |
+--------+-----------+------------+------+------------+---------+----------+---------+



REEMPLAZAMOS LOS VALORES DEL PRESIDENTE Y DEL
EMPLEADO:


mysql> SELECT OFICIO, REPLACE(OFICIO,'PRESIDENTE','1'),
REPLACE(OFICIO,'EMPLEADO','2')
-> FROM EMPLE;

+------------+----------------------------------+--------------------------------+
| OFICIO | REPLACE(OFICIO,'PRESIDENTE','1') | REPLACE(OFICIO,'EMPLEADO','2') |
+------------+----------------------------------+--------------------------------+
| EMPLEADO | EMPLEADO | 2 |
| VENDEDOR | VENDEDOR | VENDEDOR |
| VENDEDOR | VENDEDOR | VENDEDOR |
| DIRECTOR | DIRECTOR | DIRECTOR |
| VENDEDOR | VENDEDOR | VENDEDOR |
| DIRECTOR | DIRECTOR | DIRECTOR |
| DIRECTOR | DIRECTOR | DIRECTOR |
| ANALISTA | ANALISTA | ANALISTA |
| PRESIDENTE | 1 | PRESIDENTE |
| VENDEDOR | VENDEDOR | VENDEDOR |
| EMPLEADO | EMPLEADO | 2 |
| EMPLEADO | EMPLEADO | 2 |
| ANALISTA | ANALISTA | ANALISTA |
| EMPLEADO | EMPLEADO | 2 |
+------------+----------------------------------+--------------------------------+



Ó MOSTRAR LOS REEMPLAZOS EN UNA SOLA COLUMNA:

mysql> SELECT
OFICIO,REPLACE(REPLACE(OFICIO,'PRESIDENTE','1'),'EMPLEADO','2')
-> FROM EMPLE;

+------------+----------------------------------------------------------+
| OFICIO | REPLACE(REPLACE(OFICIO,'PRESIDENTE','1'),'EMPLEADO','2') |
+------------+----------------------------------------------------------+
| EMPLEADO | 2 |
| VENDEDOR | VENDEDOR |
| VENDEDOR | VENDEDOR |
| DIRECTOR | DIRECTOR |
| VENDEDOR | VENDEDOR |
| DIRECTOR | DIRECTOR |
| DIRECTOR | DIRECTOR |
| ANALISTA | ANALISTA |
| PRESIDENTE | 1 |
| VENDEDOR | VENDEDOR |
| EMPLEADO | 2 |
| EMPLEADO | 2 |
| ANALISTA | ANALISTA |
| EMPLEADO | 2 |
+------------+----------------------------------------------------------+


* CURDATE: FECHA ACTUAL

*OBTENER LA FECHA ACTUAL:

mysql> SELECT CURDATE();

+------------+
| CURDATE() |
+------------+
| 2011-05-30 |
+------------+

Ó

mysql> SELECT CURDATE()+1;

+-------------+
| CURDATE()+1 |
+-------------+
| 20110531 |
+-------------+


RESTAR DIAS CON TO_DAYS:

*OBTENER LOS DIAS QUE HAN TRANSCURRIDO ENTRE LAS
FECHAS '2011-05-30' Y '2001-05-29':

mysql> SELECT TO_DAYS('2011-05-30') - TO_DAYS('2011-05-29');

+-----------------------------------------------+
| TO_DAYS('2011-05-30') - TO_DAYS('2011-05-29') |
+-----------------------------------------------+
| 1 |
+-----------------------------------------------+


*OBTENER LA FECHA DE ALTA DE LOS EMPLEADOS, SUPONIENDO
QUE EN LA FECHA DE ALTA TODOS TENIAN 20 AÑOS:

mysql> SELECT (TO_DAYS(NOW()) - TO_DAYS(FECHA_ALT)) / 365 +20
-> FROM EMPLE;

+-------------------------------------------------+
| (TO_DAYS(NOW()) - TO_DAYS(FECHA_ALT)) / 365 +20 |
+-------------------------------------------------+
| 40.4712 |
| 41.2932 |
| 40.2877 |
| 40.1808 |
| 39.6877 |
| 40.1014 |
| 39.9945 |
| 39.5753 |
| 39.5534 |
| 39.7452 |
| 39.7041 |
| 39.5096 |
| 39.5096 |
| 39.3699 |
+-------------------------------------------------+


Ó

mysql> SELECT DATEDIFF(CURRENT_DATE, FECHA_ALT) /365 +20
-> FROM EMPLE;

+--------------------------------------------+
| DATEDIFF(CURRENT_DATE, FECHA_ALT) /365 +20 |
+--------------------------------------------+
| 40.4712 |
| 41.2932 |
| 40.2877 |
| 40.1808 |
| 39.6877 |
| 40.1014 |
| 39.9945 |
| 39.5753 |
| 39.5534 |
| 39.7452 |
| 39.7041 |
| 39.5096 |
| 39.5096 |
| 39.3699 |
+--------------------------------------------+


*OBTENER LOS DIAS QUE HAN TRANSCURRIDO ENTRE LAS
FECHAS '2011-05-30' Y '2001-01-01':

mysql> SELECT TO_DAYS('2011-05-30') - TO_DAYS('2011-01-01');

+-----------------------------------------------+
| TO_DAYS('2011-05-30') - TO_DAYS('2011-01-01') |
+-----------------------------------------------+
| 149 |
+-----------------------------------------------+



*OBTENER LA FECHA Y LA HORA ACTUAL:

mysql> SELECT NOW();

+---------------------+
| NOW() |
+---------------------+
| 2011-05-30 12:46:09 |
+---------------------+


*OBTENER EL NOMBRE DEL MES:

mysql> SELECT MONTHNAME('2011-12-17');

+-------------------------+
| MONTHNAME('2011-12-17') |
+-------------------------+
| December |
+-------------------------+


*OBTENER EL NOMBRE DEL MES ACUTUAL:

mysql> SELECT MONTHNAME(NOW());

+------------------+
| MONTHNAME(NOW()) |
+------------------+
| May |
+------------------+


*DADA LA TABLA EMPLE, SUMAR DOS MESES A LA FECHA DE
ALTA:

mysql> SELECT FECHA_ALT, DATE_ADD(FECHA_ALT, INTERVAL 60 DAY)
-> FROM EMPLE;

+------------+--------------------------------------+
| FECHA_ALT | DATE_ADD(FECHA_ALT, INTERVAL 60 DAY) |
+------------+--------------------------------------+
| 1990-12-17 | 1991-02-15 |
| 1990-02-20 | 1990-04-21 |
| 1991-02-22 | 1991-04-23 |
| 1991-04-02 | 1991-06-01 |
| 1991-09-29 | 1991-11-28 |
| 1991-05-01 | 1991-06-30 |
| 1991-06-09 | 1991-08-08 |
| 1991-11-09 | 1992-01-08 |
| 1991-11-17 | 1992-01-16 |
| 1991-09-08 | 1991-11-07 |
| 1991-09-23 | 1991-11-22 |
| 1991-12-03 | 1992-02-01 |
| 1991-12-03 | 1992-02-01 |
| 1992-01-23 | 1992-03-23 |
+------------+--------------------------------------+


Ó


mysql> SELECT FECHA_ALT,DATE_ADD(FECHA_ALT, INTERVAL 2
MONTH)
-> FROM EMPLE;

+------------+---------------------------------------+
| FECHA_ALT | DATE_ADD(FECHA_ALT, INTERVAL 2 MONTH) |
+------------+---------------------------------------+
| 1990-12-17 | 1991-02-17 |
| 1990-02-20 | 1990-04-20 |
| 1991-02-22 | 1991-04-22 |
| 1991-04-02 | 1991-06-02 |
| 1991-09-29 | 1991-11-29 |
| 1991-05-01 | 1991-07-01 |
| 1991-06-09 | 1991-08-09 |
| 1991-11-09 | 1992-01-09 |
| 1991-11-17 | 1992-01-17 |
| 1991-09-08 | 1991-11-08 |
| 1991-09-23 | 1991-11-23 |
| 1991-12-03 | 1992-02-03 |
| 1991-12-03 | 1992-02-03 |
| 1992-01-23 | 1992-03-23 |
+------------+---------------------------------------+


*DADA LA TABLA EMPLE RESTAR DOS MESES A LA FECHA DE
ALTA:

mysql> SELECT FECHA_ALT,DATE_ADD(FECHA_ALT, INTERVAL -2
MONTH)
-> FROM EMPLE;

+------------+----------------------------------------+
| FECHA_ALT | DATE_ADD(FECHA_ALT, INTERVAL -2 MONTH) |
+------------+----------------------------------------+
| 1990-12-17 | 1990-10-17 |
| 1990-02-20 | 1989-12-20 |
| 1991-02-22 | 1990-12-22 |
| 1991-04-02 | 1991-02-02 |
| 1991-09-29 | 1991-07-29 |
| 1991-05-01 | 1991-03-01 |
| 1991-06-09 | 1991-04-09 |
| 1991-11-09 | 1991-09-09 |
| 1991-11-17 | 1991-09-17 |
| 1991-09-08 | 1991-07-08 |
| 1991-09-23 | 1991-07-23 |
| 1991-12-03 | 1991-10-03 |
| 1991-12-03 | 1991-10-03 |
| 1992-01-23 | 1991-11-23 |
+------------+----------------------------------------+


Ó UTILIZANDO 'SUBDATE':

mysql> SELECT FECHA_ALT, SUBDATE(FECHA_ALT, INTERVAL 2
MONTH)
-> FROM EMPLE;

+------------+--------------------------------------+
| FECHA_ALT | SUBDATE(FECHA_ALT, INTERVAL 2 MONTH) |
+------------+--------------------------------------+
| 1990-12-17 | 1990-10-17 |
| 1990-02-20 | 1989-12-20 |
| 1991-02-22 | 1990-12-22 |
| 1991-04-02 | 1991-02-02 |
| 1991-09-29 | 1991-07-29 |
| 1991-05-01 | 1991-03-01 |
| 1991-06-09 | 1991-04-09 |
| 1991-11-09 | 1991-09-09 |
| 1991-11-17 | 1991-09-17 |
| 1991-09-08 | 1991-07-08 |
| 1991-09-23 | 1991-07-23 |
| 1991-12-03 | 1991-10-03 |
| 1991-12-03 | 1991-10-03 |
| 1992-01-23 | 1991-11-23 |
+------------+--------------------------------------+


*OBTENER DE LA TABLA EMPLE EL ULTIMO DIA DEL MES PARA
CADA UNA DE LAS FECHAS DE ALTA:

mysql> SELECT FECHA_ALT, LAST_DAY(FECHA_ALT)
-> FROM EMPLE;

+------------+---------------------+
| FECHA_ALT | LAST_DAY(FECHA_ALT) |
+------------+---------------------+
| 1990-12-17 | 1990-12-31 |
| 1990-02-20 | 1990-02-28 |
| 1991-02-22 | 1991-02-28 |
| 1991-04-02 | 1991-04-30 |
| 1991-09-29 | 1991-09-30 |
| 1991-05-01 | 1991-05-31 |
| 1991-06-09 | 1991-06-30 |
| 1991-11-09 | 1991-11-30 |
| 1991-11-17 | 1991-11-30 |
| 1991-09-08 | 1991-09-30 |
| 1991-09-23 | 1991-09-30 |
| 1991-12-03 | 1991-12-31 |
| 1991-12-03 | 1991-12-31 |
| 1992-01-23 | 1992-01-31 |
+------------+---------------------+


*OBTENER LA DIFERENCIA DE MESES QUE HAY ENTRE LAS
FECHAS '2000-05-05' Y '2000-01-01':

mysql> SELECT TIMESTAMPDIFF(MONTH,'2000-05-05','2000-01-01');

+------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2000-05-05','2000-01-01') |
+------------------------------------------------+
| -4 |
+------------------------------------------------+


*OBTENER NUESTRA EDAD:

EN AÑOS:

mysql> SELECT TIMESTAMPDIFF( YEAR,'1967-02-03','2011-05-30');

+------------------------------------------------+
| TIMESTAMPDIFF( YEAR,'1967-02-03','2011-05-30') |
+------------------------------------------------+
| 44 |
+------------------------------------------------+


EN MESES:

mysql> SELECT TIMESTAMPDIFF( MONTH,'1967-02-03','2011-05-30');

+-------------------------------------------------+
| TIMESTAMPDIFF( MONTH,'1967-02-03','2011-05-30') |
+-------------------------------------------------+
| 531 |
+-------------------------------------------------+


EN DIAS:

mysql> SELECT TIMESTAMPDIFF( DAY,'1967-02-03','2011-05-30');

+-----------------------------------------------+
| TIMESTAMPDIFF( DAY,'1967-02-03','2011-05-30') |
+-----------------------------------------------+
| 16187 |
+-----------------------------------------------+



STR_TO_DATE: CONVIERTE LA FECHA EN OTRO FORMATO.

*CODIFICAR EL FORMATO DE LA FECHA AMERICANA EN
FORMATO DE FECHA EUROPEA:

mysql> SELECT STR_TO_DATE('10.05.2011', GET_FORMAT(DATE, 'EUR')
);

+----------------------------------------------------+
| STR_TO_DATE('10.05.2011', GET_FORMAT(DATE, 'EUR')) |
+----------------------------------------------------+
| 2011-05-10 |
+----------------------------------------------------+


* VER LOS DEPARTAMENTOS QUE TIENEN EL SALARIO MEDIO
MAYOR O IGUAL QUE LA MEDIA DE TODOS LOS SALARIOS DE LA
TABLA EMPLE:

mysql> SELECT DEPT_NO,AVG(SALARIO)
-> FROM EMPLE
-> GROUP BY DEPT_NO
-> HAVING AVG(SALARIO) >= (SELECT AVG(SALARIO)
FROM EMPLE);

+---------+--------------+
| DEPT_NO | AVG(SALARIO) |
+---------+--------------+
| 10 | 2891.6667 |
| 20 | 2274.0000 |
+---------+--------------+


*OBTENER LA FECHA DE ALTA PARA LOS EMPLEADOS
CONTRATADOS ANTES DE 1992 DE LA TABLA EMPLE:

mysql> SELECT FECHA_ALT,APELLIDO
-> FROM EMPLE
-> WHERE FECHA_ALT <= '1992';

+------------+-----------+
| FECHA_ALT | APELLIDO |
+------------+-----------+
| 1990-12-17 | SANCHEZ |
| 1990-02-20 | ARROYO |
| 1991-02-22 | SALA |
| 1991-04-02 | JIMENEZ |
| 1991-09-29 | MARTIN |
| 1991-05-01 | NEGRO |
| 1991-06-09 | CEREZO |
| 1991-11-09 | GIL |
| 1991-11-17 | REY |
| 1991-09-08 | TOVAR |
| 1991-09-23 | ALONSO |
| 1991-12-03 | JIMENO |
| 1991-12-03 | FERNANDEZ |
+------------+-----------+


* CONSIDERANDO LAS TABLAS EMPLE Y DEPART OBTENER LAS
SUMAS DE SALARIOS, DEL SALARIO MAXIMO Y EL SALARIO
MINIMO POR CADA DEPARTAMENTO:

mysql> SELECT E.DEPT_NO, MAX(SALARIO), MIN(SALARIO),
SUM(SALARIO) 'TOTAL', D.DNOMBRE, E.OFICIO
-> FROM EMPLE E, DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO
-> GROUP BY E.DEPT_NO,E.OFICIO;

+---------+--------------+--------------+-------+---------------+------------+
| DEPT_NO | MAX(SALARIO) | MIN(SALARIO) | TOTAL | DNOMBRE | OFICIO |
+---------+--------------+--------------+-------+---------------+------------+
| 10 | 2885 | 2885 | 2885 | CONTABILIDAD | DIRECTOR |
| 10 | 1690 | 1690 | 1690 | CONTABILIDAD | EMPLEADO |
| 10 | 4100 | 4100 | 4100 | CONTABILIDAD | PRESIDENTE |
| 20 | 3000 | 3000 | 6000 | INVESTIGACION | ANALISTA |
| 20 | 2900 | 2900 | 2900 | INVESTIGACION | DIRECTOR |
| 20 | 1430 | 1040 | 2470 | INVESTIGACION | EMPLEADO |
| 30 | 3005 | 3005 | 3005 | VENTAS | DIRECTOR |
| 30 | 1335 | 1335 | 1335 | VENTAS | EMPLEADO |
| 30 | 1625 | 1350 | 6075 | VENTAS | VENDEDOR |
+---------+--------------+--------------+-------+---------------+------------+


Y FINALMENTE:

mysql> SELECT E.DEPT_NO, MAX(SALARIO), MIN(SALARIO),
SUM(SALARIO) 'TOTAL', D.DNOMBRE, E.OFICIO
-> FROM EMPLE E, DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO
-> GROUP BY E.DEPT_NO;

+---------+--------------+--------------+-------+---------------+----------+
| DEPT_NO | MAX(SALARIO) | MIN(SALARIO) | TOTAL | DNOMBRE | OFICIO |
+---------+--------------+--------------+-------+---------------+----------+
| 10 | 4100 | 1690 | 8675 | CONTABILIDAD | DIRECTOR |
| 20 | 3000 | 1040 | 11370 | INVESTIGACION | EMPLEADO |
| 30 | 3005 | 1335 | 10415 | VENTAS | VENDEDOR |
+---------+--------------+--------------+-------+---------------+----------+



* CALCULAR EL NUMERO DE EMPLEADOS QUE REALIZA CADA
OFICIO EN CADA DEPARTAMENTO Y QUEREMOS VISUALIZAR EL
DEPARTAMENTO, EL OFICIO Y NUMERO DE EMPLEADOS A PARTIR
DE LA TABLA EMPLE Y DEPART:

mysql> SELECT E.DEPT_NO, E.OFICIO, D.DNOMBRE, COUNT(*) 'Nº DE
EMPLEADOS'
-> FROM EMPLE E, DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO
-> GROUP BY DEPT_NO, OFICIO;

+---------+------------+---------------+------------------+
| DEPT_NO | OFICIO | DNOMBRE | Nº DE EMPLEADOS |
+---------+------------+---------------+------------------+
| 10 | DIRECTOR | CONTABILIDAD | 1 |
| 10 | EMPLEADO | CONTABILIDAD | 1 |
| 10 | PRESIDENTE | CONTABILIDAD | 1 |
| 20 | ANALISTA | INVESTIGACION | 2 |
| 20 | DIRECTOR | INVESTIGACION | 1 |
| 20 | EMPLEADO | INVESTIGACION | 2 |
| 30 | DIRECTOR | VENTAS | 1 |
| 30 | EMPLEADO | VENTAS | 1 |
| 30 | VENDEDOR | VENTAS | 4 |
+---------+------------+---------------+------------------+


* BUSCAR EL NUMERO MAXIMO DE EMPLEADOS QUE HAY EN
ALGUN DEPARTAMENTO:

MEDIANTE ESTA QUERY VEREMOS EL NUMERO DE EMPLEADOS
QUE HAY POR DEPARTAMENTO.

mysql> SELECT COUNT(*) 'Nº DE EMPLEADOS', DEPT_NO
-> FROM EMPLE
-> GROUP BY DEPT_NO;

+------------------+---------+
| Nº DE EMPLEADOS | DEPT_NO |
+------------------+---------+
| 3 | 10 |
| 5 | 20 |
| 6 | 30 |
+------------------+---------+


AHORA SACAREMOS LA FILA QUE NOS INTERESA PARTIENDO DE
LA CONSULTA ANTERIOR:

mysql> SELECT COUNT(*) 'Nº DE EMPLEADOS', DEPT_NO
-> FROM EMPLE GROUP BY DEPT_NO HAVING COUNT(*) >= ALL
(SELECT COUNT(*)
-> FROM EMPLE
-> GROUP BY DEPT_NO);

+------------------+---------+
| Nº DE EMPLEADOS | DEPT_NO |
+------------------+---------+
| 6 | 30 |
+------------------+---------+


* OBTENER EL NOMBRE DE LOS DEPARTAMENTOS QUE TENGAN
MAS DE CUATRO PERSONAS TRABAJANDO:

mysql> SELECT E.DEPT_NO, D.DNOMBRE, COUNT(*)
-> FROM EMPLE E, DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO
-> GROUP BY DEPT_NO
-> HAVING COUNT(*) >= '4';

+---------+---------------+----------+
| DEPT_NO | DNOMBRE | COUNT(*) |
+---------+---------------+----------+
| 20 | INVESTIGACION | 5 |
| 30 | VENTAS | 6 |
+---------+---------------+----------+


*OBTENER LOS DATOS DEL EMPLEADO Y SU DEPARTAMENTO:

mysql> SELECT *
-> FROM EMPLE E JOIN DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO
-> GROUP BY E.OFICIO;

+--------+----------+------------+------+------------+---------+----------+---------+---------+---
------------+-----------+
| EMP_NO | APELLIDO | OFICIO | DIR | FECHA_ALT | SALARIO | COMISION | DEPT_NO |
DEPT_NO | DNOMBRE | LOC |
+--------+----------+------------+------+------------+---------+----------+---------+---------+---
------------+-----------+
| 7788 | GIL | ANALISTA | 7566 | 1991-11-09 | 3000 | NULL | 20 | 20 |
INVESTIGACION | MADRID |
| 7566 | JIMENEZ | DIRECTOR | 7839 | 1991-04-02 | 2900 | NULL | 20 | 20 |
INVESTIGACION | MADRID |
| 7369 | SANCHEZ | EMPLEADO | 7902 | 1990-12-17 | 1040 | NULL | 20 | 20 |
INVESTIGACION | MADRID |
| 7839 | REY | PRESIDENTE | NULL | 1991-11-17 | 4100 | NULL | 10 | 10 |
CONTABILIDAD | SEVILLA |
| 7499 | ARROYO | VENDEDOR | 7698 | 1990-02-20 | 1500 | 390 | 30 | 30 |
VENTAS | BARCELONA |
+--------+----------+------------+------+------------+---------+----------+---------+---------+---
------------+-----------+


*PARTIENDO DE LA TABLA EMPLE, VISUALIZA POR CADA OFICIO
DE LOS EMPLEADOS DEL DEPARTAMENTO “VENTAS” LA SUMA DE
LOS SALARIOS:

mysql> SELECT DEPT_NO, OFICIO, SUM(SALARIO)
-> FROM EMPLE
-> WHERE DEPT_NO = (SELECT DEPT_NO
FROM DEPART
WHERE DNOMBRE LIKE 'VENTAS')
GROUP BY OFICIO;

+---------+----------+--------------+
| DEPT_NO | OFICIO | SUM(SALARIO) |
+---------+----------+--------------+
| 30 | DIRECTOR | 3005 |
| 30 | EMPLEADO | 1335 |
| 30 | VENDEDOR | 6075 |
+---------+----------+--------------+


Ó RESOLVIENDO POR JOIN:

mysql> SELECT E.DEPT_NO, E.OFICIO, D.DNOMBRE, SUM(SALARIO)
-> FROM EMPLE E JOIN DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO AND D.DNOMBRE = 'VENTAS'
-> GROUP BY OFICIO;

+---------+----------+---------+--------------+
| DEPT_NO | OFICIO | DNOMBRE | SUM(SALARIO) |
+---------+----------+---------+--------------+
| 30 | DIRECTOR | VENTAS | 3005 |
| 30 | EMPLEADO | VENTAS | 1335 |
| 30 | VENDEDOR | VENTAS | 6075 |
+---------+----------+---------+--------------+


*SELECCIONA AQUELLOS APELLIDOS DE LA TABLA EMPLE
CUYO SALARIO SEA IGUAL A LA MEDIA DEL SALARIO EN SU
DEPARTAMENTO:

mysql> SELECT E.DEPT_NO, D.DNOMBRE, E.APELLIDO, AVG(SALARIO)
-> FROM EMPLE E JOIN DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO
-> GROUP BY DEPT_NO;

+---------+---------------+----------+--------------+
| DEPT_NO | DNOMBRE | APELLIDO | AVG(SALARIO) |
+---------+---------------+----------+--------------+
| 10 | CONTABILIDAD | CEREZO | 2891.6667 |
| 20 | INVESTIGACION | SANCHEZ | 2274.0000 |
| 30 | VENTAS | ARROYO | 1735.8333 |
+---------+---------------+----------+--------------+


*A PARTIR DE LA TABLA EMPLE, VISUALIZA EL NUMERO
DE EMPLEADOS DE CADA DEPARTAMENTO CUYO OFICIO
SEA “EMPLEADO”:

mysql> SELECT EMP_NO, OFICIO, COUNT(*)
-> FROM EMPLE
-> WHERE OFICIO LIKE 'EMPLEADO'
-> GROUP BY DEPT_NO;

+--------+----------+----------+
| EMP_NO | OFICIO | COUNT(*) |
+--------+----------+----------+
| 7934 | EMPLEADO | 1 |
| 7369 | EMPLEADO | 2 |
| 7900 | EMPLEADO | 1 |
+--------+----------+----------+


*DESDE LA TABLA EMPLE, VISUALIZA EL DEPARTAMENTO QUE
TENGA MAS EMPLEADOS CUYO OFICIO SEA 'EMPLEADO':

mysql> SELECT DEPT_NO, OFICIO, COUNT(*)
-> FROM EMPLE
-> WHERE OFICIO LIKE 'EMPLEADO'
-> GROUP BY DEPT_NO
-> HAVING COUNT(*) >= ALL (SELECT COUNT(*)
FROM EMPLE
WHERE OFICIO LIKE 'EMPLEADO'
GROUP BY DEPT_NO);

+---------+----------+----------+
| DEPT_NO | OFICIO | COUNT(*) |
+---------+----------+----------+
| 20 | EMPLEADO | 2 |
+---------+----------+----------+


*A PARTIR DE LAS TABLAS EMPLE Y DEPART, VISUALIZA EL
NUMERO DE DEPARTAMENTO Y EL NOMBRE DE DEPARTAMENTO
QUE TENGA MAS EMPLEADOS CUYO OFICIO SEA “EMPLEADO”:

MEDIANTE UNA JOIN VISUALIZAMOS EL NUMERO DE EMPLEADOS
POR DEPARTAMENTO Y EL NOMBRE DEL DEPARTAMENTO:

mysql> SELECT E.DEPT_NO, D.DNOMBRE, COUNT(*)
-> FROM EMPLE E JOIN DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO AND OFICIO LIKE 'EMPLEADO'
-> GROUP BY DEPT_NO;

+---------+---------------+----------+
| DEPT_NO | DNOMBRE | COUNT(*) |
+---------+---------------+----------+
| 10 | CONTABILIDAD | 1 |
| 20 | INVESTIGACION | 2 |
| 30 | VENTAS | 1 |
+---------+---------------+----------+


AHORA DEBEMOS SELECCIONAR DE LA LISTA, EL
DEPARTAMENTO QUE TIENE MAS EMPLEADOS:

mysql> SELECT E.DEPT_NO, D.DNOMBRE, E.OFICIO, COUNT(*)
-> FROM EMPLE E JOIN DEPART D
-> WHERE E.DEPT_NO = D.DEPT_NO AND OFICIO LIKE 'EMPLEADO'
-> GROUP BY DEPT_NO
-> HAVING COUNT(*) >= ALL (SELECT COUNT(*)
FROM EMPLE
WHERE OFICIO LIKE 'EMPLEADO'
GROUP BY DEPT_NO);

+---------+---------------+----------+----------+
| DEPT_NO | DNOMBRE | OFICIO | COUNT(*) |
+---------+---------------+----------+----------+
| 20 | INVESTIGACION | EMPLEADO | 2 |
+---------+---------------+----------+----------+


*BUSCA LOS DEPARTAMENTOS QUE TIENEN MAS DE DOS
PERSONAS TRABAJANDO EN LA MISMA PROFESION:

DE ESTA FORMA OBTENEMOS EL NUMERO DE EMPLEADOS EN EL
CUAL TRABAJAN MAS DE DOS, SEGUN SU OFICIO:

mysql> SELECT DEPT_NO, OFICIO, COUNT(*)
-> FROM EMPLE
-> GROUP BY OFICIO
-> HAVING COUNT(*) > '2';

+---------+----------+----------+
| DEPT_NO | OFICIO | COUNT(*) |
+---------+----------+----------+
| 20 | DIRECTOR | 3 |
| 20 | EMPLEADO | 4 |
| 30 | VENDEDOR | 4 |
+---------+----------+----------+


Ó TAMBIEN PODEMOS AVERIGUAR POR SU DEPARTAMENTO:

mysql> SELECT DEPT_NO, OFICIO, COUNT(*)
-> FROM EMPLE
-> GROUP BY DEPT_NO
-> HAVING COUNT(*) > 2;

+---------+----------+----------+
| DEPT_NO | OFICIO | COUNT(*) |
+---------+----------+----------+
| 10 | DIRECTOR | 3 |
| 20 | EMPLEADO | 5 |
| 30 | VENDEDOR | 6 |
+---------+----------+----------+


Ó AGRUPADO POR SU DEPARTAMENTO Y EL OFICIO:

mysql> SELECT DEPT_NO, OFICIO, COUNT(*)
-> FROM EMPLE
-> GROUP BY DEPT_NO, OFICIO
-> HAVING COUNT(*) > '2';

+---------+----------+----------+
| DEPT_NO | OFICIO | COUNT(*) |
+---------+----------+----------+
| 30 | VENDEDOR | 4 |
+---------+----------+----------+



TABLAS ALUM, ANTIGUOS Y NUEVOS. (CUARTA_DB)

*VISUALIZA LOS NOMBRES DE LOS ALUMNOS DE LA TABLA ALUM
QUE APAREZCA EN ESTAS DOS TABLAS: ANTIGUOS Y NUEVOS:

mysql> SELECT NOMBRE
-> FROM ALUM
-> WHERE NOMBRE IN (SELECT NOMBRE
-> FROM ANTIGUOS
-> WHERE NOMBRE IN (SELECT NOMBRE
-> FROM NUEVOS ));

+---------+
| NOMBRE |
+---------+
| ERNESTO |
+---------+


Ó POR JOIN:

mysql> SELECT A.NOMBRE 'NOMBRE TABLA ANTIGUOS',
N.NOMBRE 'NOMBRE TABLA NUEVOS'
-> FROM ALUM AL JOIN ANTIGUOS A JOIN NUEVOS N
-> WHERE AL.NOMBRE = A.NOMBRE AND AL.NOMBRE = N.NOMBRE
AND A.NOMBRE = N.NOMBRE;

+-----------------------+---------------------+
| NOMBRE TABLA ANTIGUOS | NOMBRE TABLA NUEVOS |
+-----------------------+---------------------+
| ERNESTO | ERNESTO |
+-----------------------+---------------------+


Ó OTRA FORMA DE RESOLVER:

mysql> SELECT NOMBRE
-> FROM ALUM
-> WHERE NOMBRE IN (SELECT NOMBRE
-> FROM ANTIGUOS) AND NOMBRE IN (SELECT NOMBRE
-> FROM NUEVOS);

+---------+
| NOMBRE |
+---------+
| ERNESTO |
+---------+


*ESCRIBE LAS DISTINTAS FORMAS EN QUE SE PUEDE PONER LA
CONSULTA ANTERIOR LLEGANDO AL MISMO RESULTADO:

mysql> SELECT NOMBRE
-> FROM ALUM
-> WHERE NOMBRE IN (SELECT NOMBRE
-> FROM ANTIGUOS) AND NOMBRE IN (SELECT NOMBRE
-> FROM NUEVOS);

+---------+
| NOMBRE |
+---------+
| ERNESTO |
+---------+


*VISUALIZA AQUELLOS NOMBRES DE LA TABLA ALUM QUE NO
ESTEN EN LA TABLA ANTIGUOS NI EN LA TABLA NUEVOS:

mysql> SELECT NOMBRE
-> FROM ALUM
-> WHERE NOMBRE NOT IN (SELECT NOMBRE
-> FROM ANTIGUOS) AND NOMBRE NOT IN (SELECT NOMBRE
-> FROM NUEVOS);

+--------+
| NOMBRE |
+--------+
| PEDRO |
| LUISA |
| RAQUEL |
+--------+


*REALIZA UNA CONSULTA EN LA QUE APAREZCA POR CADA
CENTRO Y EN CAFA ESPECIALIDAD EL NUMERO DE PROFESORES.
SI EL CENTRO NO TIENE PROFESORES, DEBE APARECER UN 0
EN LA COLUMNA DE NUMERO DE PROFESORES. LAS COLUMNAS
A VISUALIZAR SON: NOMBRE DE CENTRO, ESPECIALIDAD Y
NUMERO DE PROFESORES.

mysql> SELECT C.COD_CENTRO, C.NOMBRE, P.ESPECIALIDAD,
COUNT(*) 'NUMERO DE PROFESORES'
-> FROM CENTROS C JOIN PROFESORES P
-> WHERE C.COD_CENTRO = P.COD_CENTRO
-> GROUP BY COD_CENTRO, ESPECIALIDAD;

+------------+--------------------+--------------+----------------------+
| COD_CENTRO | NOMBRE | ESPECIALIDAD | NUMERO DE PROFESORES |
+------------+--------------------+--------------+----------------------+
| 10 | IES El Quijote | INFORM�TICA | 1 |
| 10 | IES El Quijote | MATEM�TICAS | 2 |
| 15 | CP Los Danzantes | DIBUJO | 1 |
| 15 | CP Los Danzantes | LENGUA | 2 |
| 22 | IES Planeta Tierra | MATEM�TICAS | 1 |
| 45 | CP Manuel Hidalgo | INFORM�TICA | 1 |
+------------+--------------------+--------------+----------------------+


Ó

mysql> SELECT C.COD_CENTRO, C.NOMBRE, P.ESPECIALIDAD,
COUNT(*) 'NUMERO DE PROFESORES'
-> FROM CENTROS C JOIN PROFESORES P
-> WHERE C.COD_CENTRO = P.COD_CENTRO
-> GROUP BY NOMBRE, ESPECIALIDAD;

+------------+--------------------+--------------+----------------------+
| COD_CENTRO | NOMBRE | ESPECIALIDAD | NUMERO DE PROFESORES |
+------------+--------------------+--------------+----------------------+
| 15 | CP Los Danzantes | DIBUJO | 1 |
| 15 | CP Los Danzantes | LENGUA | 2 |
| 45 | CP Manuel Hidalgo | INFORM�TICA | 1 |
| 10 | IES El Quijote | INFORM�TICA | 1 |
| 10 | IES El Quijote | MATEM�TICAS | 2 |
| 22 | IES Planeta Tierra | MATEM�TICAS | 1 |
+------------+--------------------+--------------+----------------------+


Ó

mysql> SELECT C.COD_CENTRO, C.NOMBRE, P.ESPECIALIDAD,
COUNT(*) 'NUMERO DE EMPLEADOS'
-> FROM CENTROS C JOIN PROFESORES P
-> WHERE C.COD_CENTRO = P.COD_CENTRO
-> GROUP BY C.NOMBRE, P.ESPECIALIDAD;

+------------+--------------------+--------------+---------------------+
| COD_CENTRO | NOMBRE | ESPECIALIDAD | NUMERO DE EMPLEADOS |
+------------+--------------------+--------------+---------------------+
| 15 | CP Los Danzantes | DIBUJO | 1 |
| 15 | CP Los Danzantes | LENGUA | 2 |
| 45 | CP Manuel Hidalgo | INFORM�TICA | 1 |
| 10 | IES El Quijote | INFORM�TICA | 1 |
| 10 | IES El Quijote | MATEM�TICAS | 2 |
| 22 | IES Planeta Tierra | MATEM�TICAS | 1 |
+------------+--------------------+--------------+---------------------+


*OBTEN POR CADA CENTRO EL NUMERO DE EMPLEADOS. SI EL
CENTRO CARECE DE EMPLEADOS, HA DE APARECER UN '0' COMO
NUMERO DE EMPLEADOS:

mysql> SELECT C.COD_CENTRO, COUNT(*) 'NUMERO DE PERSONAL'
-> FROM PERSONAL P RIGHT JOIN CENTROS C ON
-> P.COD_CENTRO = C.COD_CENTRO
-> GROUP BY COD_CENTRO;

+------------+--------------------+
| COD_CENTRO | NUMERO DE PERSONAL |
+------------+--------------------+
| 10 | 4 |
| 15 | 5 |
| 22 | 3 |
| 45 | 2 |
| 50 | 1 |
+------------+--------------------+



12.-OBTEN LA ESPECIALIDAD CON MENOS PROFESORES:

mysql> SELECT ESPECIALIDAD, COUNT(*) 'NUMERO DE PROFESORES'
-> FROM PROFESORES
-> GROUP BY ESPECIALIDAD
-> HAVING COUNT(*) <=ALL (SELECT COUNT(*)
-> FROM PROFESORES
-> GROUP BY ESPECIALIDAD);

+--------------+----------------------+
| ESPECIALIDAD | NUMERO DE PROFESORES |
+--------------+----------------------+
| DIBUJO | 1 |
+--------------+----------------------+


Ó

mysql> SELECT ESPECIALIDAD, COUNT(DNI) 'NUMERO DE
PROFESORES'
-> FROM PROFESORES
-> GROUP BY ESPECIALIDAD
-> HAVING COUNT(DNI) <=ALL (SELECT COUNT(DNI)
-> FROM PROFESORES
-> GROUP BY ESPECIALIDAD);

+--------------+----------------------+
| ESPECIALIDAD | NUMERO DE PROFESORES |
+--------------+----------------------+
| DIBUJO | 1 |
+--------------+----------------------+



TABLAS: BANCOS, SUCURSALES, CUENTAS Y MOVIMIENTOS.

*OBTEN EL BANCO CON MAS SUCURSALES. LOS DATOS A
OBTENER SON: 'NOMBRE BANCO', 'Nº SUCURSALES'.

mysql> SELECT B.COD_BANCO, B.NOMBRE_BANC, S.COD_SUCUR,
COUNT(*) 'BANCOS CON MAS SUCURSALES'
-> FROM BANCOS B JOIN SUCURSALES S
-> WHERE B.COD_BANCO = S.COD_BANCO
-> GROUP BY COD_BANCO;

+-----------+----------------------+-----------+---------------------------+
| COD_BANCO | NOMBRE_BANC | COD_SUCUR | BANCOS CON MAS SUCURSALES |
+-----------+----------------------+-----------+---------------------------+
| 1111 | BANCO DE ESPA�A | 5000 | 2 |
| 1112 | BANCO DE GUADALAJARA | 6000 | 1 |
| 1113 | BANCO POPULAR | 4000 | 1 |
+-----------+----------------------+-----------+---------------------------+


AHORA SELECCIONAREMOS EL BANCO QUE TIENE MAS
SUCURSALES:

mysql> SELECT B.COD_BANCO, B.NOMBRE_BANC, S.COD_SUCUR,
COUNT(*) 'BANCOS CON MAS SUCURSALES'
-> FROM BANCOS B JOIN SUCURSALES S
-> WHERE B.COD_BANCO = S.COD_BANCO
-> GROUP BY COD_BANCO
-> HAVING COUNT(*) >=ALL (SELECT COUNT(*)
-> FROM SUCURSALES
-> GROUP BY COD_BANCO);

+-----------+-----------------+-----------+---------------------------+
| COD_BANCO | NOMBRE_BANC | COD_SUCUR | BANCOS CON MAS SUCURSALES |
+-----------+-----------------+-----------+---------------------------+
| 1111 | BANCO DE ESPA�A | 5000 | 2 |
+-----------+-----------------+-----------+---------------------------+


*EL SALDO ACTUAL DE LOS BANCOS DE 'GUADALAJARA', UNA
FILA POR CADA BANCO. LOS DATOS A OBTERNER SON: 'NOMBRE
BANCO', 'SALDO DEBE', 'SALDO HABER':

mysql> SELECT B.NOMBRE_BANC 'NOMBRE BANCO',
SUM(SALDO_DEBE) 'SALDO DEBE', SUM(SALDO_HABER) 'SALDO
HABER', B.POBLACION
-> FROM BANCOS B JOIN CUENTAS C
-> WHERE B.COD_BANCO = C.COD_BANCO AND POBLACION
LIKE 'GUADALAJARA'
-> GROUP BY B.COD_BANCO;

+----------------------+------------+-------------+-------------+
| NOMBRE BANCO | SALDO DEBE | SALDO HABER | POBLACION |
+----------------------+------------+-------------+-------------+
| BANCO DE GUADALAJARA | 0 | 0 | GUADALAJARA |
+----------------------+------------+-------------+-------------+


Ó

mysql> SELECT B.NOMBRE_BANC, C.SALDO_DEBE, C.SALDO_HABER,
B.POBLACION
-> FROM BANCOS B JOIN CUENTAS C
-> WHERE B.COD_BANCO = C.COD_BANCO AND POBLACION
LIKE 'GUADALAJARA'
-> GROUP BY C.COD_BANCO;

+----------------------+------------+-------------+-------------+
| NOMBRE_BANC | SALDO_DEBE | SALDO_HABER | POBLACION |
+----------------------+------------+-------------+-------------+
| BANCO DE GUADALAJARA | 0 | 0 | GUADALAJARA |
+----------------------+------------+-------------+-------------+


15.-DATOS DE LA CUENTA O CUENTAS CON MAS MOVIMIENTOS.
LOS DATOS A OBTENER SON: 'NOMBRE CTA', 'Nº MOVIMIENTOS'.

mysql> SELECT C.NOMBRE_CTA, COUNT(*) 'Nº MOVIMIENTOS'
-> FROM CUENTAS C JOIN MOVIMIENTOS M
-> WHERE M.COD_SUCUR = C.COD_SUCUR AND M.COD_BANCO =
C.COD_BANCO AND M.NUM_CTA = C.NUM_CTA
-> GROUP BY M.NUM_CTA
-> HAVING COUNT(*) >=ALL (SELECT COUNT(*)
-> FROM MOVIMIENTOS
-> GROUP BY NUM_CTA);

+------------+-----------------+
| NOMBRE_CTA | Nº MOVIMIENTOS |
+------------+-----------------+
| ISABEL | 4 |
+------------+-----------------+

Ó

mysql> SELECT C.NOMBRE_CTA, COUNT(*) 'Nº MOVIMIENTOS'
-> FROM CUENTAS C JOIN MOVIMIENTOS M
-> WHERE M.COD_SUCUR = C.COD_SUCUR AND M.NUM_CTA =
C.NUM_CTA AND M.COD_BANCO = C.COD_BANCO
-> GROUP BY M.NUM_CTA = C.NUM_CTA
-> HAVING COUNT(*) >=ALL (SELECT COUNT(*)
-> FROM MOVIMIENTOS
-> GROUP BY NUM_CTA);

+------------+-----------------+
| NOMBRE_CTA | Nº MOVIMIENTOS |
+------------+-----------------+
| ISABEL | 12 |
+------------+-----------------+


16.-EL NOMBRE DE LA SUCURSAL QUE HAYA TENIDO MAS
SUMA DE REINTEGROS. LOS DATOS A OBTENER SON: 'NOMBRE
SUCURSAL', 'SUMA REINTEGROS'.

mysql> SELECT S.NOMBRE_SUC, M.COD_SUCUR, SUM(TIPO_MOV)
'REINTEGROS'
-> FROM SUCURSALES S JOIN MOVIMIENTOS M
-> WHERE S.COD_BANCO = M.COD_BANCO AND S.COD_SUCUR =
M.COD_SUCUR
-> GROUP BY M.COD_SUCUR, M.COD_BANCO;

+------------------+-----------+------------+
| NOMBRE_SUC | COD_SUCUR | REINTEGROS |
+------------------+-----------+------------+
| * SUCURSAL 1* | 5000 | 0 |
| * SUCURSAL 2* | 5001 | 0 |
| * SUCURSAL 6000* | 6000 | 0 |
+------------------+-----------+------------+

Y

mysql> SELECT S.NOMBRE_SUC, M.COD_SUCUR, SUM(TIPO_MOV)
'REINTEGROS'
-> FROM SUCURSALES S JOIN MOVIMIENTOS M
-> WHERE S.COD_SUCUR = M.COD_SUCUR AND S.COD_BANCO =
M.COD_BANCO
-> GROUP BY M.COD_SUCUR, M.COD_BANCO
-> HAVING COUNT(*) >=ALL (SELECT COUNT(*)
-> FROM MOVIMIENTOS
-> GROUP BY COD_SUCUR);

+------------------+-----------+------------+
| NOMBRE_SUC | COD_SUCUR | REINTEGROS |
+------------------+-----------+------------+
| * SUCURSAL 6000* | 6000 | 0 |
+------------------+-----------+------------+

| EL APELLIDO ES SANCHEZ | | EL APELLIDO ES ARROYO | | EL APELLIDO ES SALA | | EL APELLIDO ES JIMENEZ | | EL APELLIDO ES MARTIN | | EL APELLIDO ES NEGRO | | EL APELLIDO ES CEREZO | | EL APELLIDO ES GIL | | EL APELLIDO ES REY | | EL APELLIDO ES TOVAR | | EL APELLIDO ES ALONSO | | EL APELLIDO ES JIMENO | | EL APELLIDO ES FERNANDEZ | | EL APELLIDO ES MUÑOZ | +------------------------------------+

*CONCATENAR LAS COLUMNAS APELLIDO Y FUNCIONES DE LA TABLA EMPLE CON UN ESPACIO DE '9' ENTRE LAS DOS COLUMNAS: mysql> SELECT CONCAT('NOMBRE ',APELLIDO) NAME, CONCAT('TRABAJA EN ',OFICIO) DATOS FROM EMPLE;
+------------------+-----------------------+ | NAME | DATOS | +------------------+-----------------------+ | NOMBRE SANCHEZ | TRABAJA EN EMPLEADO | | NOMBRE ARROYO | TRABAJA EN VENDEDOR | | NOMBRE SALA | TRABAJA EN VENDEDOR | | NOMBRE JIMENEZ | TRABAJA EN DIRECTOR | | NOMBRE MARTIN | TRABAJA EN VENDEDOR | | NOMBRE NEGRO | TRABAJA EN DIRECTOR | | NOMBRE CEREZO | TRABAJA EN DIRECTOR | | NOMBRE GIL | TRABAJA EN ANALISTA | | NOMBRE REY | TRABAJA EN PRESIDENTE | | NOMBRE TOVAR | TRABAJA EN VENDEDOR | | NOMBRE ALONSO | TRABAJA EN EMPLEADO | | NOMBRE JIMENO | TRABAJA EN EMPLEADO | | NOMBRE FERNANDEZ | TRABAJA EN ANALISTA | | NOMBRE MUÑOZ | TRABAJA EN EMPLEADO | +------------------+-----------------------+

mysql> SELECT CONCAT(CONCAT('NOMBRE: ',APELLIDO),CONCAT('FUNCIONES: ',OFICI O)) DATOS FROM EMPLE;
+--------------------------------------+ | DATOS | +--------------------------------------+ | NOMBRE: SANCHEZFUNCIONES: EMPLEADO | | NOMBRE: ARROYOFUNCIONES: VENDEDOR | | NOMBRE: SALAFUNCIONES: VENDEDOR |

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->