Operador SQL

between: valores en un rango

select * from actor
where actor_id between 20 and 25

in: Valores en una lista

select * from actor

where first_name in (‘ED’,’TED’)

Like: Valores siguiendo un patrón


-- Caracteres comodin: % cualquier cadena _ cualquier caracter
-- Empiecen por
select * from actor
where first_name like 'EL%';
-- Acaben por
select * from actor
where first_name like '%EN';
-- Empiecen y acaben por
select * from actor
where first_name like 'E%N';
-- Contengan
select * from actor
where first_name like '%AN%';

-- El guión bajo encaja con un sólo carácter</pre>
select * from actor
where first_name like '_AN';

select * from actor
where first_name like '%AN';

select * from actor
where first_name like '_E_';

select * from actor
where first_name like 'T_M';

Base de datos sakila

Sakila

¿Cómo importarlo?

Tenemos dos sql

schema y data

Primero importamos el esquema. Opciones:

Workbench copiar sql pegarlo en una consulta y ejecutar

Workbench Server->data Import->self-contained-file->Seleccionar archivo

PhpMyAdmin copiar sql pegarlo en ventana SQL

PhpMyadmin->importar->Seleccionar archivo Deshabilitar revisión claves foráneas

Resumen SQL modificar datos


-- LMD Lenguaje de manipulación de datos

-- CRUD --> Create Read Update Delete Operaciones básicas sobre datos
-- Mantenimiento de una tabla: Altas bajas modificaciones y consultas

-- Create: insert into nombre_tabla (lista_de_campos) values (lista_de_valores)

insert into autor (nombre,email,pais_nacimiento) values ('eva','eva@eva.com','Francia');

insert into autor (nombre,email) values ('eva','eva@eva.com'),('eva','eva@eva.com');

insert into musico (nombre, descripcion) values ('Johann Sebastian Bach','Un excelente músico renacentista'),
('Evaristo García','Representante del nuevo sonido manchego');

-- UPdate update nombre_tabla set campo=nuevo valor[, campo2=nuevo valor] [where condicion]
-- Aunque el where es opcional casi siempre será obligatorio
-- Aunque la condición puede ser cualquiera es muy frecuente id=numero

update musico set nombre='Juanito Prime',
descripcion='hola'
where id_musico=1;

update musico set descripcion='Músico muy competente'
where id_musico=10;

update musico set descripcion='Músico muy competente'
where descripcion='qqqqq';

-- Delete delete from tabla [where condicion]
delete from musico
where id_musico=12;

delete from musico
where descripcion='eeee';

delete from musico
where nombre='Juanito';

-- Vaciar una tabla truncate tabla
truncate musico;

Ejercicio LMD

Tengo la siguiente tabla:


CREATE TABLE `autor` (
`idautor` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(150) NOT NULL,
`email` varchar(100) DEFAULT NULL,
`pais_nacimiento` varchar(25) DEFAULT NULL,
PRIMARY KEY (`idautor`)
)

Realizad lo siguiente utilizando lenguaje de manipulación de datos

Insertar los siguientes registros: Ana, ana@gmail.com, España; Eva, eva@gmail.com,España;John, john@gmail.com,Francia;Rose, rose@gmail.com,Francia

Modificar el registro de JOhn (buscar el id para que sea exacto) y cambiar el mail a john.f@gmail.com

Eliminar a Eva (buscar el id para que sea exacto)

Seleccionar todos los autores con un id mayor de 2

Ejercicio DML Musicos

Insertar los siguiente músicos:

‘Johann Sebastian Bach’, ‘Músico renacentista muy bueno’

‘Evaristo García’, ‘Representante de los nuevos sonidos manchegos’

Modificar el músico con la primera id (1) cambiar la descripción a: ‘Músico excelente’

Eliminar el músico con id 1

Ejercicio DDL

Crear una base de datos con las siguientes tablas:

musico

id int auto pk

nombre varchar(100)

descripcion text

 

disco

id int auto pk

titulo varchar(100)

precio decimal(6,2)

Hay una relación entre disco y musico n-N

Crear con DDL las tablas necesarias con sus foreignkeys

</pre>
CREATE DATABASE musica;

use musica;

CREATE TABLE musico (
id_musico INT AUTO_INCREMENT,
nombre VARCHAR(100),
descripcion TEXT,
PRIMARY KEY (id_musico)
);

CREATE TABLE disco (
id_disco INT AUTO_INCREMENT,
titulo VARCHAR(100),
precio DECIMAL(6,2),
PRIMARY KEY (id_disco)
);

CREATE TABLE musico_disco (
id_musico_disco INT AUTO_INCREMENT,
id_musico INT,
id_disco INT,
PRIMARY KEY (id_musico_disco),
key (id_musico),
key (id_disco),
FOREIGN KEY fk_musico (id_musico) REFERENCES musico(id_musico),
FOREIGN KEY fk_disco (id_disco) REFERENCES disco(id_disco)
);
<pre>

Sql sentencias creación de datos (DDL)

Crear BD:

https://www.w3schools.com/sql/sql_create_db.asp

Crear tabla:

http://www.mysqltutorial.org/mysql-create-table/

http://www.mysqltutorial.org/mysql-foreign-key/

http://www.mysqltutorial.org/mysql-index/mysql-create-index/

 

CREATE TABLE [IF NOT EXISTS] table_name(
    lista_columnas
) ENGINE=storage_engine

-- Formato de las columnas:
nombre_columna tipo_columna(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT]

	
PRIMARY KEY (columna)

-- De las dos maneras se puede:
INDEX nombre_indice (nombre_columna)
KEY (nombre_columna) 


FOREIGN KEY nombre_clave_foranea(columna)
REFERENCES tabla_referenciada(columna_tabla_referrenciada)
ON DELETE action
ON UPDATE action;

-- Crear un índice después de crear la tabla
CREATE INDEX index_name
ON table_name (column1, column2, ...);

CREATE TABLE IF NOT EXISTS tasks (
    task_id INT AUTO_INCREMENT,
    employee_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    start_date DATE,
    due_date DATE,
    status TINYINT NOT NULL,
    priority TINYINT NOT NULL,
    description TEXT,
    PRIMARY KEY (task_id),
    INDEX ix_title (title),
    FOREIGN KEY fk_employee(employee_id )
    REFERENCES employee (employee_id )
    ON DELETE RESTRICT
    ON UPDATE CASCADE
)  ENGINE=INNODB;

Solucionar estadísticas

Solución 1:

Copiar el mysql dump de xampp\mysql a c:\Archivos de Programa\Mysql\Mysql workbench 8.0

Solución 2:

Abrir el archivo c:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\wb_admin_export.py:

Y cambiar la siguiente línea a esto:

skip_column_statistics = True 

Solución 3:

Exportar desde el phpmyadmin (super sencillo)

Solución 4:

Exportar cada tabla individualmente con botón derecho ->Send to sql editor->create statement

Ejercicio global

Queremos hacer una base de datos para una tienda de pasteles. Los pasteles están clasificados en diferentes categorías de las que queremos saber el nombre y una descripción. Cada pastel tiene un nombre, una foto, un precio, si es apto para celíacos y una descripción.

Los clientes pueden comprar los pasteles. Del cliente queremos almacenar el nombre, el teléfono y la dirección. Un cliente puede comprar muchos pasteles y un pastel puede ser comprado por muchos clientes.

Crear el modelo Entidad-Relación.

A partir de ahí, el modelo lógico.

Escoged bien los tipos de datos para cada campo.

Una vez tengamos el modelo lógico, lo implementamos en nuestra base de datos.

Añadid las foreign keys necesarias.

Añadis un índice único al nombre de la categoría y un índice normal al nombre del pastel y al nombre del cliente.