Subido por josemi2487

SENTENCIAS SQL

Anuncio
Página 1 de 33
ENUM SELECCIONA UN SOLO VALOR
NOT NULL CAMPO OBLIGATORIO
PRIMARY KEY CAMPO A RELACIONAR
UNSIGNED SOLO VALOR POSITIVO
AUTO_INCREMENTE
UNIQUE = NO SE PUEDE REPETIR VALORES, SE PUEDE USAR EN VARIAS
COLUMNAS PERO NO SE PUEDE RELACIONAR CON OTRAS TABLAS
DESCRIBE NOMBRE DE TABLA O DESC
ALTER TABLE NOMB. DE TABLA ADD COLUMN – CHANGE CAMBIAR EL
NOM. DE UN CAMPO POR OTRO
FIRST AGREGAR UN CAMPO EN PRIMER LUGAR
AFTER AGREGAR UN CAMPO DESPUES DE OTRO
MODIFY SE MODIFICA EL TIPO DE DATO DE UN CAMPO
DROP PARA BORRAR CAMPOS
RENAME PARA RENOMBRAR UNA TABLA
INSERT PARA INSERTAR DATOS EN UNA TABLA
INSERT INTO N.T. VALUES (‘’);
INSERT INTO N.T. SET CAMPO = VALOR, CAMP. = VALOR…;
INSERT INTO N.T. (‘VALUES’) INGRESAR LOS DATOS SEGÚN EL ORDEN DE
LOS CAMPOS
SELECT * FROM N.T. MUESTRA TODOS LOS DATOS
DELETE FROM N. CAMPO WHERE N. CAMPO = …;
ALTER TABLE N. TABLA ADD PRIMARY KEY (CAMPO);
MODULO 2
IMPORTAR TABLAS DESDE UN ARCHIVO CSV O JSON BOTON DERECHO
SOBRE EL N. DE LA B.DATOS
IMPORTAR TABLAS DESDE UN SCRIPT SQL DESDE LA OPCION FILE DE SQL
CONSULTAS DE TABLAS
Página 2 de 33
LAS 5 CLAUSULAS DE LA SENTENCIA SELECT EN ESTE ORDEN
FROM – WHERE – GROUP BY – HAVING – ORDER BY
SELECT N. CAMPO, CAMPO … FROM N. TABLA;
SELECT *, N.CAMPO * 1.25 AS ‘PRECIO CON AUMENTO’ FROM N. TABLA;
SE AGREGA UNA NUEVA COLUMNA SOLO EN MEMORIA SE LLAMA
CAMPO CALCULADO
SELECT *, ‘CHINA’ AS ORIGEN FROM N. TABLA;
ORDER BY = PARA ORDENAR POR UNA O MAS COLUMNAS EN FORMA ASC
O DESC CON PRIORIDAD DEL PRIMER CAMPO
LIMIT CANTIDAD DE REGISTRO A MOSTRAR
SELECT N. CAMPO, CAMPO … FROM N. TABLA LIMIT 2;
LO MISMO PARA LA SENTENCIA DELETE
OFFSET A PARTIR DEL PROXIMO REGISTRO (POSICION)
ALIAS PERMITE CAMBIAR EL NOMBRE DE UN CAMPO EN EL RESULTADO
DE UNA CONSULTA
EJEMPLO SELECT N. CAMPO AS NOMBRE A MOSTRAR FORM N. TABLA;
LITERALES = CADENAS ALFANUMERICAS, TAL COMO SE ESCRIBE EN LA
INSTRUCCIÓN SELECT SE MUESTRAN EN EL RESULTADO DE UNA
CONSULTA
OPERADORES
OPERADORES DE COMPARACION
<, >, =, >=, <=,<>
<=> EL OPERADOR <=> FUNCIONA IGUAL QUE EL
OPERADOR =. SALVO QUE, SI EN LA COMPARACIÓN
UNA O AMBAS DE LAS EXPRESIONES ES NULA, EL
RESULTADO NO ES NULL. SI SE COMPARAN DOS
EXPRESIONES NULAS, EL RESULTADO ES VERDADERO
Página 3 de 33
SELECT * FROM N.T. WHERE N.CAMPO < VALOR;
AND = CUMPLIR TODAS LAS CONDICIONES
OR = O UNA O LA OTRA
NOT = NINGUNA
DEVUELVEN VALORES LOGICOS, VERDADEROS O FALSOS, 1 O 0
SI UNO O 2 VALORES SON NULL DEVUELVE NULL
OPERADOR BETWEEN - PARA ESPECIFICAR RANGO DE VALORES
SELECT * FROM N.T. WHERE N.CAMPO BETWEEN VALOR-MENOS AND
VALOR MAYOR (INCLUSIVE ESTOS VALORES);
OPERADOR IN – INCLUYE TODOS LOS REGISTROS QUE TENGAN
ANLGUNOS DE LOS VALORES ESPECIFICADOS
SELECT * FROM N.T. WHERE CIUDAD IN (‘VALOR1’, ‘VALOR2’, ‘VALOR..’);
NOT IN QUE NO INCLUYA
OPERADOR LIKE Y NOT LIKE CON COMODINES
LOS COMODINES PERMITEN REEMPLAZAR CARACTERES EN LA CONDICION
ESPECIFICADA EN LA CLAUSULA WHERE
LOS COMODINES SON
% REMMPLAZA UNA SERIE DE CARACTERES INDEFINIDOS
_ ESTE COMODIN REEMPLAZA UN CARACTER
SELECT * FORM N. TABLA WHERE N. CAMPO LIKE ‘C%’; TODOS LOS
REGISTROS QUE EMPIEZAN CON C
‘%VALOR%’
‘%C’
‘B_____’ CAMPO QUE COMIENZA CON LA LETRA B Y CONTENGA 5
CARACTERES (UN GUION POR CARÁCTER)
SI DENTRO DE LA CADENA HAY QUE COLOCAR EL SIGNO % O EL GUION_
SE COLOCA ENTONCES DELANTE DE ELLOS LA BARRA INVERTIDA \ (ALT +
92)
Página 4 de 33
OPERADORES IS NULL Y IS NOT NULL
EL PRIMERO VACIO EL SEGUNDO TIENE ALGUN DATO
MODULO 3
BACKUP
PARA GENERAR UN BACKUP DE UNA BASE DE DATOS, BASTARÁ CON
INGRESAR EN MYSQL WORKBENCH Y EJECUTAR EL COMANDO SERVER
DATA EXPORT.
SELECCIONAR LA BASE DE DATO A RESPALDAR.
DENTRO DEL CUADRO EXPORT OPTIONS, PODRÁS ESCOGER ENTRE CREAR
EN UNA CARPETA, VARIOS ARCHIVOS POR CADA TABLA CONTENIDA EN LA
BASE DE DATOS; O CREAR UN ÚNICO ARCHIVO PARA TODA LA BASE DE
DATOS
EXPORT TO SELF-CONTAINED FILE.
DEFINIDO EL NOMBRE Y LA UBICACIÓN PARA EL ARCHIVO DE RESPALDO O
BACKUP, BASTARÁ CON PULSAR EL BOTÓN START EXPORT PARA INICIAR
EL PROCESO.
RESTAURAR UN BACKUP
DADO QUE EL BACKUP SE GENERÓ EN UN ÚNICO ARCHIVO, SE DEBERÁ
SELECCIONAR LA OPCIÓN IMPORT FROM SELF-CONTAINED FILE
BASTARÁ CON PULSAR EL BOTÓN START IMPORT PARA INICIAR EL
PROCESO DE RECUPERACIÓN DE LA BASE DE DATOS
FUNCIONES INTEGRADAS DE TEXTO
FUNCIÓN CONCAT()
ESTA FUNCIÓN PERMITE CONCATENAR (UNIFICAR) CADENAS DE
CARACTERES (VALORES DE CAMPO O VALORES CONSTANTES DE TEXTO)
EN UNA SOLA COLUMNA. EJEMPLO:
SELECT CONCAT('SR./A. ', NOMBRE, ' ', APELLIDO) AS 'NOMBRE
COMPLETO' FROM CLIENTES;
Página 5 de 33
EJEMPLO
SELECT COD_CLIENTE, EMPRESA , CONCAT (DIRECCION, ‘ – ‘, CIUDAD)
UBICACIÓN FROM CLIENTES;
FUNCIÓN CONCAT_WS()
ESTA FUNCIÓN PERMITE CONCATENAR (UNIFICAR) CADENAS DE
CARACTERES EN UNA SOLA COLUMNA.
A DIFERENCIA DE LA FUNCIÓN CONCAT, EN EL PRIMER ARGUMENTO DE
ESTA FUNCIÓN SE DEBE ESPECIFICAR EL CARÁCTER A UTILIZAR PARA
SEPARAR LAS CADENAS A CONCATENAR (WS: WITH SEPARATOR).
FUNCIÓN UPPER()
ESTA FUNCIÓN CONVIERTE A MAYÚSCULAS EL VALOR DE UN CAMPO.
SELECT UPPER(NOMBRE) NOMBRES FROM CLIENTES;
FUNCIÓN LOWER()
ESTA FUNCIÓN CONVIERTE A MINÚSCULAS EL VALOR DE UN CAMPO
SELECT LOWER(APELLIDO) FROM CLIENTES;
FUNCIÓN LEFT()
ESTA FUNCIÓN PERMITE OBTENER LOS PRIMEROS CARACTERES DE UNA
CADENA.
SELECT CONCAT(LEFT(NOMBRE, 1), '.') AS INICIAL_NOMBRE FROM
CLIENTES;
FUNCIÓN RIGHT()
ESTA FUNCIÓN PERMITE OBTENER LOS ULTIMOS CARACTERES DE UNA
CADENA
SELECT RIGHT(CUIT, 1) AS 'DÍGITO VERIFICADOR' FROM CLIENTES;
SELECT *, UPPER(CONCAT(LEFT(CARGO, 1), RIGHT(CARGO,1))) CODIGO
FROM EMPLEADOS;
Página 6 de 33
FUNCIÓN SUBSTRING()
ESTA FUNCIÓN PERMITE EXTRAER, A PARTIR DE UNA DETERMINADA
POSICIÓN, UNA DETERMINADA CANTIDAD DE CARACTERES.
EL EJEMPLO DEBAJO, UTILIZA LA FUNCIÓN SUBSTRING PARA
EXTRAER DEL CAMPO CUIT DE LA TABLA CLIENTES LA CADENA DE
CARACTERES QUE IDENTIFICA AL NÚMERO DE DOCUMENTO (DNI):
SELECT SUBSTRING(CUIT, 4, 8) AS 'DNI' FROM CLIENTES;
FUNCIÓN CHAR_LENGTH()
ESTA FUNCIÓN PERMITE CONTABILIZAR LA CANTIDAD DE
CARACTERES QUE CONTIENE UNA CADENA, E INCLUYE LOS
ESPACIOS EN BLANCO. EJEMPLO:
SELECT DIRECCION, CHAR_LENGTH(DIRECCION) AS ‘CANTIDAD DE
CARACTERES’ FROM CLIENTES;
FUNCIÓN LOCATE()
ESTA FUNCIÓN DEVUELVE LA PRIMERA POSICIÓN EN LA QUE
APARECE UNA CADENA.
SELECT DIRECCION, LOCATE('AS', DIRECCION) 'POSICIÓN' FROM CLIENTES
WHERE DIRECCION LIKE ‘%AS%’;
FUNCIÓN LTRIM()
ESTA FUNCIÓN PERMITE QUITAR LOS ESPACIOS EN BLANCO
INICIALES DE UNA CADENA.
SELECT LTRIM(DIRECCION) DIRECCION_CORRECTA FROM CLIENTES;
FUNCIÓN RTRIM()
ESTA FUNCIÓN PERMITE QUITAR LOS ESPACIOS EN BLANCO FINALES
Página 7 de 33
DE UNA CADENA.
SELECT RTRIM(DIRECCION) DIRECCION_CORRECTA FROM CLIENTES;
FUNCIÓN REPLACE()
ESTA FUNCIÓN PERMITE BUSCAR Y REEMPLAZAR UNA CADENA
DE CARACTERES POR OTRA.
SELECT REPLACE(DIRECCION, 'AV.', 'AVENIDA') DIRECCION FROM
CLIENTES;
FUNCIONES INTEGRADAS DE FECHA
FUNCIÓN YEAR()
ESTA FUNCIÓN PERMITE OBTENER EL AÑO DE UN CAMPO DE TIPO
FECHA
SELECT YEAR(FECHA) AS 'AÑO' FROM FACTURAS;
SELECT * FORM NOMB. TABLA WHERE YEAR(NOMB. DEL CAMPO) =
VALOR;
FUNCIÓN MONTH()
ESTA FUNCIÓN PERMITE OBTENER EL MES, DE UN CAMPO DE TIPO
FECHA.
SELECT MONTH(FECHA) AS 'MES' FROM FACTURAS;
FUNCIÓN DAY()
ESTA FUNCIÓN PERMITE OBTENER EL DÍA DE UN CAMPO DE TIPO
FECHA.
SELECT DAY(FECHA) AS 'DIA' FROM FACTURAS;
SELECT * FORM NOMB. TABLA WHERE DAY(NOMB. DEL CAMPO) =
VALOR AND MONTH(FECHA EN NUMERO) = 4;
Página 8 de 33
FUNCIÓN HOUR()
ESTA FUNCIÓN PERMITE OBTENER LA HORA DE UN CAMPO DE TIPO
FECHA/HORA (DATETIME).
SELECT HOUR(FECHA) AS 'HORA' FROM FACTURAS;
FUNCIÓN CURDATE()
ESTA FUNCIÓN DEVUELVE LA FECHA ACTUAL (LA FECHA
DEL SISTEMA OPERATIVO) EN UNA COLUMNA CON EL NOMBRE
FECHA ACTUAL.
SELECT CURDATE() AS 'FECHA ACTUAL';
Función DATEDIFF()
Esta función permite calcular la cantidad de días
transcurridos entre 2 fechas.
SELECT DATEDIFF('2020-06-30','2020-01-01') as 'DIAS TRANSCURRIDOS';
SELECT *, DATEDIFF(CURDATE(), FECHAPEDIDO) AS ' DIAS
TRANSCURRIDOS' FROM PEDIDOS_NEPTUNO;
FUNCIÓN TIMESTAMPDIFF()
ESTA FUNCIÓN PERMITE CALCULAR LA CANTIDAD DE MESES O
AÑOS TRANSCURRIDOS ENTRE 2 FECHAS.
SELECT TIMESTAMPDIFF(MONTH, '2020-01-01', '2020-06-30') AS 'MESES
TRANSCURRIDOS';
SELECT TIMESTAMPDIFF(YEAR, FECHA_EMISION, CURDATE()) AS 'AÑOS
TRANSCURRIDOS' FROM FACTURAS;
FUNCIÓN DAYNAME()
Página 9 de 33
DEVUELVE EL NOMBRE DEL DÍA DE LA
SEMANA, DE LA FECHA ACTUAL EN ESTE CASO, EN UNA COLUMNA CON EL
ALIAS
NOMBRE DEL DÍA.
SELECT * DAYNAME(CURDATE()) AS 'NOMBRE DEL DÍA';
SELECT DAYNAME(NOMBRE DEL CAMPO) AS 'NOMBRE DEL DÍA' FROM
NOMB. TABLA;
FUNCIÓN DAYOFWEEK()
ESTA FUNCIÓN DEVUELVE EL ÍNDICE O NÚMERO DEL DÍA DE LA
SEMANA DE UN VALOR DE UN CAMPO DE TIPO FECHA.
SELECT DAYOFWEEK(CURDATE()) AS 'NÚMERO DEL DÍA DE LA SEMANA';
FUNCIÓN DAYOFYEAR()
ESTA FUNCIÓN DEVUELVE EL ÍNDICE O NÚMERO DEL DÍA DEL AÑO
DE UN VALOR DE UN CAMPO DE TIPO FECHA.
SELECT DAYOFYEAR(CURDATE()) AS 'DÍA DEL AÑO';
FUNCIÓN MONTHNAME()
ESTA FUNCIÓN DEVUELVE EL NOMBRE DEL MES DE UN VALOR DE
UN CAMPO DE TIPO FECHA.
SELECT MONTHNAME(CURDATE()) AS 'NOMBRE DEL MES';
FUNCIÓN ADDDATE()
ESTA FUNCIÓN PERMITE SUMARLE AL VALOR DE UN
CAMPO DE TIPO FECHA UNA DETERMINADA CANTIDAD
DE DÍAS, MESES O AÑOS.
Página 10 de 33
EN EL EJEMPLO SIGUIENTE, SE UTILIZA LA FUNCIÓN
ADDDATE PARA QUE, DADA LA FECHA ACTUAL, SE
PUEDE AGREGAR UN INTERVALO DE 2 MESES EN UNA
COLUMNA CON EL NOMBRE VENCIMIENTO A 2 MESES,
SELECT CURDATE() 'FECHA ACTUAL',
ADDDATE(CURDATE(), INTERVAL 2 MONTH) 'VENCIMIENTO A 2 MESES',
ADDDATE(CURDATE(), INTERVAL 90 DAY) 'VENCIMIENTO A 90 DÍAS',
ADDDATE(CURDATE(), INTERVAL 2 YEAR) 'VENCIMIENTO A 2 AÑOS';
FUNCIONES MATEMATICAS INTEGRADAS
FUNCIÓN ROUND()
ESTA FUNCIÓN PERMITE REDONDEAR VALORES NUMÉRICOS
SELECT ROUND(PRECIO/3, 2) FROM ARTICULOS; (EL 2 INDICA CANTIDAD
DE DECIMALES, TIENE QUE SER UN NUMERO ENTERO)
SELECT NOM. CAMPOS, ROUND(PRECIO*0.21, 2) IVA,
ROUND(PRECIO*1.21, 2) ‘PRECIO FINAL’,
FROM NOMB. DE LA TABLA;
FUNCIÓN MOD()
ESTA FUNCIÓN PERMITE MOSTRAR EL RESTO DE UNA DIVISION
SELECT NOM. CAMPOS, ROUND(MOD(PRECIO, 2) , 2) ‘RESTO’, FROM
NOMB. DE LA TABLA;
FUNCIÓN POW()
ESTA FUNCIÓN PERMITE ELEVAR A UNA POTENCIA UN VALOR
NUMÉRICO.
SELECT POW(2, 8);
Página 11 de 33
FUNCIÓN CEIL()
ESTA FUNCIÓN DEVUELVE EL VALOR ENTERO MAYOR AL ARGUMENTO
ESPECIFICADO.
EJEMPLO:
MULTIPLICA EL VALOR DEL CAMPO PRECIO POR
1.27 Y OBTIENE EL VALOR ENTERO MAYOR EN UNA COLUMNA CON
EL NOMBRE PRECIO REDONDEADO.
SELECT PRECIO, PRECIO * 1.27 'PRECIO CON AUMENTO',
CEIL(PRECIO * 1.27) 'PRECIO REDONDEADO
Función FLOOR()
ESTA FUNCIÓN DEVUELVE EL VALOR ENTERO MENOR AL ARGUMENTO
ESPECIFICADO.
SELECT PRECIO, PRECIO * 1.27 'PRECIO CON AUMENTO',
FLOOR(PRECIO * 1.27) 'PRECIO REDONDEADO'
FROM ARTICULOS;
FUNCIONES DE AGREGADO / AGRUPAMIENTO
EXISTEN FUNCIONES EN SQL QUE NOS PERMITEN CONTAR REGISTROS,
CALCULAR SUMAS, PROMEDIOS, OBTENER VALORES MÁXIMOS Y
MÍNIMOS.
ESTAS FUNCIONES SE DENOMINAN FUNCIONES DE AGRUPAMIENTO
PORQUE OPERAN SOBRE CONJUNTOS DE REGISTROS, EN LUGAR DE
HACERLO SOBRE DATOS INDIVIDUALES. TIENEN LA CARACTERÍSTICA DE
AGRUPAR LOS RESULTADOS EN UN SOLO REGISTRO DE SALIDA
Página 12 de 33
FUNCIÓN COUNT()
ESTA FUNCIÓN RETORNA LA CANTIDAD DE VALORES
QUE CONTIENE UN CAMPO ESPECIFICADO.
SELECT COUNT(*) FROM Productos; Correcto
SELECT COUNT (*) FROM Productos; Incorrecto
PUEDE COMBINARSE
CON LA CLÁUSULA WHERE. POR EJ., SI SE QUIERE SABER CUÁNTOS
PRODUCTOS CONTIENEN LA PALABRA IPHONE EN EL CAMPO
NOMBRE DE LA LA TABLA PRODUCTOS, LA SENTENCIA SERÍA:
SELECT COUNT(*) FROM PRODUCTOS WHERE NOMBRE LIKE
"%IPHONE%";
FUNCIÓN SUM()
ESTA FUNCIÓN RETORNA LA SUMA DE LOS VALORES QUE CONTIENE
EL CAMPO ESPECIFICADO.
SELECT SUM(STOCK) FROM PRODUCTOS;
FUNCIÓN MAX()
PERMITE AVERIGUAR EL VALOR MÁXIMO DE UN CAMPO.
POR EJEMPLO, PARA CONOCER CUÁL ES EL MAYOR PRECIO DE TODOS
LOS PRODUCTOS, LA INSTRUCCIÓN SQL A EJECUTAR SERÁ:
SELECT MAX(PRECIO) FROM PRODUCTOS;
FUNCIÓN MIN()
ESTA FUNCIÓN PERMITE CALCULAR EL VALOR MÍNIMO DE UN CAMPO.
SELECT MIN(PRECIO) FROM PRODUCTOS;
Página 13 de 33
FUNCIÓN AVG()
ESTA FUNCIÓN RETORNA EL VALOR PROMEDIO DE LOS VALORES DEL
CAMPO ESPECIFICADO.
SELECT AVG(PRECIO) FROM PRODUCTOS;
CLÁUSULA GROUP BY
LA AGRUPACIÓN ES UN CONCEPTO BÁSICO DE BASES DE DATOS. LA
CLÁUSULA GROUP BY, COMO SU TRADUCCIÓN LO INDICA (AGRUPAR
POR) TIENE COMO PROPÓSITO AGRUPAR INFORMACIÓN DE ACUERDO
A UN CRITERIO EN COMÚN.
● POR LO GENERAL SE UTILIZA CON FUNCIONES DE AGRUPACIÓN
O DE AGREGACIÓN (COUNT, MIN, MAX, AVG, SUM).
● EL COMPORTAMIENTO DE LA CLÁUSULA GROUP BY DEPENDERÁ
DE LA FUNCIÓN DE AGRUPACIÓN QUE SE ESTÉ UTILIZANDO.
ID NOMBRE PRECIO MARCA CATEGORÍA PRESENTACIÓN STOCK
DISPONIBLE
1 IPHONE 6 499.99 APPLE SMARTPHONE 16GB 500 SI
2 IPAD PRO 599.99 APPLE SMARTPHONE 128GB 300 SI
3 NEXUS 7 299.99 LG SMARTPHONE 32GB 250 NO
4 GALAXY S7 459.99 SAMSUNG SMARTPHONE 64GB 200 SI
5 IMPRESORA T23 489.99 EPSON IMPRESORAS COLOR 180 NO
6 IMPRESORA T33 399 EPSON IMPRESORAS COLOR 200 NO
7 LAVARROPA 7000 1679 LG LAVARROPAS AUTOMÁTICO 100 SI
8 CAMARA DIGITAL 760 649 KODAK FOTOGRAFÍA SIN DETALLE 150 NO
9 NOTEBOOK CQ40-300 2999 HP NOTEBOOKS INTEL CORE I3 100 SI
Página 14 de 33
SUPONIENDO QUE SE QUIERE CALCULAR LA CANTIDAD DE
PRODUCTOS EXISTENTES EN LA CATEGORÍA SMARTPHONE,
ENTONCES HABRÁ QUE AGRUPAR LOS REGISTROS POR EL CAMPO
CATEGORÍA. LA CLÁUSULA GROUP BY PERMITE HACER ESTO DE
MANERA AUTOMÁTICA A PARTIR DE UN VALOR O DATO COMÚN:
SELECT CATEGORIA, SUM(STOCK) FROM PRODUCTOS GROUP BY
CATEGORIA;
SELECT EMPLEADO AS EMPLEADOS,
ROUND(SUM(CARGO), 2) AS FACTURACION,
COUNT(*) AS VENTAS,
ROUND(AVG(CARGO), 2) AS PROMEDIO,
MAX(CARGO) AS 'MEJOR VENTA',
MIN(CARGO) AS 'MENOR VENTA'
FROM PEDIDOS_NEPTUNO
GROUP BY EMPLEADOS;
CLÁUSULA HAVING
PERMITE HACER SELECCIONES (FILTRAR)
EN SITUACIONES EN LAS QUE NO ES POSIBLE USAR LA CLÁUSULA
WHERE, DADO QUE SE ESTABLECE UN CRITERIO SOBRE UN VALOR
DADO POR UNA FUNCIÓN DE AGRUPAMIENTO Y NO POR VALORES
DE REGISTROS
SELECT CATEGORIA, SUM(STOCK) FROM PRODUCTOS GROUP BY
CATEGORIA
HAVING SUM(STOCK) > 250;
SELECT EMPLEADO AS EMPLEADOS,
Página 15 de 33
ROUND(SUM(CARGO), 2) AS FACTURACION,
COUNT(*) AS VENTAS,
ROUND(AVG(CARGO), 2) AS PROMEDIO,
MAX(CARGO) AS 'MEJOR VENTA',
MIN(CARGO) AS 'MENOR VENTA'
FROM PEDIDOS_NEPTUNO
GROUP BY EMPLEADOS
HAVING FACTURACION > 9000;
MODULO 4
EN ESTE MÓDULO VERÁS:
● MANIPULACIÓN DE REGISTROS CON CREATE, INSERT, UPDATE Y DELETE.
● CONSULTA DE CREACIÓN DE TABLAS.
● CONSULTA DE ACTUALIZACIÓN.
● CONSULTA DE ELIMINACIÓN.
● CONSULTA DE DATOS ANEXADOS.
● DML - DDL.
CONSULTAS DE ACCION
CREATE TABLE SELECT
CONSULTA DE CREACIÓN DE TABLA
PUEDES CREAR UNA NUEVA TABLA A PARTIR DE UNA SENTENCIA SELECT
PARA PODER DUPLICAR LA ESTRUCTURA COMPLETA DE LA MISMA O SÓLO
PARTE DE ELLA.
CREATE TABLE CLIENTES_COPIA
SELECT * FROM CLIENTES;
Página 16 de 33
CREATE TABLE CLIENTES_ARGENTINA
SELECT * FROM CLIENTES WHERE PAIS = ‘ARGENTINA’;
Nota: en los ejemplos mencionados, se replica la
estructura de la tabla original y el tipo de datos de
cada uno de sus campos, pero no la Primary Key.
MODIFICAR REGISTROS DE UNA TABLA
UPDATE
UPDATE TABLA SET CAMPO1 = VALOR1 WHERE CAMPO = 'VALOR';
UPDATE TABLA SET CAMPO1 = VALOR1, CAMPO2 = VALOR2 WHERE
CAMPO = 'VALOR';
MODIFICAR REGISTROS DE UNA TABLA
UPDATE - ACTUALIZACIONES SELECTIVAS
UPDATE ARTICULOS SET NOMBRE = 'PALA ANCHA' WHERE NOMBRE =
'PALA';
UPDATE ARTICULOS SET PRECIO = '499.99' WHERE NOMBRE = 'PALA';
MODIFICAR REGISTROS DE UNA TABLA
DESBLOQUEO DE BASES DE DATOS
EN OCASIONES, EL MOTOR DE BASE DE DATOS MYSQL WORKBENCH
BLOQUEA (POR DEFECTO) LAS BASES DE DATOS PARA EVITAR
ACTUALIZACIONES O ELIMINACIONES INVOLUNTARIAS. POR LO TANTO,
EN EL CASO DE QUERER LLEVAR A CABO LA ACTUALIZACIÓN (O
ELIMINACIÓN) DE REGISTROS DE UNA BASE DE DATOS, SERÁ NECESARIO
DESBLOQUEAR LA BASE DE DATOS EN USO EJECUTANDO LA SIGUIENTE
INSTRUCCIÓN:
SET SQL_SAFE_UPDATES = 0;
Página 17 de 33
CONSULTA DE DATOS ANEXADOS: DML INSERT
SE PUEDEN INSERTAR DATOS (PROVENIENTES DE OTRA
TABLA) EN UNA TABLA A PARTIR DE UNA SENTENCIA
SELECT. DE ESTE MODO, PODRÁS REALIZAR UNA
INSERCIÓN MASIVA DE DATOS DESDE UNA TABLA
HACIA OTRA EN UNA SOLA INSTRUCCIÓN O SENTENCIA.
SINTAXIS:
INSERT INTO TABLADESTINO (COLUMNA1, ..., COLUMNAX)
SELECT (COLUMNA1, ..., COLUMNAX) FROM TABLAORIGEN;
NOTA: LA TABLA DE DESTINO (LLAMADA
TABLADESTINO EN EL EJEMPLO ANTERIOR) DEBE
TENER LA MISMA ESTRUCTURA QUE LA CONSULTA
SELECT; ES DECIR, LA MISMA CANTIDAD DE
COLUMNAS Y TIPOS DE DATOS COMPATIBLES.
UPDATE CLIENTES_NEPTUNO
ELIMINAR REGISTROS DE UNA TABLA: DML DELETE
PARA ELIMINAR REGISTROS DE UNA TABLA, SE UTILIZA LA
SENTENCIA DELETE. AL HACERLO, SE DEBERÁ ESPECIFICAR LA CONDICIÓN
QUE DEBEN CUMPLIR LOS REGISTROS DE LA TABLA A ELIMINAR.
DELETE FROM PRODUCTOS WHERE IDPRODUCTO = 1;
TRUNCATE TABLE
LA SENTENCIA DELETE SE PUEDE UTILIZAR PARA
ELIMINAR TODOS LOS REGISTROS DE UNA TABLA, PERO
TIENE LA DESVENTAJA DE NO SER TAN EFICIENTE, YA
Página 18 de 33
QUE, POR EJEMPLO (ENTRE OTRAS LIMITACIONES), NO
RESETEA LOS VALORES DE LOS CAMPOS
AUTO_INCREMENT.
TRUNCATE TABLE PRODUCTOS;
POR ESTE MOTIVO, SI SE OPTA POR VACIAR
COMPLETAMENTE LA TABLA, ES RECOMENDABLE UTILIZAR
LA SENTENCIA TRUNCATE TABLE, LA CUAL ELIMINA
LOS REGISTROS EN SU TOTALIDAD Y DEJA VACÍA LA
TABLA, DE MANERA MENOS COSTOSA (EN TÉRMINOS DE
RENDIMIENTO) PARA EL SERVIDOR DE BASE DE DATOS.
ALTER TABLE CLIENTES
MODIFY TELEFONO VARCHAR(20);
UPDATE CLIENTES
SET TELEFONO = CONCAT(‘+34-’, TELEFONO);
SELCT * FROM CLIENTES;
ALTER TABLE PRODUCTOS
ADD FECHA DATE;
UPDATE PRODUCTOS
SET FECHA = CONCAT(ANO, '-', MES, '-', DIA);
SELECT DIA, MES, ANO, FECHA FROM PRODUCTOS;
ALTER TABLE PRODUCTOS_NEPTUNO
MODIFY SUSPENDIDO VARCHAR(2);
UPDATE PRODUCTOS NEPTUNO
SET SUSPENDIDO = IF(SUSPENDIDO = '0', 'NO', 'SI');
Página 19 de 33
SELECT * FROM PRODUCTOS_NEPTUNO;
CREATE TABLE PRODUCTOS_SUSPENDIDOS
SELECT * FROM PRODUCTOS_NEPTUNO
WHERE SUSPENDIDO = 'SI'; (CREAR UNA TABLA A PARTIR DE UNA
TABLA ACTUALIZADA)
UPDATE PRODUCTOS_NEPTUNO
SET SUSPENDIDO = 'SI'
WHERE IDPROVEEDOR = 1;
SELECT * FROM PRODUCTOS_NEPTUNO; (ACTUALIZAR UN CAMPO EN
BASE A OTRO CAMPO)
UPDATE CLIENTES_NEPTUNO
SET CIUDAD = UPPER(CIUDAD), PAIS = UPPER(PAIS);
SELECT * FROM CLIENTES_NEPTUNO;
SET PAIS = 'UK' WHERE PAIS = 'REINO UNIDO';
SELECT * FROM CLIENTES_NEPTUNO;
ALTER TABLE EMPLEADOS ADD NOMBRE_EMPLEADO VARCHAR(30)
AFTER IDEMPLEADO;
UPDATE EMPLEADOS
SET NOMBRE_EMPLEADO = CONCAT(APELLIDOS, ', ', NOMBRE);
ALTER TABLE EMPLEADOS DROP APELLIDOS, DROP NOMBRE;
SELECT * FROM EMPLEADOS;
ALTER TABLE CLIENTES ADD TIPO VARCHAR(3);
Página 20 de 33
UPDATE CLIENTES SET TIPO = 'VIP' WHERE CIUDAD = 'MADRID';
SELECT * FROM CLIENTES;
ALTER TABLE CLIENTES MODIFY TELEFONO VARCHAR(20);
UPDATE CLIENTES
SET TELEFONO = CONCAT('+34-', TELEFONO) WHERE TELEFONO IS NOT
NULL;
SELECT * FROM CLIENTES;
UPDATE CLIENTES
SET CIUDAD = CONCAT(UPPER(LEFT(CIUDAD, 1)),
LOWER(SUBSTRING(CIUDAD, 2, LENGTH(CIUDAD))));
SELECT * FROM CLIENTES;
SET SQL_SAFE_UPDATES = 0;
DELETE FROM PRODUCTOS_NEPTUNO
WHERE SUSPENDIDO = 'SI';
DESAFIO
ALTER TABLE TOP_SPOTIFY ADD PERMANENCIA INT;
UPDATE TOP_SPOTIFY SET PERMANENCIA = YEAR(CURDATE()) - ANO;
CREATE TABLE ULTIMOS_LANZAMIENTOS SELECT * FROM TOP_SPOTIFY
WHERE PERMANENCIA <= 3; DELETE FROM TOP_SPOTIFY WHERE
PERMANENCIA <=3;
AGREGAR EL REGISTRO SOLICITADO A LA TABLA TOP_SPOTIFY:
INSERT INTO TOP_SPOTIFY
Página 21 de 33
VALUES (610, 'GOD CONTROL', 'MADONNA', 'POP', 2018, 3);
INSERT INTO ULTIMOS_LANZAMIENTOS (ID, TITULO, ARTISTA, GENERO,
ANO, PERMANENCIA)
SELECT ID, TITULO, ARTISTA, GENERO, ANO, PERMANENCIA
FROM TOP_SPOTIFY
WHERE PERMANENCIA <= 3;
DELETE FROM TOP_SPOTIFY
WHERE PERMANENCIA <= 3;
SET SQL_SAFE_UPDATES = 0;
UPDATE AUTORES SET NOMBRE = 'Esteban'
WHERE APELLIDO = 'ECHEVERRÍA';
ALTER TABLE EMPLEADOS ADD PERMANENCIA INT;
UPDATE EMPLEADOS
SET PERMANENCIA = TIMESTAMPDIFF(YEAR, FECHA_INGRESO,
CURDATE());
ALTER TABLE LIBROS ADD PRECIO_PUBLICO FLOAT;
UPDATE LIBROS SET PRECIO_PUBLICO = ROUND(PRECIO * 1.21, 2);
CREATE TABLE EMPLEADOS_ANTERIORES
SELECT * FROM EMPLEADOS
WHERE APELLIDO IN ('THOMAS', 'PEREIRA', 'DEVO');
DELETE FROM EMPLEADOS
WHERE APELLIDO IN ('THOMAS', 'PEREIRA', 'DEVO');
Página 22 de 33
INSERT INTO EMPLEADOS_ANTERIORES (EMPLEADO_ID, NOMBRE,
APELLIDO,
PUESTO_ID, EDITORIAL_ID, FECHA_INGRESO, PERMANENCIA)
SELECT EMPLEADO_ID, NOMBRE, APELLIDO, PUESTO_ID, EDITORIAL_ID,
FECHA_INGRESO, PERMANENCIA
FROM EMPLEADOS
WHERE APELLIDO = 'CRUZ';
DELETE FROM EMPLEADOS
WHERE APELLIDO = 'CRUZ';
MODULO 5
SUBCONSULTAS
UNA SUBCONSULTA ES UNA CONSULTA, ES DECIR, UN
SELECT DENTRO DE OTRA CONSULTA (OTRO SELECT).
SU OBJETIVO ES OBTENER UN RESULTADO Y UTILIZARLO
COMO CRITERIO DE BÚSQUEDA PARA OBTENER UN
DETERMINADO LISTADO DE REGISTROS.
SELECT * FROM ARTICULOS WHERE ARTICULOID IN
(SELECT ARTICULOID FROM FACTURAS);
EL SIGUIENTE EJEMPLO UTILIZA UNA SUBCONSULTA PARA
CONOCER TODOS LOS REGISTROS DE LA TABLA ARTICULOS
CUYO VALOR DE CAMPO ARTICULOID SE ENCUENTRA EN
EL CAMPO ARTICULOID DE LA TABLA FACTURAS.
SUBCONSULTA ESCALAR
SE DENOMINA SUBCONSULTA ESCALAR A AQUELLA
Página 23 de 33
SUBCONSULTA QUE DEVUELVE UN ÚNICO RESULTADO
(COMO PUEDE SER UNA SUMA, UN PROMEDIO, UN
VALOR MÁXIMO, UN VALOR MÍNIMO, ETC.).
CONDICIONAL CASE
EL CONDICIONAL CASE PERMITE ASIGNAR UN VALOR A
UNA COLUMNA TOMANDO COMO REFERENCIA OTRO
VALOR DE LA TABLA.
POR CADA VALOR O GRUPO DE VALORES EXISTE UN
WHEN Y UN THEN; SI ENCUENTRA UN VALOR
COINCIDENTE EN ALGÚN WHEN, EJECUTA EL THEN
CORRESPONDIENTE A ESE WHEN; CASO CONTRARIO,
SE EJECUTA EL ELSE.
ESTE CONDICIONAL SE DEBE CERRAR CON LA PALABRA
END PARA INDICAR QUE EL CASE HA FINALIZADO.
SELECT NOMBRE, PRECIO,
CASE WHEN PRECIO < 20 THEN ‘BARATO’
WHEN PRECIO BETWEEN 20 AND 40 THEN ‘EQUILIBRADO’
ELSE ‘CARO’
END AS CATEGORIA
FROM ARTICULOS;
SELECT IDCLIENTE, NOMBRECOMPANIA, CIUDAD, PAIS,
Página 24 de 33
CASE
WHEN PAIS IN ('ARGENTINA', 'BRASIL', 'VENEZUELA')
THEN 'AMERICA DEL SUR'
WHEN PAIS IN ('MEXICO', 'USA', 'CANADA')
THEN 'AMERICA DEL NORTE'
ELSE 'EUROPA'
END AS CONTINENTE
FROM CLIENTES_NEPTUNO ORDER BY CONTINENTE, PAIS;
COMPARACION DE CONSULTAS (UNION)
COMBINACIÓN DE CONSULTAS: UNION
PARA COMPARAR LOS RESULTADOS DE VARIAS
CONSULTAS Y COMBINARLOS EN UN NUEVO RESULTADO
BASADO EN ESA COMPARACIÓN EXISTE (ENTRE OTROS)
EL OPERADOR UNION.
DADO QUE SE COMPARARÁN VARIAS CONSULTAS, ES
NECESARIO QUE:
● EN CADA RESULTADO EXISTA LA MISMA CANTIDAD
DE CAMPOS Y
● LOS CAMPOS A COMPARAR TENGAN TIPOS DE DATOS
COMPATIBLES (NO ES NECESARIO QUE TENGAN EL
MISMO NOMBRE).
CONSULTA1 UNION [ALL] CONSULTA2;
SELECT * FROM nenes WHERE provincia = ‘Córdoba’
UNION
Página 25 de 33
SELECT * FROM nenas WHERE provincia = ‘La Pampa’;
SELECT * FROM VARONES WHERE SEMANAS < 20
UNION
SELECT * FROM MUJERES WHERE SEMANAS < 20
UNION
SELECT * FROM INDETERMINADOS WHERE SEMANAS < 20;
SELECT * FROM VARONES WHERE FECHA LIKE '%/09/%' AND
NACIONALIDAD =
'CHILENA' AND ESTADO_CIVIL_MADRE = 'CASADA' AND SEMANAS > 40
UNION
SELECT * FROM MUJERES WHERE FECHA LIKE '%/09/%' AND
NACIONALIDAD =
'CHILENA' AND ESTADO_CIVIL_MADRE = 'CASADA' AND SEMANAS > 40
UNION
SELECT * FROM INDETERMINADOS WHERE FECHA LIKE '%/09/%' AND
NACIONALIDAD =
'CHILENA' AND ESTADO_CIVIL_MADRE = 'CASADA' AND SEMANAS > 40;
SELECT *, 'A LA VENTA' AS CONDICION FROM PRODUCTOS_NEPTUNO
WHERE PRECIOUNIDAD > 80
UNION
SELECT *, 'SUSPENDIDO' AS CONDICION FROM
PRODUCTOS_SUSPENDIDOS
WHERE PRECIOUNIDAD > 80
ORDER BY NOMBREPRODUCTO;
Página 26 de 33
INSERT INTO PRODUCTOS_SUSPENDIDOS
(IDPRODUCTO, NOMBREPRODUCTO, NOMBRECONTACTO,
NOMBRECATEGORIA, PRECIOUNIDAD,
SUSPENDIDO, IDPROVEEDOR)
SELECT IDPRODUCTO, NOMBREPRODUCTO, NOMBRECONTACTO,
NOMBRECATEGORIA,
PRECIOUNIDAD, SUSPENDIDO, IDPROVEEDOR
FROM PRODUCTOS_NEPTUNO
WHERE IDPRODUCTO = 43 ;
SET SQL_SAFE_UPDATES = 0;
DELETE FROM PRODUCTOS_SUSPENDIDOS WHERE IDPRODUCTO = 43;
CONSULTAS RELACIONADAS
CONSULTAS DE MÁS DE UNA TABLA – CROSS JOIN
ES POSIBLE CONSULTAR DATOS DESDE VARIAS TABLAS EN
LA MISMA SENTENCIA SELECT. ESTO PERMITE REALIZAR
OTRAS DOS OPERACIONES DE ÁLGEBRA RELACIONAL: EL
PRODUCTO CARTESIANO Y LA COMPOSICIÓN INTERNA.
ANALIZANDO EL PANORAMA, PODRÁS OBSERVAR QUE
EN LA TABLA PRODUCTOS, EL CAMPO IDPRODUCTO ES
CLAVE PRIMARIA Y, POR ENDE, NO PUEDE TENER
VALORES REPETIDOS. PERO, EN EL CAMPO MARCA, EL
VALOR NUMÉRICO HACE REFERENCIA A LA MARCA A LA
QUE PERTENECE EL PRODUCTO. UNA MARCA PODRÍA NO
TENER NINGÚN PRODUCTO ASOCIADO, UNO O MUCHOS.
SINTAXIS:
Página 27 de 33
SELECT * FROM PRODUCTOS, MARCAS;
COMPOSICIÓN INTERNA
LA COMPOSICIÓN INTERNA SE TRATA DE UN PRODUCTO CARTESIANO
RESTRINGIDO EN DONDE LAS TUPLAS (CONJUNTO DE NOMBRES DE
ATRIBUTOS RELACIONADOS) QUE SE EMPAREJAN DEBEN CUMPLIR
UNA CONDICIÓN DETERMINADA.
EJEMPLO:
SELECT * FROM PRODUCTOS, MARCAS
WHERE PRODUCTOS.MARCA = MARCAS.IDMARCA;
CREATE TABLE SELECCIONES
(EQUIPO VARCHAR(15) PRIMARY KEY);
INSERT INTO SELECCIONES
VALUES ('ARGENTINA'), ('BRASIL'), ('COLOMBIA'), ('PERU'),
('VENEZUELA');
SELECT * FROM SELECCIONES;
SELECT * FROM SELECCIONES L CROSS JOIN SELECCIONES V
WHERE L.EQUIPO <> V.EQUIPO
ORDER BY L.EQUIPO;
EL PRODUCTO CARTESIANO DE DOS TABLAS SON TODAS
LAS COMBINACIONES DE TODAS LAS FILAS DE LAS DOS
TABLAS
ENTIDAD
Página 28 de 33
UNA ENTIDAD ES CUALQUIER "OBJETO" DISCRETO SOBRE EL
QUE
SE TIENE INFORMACIÓN. CADA EJEMPLAR DE UNA ENTIDAD SE
DENOMINA INSTANCIA. LAS ENTIDADES SON MODELADAS EN
LA
BASE DE DATOS COMO TABLAS.
INTEGRIDAD REFERENCIAL
LA INTEGRIDAD REFERENCIAL ES UN MECANISMO QUE
GARANTIZA LA INTEGRIDAD DE DATOS EN TABLAS
RELACIONADAS, YA QUE LA MISMA EVITA LA EXISTENCIA
DE LOS LLAMADOS REGISTROS HUÉRFANOS (REGISTROS
HIJOS SIN SU CORRESPONDIENTE REGISTRO PADRE).
PARA ESTABLECER LA INTEGRIDAD REFERENCIAL ES
NECESARIO CREAR EN UNA TABLA HIJA, UNA CLAVE
EXTERNA O FORÁNEA QUE ESTÉ RELACIONADA A UNA
CLAVE PRIMARIA DE LA TABLA PADRE.
ES POSIBLE ESTABLECER EL COMPORTAMIENTO DE LOS
REGISTROS EN LA TABLA HIJA, CUANDO SE PRODUCEN
ACTUALIZACIONES DE DATOS EN LA CLAVE PRIMARIA DE
LA TABLA PADRE, O SE ELIMINAN REGISTROS EN LA TABLA
PADRE A TRAVÉS DE LA DEFINICIÓN DE OPERACIONES EN
CASCADA: ON UPDATE, ON DELETE.
CLAVE FORÁNEA (FOREIGN KEY)
LA CLAVE FORÁNEA DE UNA TABLA ES AQUELLA QUE
REFERENCIA A LA CLAVE PRIMARIA DE UNA TABLA.
Página 29 de 33
ÉSTA PUEDE REFERENCIAR A LA CLAVE PRIMARIA DE LA
MISMA TABLA O DE OTRA. ANTE UNA CONSULTA SQL, SE
VALIDA LA LEGITIMIDAD DE LOS DATOS ALMACENADOS
EN UNA CLAVE FORÁNEA Y SE FUERZA LA INTEGRIDAD
REFERENCIAL.
LA CLAVE FORÁNEA DEBE TENER EL MISMO TIPO DE
DATOS QUE EL CAMPO AL CUAL HACE REFERENCIA, ES
DECIR, LA CLAVE PRIMARIA.
INNER JOIN
SELECT COD_CLIENTE, EMPRESA FROM CLIENTES INNER JOIN PEDIDOS
ON CLIENTES.COD_CLIENTE = PEDIDOS.CODIGO_CLIENTE
ORDER BY COD_CLIENTE;
SELECT TABLA1.CAMPOS, TABLA2.CAMPOS
FROM TABLA1, TABLA2
WHERE TABLA1.CAMPO1=TABLA2.CAMPO1
AND CONDICIÓN
LEFT [OUTER] JOIN
ESTE JOIN DEVUELVE TODOS LOS REGISTROS DE LA TABLA
DE LA IZQUIERDA Y LOS REGISTROS QUE COINCIDEN DE LA
TABLA DE LA DERECHA:
RIGHT [OUTER] JOIN
ESTE JOIN DEVUELVE TODOS LOS REGISTROS DE LA TABLA
Página 30 de 33
DE LA DERECHA Y LOS REGISTROS QUE COINCIDEN DE LA
TABLA DE LA IZQUIERDA:
SELECT *FROM TABLA1 RIGHT JOIN TABLA2
ON TABLA1.CODIGO = TABLA2.CODIGO;
CROSS JOIN
COMBINA CADA REGISTRO DE LA TABLA DE LA IZQUIERDA
CON CADA REGISTRO DE LA TABLA DE LA DERECHA, SIN
HACER COINCIDIR UN CAMPO EN PARTICULAR.
SELECT * FROM TABLA1 CROSS JOIN TABLA2;
PROYECTO 1
SELECT * FROM PRODUCTOS_NEPTUNO
WHERE PRECIOUNIDAD >
(SELECT AVG(PRECIOUNIDAD) FROM PRODUCTOS_NEPTUNO)
ORDER BY NOMBREPRODUCTO;
SELECT * FROM PRODUCTOS_NEPTUNO
WHERE PRECIOUNIDAD >
(SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS_SUSPENDIDOS)
ORDER BY PRECIOUNIDAD DESC;
SELECT * FROM VARONES
WHERE SEMANAS <
(SELECT MIN(SEMANAS) FROM INDETERMINADOS);
SELECT * FROM PRODUCTOS_NEPTUNO
Página 31 de 33
WHERE LEFT(NOMBREPRODUCTO, 1) =
(SELECT LEFT(NOMBRE_EMPLEADO, 1) FROM EMPLEADOS
WHERE IDEMPLEADO = 8)
ORDER BY NOMBREPRODUCTO;
SELECT * FROM PRODUCTOS_NEPTUNO
WHERE NOMBRECATEGORIA = 'BEBIDAS' AND
PRECIOUNIDAD >
(SELECT MAX(PRECIOUNIDAD) FROM PRODUCTOS_NEPTUNO
WHERE NOMBRECATEGORIA = 'CONDIMENTOS');
SELECT * FROM MUJERES
WHERE EDAD_MADRE >
(SELECT MAX(EDAD_MADRE) FROM VARONES);
UTILIZAR LA TABLA TOP SPOTIFY Y OBTENER UNA LISTA DE
TODOS AQUELLOS LANZAMIENTOS CORRESPONDIENTES A LADY
GAGA CON MAYOR PERMANENCIA EN LA PLATAFORMA
DIGITAL. EN EL RESULTADO DE LA CONSULTA, SÓLO MOSTRAR LOS
TÍTULOS DE LAS CANCIONES DE LA ARTISTA. ORDENAR EL RESULTADO
ALFABÉTICAMENTE POR LOS TÍTULOS DE LAS CANCIONES.
SELECT TITULO FROM TOP_SPOTIFY
WHERE PERMANENCIA =
(SELECT MAX(PERMANENCIA) FROM TOP_SPOTIFY)
AND ARTISTA = 'LADY GAGA'
ORDER BY TITULO;
Página 32 de 33
UTILIZA LA TABLA TOP SPOTIFY Y GENERA UNA
CONSULTA QUE MUESTRE LOS CAMPOS ARTISTA Y
TÍTULO. AGREGAR UNA COLUMNA CON EL NOMBRE
TIPO EN LA QUE SE MUESTREN LOS VALORES
DEFINIDOS EN EL EJERCICIO.
ORDENA EL RESULTADO ALFABÉTICAMENTE POR
NOMBRES DE LOS ARTISTAS. EN EL CASO DE QUE
HAYA UN ARTISTA CON MÁS DE UNA CANCIÓN EN EL
LISTADO, MOSTRAR ORDENADOS ALFABÉTICAMENTE
LOS NOMBRES DE LAS CANCIONES.
SELECT TITULO, ARTISTA,
CASE
WHEN GENERO LIKE '%POP%' THEN 'POP'
WHEN GENERO LIKE '%ELECTRO%' OR GENERO LIKE '%HOUSE%' THEN
'ELECTRÓNICA'
ELSE 'OTRO'
END AS TIPO
FROM TOP_SPOTIFY
ORDER BY ARTISTA, TITULO;
SELECT *, 'ANTERIOR' AS ESTADO FROM TOP_SPOTIFY
WHERE TITULO LIKE '%BREAK%'
UNION
SELECT *, 'ULTIMO' AS ESTADO FROM ULTIMOS_LANZAMIENTOS
WHERE TITULO LIKE '%BREAK%'
ORDER BY TITULO;
Página 33 de 33
DADA LA TABLA LIBROS, EXTRAER UNA LISTA DE TODOS LOS
LIBROS PERTENECIENTES A LA CATEGORÍA NOVELAS CUYO
PRECIO SEA SUPERIOR AL LIBRO MÁS CARO DE LA CATEGORÍA
ENSAYOS. LA LISTA DEBE CONTENER TODOS LOS CAMPOS DE
LA TABLA. MOSTRAR EL RESULTADO DE LA CONSULTA ORDENADO
DE MAYOR A MENOR POR LOS PRECIOS DE LOS LIBROS.
SELECT * FROM LIBROS
WHERE CATEGORIA = 'NOVELAS' AND
PRECIO >
(SELECT MAX(PRECIO) FROM LIBROS
WHERE CATEGORIA = 'ENSAYOS')
ORDER BY PRECIO DESC;
SELECT CONCAT(APELLIDO, ', ', NOMBRE) EMPLEADO, 'ACTIVO' AS
ESTADO FROM EMPLEADOS
WHERE PUESTO_ID = 9
UNION
SELECT CONCAT(APELLIDO, ', ', NOMBRE), 'DESACTIVO' AS ESTADO
FROM EMPLEADOS_ANTERIORES
WHERE PUESTO_ID = 9
ORDER BY EMPLEADO;
Descargar