Bitácora de Oracle MySQL 2
Bitácora de Oracle MySQL 2
Bitácora de Oracle MySQL 2
mysql> Alumno;
>Emanuel Córdova Montiel,
mysql> Materia;
>Administración de Base de datos,
mysql> Docente;
>Wilbert Colorado Canto,
mysql> Carrera;
>Ingenieria Sistemas Computacionales,
Esta es una bitácora que contiene algunas de las sentencias que se vieron durante todo el
semestre con la materia de administración de bases de datos. Cada una de las cuales, se
fueron viendo conforme al grado de complejidad comenzando desde setencas sencillas
como crear una base de datos hasta sentencias complejas para crear triggers.
Para llevar a cabo las prácticas se utilizó el emulador WampServer en la versión 3.1.0 con
el sistema gestor de base de datos relacional Oracle MySQL en la versión 5.7.19.
El equipo u ordenador que se utilizó es una Samsung Notebook modelo NP-RV415L con el
sistema operativo Windows 8.1 Pro.
Contenido
Introducción y herramientas utilizadas. .............................................................................................................1
Introducción a algunos comandos básicos. ......................................................................................................3
Sentencias LDD (Lenguaje de Definición de Datos) .........................................................................................6
Sentencias LMD (Lenguaje de Manipulación de Datos) ...................................................................................8
Clausulas .............................................................................................................................................................8
Funciones de agregado................................................................................................................................... 10
Operadores Lógicos ........................................................................................................................................ 11
Operadores Relacionales................................................................................................................................. 11
Consultas | 24 de febrero de 2018 .................................................................................................................. 13
Consultas | 2 de marzo de 2018...................................................................................................................... 17
Base de datos de las ventas de SKY ............................................................................................................... 22
Subconsultas | 6 de marzo de 2018 ................................................................................................................ 27
Subconsultas | 14 de marzo de 2018 .............................................................................................................. 28
Vistas ................................................................................................................................................................ 29
Vistas simples ........................................................................................................................................... 30
Vistas complejas....................................................................................................................................... 31
Tarea especial (45 tablas) ................................................................................................................................ 32
Tarea especial (30 vistas nuevas con alias) ..................................................................................................... 68
Triggers ............................................................................................................................................................ 90
1. USE
Este comando tiene como función usar o conectarse a una base de datos existente.
Ejemplo
mysql> USE prueba;
Database changed
2. STATUS
Este comando nos muestra una información general de la base de datos, como, por
ejemplo, a la base de datos que estamos actualmente trabajando, un id, el usuario y el
puerto que utiliza el servidor.
Ejemplo
mysql> STATUS;
--------------
c:/wamp64/bin/mysql/mysql5.7.19/bin/mysql.exe Ver 14.14 Distrib 5.7.19, for Win64 (x86_64)
Connection id: 12
Current database: ventas_sky
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 5.7.19 MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: cp850
Conn. characterset: cp850
TCP port: 3306
Uptime: 4 days 4 hours 40 min 46 sec
Threads: 1 Questions: 305 Slow queries: 0 Opens: 178 Flush tables: 1 Open tables: 167 Queries
per second avg: 0.000
--------------
3. CONNECT
Es similar al comando USE, igual se conecta a una base de datos existente, pero muestra
información adicional como un id de conexión y el nombre de la base de datos actual a
la que está conectada.
Ejemplo
mysql> CONNECT prueba;
Connection id: 4
Current database: prueba
4. SHOW DATABASES
Este comando muestra una lista de todas las bases de datos que están en el servidor.
Ejemplo
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| papeleria |
| performance_schema |
| phpmyadmin |
| plantillaempresa |
| practica1 |
| proveedor |
| proveedores |
| prueba |
| servicios |
| sistemas |
| test |
| tienda |
| uno |
| ventas_sky |
+--------------------+
19 rows in set (0.06 sec)
5. SHOW TABLES
El comando SHOW TABLES muestra todas las tablas que hay una base de datos
actual.
Ejemplo
mysql> SHOW TABLES;
+------------------+
| Tables_in_prueba |
+------------------+
| bonus |
| clientes |
| dept |
| dept1 |
| dept2 |
| emp |
| emp1 |
| emp3 |
| emp4 |
| empleado1 |
| empleado2 |
| employees |
| empvu10 |
| pedidos |
| pedidos1 |
| problema |
| problema5 |
| prueba |
| salvu30 |
| t |
| t1 |
| t10 |
| t7 |
| t8 |
| t9 |
+------------------+
36 rows in set (0.03 sec)
6. DESCRIBE
Si se desea tener información sobre el esquema o estructura de la tabla de una base de
datos se utiliza este comando.
Ejemplo
mysql> DESCRIBE emp;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| empno | decimal(4,0) | NO | PRI | 0 | |
| ename | char(10) | YES | MUL | NULL | |
| job | char(9) | YES | | NULL | |
| mgr1 | decimal(10,0) | YES | | NULL | |
| hiredate | datetime | YES | | NULL | |
| sal | decimal(7,2) | NO | | 0.00 | |
| comm | decimal(7,0) | YES | | NULL | |
| deptno | decimal(2,0) | YES | | NULL | |
| c_id | int(11) | YES | | NULL | |
| thriftplan | decimal(9,2) | YES | | NULL | |
| loancode | char(1) | YES | | NULL | |
+------------+---------------+------+-----+---------+-------+
11 rows in set (1.34 sec)
7. DESC
Es similar al comando DESCRIBE, muestra la estructura de la tabla de una base de
datos.
Ejemplo
mysql> DESC emp;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
8. CREATE
Esta sentencia crea un objeto. Por ejemplo: base de datos, tablas, vistas, triggers, etc.
9. CREATE DATABASE
Esta sentencia permite crear una base de datos.
Ejemplo: se crea una base de datos llamada mydb.
mysql> CREATE DATABASE mydb;
Query OK, 1 row affected (0.05 sec)
13. DROP
Esta sentencia elimina un objeto (de los ya mencionados arriba).
17. SELECT
Esta sentencia se utiliza para recuperar datos. Por ejemplo, cuando queremos hacer
consultas.
Clausulas
19. FROM
Esta cláusula especifica la tabla de la cual se va a seleccionar un registro.
20. WHERE
Especifica las condiciones que deben reunir los registros que se van a seleccionar.
Ejemplo: en esta consulta sencilla se recupera solo el nombre y el cargo del empleado
con número 7934.
mysql> SELECT ename, job FROM emp WHERE empno=7934;
+--------+-------+
| ename | job |
+--------+-------+
| MILLER | CLERK |
+--------+-------+
1 row in set (0.07 sec)
21. HAVING
Expresa la condición que debe satisfacer a cada grupo.
Ejemplo: en esta consulta se aplica una función de grupo donde muestra alempleado
que ganas menos.
mysql> SELECT ename, sal FROM emp WHERE sal HAVING MIN(sal);
+-------+---------+
| ename | sal |
+-------+---------+
| JINKS | 1200.00 |
+-------+---------+
1 row in set (0.03 sec)
22. GROUP BY
Separa los registros seleccionados en grupos específicos.
Ejemplo: en esta consulta se devuelven los campos, pero agrupados por el cargo.
mysql> SELECT ename, job FROM emp GROUP BY job;
+-------+-----------+
| ename | job |
+-------+-----------+
| SCOTT | ANALYST |
| FORD | ANLYST |
| JINKS | CLERK |
| JONES | MANAGER |
| KING | PRESIDENT |
| ALLEN | SALESMAN |
+-------+-----------+
6 rows in set (0.03 sec)
23. ORDER BY
Ordena los registros seleccionados de acuerdo con un orden especifico.
Ejemplo: en esta consulta sencilla se devuelven los nombres ordenados de forma
ascendente o en este caso en orden alfabético ya que por defecto devuelve los registros
en ascendente.
mysql> SELECT ename FROM emp ORDER BY ename;
+--------+
| ename |
+--------+
| ADAMS |
| ALLEN |
| BLAKE |
| CLARK |
| FORD |
| JAMES |
| KING |
| MARTIN |
| MILLER |
| SMITH |
| TURNER |
| WARD |
+--------+
15 rows in set (0.00 sec)
Funciones de agregado
24. AVG
Esta función de agregado calcula el promedio de los valores de un campo
determinado.
Ejemplo: en esta consulta se devuelven la media de todos los salarios de los distintos
empleados.
mysql> SELECT AVG(sal) MEDIA_DE_LOS_SALARIOS FROM emp;
+-----------------------+
| MEDIA_DE_LOS_SALARIOS |
+-----------------------+
| 2021.666667 |
+-----------------------+
1 row in set (0.06 sec)
25. MAX
Devuelve el valor más alto de un campo especifico.
Ejemplo: aquí lo que sucede es que devuelve el salario más alto de los empleados.
mysql> SELECT MAX(sal) FROM emp;
+----------+
| MAX(sal) |
+----------+
| 5000.00 |
+----------+
1 row in set (0.03 sec)
26. MIN
Devuelve el valor más bajo de un campo especifico.
Ejemplo: de igual manera, devuelve el salario pero más bajo de los empleados.
mysql> SELECT MIN(sal) FROM emp;
27. COUNT
Devuelve el número de registros de una selección.
Ejemplo: lo que pasa es que solo devuelve el número de registros que hay para el campo
de ename.
mysql> SELECT COUNT(ename) FROM emp;
+--------------+
| COUNT(ename) |
+--------------+
| 15 |
+--------------+
1 row in set (0.00 sec)
Operadores Lógicos
28. AND
Evalúa dos condiciones y devuelve un valor verdadero sólo si ambas condiciones son
ciertas.
29. OR
Evalúa dos condiciones y devuelve valor verdadero si alguna de las dos es cierta.
Operadores Relacionales
30. BETWEEN
Ejemplo: aquí esta consulta lo que hace es que muestra los salarios de los empleados
que ganen entre 1500 y 3000.
mysql> SELECT ename, sal FROM emp WHERE sal BETWEEN 1500 AND 3000;
+--------+---------+
| ename | sal |
+--------+---------+
| ALLEN | 1600.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| TURNER | 1500.00 |
| FORD | 3000.00 |
+--------+---------+
6 rows in set (0.36 sec)
31. LIKE
Ejemplo: en esta coinsulta lo que hace es que lista todos los nombres de los
empleados que comienzan con la letra A.
mysql> SELECT ename FROM emp WHERE ename LIKE 'A%';
+-------+
| ename |
+-------+
| ADAMS |
| ALLEN |
+-------+
2 rows in set (0.00 sec)
32. IN
Ejemplo: en esta consulta lista los empleados que tengan el cargo de clerk, manager o
salesman.
mysql> SELECT ename, job FROM emp WHERE job IN('CLERK', 'MANAGER', 'SALESMAN');
+--------+----------+
| ename | job |
+--------+----------+
| JINKS | CLERK |
| SMITH | CLERK |
| ALLEN | SALESMAN |
| WARD | SALESMAN |
| JONES | MANAGER |
| MARTIN | SALESMAN |
| BLAKE | MANAGER |
| CLARK | MANAGER |
| TURNER | SALESMAN |
| ADAMS | CLERK |
| JAMES | CLERK |
| MILLER | CLERK |
+--------+----------+
12 rows in set (0.36 sec)
33. Esta consulta muestra el número, el nombre, una descripción, los créditos, la tarifa y el
departamento del curso donde el crédito del curso sea 3 pero el departamento del curso
sea PHIL.
mysql> SELECT * FROM curso WHERE Cred=3 AND Cdept='PHIL';
+-----+-----------------+--------------------+------+---------+-------+
| Cno | Cnombre | Cdescp | Cred | Ctarifa | Cdept |
+-----+-----------------+--------------------+------+---------+-------+
| P11 | EMPIRISMO | VERLO PARA CREERLO | 3 | 100 | PHIL |
| P22 | RACIONALISMO | PARA USARLOS CIS | 3 | 50 | PHIL |
| P33 | EXISTENCIALISMO | PARA USARLOS CIS | 3 | 200 | PHIL |
+-----+-----------------+--------------------+------+---------+-------+
3 rows in set (0.05 sec)
34. Esta consulta muestra el número, el nombre, la descripción, los créditos, las tarifas y el
departamento de los cursos pero que la tarifa esté entre 100 y 500.
mysql> SELECT * FROM curso WHERE (Ctarifa>=100) AND (Ctarifa <= 500);
+-----+-----------------------+--------------------+------+---------+-------+
| Cno | Cnombre | Cdescp | Cred | Ctarifa | Cdept |
+-----+-----------------------+--------------------+------+---------+-------+
| C11 | INTROD. A LAS CC. | PARA NOVATOS | 3 | 100 | CIS |
| C55 | ARQUITECT. COMPUTADOR | MAQ. VON NEUMANN | 3 | 100 | CIS |
| C66 | BASES DE DATOS RELAC. | IMPRESCINDIBLE | 3 | 176 | CIS |
| P11 | EMPIRISMO | VERLO PARA CREERLO | 3 | 100 | PHIL |
| P33 | EXISTENCIALISMO | PARA USARLOS CIS | 3 | 200 | PHIL |
| T11 | ESCOLASTICISMO | PARA BEATOS | 3 | 150 | THEO |
| T44 | COMUNISMO | PARA AVAROS | 6 | 200 | THEO |
| C77 | GEOMETRÍA | ACTUAL | 6 | 140 | CIS |
+-----+-----------------------+--------------------+------+---------+-------+
8 rows in set (0.04 sec)
35. Esta consulta muestra el nombre, la cuota, y las ventas de la empresa donde las ventas
sean menores a la cuota y sean menores a 300,000.
mysql> SELECT Nombre, Cuota, Ventas FROM repventas WHERE Ventas < Cuota AND Ventas <
300000;
+---------------+--------+--------+
36. Esta consulta muestra el nombre, la cuota las ventas de la empresa donde las ventas
puedan ser menores a la cuota o sea menor a 300000
mysql> SELECT Nombre, Cuota, Ventas FROM repventas WHERE (Ventas < Cuota) OR (Ventas <
300000);
+---------------+--------+--------+
| Nombre | Cuota | Ventas |
+---------------+--------+--------+
| Paul Cruz | 235715 | 286775 |
| Bob Smith | 171428 | 142594 |
| Nancy Angelli | 285714 | 186042 |
| Mat¡as Clark | 100000 | 0 |
| 35 | 103 | 15 |
+---------------+--------+--------+
5rows in set (0.00 sec)
37. Esta consulta muestra el sueldo del personal junto con el sueldo del claustro.
mysql> SELECT Esueldo FROM personal UNION SELECT Fsueldo FROM claustro;
+---------+
| Esueldo |
+---------+
| 53 |
| 52 |
| 51 |
| 25001 |
| 25000 |
| 54 |
| 4000 |
| 200 |
| 500 |
| 0 |
| 35000 |
| 45000 |
| 36000 |
+---------+
13ows in set (0.16 sec)
38. Esta consulta muestra el Idfab, el id del producto de los productos donde los precios del
producto tengan un precio mayor a 2000 que se hicieron junto a los pedidos (fab,
producto) pero solo los nombres de los productos y el fab no repetidos y tengan un
importe mayor a los 3000.
mysql> SELECT Idfab, Idproducto FROM productos WHERE precio>2000 UNION SELECT DISTINCT
fab, producto FROM pedidos WHERE Importe>3000;
+-------+------------+
| Idfab | Idproducto |
+-------+------------+
| ACI | 4100Y |
| ACI | 4100Z |
| REI | 2A44L |
| REI | 2A44R |
| ACI | 41004 |
| IMM | 779C |
| ACI | 41003 |
| QSA | XK47 |
| ACI | 41002 |
| IMM | 775C |
+-------+------------+
10rows in set (0.01 sec)
39. Esta consulta muestra todos los sueldos del personal junto con todos los sueldos de
claustro.
mysql> SELECT Esueldo FROM personal UNION ALL SELECT Fsueldo FROM claustro;
+---------+
| Esueldo |
+---------+
| 53 |
| 52 |
| 51 |
| 25001 |
| 25000 |
| 54 |
| 4000 |
| 200 |
| 500 |
| 0 |
| 35000 |
| 45000 |
| 35000 |
| 45000 |
| 45000 |
| 36000 |
| 35000 |
+---------+
17rows in set (0.07 sec)
40. Esta consulta muestra el departamento y el nombre del curso ordenados de forma
ascendente.
mysql> SELECT Cdept, Cnombre FROM curso ORDER BY Cdept, Cnombre;
+-------+-----------------------+
| Cdept | Cnombre |
+-------+-----------------------+
| CIS | ARQUITECT. COMPUTADOR |
| CIS | BASES DE DATOS RELAC. |
| CIS | CIRCUITOS DIGITALES |
| CIS | ESTRUCT. DE DATOS |
| CIS | GEOMETRÍA |
| CIS | INTROD. A LAS CC. |
| CIS | MATEMATICAS DISCRETAS |
| PHIL | EMPIRISMO |
| PHIL | EXISTENCIALISMO |
| PHIL | RACIONALISMO |
| PHIL | SOLIPSISMO |
| THEO | COMUNISMO |
| THEO | ESCOLASTICISMO |
| THEO | FUNDAMENTALISMO |
| THEO | HEDONISMO |
+-------+-----------------------+
15 rows in set (0.13 sec)
41. Esta consulta muestra el número, el nombre, una descripción, los créditos, la tarifa y el
departamento del curso donde el departamento sea CIS o también donde la tarifa del curso
sea cero y los créditos a 3.
mysql> SELECT * FROM curso WHERE NOT Cdept='CIS' OR (Ctarifa=0 AND Cred=3);
+-----+-----------------------+--------------------+------+---------+-------+
| Cno | Cnombre | Cdescp | Cred | Ctarifa | Cdept |
+-----+-----------------------+--------------------+------+---------+-------+
| C33 | MATEMATICAS DISCRETAS | EL LENGUAJE DB2 | 3 | 0 | CIS |
| C44 | CIRCUITOS DIGITALES | AH HA! | 3 | 0 | CIS |
| P11 | EMPIRISMO | VERLO PARA CREERLO | 3 | 100 | PHIL |
| P22 | RACIONALISMO | PARA USARLOS CIS | 3 | 50 | PHIL |
| P33 | EXISTENCIALISMO | PARA USARLOS CIS | 3 | 200 | PHIL |
| P44 | SOLIPSISMO | PARA MI MISMO | 6 | 0 | PHIL |
| T11 | ESCOLASTICISMO | PARA BEATOS | 3 | 150 | THEO |
| T22 | FUNDAMENTALISMO | PARA DESCUIDADOS | 3 | 90 | THEO |
| T33 | HEDONISMO | PARA SANOS | 3 | 0 | THEO |
| T44 | COMUNISMO | PARA AVAROS | 6 | 200 | THEO |
+-----+-----------------------+--------------------+------+---------+-------+
10 rows in set (0.00 sec)
42. Esta consulta muestra la tarifa, y la suma de todos los créditos totales del curso
agrupados por tarifa y ordenados de forma descendente.
mysql> SELECT Ctarifa, SUM(Cred) AS CREDITOS_TOTALES FROM curso GROUP BY Ctarifa ORDER BY
Ctarifa DESC;
+---------+------------------+
| Ctarifa | CREDITOS_TOTALES |
+---------+------------------+
| 200 | 9 |
| 176 | 3 |
| 150 | 3 |
| 140 | 6 |
| 100 | 9 |
| 90 | 3 |
| 50 | 6 |
| 0 | 15 |
+---------+------------------+
8 rows in set (0.42 sec)
43. Esta consulta muestra el departamento y el promedio de las tarifas del curso agrupados
por el departamento donde solo el promedio de la tarifa sea mayor a 100 y el cuento sea
menor que 6.
mysql> SELECT Cdept, AVG(Ctarifa) FROM curso GROUP BY Cdept HAVING AVG(Ctarifa) > 100 AND
COUNT(*) < 6;
+-------+--------------+
| Cdept | AVG(Ctarifa) |
+-------+--------------+
| THEO | 110.0000 |
+-------+--------------+
1row in set (0.06 sec)
46. Esta consulta muestra todos los cursos agrupados por tarifa.
mysql> SELECT Cnombre, Ctarifa FROM curso GROUP BY Ctarifa;
+-----------------------+---------+
| Cnombre | Ctarifa |
+-----------------------+---------+
| MATEMATICAS DISCRETAS | 0 |
| ESTRUCT. DE DATOS | 50 |
| FUNDAMENTALISMO | 90 |
| INTROD. A LAS CC. | 100 |
| GEOMETRÍA | 140 |
| ESCOLASTICISMO | 150 |
| BASES DE DATOS RELAC. | 176 |
| EXISTENCIALISMO | 200 |
+-----------------------+---------+
8 rows in set (0.36 sec)
47. Esta consulta muestra el nombre de curso y la tarifa ordenados de forma ascendente.
mysql> SELECT Cnombre, Ctarifa FROM curso ORDER BY Ctarifa;
+-----------------------+---------+
| Cnombre | Ctarifa |
+-----------------------+---------+
| MATEMATICAS DISCRETAS | 0 |
| CIRCUITOS DIGITALES | 0 |
| SOLIPSISMO | 0 |
| HEDONISMO | 0 |
| ESTRUCT. DE DATOS | 50 |
| RACIONALISMO | 50 |
| FUNDAMENTALISMO | 90 |
| INTROD. A LAS CC. | 100 |
| ARQUITECT. COMPUTADOR | 100 |
| EMPIRISMO | 100 |
| GEOMETRÍA | 140 |
| ESCOLASTICISMO | 150 |
| BASES DE DATOS RELAC. | 176 |
| EXISTENCIALISMO | 200 |
| COMUNISMO | 200 |
+-----------------------+---------+
15 rows in set (0.00 sec)
48. Esta consulta muestra el nombre de curso y la tarifa ordenados de forma descendente.
mysql> SELECT Cnombre, Ctarifa FROM curso ORDER BY Ctarifa DESC;
+-----------------------+---------+
| Cnombre | Ctarifa |
+-----------------------+---------+
| EXISTENCIALISMO | 200 |
| COMUNISMO | 200 |
| BASES DE DATOS RELAC. | 176 |
| ESCOLASTICISMO | 150 |
| GEOMETRÍA | 140 |
| INTROD. A LAS CC. | 100 |
| ARQUITECT. COMPUTADOR | 100 |
| EMPIRISMO | 100 |
| FUNDAMENTALISMO | 90 |
| ESTRUCT. DE DATOS | 50 |
| RACIONALISMO | 50 |
| MATEMATICAS DISCRETAS | 0 |
| CIRCUITOS DIGITALES | 0 |
| SOLIPSISMO | 0 |
| HEDONISMO | 0 |
+-----------------------+---------+
15 rows in set (0.00 sec)
49. Esta consulta muestra todos los cursos por orden alfabético.
mysql> SELECT Cnombre FROM curso ORDER BY Cnombre;
+-----------------------+
| Cnombre |
+-----------------------+
| ARQUITECT. COMPUTADOR |
| BASES DE DATOS RELAC. |
| CIRCUITOS DIGITALES |
| COMUNISMO |
| EMPIRISMO |
| ESCOLASTICISMO |
| ESTRUCT. DE DATOS |
| EXISTENCIALISMO |
| FUNDAMENTALISMO |
| GEOMETRÍA |
| HEDONISMO |
| INTROD. A LAS CC. |
| MATEMATICAS DISCRETAS |
| RACIONALISMO |
| SOLIPSISMO |
+-----------------------+
15 rows in set (0.00 sec)
53. Esta consulta muestra el total de las tarifas de todos los cursos.
mysql> SELECT SUM(Ctarifa) TOTAL_DE_TARIFAS FROM curso;
+------------------+
| TOTAL_DE_TARIFAS |
+------------------+
| 1356 |
+------------------+
1 row in set (0.00 sec)
56. Esta consulta muestra el nombre del estudiante pero solo los que comiencen con la letra
R.
mysql> SELECT Snombre FROM estudiante WHERE Snombre LIKE 'R%';
+--------------+
| Snombre |
+--------------+
| ROCKY BALBOA |
+--------------+
1 row in set (0.08 sec)
57. Esta consulta muestra el nombre del estudiante que comienzan con la letra L.
mysql> SELECT Snombre FROM estudiante WHERE Snombre LIKE 'L%';
+-------------+
| Snombre |
+-------------+
| LARRY DUBAY |
+-------------+
1 row in set (0.00 sec)
58. Esta consulta muestra el número, el nombre y el cargo de los empleados que tengan un
salario menor que el del salario de los que tiene el cargo de CLERK.
mysql> SELECT empno, ename, job FROM emp WHERE sal < ANY (SELECT sal FROM emp WHERE job=
'CLERK') AND job <> 'CLERK';
+-------+--------+----------+
| empno | ename | job |
+-------+--------+----------+
| 7521 | WARD | SALESMAN |
| 7654 | MARTIN | SALESMAN |
+-------+--------+----------+
2 rows in set (0.05 sec)
+-----------------------------+-------------+------+-----+---------+-------+
14 rows in set (0.00 sec)
74. Esta subconsulta muestra el nombre del empleado que tiene el salario mayor del
empleado que tiene el número 7566.
mysql> SELECT ename FROM emp WHERE sal > (SELECT sal FROM emp WHERE empno=7566);
+-------+
| ename |
+-------+
| KING |
+-------+
1 row in set (0.36 sec)
75. Esta subconsulta muestra el nombre, el cargo y el salario de los empleados que tengan
un salario mayor al salario más alto.
mysql> SELECT ename, job, sal FROM emp WHERE sal = (SELECT MAX(sal) FROM emp);
+-------+-----------+---------+
| ename | job | sal |
+-------+-----------+---------+
| KING | PRESIDENT | 5000.00 |
+-------+-----------+---------+
1 row in set (0.00 sec)
76. Esta subconsulta muestra el nombre del empleado y el cargo pero solo los que tengan el
cargo del empleado con el número 7369 y el salario el salario sea mayor al del empleado
con el número 7876.
mysql> SELECT ename, job FROM emp WHERE job = (SELECT job FROM emp WHERE empno = 7369) AND
sal > (SELECT sal FROM emp WHERE empno = 7876);
+--------+-------+
| ename | job |
+--------+-------+
| JINKS | CLERK |
| MILLER | CLERK |
+--------+-------+
2 rows in set (0.38 sec)
77. Esta subconsulta muestra el nombre, el cargo y el salario del empleado que gane menos.
mysql> SELECT ename, job, sal FROM emp WHERE sal = (SELECT MIN(sal) FROM emp);
+-------+-------+--------+
| ename | job | sal |
+-------+-------+--------+
| SMITH | CLERK | 800.00 |
+-------+-------+--------+
1 row in set (0.03 sec)
78. Esta subconsulta muestra el número de departamento, el salario minimo de los
empleados por número de departamento
mysql> SELECT deptno, MIN(sal) FROM emp GROUP BY deptno HAVING MIN(sal) > (SELECT
MIN(sal) FROM emp WHERE deptno = 20);
+--------+----------+
| deptno | MIN(sal) |
+--------+----------+
| 10 | 1300.00 |
| 30 | 950.00 |
| 40 | 1200.00 |
+--------+----------+
3 rows in set (0.05 sec)
80. Esta consulta muestra el número de empleado, el nombre del empleado y el trabajo de
todos los empleados que cobran más que
la media de salarios de su departamento.
mysql> SELECT empno, ename, job FROM emp WHERE sal > ALL(SELECT AVG(sal) FROM emp GROUP
BY deptno);
+-------+-------+-----------+
| empno | ename | job |
+-------+-------+-----------+
| 7566 | JONES | MANAGER |
| 7788 | SCOTT | ANALYST |
| 7839 | KING | PRESIDENT |
| 7902 | FORD | ANLYST |
81. Con esta consulta se obtienen los empleados que tienen una cuota superior a la cuota de
alguno de sus compañeros de oficina, es decir, los empleados que no tengan la menor
cuota de su oficina.
SELECT * FROM empleados WHERE cuota > ANY (SELECT cuota FROM empleados empleados2 WHERE
empleados.oficina = empleados2.oficina);
82. Esta consulta muestra los empleados que tengan una cuota superior a todas las cuotas
de la oficina del empleado.
SELECT * FROM empleados WHERE cuota > ALL (SELECT cuota FROM empleados empleados2 WHERE
empleados.oficina. = empleados2.oficina AND empleados.cuota <> empleados2.cuota);
Vistas
83. Esta vista contiene el número, el nombre y el cargo de los empleados del departamento
con el número 10.
mysql> CREATE VIEW empvu10 AS SELECT empno, ename, job FROM emp WHERE deptno=10;
Query OK, 0 rows affected (0.20 sec)
84. Hacemos una consulta para ver el contenido de la vista empvu10.
mysql> SELECT * FROM empvu10;
+-------+--------+-----------+
| empno | ename | job |
+-------+--------+-----------+
| 7782 | CLARK | MANAGER |
| 7839 | KING | PRESIDENT |
| 7934 | MILLER | CLERK |
+-------+--------+-----------+
3 rows in set (0.05 sec)
85. Esta vista contiene el número, el nombre y el salario de los empleados con el
departamento número 30.
mysql> CREATE VIEW salvu30
-> AS SELECT empno NUMERO_REGISTRO, ename EMPLEADO, sal SALARIO
-> FROM emp WHERE deptno=30;
Query OK, 0 rows affected (0.09 sec)
86. Hacemos de igual forma, una consulta para ver el contenido de la vista salvu30.
mysql> SELECT * FROM salvu30;
+-----------------+----------+---------+
| NUMERO_REGISTRO | EMPLEADO | SALARIO |
+-----------------+----------+---------+
| 7499 | ALLEN | 1600.00 |
| 7521 | WARD | 1250.00 |
| 7654 | MARTIN | 1250.00 |
| 7698 | BLAKE | 2850.00 |
Vistas simples
87. Esta vista contiene el nombre, el cargo y el salario de todos los empleados que sean
vendedores.
mysql> CREATE VIEW vista_salesman
-> AS SELECT ename NOMBRE_EMPLEADO, job CARGO, sal SALARIO
-> FROM emp
-> WHERE job = 'SALESMAN';
Query OK, 0 rows affected (0.11 sec)
88. Hacemos una consulta para ver el contenido de la vista vista_salesman.
mysql> SELECT * FROM vista_salesman;
+-----------------+----------+---------+
| NOMBRE_EMPLEADO | CARGO | SALARIO |
+-----------------+----------+---------+
| ALLEN | SALESMAN | 1600.00 |
| WARD | SALESMAN | 1250.00 |
| MARTIN | SALESMAN | 1250.00 |
| TURNER | SALESMAN | 1500.00 |
+-----------------+----------+---------+
4 rows in set (0.06 sec)
89. Esta vista contiene el nombre de dos empleados, el que gane más y el que gana menos
mysql> CREATE VIEW view_max_min_sal
-> AS SELECT ename NOMBRE_EMPLEADO
-> FROM emp
-> WHERE sal = (SELECT MAX(sal) FROM emp) OR sal = (SELECT MIN(sal) FROM emp);
Query OK, 0 rows affected (0.19 sec)
90. Hacemos una consulta para ver el contenido de la vista view_max_min_sal.
mysql> SELECT * FROM view_max_min_sal;
+-----------------+
| NOMBRE_EMPLEADO |
+-----------------+
| SMITH |
| KING |
+-----------------+
2 rows in set (0.00 sec)
Vistas complejas
123. Hacemos una consulta para recuperar dichos campos de las tablas.
mysql> SELECT * FROM souvenir;
+----------------+------+----------+----------+---------+---------+--------+--------+----
----+------+
| clave_souvenir | tipo | cantidad | color | campaña | oficina | envios | precio |
tamaño | peso |
+----------------+------+----------+----------+---------+---------+--------+--------+----
----+------+
| 1 | NULL | 1 | Azul | NULL | 10 | NULL | 12 |
NULL | 3 |
| 2 | NULL | 2 | Blanco | NULL | 11 | NULL | 13 |
NULL | 4 |
| 3 | NULL | 3 | Negro | NULL | 12 | NULL | 14 |
NULL | 5 |
| 4 | NULL | 4 | Amarillo | NULL | 13 | NULL | 15 |
NULL | 6 |
| 5 | NULL | 5 | Balnco | NULL | 14 | NULL | 16 |
NULL | 7 |
| 6 | NULL | 6 | Violeta | NULL | 15 | NULL | 17 |
NULL | 8 |
| 7 | NULL | 7 | Negro | NULL | 16 | NULL | 18 |
NULL | 9 |
| 8 | NULL | 8 | Blanco | NULL | 17 | NULL | 19 |
NULL | 10 |
| 9 | NULL | 9 | Azul | NULL | 18 | NULL | 20 |
NULL | 11 |
| 10 | NULL | 10 | Blanco | NULL | 19 | NULL | 21 |
NULL | 12 |
+----------------+------+----------+----------+---------+---------+--------+--------+----
----+------+
10 rows in set (0.13 sec)
125. Hacemos una consulta para recuperar los campos con sus registros de la tabla.
mysql> SELECT * FROM media;
+-------------+---------+--------+------------+----------------+--------------+-------+--
----+--------+-------------+
| clave_media | red | cuenta | contraseña | tipo_contenido | encargado | video |
foto | diseño | descripcion |
+-------------+---------+--------+------------+----------------+--------------+-------+--
----+--------+-------------+
| 120 | Publica | user1 | password1 | Video | José Perez | SI |
NO | NULL | Videos |
| 121 | Publica | user2 | password2 | Video | Joan Laredo | SI |
NO | NULL | Videos |
| 122 | Privada | admin | password3 | Foto | Hugo | NO |
SI | NULL | Fotos |
| 123 | Publica | user4 | password4 | Video | Juan Alberto | SI |
NO | NULL | Videos |
| 124 | Publica | user5 | password5 | Foto | Pedro | NO |
SI | NULL | Fotos |
| 125 | Privada | admin2 | password6 | Videos | Sergio | SI |
NO | NULL | Videos |
| 126 | Publica | user6 | password6 | Videos | Martin | SI |
NO | NULL | Videos |
| 127 | Publica | user7 | password7 | Videos | Alicia | SI |
NO | NULL | Videos |
| 128 | Publica | user8 | password8 | Fotos | Ericka | NO |
SI | NULL | Fotos |
| 129 | Publica | user9 | password9 | Fotos | Alberto | NO |
SI | NULL | Fotos |
| 130 | Privada | user10 | password10 | Videos | Raciel | SI |
NO | NULL | Videos |
+-------------+---------+--------+------------+----------------+--------------+-------+--
----+--------+-------------+
11 rows in set (0.33 sec)
156. Hacemos una consulta para recuperar todos los campos de la tabla materia.
mysql> SELECT * FROM materia ;
+---------------+-------------+----------------+--------------------------+----------+-------------+------------------+----------+-------------+-------+-------+
| clave_materia | matricula_e | clave_profesor | nombre_m | creditos | categoria_m | carrera | horario | clases_dias | grado | grupo |
+---------------+-------------+----------------+--------------------------+----------+-------------+------------------+----------+-------------+-------+-------+
| 123 | 23235 | 12345 | Lenguajes y Automátas | 5 | Ciencias | Ing. Sistemas | 07:00:00 | Lunes | 6 | A |
| 456 | 23476 | 23786 | Cálculo | 5 | Ciencias | Ing. Sistemas | 08:00:00 | Martes | 2 | A |
| 784 | 23780 | 24985 | Matematicas | 5 | ciencias | Ing. Industrial | 09:00:00 | Jueves | 4 | C |
| 678 | 36789 | 56328 | Ingles | 5 | Ciencias | Ing. Ambiental | 07:00:00 | Viernes | 2 | A |
| 783 | 45378 | 90675 | Calculo | 8 | Ciencias | Ing. Sistemas | 06:00:00 | Lunes | 1 | B |
| 726 | 78345 | 34786 | Desarrollo Sustentable | 4 | Ciencias | Ing. Ambiental | 11:00:00 | Miercoles | 6 | C |
| 686 | 78967 | 45654 | Lenguaje de Interfaz | 4 | ciencias | Ing. Sistemas | 13:00:00 | Viernes | 5 | B |
| 829 | 98348 | 56328 | Calculo Diferencial | 5 | ciencias | Ing. Mecatronica | 14:00:00 | Lunes | 3 | C |
160. De igual manera, hacemos una consulta para recuperar todos los campos de la tabla
equipo_futbol.
mysql> select * from equipo_futol;
+--------------+-----------------------------+----------------+---------------------+----------------+-------+---------------
----+------------------+-------------------+----------------------+
| clave_equipo | nombre | nombre_jugador | apellido_ma_jugador | numero_jugador | copas |
partidos_perdidos | partidos_jugados | nombre_dirtecnico | apellidos_dirtecnico |
+--------------+-----------------------------+----------------+---------------------+----------------+-------+---------------
----+------------------+-------------------+----------------------+
| 45 | Los Jaguares | Raciel | Jimenez Leon | 5 | 7 |
3 | 6 | José | Sandoval |
| 46 | Tigres | Francisco | Jimenez Leon | 2 | 3 |
6 | 6 | Carlos | Enriquez |
| 48 | Osos | Jesús | Sanchez Garcia | 5 | 3 |
2 | 4 | Juan | Mendez |
| 89 | Los Rayos | Manuel | Córdova Gil | 4 | 3 |
8 | 9 | Julios | Mendoza |
| 98 | Los Correcaminos | Jesús | Benitez | 1 | 7 |
8 | 3 | Gerardo | Hernández |
| 67 | Los Tiburones | Alejandro | Gonzales Lopez | 3 | 5 |
9 | 4 | Benito | Gómez |
| 33 | Huracanes | Alexander | Palma | 1 | 4 |
3 | 8 | Pablo | Ochoa |
| 21 | Los Cuervos Negros Salvajes | Ronaldo | Naranjo | 7 | 3 |
1 | 4 | Iván | González |
| 44 | Relampago | Fidencio | de la Cruz | 8 | 7 |
2 | 9 | Ramón | Oliva |
| 88 | Pumas | Raúl | Ortega | 5 | 2 |
6 | 9 | Rafa | Custodio |
+--------------+-----------------------------+----------------+---------------------+----------------+-------+---------------
----+------------------+-------------------+----------------------+
10 rows in set (0.00 sec)
170. De igual manera hacemos una consulta para recuperar todos los
registros de la tabla.
mysql> SELECT * FROM curso_ingles;
+-------------+---------+--------+--------------+---------------+----------+----------+---------------+-------------+--------
--+
| clave_curso | nivel | clavem | fecha_inicio | fecha_termino | horario | horario2 | total_alumnos | incidencias |
creditos |
+-------------+---------+--------+--------------+---------------+----------+----------+---------------+-------------+--------
--+
| 1 | Nivel 1 | 2001 | 2018-02-15 | 2018-04-18 | 14:00:00 | 16:00:00 | 44 | NULL | 30
|
| 2 | Nivel 2 | 2002 | 2018-02-15 | 2018-04-18 | 12:00:00 | 14:00:00 | 35 | NULL | 30
|
| 3 | Nivel 5 | 2003 | 2018-02-19 | 2018-04-02 | 08:00:00 | 13:00:00 | 37 | NULL | 30
|
| 4 | Nivel 3 | 2004 | 2018-02-15 | 2018-04-18 | 14:00:00 | 16:00:00 | 40 | NULL | 30
|
| 5 | Nivel 1 | 2005 | 2018-02-15 | 2018-04-18 | 16:00:00 | 18:00:00 | 44 | NULL | 30
|
187. Esta vista contiene el nombre y el cargo de los empleados que sean analistas.
mysql> CREATE VIEW emp_view2
-> AS SELECT ename NOMBRE_EMPLEADO, job TRABAJO
-> FROM emp
-> WHERE job='ANALYST' OR job='ANLYST';
Query OK, 0 rows affected (0.13 sec)
189. Esta vista contiene el salario de los empleados que ejerzan el trabajo como “Clerk”.
mysql> CREATE VIEW emp_view3
-> AS SELECT job TRABAJO, sal SALARIO
-> FROM emp
-> WHERE job='CLERK';
Query OK, 0 rows affected (0.07 sec)
190. Esta vista contiene el nombre, el trabajo y el departamento al que pertenecen los
empleados.
mysql> CREATE VIEW emp_dept_view4
-> (NOMBRE_EMPLEADO, TRABAJO, NOMBRE_EDIFICIO)
-> AS SELECT e.ename, e.job, d.dname
-> FROM emp e, dept d
-> WHERE e.deptno = d.deptno;
Query OK, 0 rows affected (0.12 sec)
192. Esta vista contiene el nombre, el departamento y el edificio donde se imparten los
cursos.
mysql> CREATE VIEW curso_depart_view5
-> (CURSO, DEPARTAMENTO, EDIFICIO)
-> AS SELECT c.Cnombre, d.Dept, d.Dedif
-> FROM curso c, departamento d
-> WHERE c.Cdept = d.Dept;
Query OK, 0 rows affected (0.04 sec)
194. Esta vista contiene el nombre, el teléfono y la fecha de la matrícula de los estudiantes.
mysql> CREATE VIEW est_matricula_view6
-> (NOMBRE_ESTUDIANTE, TELEFONO, FECHA)
-> AS SELECT es.Snombre, es.Stlfno, ma.Fechamat
-> FROM estudiante es, matricula ma
-> WHERE es.Sno = ma.Sno;
Query OK, 0 rows affected (0.12 sec)
200. Esta vista contiene el nombre del personal y el departamento al que pertenecen.
mysql> CREATE VIEW clau_dept_view9
-> (NOMBRE, DEPARTAMENTO)
-> AS SELECT clau.Fnombre, dept.Dept
-> FROM claustro clau, departamento dept
-> WHERE clau.Fdept = dept.Dept;
Query OK, 0 rows affected (0.05 sec)
202. Esta vista contiene el nombre del claustro que gana más.
mysql> CREATE VIEW claus_view10
-> AS SELECT Fnombre NOMBRE
-> FROM claustro clau
-> WHERE Fsueldo = (SELECT MAX(Fsueldo) FROM claustro);
204. Esta vista contiene el nombre del claustro que gana menos.
mysql> CREATE VIEW claus_view11
-> AS SELECT Fnombre NOMBRE
-> FROM claustro clau
-> WHERE Fsueldo = (SELECT MIN(Fsueldo) FROM claustro);
Query OK, 0 rows affected (0.07 sec)
208. Esta vista contiene los cursos y el claustro que imparte esos cursos.
mysql> CREATE VIEW claus_cur_view13
-> (CURSO, NOMBRE)
-> AS SELECT cu.Cnombre, claus.Fnombre
-> FROM curso cu, claustro claus
-> WHERE cu.Cdept = claus.Fdept;
Query OK, 0 rows affected (0.14 sec)
212. Esta vista contiene a los estudiantes y los cursos que llevan.
mysql> CREATE VIEW es_cur_view15
-> (NOMBRE_ESTUDIANTE, CURSO)
-> AS SELECT es.Snombre, cu.Cnombre
-> FROM estudiante es, curso cu
-> WHERE es.Sesp = cu.Cdept;
Query OK, 0 rows affected (0.06 sec)
214. Esta vista contiene los cursos que pertenecen al departamento “PHIL” o “THEO”.
mysql> CREATE VIEW curso_view16
-> AS SELECT Cnombre NOMBRE_CURSO, Cdept DEPARTAMENTO
-> FROM curso
-> WHERE Cdept = 'PHIL' OR Cdept = 'THEO';
Query OK, 0 rows affected (0.07 sec)
216. Esta vista contiene los estudiantes que pertenezcan al departamento “PHIL” o “THEO”.
mysql> CREATE VIEW es_cur_view17
-> (NOMBRE_ESTUDIANTE, DEPARTAMENTO)
-> AS SELECT es.Snombre, cu.Cdept
-> FROM estudiante es, curso cu
-> WHERE es.Sesp = cu.Cdept AND Cdept = 'PHIL' OR Cdept = 'THEO';
Query OK, 0 rows affected (0.07 sec)
217. Hacemos una consulta para recuperar el contenido de la vista es_cur_view17.
mysql> SELECT * FROM es_cur_view17;
+-------------------+--------------+
| NOMBRE_ESTUDIANTE | DEPARTAMENTO |
+-------------------+--------------+
| CURLEY DUBAY | THEO |
| CURLEY DUBAY | THEO |
| CURLEY DUBAY | THEO |
| CURLEY DUBAY | THEO |
| LARRY DUBAY | THEO |
| LARRY DUBAY | THEO |
| LARRY DUBAY | THEO |
| LARRY DUBAY | THEO |
| MOE DUBAY | THEO |
| MOE DUBAY | THEO |
218. Esta vista contiene los cursos que tiene más créditos.
mysql> CREATE VIEW curso_credmax_view18
-> AS SELECT Cnombre NOMBRE_CURSO_CREDMAXIMO
-> FROM curso
-> WHERE Cred = (SELECT MAX(Cred) FROM curso);
Query OK, 0 rows affected (0.07 sec)
224. Esta vista contiene las letras de los productos que se encuentran almacenadas en las
bodegas.
mysql> CREATE VIEW alm_pro_view21
-> (NOMBRE_PRODUCTO, LETRA_BODEGA)
-> AS SELECT pro.nombre, al.bodega_letra
-> FROM producto pro, almacenaje al
-> WHERE pro.id_producto = al.id_producto;
Query OK, 0 rows affected (0.08 sec)
232. Esta vista contiene los productos, el precio y el número de pedidos que se hicieron.
mysql> CREATE VIEW empresa_pro_view25
-> (NOMBRE_PRODUCTO, PRECIO, CANTIDAD_PEDIDOS)
234. Esta vista contiene el nombre de las empresas que han hecho pedidos por producto y
el importe que tienen que pagar.
mysql> CREATE VIEW empresa_ped_view26
-> (NOMBRE_DE_LA_EMPRESA, CANTIDAD_POR_PRODUCTO, IMPORTE_TOTAL_A_PAGAR)
-> AS SELECT cli.Empresa, ped.Cant, ped.Importe
-> FROM clientes cli, pedidos ped
-> WHERE cli.Numclie = ped.Clie;
Query OK, 0 rows affected (0.06 sec)
236. Esta vista contiene la fecha del pedido que hicieron las empresas.
mysql> CREATE VIEW empresa_fecha_ped_view27
-> (NOMBRE_DE_LA_EMPRESA, CANTIDAD, FECHA_DEL_PEDIDO)
-> AS SELECT clie.Empresa, ped.Cant, ped.Fechapedido
-> FROM clientes clie, pedidos ped
-> WHERE clie.Numclie = ped.Clie;
Query OK, 0 rows affected (0.05 sec)
238. Esta vista contiene las empresas que tiene más límite de crédito.
mysql> CREATE VIEW empresa_clie_view28
-> AS SELECT Empresa NOMBRE_DE_LA_EMPRESA
-> FROM clientes clie
-> WHERE Limitecredito = (SELECT MAX(Limitecredito) FROM clientes);
Query OK, 0 rows affected (0.06 sec)
242. Esta vista contiene el nombre, el título y la venta máxima que hizo el director.
mysql> CREATE VIEW ventas_view30
-> AS SELECT Nombre NOMBRE, Titulo TITULO, Ventas VENTAS
-> FROM repventas repv
-> WHERE Ventas = (SELECT MAX(Ventas) FROM repventas);
246. En esta vista contiene los cursos que tengan una tarifa entre 50 y 100.
mysql> CREATE VIEW view_cursos
-> AS SELECT Cnombre NOMBRE_CURSO, Ctarifa TARIFA
-> FROM curso
-> WHERE Ctarifa BETWEEN 50 AND 100;
Query OK, 0 rows affected (0.25 sec)
247. Se hace una consulta para recuperar el contenido de la vista.
mysql> SELECT * FROM view_cursos;
+-----------------------+--------+
| NOMBRE_CURSO | TARIFA |
+-----------------------+--------+
| INTROD. A LAS CC. | 100 |
| ESTRUCT. DE DATOS | 50 |
| ARQUITECT. COMPUTADOR | 100 |
| EMPIRISMO | 100 |
| RACIONALISMO | 50 |
| FUNDAMENTALISMO | 90 |
+-----------------------+--------+
6 rows in set (0.03 sec)
248. Esta vista contiene todos los datos del curso de Base de Datos Relacional.
mysql> CREATE VIEW view_bd
-> AS SELECT * FROM curso
-> WHERE Cno = 'C66';
Query OK, 0 rows affected (0.08 sec)
250. Esta vista contiene el nombre de los empleado que tengan el cargo de Ayte. Lab.
mysql> CREATE VIEW view_personal
-> AS SELECT Enombre NOMBRE, Cargo CARGO
-> FROM personal
-> WHERE Cargo = 'AYTE. LAB.';
Query OK, 0 rows affected (0.09 sec)
252. Esta vista contiene el nombre del empleado que gana más.
mysql> CREATE VIEW personal_salario_max
-> AS SELECT Enombre NOMBRE_EMPLEADO, Esueldo SUELDO
-> FROM personal
-> WHERE Esueldo = (SELECT MAX(Esueldo) FROM personal);
Query OK, 0 rows affected (0.19 sec)
254. Esta vista contiene el nombre del empleado que gana menos.
mysql> CREATE VIEW personal_salario_min
-> AS SELECT Enombre NOMBRE_EMPLEADO, Esueldo SUELDO
-> FROM personal
-> WHERE Esueldo = (SELECT MIN(Esueldo) FROM personal);
Query OK, 0 rows affected (0.16 sec)
256. Esta vista contiene el nombre de los empleados que tengan un salario mayor al
promedio de todos los salarios de esos empleados.
mysql> CREATE VIEW personal_salario_pro
-> AS SELECT Enombre NOMBRE_EMPLEADO, Esueldo SUELDO
-> FROM personal
-> WHERE Esueldo > (SELECT AVG(Esueldo) FROM personal);
Query OK, 0 rows affected (0.17 sec)
| NOMBRE_EMPLEADO | SUELDO |
+-----------------+--------+
| DICK NIX | 25001 |
| HANK KISS | 25000 |
+-----------------+--------+
2 rows in set (0.06 sec)
258. Esta vista contiene los datos del estudiante con matricula C11.
mysql> CREATE VIEW view_matricula
-> AS SELECT * FROM matricula
-> WHERE Cno = 'C11';
Query OK, 0 rows affected (0.20 sec)
259. Hacemos una consulta para recuperar el contenido de la tabla.
mysql> SELECT * FROM view_matricula;
+-----+-----+-----+------------+----------+
| Cno | Sec | Sno | Fechamat | Horamat |
+-----+-----+-----+------------+----------+
| C11 | 01 | 325 | 1987-01-04 | 09.41.30 |
| C11 | 01 | 800 | 1987-12-15 | 11.49.00 |
| C11 | 02 | 100 | 1987-12-17 | 09.32.00 |
| C11 | 02 | 150 | 1987-12-17 | 09.32.30 |
+-----+-----+-----+------------+----------+
4 rows in set (0.05 sec)
260. Esta vista contiene los productos que se vendieron el 20 de septiembre de 2011.
mysql> CREATE VIEW ventas_fecha
-> AS SELECT fecha_venta, cantidad 'Cantidad de productos vendidos'
-> FROM ventas
-> WHERE fecha_venta= '2011-09-20';
Query OK, 0 rows affected (0.13 sec)
262. Esta vista contiene la fecha y la cantidad de productos que mas se vendieron.
mysql> CREATE VIEW ventas_fecha2
-> AS SELECT fecha_venta, cantidad
-> FROM ventas
Triggers
274. Creación de la segunda tabla llamada saldos para la base de datos examen3.
mysql> CREATE TABLE saldo(
-> cuenta CHAR(10) NOT NULL,
-> ano SMALLINT(4),
-> mes TINYINT(2),
-> debe DOUBLE(10,2),
-> haber DOUBLE(10,2),
-> PRIMARY KEY(cuenta, ano, mes))
-> ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
Query OK, 0 rows affected (0.36 sec)
275. Creación del primer trigger de inserción de registro para la tabla apuntes.
mysql> CREATE TRIGGER APTS_I AFTER INSERT ON apuntes
-> FOR EACH ROW
-> BEGIN
-> INSERT INTO saldo SET
-> saldo.cuenta=new.cuenta,
-> saldo.ano=year(new.fecha),
-> saldo.mes=month(new.fecha),
-> saldo.debe=new.debe,
-> saldo.haber=new.haber
-> ON DUPLICATE KEY UPDATE
-> saldo.debe=saldo.debe+new.debe,
-> saldo.haber=saldo.haber+new.haber;
-> END;//
mysql> COMMIT;
Query OK, 0 rows affected (0.04 sec)
279. Para ver el resultado de lo que se hizo, se hace la siguiente consulta. Esta consulta
muestra o recupera los registros de la tabla saldo.
mysql> SELECT * FROM saldo;
+------------+------+-----+---------+---------+
| cuenta | ano | mes | debe | haber |
+------------+------+-----+---------+---------+
| 4300000001 | 2006 | 2 | 1160.00 | 0.00 |
| 4300000001 | 2006 | 3 | 0.00 | 1160.00 |
| 4770000001 | 2006 | 2 | 0.00 | 160.00 |
| 5700000000 | 2006 | 3 | 1160.00 | 0.00 |
| 7000000000 | 2006 | 2 | 0.00 | 1000.00 |
+------------+------+-----+---------+---------+
5 rows in set (0.06 sec)
280. Creación del segundo trigger. Este trigger hace la verificación de la edad de un usuario
cuando inserta una edad que no está definida para un rango y la pone en 0 si la edad no
se encuentra en ese rango. Empezando con la crecación de una nueva base de datos
exclusivamente para la práctica de los triggers.
284. Se insertan nuevos registros para activar el trigger y después ver su funcionamiento.
mysql> INSERT INTO personas VALUES
-> ('Emanuel', 'Córdova Montiel', 21),
-> ('Ronaldo', 'Córdova Montiel', -8);
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
285. Ahora se hace una consulta para ver si de verdad el trigger creado funciona. Y como
se puede ver en la línea resaltada de color verde se nota cuando se insertó una edad que
no se encuentra en el rango permitido, el trigger hace su trabajo y regresa la edad en 0.
mysql> SELECT * FROM personas;
+---------+-----------------+------+
| nombre | apellidos | edad |
+---------+-----------------+------+
| Emanuel | Córdova Montiel | 21 |
| Ronaldo | Córdova Montiel | 0 |
+---------+-----------------+------+
2 rows in set (0.00 sec)
286. De nuevo se creará un nuevo trigger; el funcionamiento que hace este trigger es
similar al anterior solo que la edad la pone en NULL y en cero. Para empezar se creará
una nueva tabla llamada obreros.
mysql> CREATE table obreros(
-> id_obr INT NOT NULL,
-> nombre_obr VARCHAR(20),
-> edad_obr INT(3),
-> PRIMARY KEY(id_obr));
Query OK, 0 rows affected (0.14 sec)
288. Se empezará a insertar registros a la tabla obreros, pero aún sin crear el trigger porque
el trigger es de actualización y para ver el funcionamiento de este.
mysql> INSERT INTO obreros VALUES
-> (456, 'Manuela', 21),
-> (5, 'Veronica', 21),
-> (334, 'Miguel', 22),
-> (654, 'Rolando', 34),
-> (2576, 'Alberto', 60),
-> (283, 'Agapito', 21),
-> (287, 'Zoila', 24),
-> (9876, 'Eloy', 26),
-> (1287, 'Mario', 22),
-> (546, 'Candido', 15),
-> (341, 'Pereira', 18),
-> (768, 'Marcos', 56),
-> (354, 'Yesenia', 29),
-> (232, 'Gilberto', 45);
Query OK, 14 rows affected (0.36 sec)
Records: 14 Duplicates: 0 Warnings: 0
289. Hacemos una consulta para ver todos los registros insertados.
mysql> SELECT * FROM obreros;
+--------+------------+----------+
| id_obr | nombre_obr | edad_obr |
+--------+------------+----------+
| 456 | Manuela | 21 |
| 5 | Veronica | 21 |
| 334 | Miguel | 22 |
| 654 | Rolando | 34 |
| 2576 | Alberto | 60 |
| 283 | Agapito | 21 |
| 287 | Zoila | 24 |
| 9876 | Eloy | 26 |
| 1287 | Mario | 22 |
| 546 | Candido | 15 |
| 341 | Pereira | 18 |
| 768 | Marcos | 56 |
| 354 | Yesenia | 29 |
| 232 | Gilberto | 45 |
+--------+------------+----------+
14 rows in set (0.00 sec)
290. Ahora si, se empezará a crear el trigger de actualización, este trigger se llama
obreros_tr que se ejecuta antes de actualizar en la tabla obreros para cada registro de
esta, donde la nueva edad de los obreros sea menor que cero entonces se establece que
la nueva edad la ponga en NULL si no cumple con la condición.
mysql> DELIMITER //
mysql> CREATE TRIGGER obreros_tr BEFORE UPDATE
-> ON obreros
-> FOR EACH ROW
-> BEGIN
-> if NEW.edad_obr < 0 THEN SET NEW.edad_obr = NULL;
-> END if;
-> END //
Query OK, 0 rows affected (0.81 sec)
mysql> DELIMITER ;
291. Ahora se va actualizar la nueva edad para “Manuela”, actualmente tiene una edad de
21 y ahora se le va a establecer una nueva edad de -2 para verificar si el trigger funciona
y pone esa edad a NULL.
mysql> UPDATE obreros
-> SET edad_obr = -2
-> WHERE nombre_obr = 'Manuela';
Query OK, 1 row affected (0.09 sec)
292. Ahora para ver si todo esto es verdad, hacemos una consulta con la edad que tenia
Manuela anteriormente.
mysql> SELECT * FROM obreros;
+--------+------------+----------+
| id_obr | nombre_obr | edad_obr |
+--------+------------+----------+
| 456 | Manuela | 21 |
| 5 | Veronica | 21 |
| 334 | Miguel | 22 |
| 654 | Rolando | 34 |
| 2576 | Alberto | 60 |
| 283 | Agapito | 21 |
| 287 | Zoila | 24 |
| 9876 | Eloy | 26 |
| 1287 | Mario | 22 |
| 546 | Candido | 15 |
| 341 | Pereira | 18 |
| 768 | Marcos | 56 |
| 354 | Yesenia | 29 |
| 232 | Gilberto | 45 |
+--------+------------+----------+
14 rows in set (0.00 sec)
293. Se hace una consulta y como se puede ver en la parte resaltada de color verde, si
cambió la edad de Manuela en NULL ya que como se había mencionado anteriormente, la
nueva edad que se le definió no cumple con la condición.
| 768 | Marcos | 56 |
| 354 | Yesenia | 29 |
| 232 | Gilberto | 45 |
+--------+------------+----------+
14 rows in set (0.00 sec)
294. A continuación, se creará un nuevo trigger. Este trigger se ejecutára por cada registro
ingresado y va a registrar en una nueva tabla la hora y fecha en la cual se insertó un nuevo
registro en la base de datos. Para ello, se utilizará la misma tabla que se utlilizó
anteriormente, obreros, solo que se creará una nueva tabla con un atributo, que es el que
almacenará la fecha y hora para el nuevo registro que se insertará. Creamos la tabla que
tiene por nombre ‘obrero_copia’.
mysql> CREATE TABLE obrero_copia(
-> id_obr INT PRIMARY KEY,
-> nombre_obr VARCHAR(25),
-> edad_obr INT(3),
-> ultima_modificacion DATETIME)
-> ENGINE=InnoDB;
Query OK, 0 rows affected (2.30 sec)
296. Ahora hacemos una revisión si la tabla se creó con éxito en la base de datos. Y
efectivamente la tabla si se creó.
mysql> SHOW TABLES;
+------------------------------+
| Tables_in_triggers_practicas |
+------------------------------+
| obrero_copia |
| obreros |
| personas |
+------------------------------+
3 rows in set (0.00 sec)
297. Ahora, se creará el trigger de inserción, este trigger registrará a la nueva tabla creada;
obrero_obr, con la fecha y hora que se insertó un nuevo registro.
mysql> CREATE TRIGGER nuevo_registro_obrero AFTER INSERT
-> ON obreros
-> FOR EACH ROW
-> INSERT INTO obrero_copia (id_obr, nombre_obr, edad_obr, ultima_modificacion)
VALUE
-> (NEW.id_obr, NEW.nombre_obr, NEW.edad_obr, NOW());
Query OK, 0 rows affected (0.64 sec)
298. Hacemos una consulta ala tablas obreros con los registros.
mysql> SELECT * FROM obreros;
+--------+------------+----------+
| id_obr | nombre_obr | edad_obr |
+--------+------------+----------+
| 456 | Manuela | NULL |
| 5 | Veronica | 21 |
| 334 | Miguel | 22 |
| 654 | Rolando | 34 |
| 2576 | Alberto | 60 |
| 283 | Agapito | 21 |
| 287 | Zoila | 24 |
| 9876 | Eloy | 26 |
| 1287 | Mario | 22 |
| 546 | Candido | 15 |
| 341 | Pereira | 18 |
| 768 | Marcos | 56 |
| 354 | Yesenia | 29 |
| 232 | Gilberto | 45 |
+--------+------------+----------+
14 rows in set (0.36 sec)
299. Insertamos un nuevo registro en la tabla obreros para verificar el funcionamiento del
trigger. Cabe resaltar que el rigger se activará después de insertar un registro no antes.
300. Hacemos una consulta a la tabla obreros para ver el nuevo registro que se insertó. Y
como se puede ver en la parte resaltada de color verde, ahí está el nuevo registro que se
insertó en la tabla.
mysql> SELECT * FROM obreros;
+--------+------------+----------+
| id_obr | nombre_obr | edad_obr |
+--------+------------+----------+
301. Ahora viene la parte más intersante, haremos una nueva consulta, pero a la tabla que
se había creado, obrero_copia, para ver si nos muestra la fecha y hora en la que se hace
un nuevo registro, y si, efectivamente el trigger hizo su trabajo.
mysql> SELECT * FROM obrero_copia;
+--------+------------+----------+---------------------+
| id_obr | nombre_obr | edad_obr | ultima_modificacion |
+--------+------------+----------+---------------------+
| 2000 | Emanuel | 44 | 2018-06-03 23:45:01 |
+--------+------------+----------+---------------------+
1 row in set (0.36 sec)
303. Para ver si la tabla se creó correctamente en la base de datos, listamos las tablas
existentes. Y como se puede ver, la tabla si se creó.
mysql> SHOW TABLES;
+------------------------------+
| Tables_in_triggers_practicas |
+------------------------------+
| cuenta |
| obrero_copia |
| obreros |
| personas |
+------------------------------+
4 rows in set (0.00 sec)
305. Empezamos a insertar los datos para ver el funcionamiento del trigger.
mysql> SET @sum = 0;
Query OK, 0 rows affected (0.36 sec)
307. A continuación, se creará un trigger de actualización. Este trigger es similar a uno que
se había creado anterioemente donde muestra la fecha y hora del registro que se hizo solo
que este trigger muestra el evento que se realizó. Se crea la tabla empleado_audit.
mysql> CREATE TABLE empleados_audit(
-> id_empleado INT AUTO_INCREMENT PRIMARY KEY,
-> numero_empleado INT NOT NULL,
-> apellido VARCHAR(50) NOT NULL,
-> ultima_modificacion DATETIME DEFAULT NULL,
-> accion VARCHAR(30) DEFAULT NULL
-> );
Query OK, 0 rows affected (0.66 sec)
308. Vamos a listar las tablas para ver si se creó con éxito esta tabla.
mysql> SHOW TABLES;
+------------------------------+
| Tables_in_triggers_practicas |
+------------------------------+
| cuenta |
| empleados_audit |
| obrero_copia |
| obreros |
| personas |
+------------------------------+
5 rows in set (0.00 sec)