Esquema de una base de datos

Hola amigos, ¿qué hay de nuevo? Ya sois más de 100 personas las que me seguís en Twitter. ¡Muchas gracias!

Os cuento que a petición de uno de vosotros en la siguiente serie de posts vamos a tratar el tema de las consultas SQL con MySQL: consultas simples, consultas resumen, consultas multitabla con JOIN, subconsultas, etc.

La idea es disponer de estos posts para que cuando no recordéis exactamente cómo iba una consulta, podáis venir aquí, a la sección MySQL de programarivm.com, y copypastear dicha consulta. Crearemos una BBDD de ejemplo y empezaremos a lanzar diferentes consultas que se irán complicando poco a poco.

Personalmente, hacer este ejercicio me viene muy bien porque últimamente me he acostumbrado a trabajar con las bases de datos en un plano abstracto, comunicándome con la BBDD desde una capa modelo ya programada en mis aplicaciones.

Pero eso es otra historia...

Allá va sin más preámbulos la base de datos de ejemplo sobre la que vamos a trabajar nuestros ejercicios MySQL. Are you ready? ¡No os oigo bien! Are you readyyyy? ¿Sí? ¡Pues allá va!

CREATE DATABASE company;

USE company;

CREATE TABLE departments (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    number TINYINT UNSIGNED NOT NULL,
    name VARCHAR(32) NOT NULL,
    location VARCHAR(32) NOT NULL,
    PRIMARY KEY(id)
) ENGINE=InnoDB;

CREATE TABLE employees (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
    number MEDIUMINT UNSIGNED NOT NULL,
    name VARCHAR(32) NOT NULL,
    job VARCHAR(32) NOT NULL,
    hire_date DATETIME NOT NULL,
    salary SMALLINT UNSIGNED NOT NULL,
    commission SMALLINT UNSIGNED NULL,
    id_employee MEDIUMINT UNSIGNED NULL,
    id_department SMALLINT UNSIGNED NOT NULL,
    PRIMARY KEY(id),
    FOREIGN KEY(id_employee) REFERENCES employees(id),
    FOREIGN KEY(id_department) REFERENCES departments(id)
) ENGINE=InnoDB;

INSERT INTO departments(number, name, location)
VALUES
(101, 'Cuentas', 'Madrid'),
(76, 'I+D', 'Sevilla'),
(25, 'Ventas', 'Barcelona'),
(88, 'E-commerce', 'Barcelona');

INSERT INTO employees(number, name, job, hire_date, salary, commission, id_employee, id_department)
VALUES
(1, 'Julián', 'Director general', '2004-11-10', 4000, NULL, NULL, 1),
(10, 'Pepa', 'Jefe de cuentas', '2004-11-10', 3500, 300, 1, 1),
(11, 'Juan', 'Director técnico', '2004-11-25', 3600, NULL, 1, 2),
(12, 'Marta', 'Jefa de ventas', '2004-11-19', 2500, 500, 1, 3),
(13, 'Ignacio', 'Director e-commerce', '2004-11-10', 2300, 700, 1, 4),
(88, 'Carlos', 'Administrativo', '2004-12-11', 1200, NULL, 2, 1),
(89, 'Silvia', 'Contable', '2004-12-11', 1300, NULL, 2, 1),
(90, 'María', 'Administrativa', '2004-12-11', 1200, NULL, 2, 1),
(91, 'Pedro', 'Contable', '2004-12-11', 1300, NULL, 2, 1),
(92, 'Teresa', 'Ingeniera', '2004-12-11', 2100, NULL, 3, 2),
(93, 'Isabel', 'Ingeniera Técnica', '2004-12-28', 1800, NULL, 3, 2),
(94, 'Javier', 'Ingeniero Técnico', '2004-12-11', 1800, NULL, 3, 2),
(95, 'Fernando', 'Ingeniero', '2004-12-11', 2100, NULL, 3, 2),
(96, 'Laura', 'Comercial', '2004-12-30', 2100, 500, 4, 3),
(97, 'Montse', 'Comercial', '2004-12-27', 1800, 600, 4, 3),
(100, 'Jorge', 'Comercial', '2004-12-30', 1800, 500, 4, 3),
(102, 'Arturo', 'Comercial', '2004-12-12', 2100, 550, 4, 3),
(105, 'Juan', 'Programador', '2004-12-11', 1800, NULL, 5, 4),
(109, 'Pepe', 'Programador', '2005-01-01', 1700, NULL, 5, 4),
(110, 'Juan', 'SEO', '2005-01-01', 2000, 200, 5, 4),
(112, 'Pepe', 'Analista', '2005-01-01', 1700, NULL, 5, 4);

La información de las tablas queda así:

mysql> SELECT * FROM departments;
+----+--------+------------+-----------+
| id | number | name       | location  |
+----+--------+------------+-----------+
|  1 |    101 | Cuentas    | Madrid    |
|  2 |     76 | I+D        | Sevilla   |
|  3 |     25 | Ventas     | Barcelona |
|  4 |     88 | E-commerce | Barcelona |
+----+--------+------------+-----------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM employees;
+----+--------+----------+---------------------+---------------------+--------+------------+-------------+---------------+
| id | number | name     | job                 | hire_date           | salary | commission | id_employee | id_department |
+----+--------+----------+---------------------+---------------------+--------+------------+-------------+---------------+
|  1 |      1 | Julián   | Director general    | 2004-11-10 00:00:00 |   4000 |       NULL |        NULL |             1 |
|  2 |     10 | Pepa     | Jefe de cuentas     | 2004-11-10 00:00:00 |   3500 |        300 |           1 |             1 |
|  3 |     11 | Juan     | Director técnico    | 2004-11-25 00:00:00 |   3600 |       NULL |           1 |             2 |
|  4 |     12 | Marta    | Jefa de ventas      | 2004-11-19 00:00:00 |   2500 |        500 |           1 |             3 |
|  5 |     13 | Ignacio  | Director e-commerce | 2004-11-10 00:00:00 |   2300 |        700 |           1 |             4 |
|  6 |     88 | Carlos   | Administrativo      | 2004-12-11 00:00:00 |   1200 |       NULL |           2 |             1 |
|  7 |     89 | Silvia   | Contable            | 2004-12-11 00:00:00 |   1300 |       NULL |           2 |             1 |
|  8 |     90 | María    | Administrativa      | 2004-12-11 00:00:00 |   1200 |       NULL |           2 |             1 |
|  9 |     91 | Pedro    | Contable            | 2004-12-11 00:00:00 |   1300 |       NULL |           2 |             1 |
| 10 |     92 | Teresa   | Ingeniera           | 2004-12-11 00:00:00 |   2100 |       NULL |           3 |             2 |
| 11 |     93 | Isabel   | Ingeniera Técnica   | 2004-12-28 00:00:00 |   1800 |       NULL |           3 |             2 |
| 12 |     94 | Javier   | Ingeniero Técnico   | 2004-12-11 00:00:00 |   1800 |       NULL |           3 |             2 |
| 13 |     95 | Fernando | Ingeniero           | 2004-12-11 00:00:00 |   2100 |       NULL |           3 |             2 |
| 14 |     96 | Laura    | Comercial           | 2004-12-30 00:00:00 |   2100 |        500 |           4 |             3 |
| 15 |     97 | Montse   | Comercial           | 2004-12-27 00:00:00 |   1800 |        600 |           4 |             3 |
| 16 |    100 | Jorge    | Comercial           | 2004-12-30 00:00:00 |   1800 |        500 |           4 |             3 |
| 17 |    102 | Arturo   | Comercial           | 2004-12-12 00:00:00 |   2100 |        550 |           4 |             3 |
| 18 |    105 | Juan     | Programador         | 2004-12-11 00:00:00 |   1800 |       NULL |           5 |             4 |
| 19 |    109 | Pepe     | Programador         | 2005-01-01 00:00:00 |   1700 |       NULL |           5 |             4 |
| 20 |    110 | Juan     | SEO                 | 2005-01-01 00:00:00 |   2000 |        200 |           5 |             4 |
| 21 |    112 | Pepe     | Analista            | 2005-01-01 00:00:00 |   1700 |       NULL |           5 |             4 |
+----+--------+----------+---------------------+---------------------+--------+------------+-------------+---------------+
21 rows in set (0.00 sec)

También te puede interesar leer esto...

Previous Post Next Post