APUNTES de HTLM5, CSS, JavaScript, ES5, php, VBA, JAVA
Cuando empecé mi camino en la programación, me dí cuenta que en ocasiones no era tan fácil como creía encontrar apuntes y deseo compartir lo que voy aprendiendo por si a alguien le resulta de utilidad.
Ahora tengo una meta vivir de la programación, poco a poco intento sumar conocimientos y compartirlos con todos vosotros. Por el camino cometeré errores pero tengo las metas muy claras.
Seguidores
MIS WEBS
SQL
APUNTES SQL
APUNTES SQL Y BBDD
¿Qué es una Base de datos (BBDD)?
Es un almacén donde podremos guardar una colección de datos de una forma ordenada y estructurada, para posterior mente extraerlos y poderlos tratar en función de nuestras necesidades. Los datos se organizaran en filas y columnas. Un conjunto de filas y columnas forman una tabla y una BBDD se compone de una o varias tablas que pueden estar relacionadas entre sí o no.
Para muchos lenguajes de programación una BBDD es un objeto al que podemos conectarnos y una vez hemos generado ese puente manipular los datos con SQL.
Para guardar nuestros datos podríamos utilizar un Excel, Word o incluso el block de notas. Pero esto nos podría acarrear múltiples problemas:
Seguridad: nuestro archivo queda al alcance de cualquiera para copiarlo o borrarlo.
Tamaño: Cuando nuestros archivos crezcan se ralentizaran
Redundancia: Si no existen reglas repetiremos registros.
Análisis: Sera difícil de analizar nuestros datos.
En una BBDD podrá trabajar mucha gente al mismo tiempo, pero el administrador podrá tener un registro de los usuarios y decidir en todo momento:
Quien puede leer los datos
Quien puede borrarlos
Quien puede editarlos
Quien puede crear registros
Una BBDD es un conjunto de reglas que establecemos dependiendo de nuestras necesidades y es muy importante que nos paremos a analizar cuáles son.
¿Qué es SQL?
Las siglas SQL provienen del inglés Structure Query Language que podemos traducir como lenguaje de consulta estructurada. Es un lenguaje declarativo, lanzaremos una sentencia y el SGDB nos regresa un resultado.
Ejm. “Selecciona todos los campos de la tabla cliente donde la campo población sea = a Madrid”
Fue inventado por IBM y en una primera instancia lo llamó SEQUEL pero al final quedo tal y como lo conocemos ahora.
Este lenguaje universal lo utilizaremos para almacenar, modificar y recuperar los registros de nuestras BBDD en remoto. SQL es utilizado por otros lenguajes como HTML, Java, VBA, nativo, Python, .NET, MySQL… para tratamiento y gestión de datos.
¿Qué es un SGDB?
Es un sistema gestor de Bases de datos y existen una gran multitud (Access, SQLServer, ORACLE, MySQL, DB2, MongoDB, PostGreSQL…) Nosotros realizaremos solicitudes con SQL a ese gestor y nos regresará el resultado nuestra consulta.
¿Cómo diseñar una BBDD?
Lo primero necesitaremos crear un esquema en que pongamos las tablas y los campos de estas. A pesar de que una vez creada la BBDD se puede modificar, estos cambios pueden conllevar muchos problemas luego. Es importante que planifiquemos este diseño con tiempo.
Nos tendremos que preguntar:
¿Para qué sirve nuestra BBDD?
Tiene que ser una definición de la utilidad que le daremos, ejm: “Gestionara un registro de clientes y pedidos de nuestra empresa, teniendo en cuenta el estado de pagos y entrega de estos, personal implicado y productos entregados”
Entidades
Una BBDD se compone de tablas y cada tabla será un objeto u entidad de nuestra BBDD. (Cliente, Pedido, Producto, Departamento, Empleado….).
Clave primaria
Es conveniente poner un id a cada tabla que será la primary Key o clave primaria. Sera un identificador único para cada registro. Normalmente suele ser un número autoincremental.
Clave primaria
Id_CLIENTE
EMPRESA
DIRECCIÓN
POBLACIÓN
TELÉFONO
RESPONSABLE
CT01
BELTRÁN E HIJOS
LAS FUENTES 78
MADRID
(914) 45- 64- 35
ANGEL MARTÍNEZ
Clave compuesta
Es una clave que se compone de dos o más valores que identifican de forma única a una fila. Imaginemos que en su momento no se estableció un id_cliente porque se pensó que con el cif era suficiente, pero nos encontramos con dos empresas con el mismo cif. Nuestra clave compuesta valorará el cif y empresa.
Clave primaria
cif
EMPRESA
DIRECCIÓN
POBLACIÓN
TELÉFONO
RESPONSABLE
B50505050
BELTRÁN E HIJOS
LAS FUENTES 78
MADRID
(914) 45- 64- 35
ANGEL MARTÍNEZ
B50505050
MANOLO E HIJOS
LAS FUENTES 78
MADRID
(914) 45- 64- 35
ANGEL MARTÍNEZ
RELACIÓN ENTRE LAS TABLAS
Las tablas pueden tener relación entre ellas: Una a varias, varias a varias, uno a uno.
Unos a varias : Un cliente puede tener varios pedidos.
Varios a varios: Un productos pueden tener varios pedidos y a su vez varios pedidos pueden tener el mismo producto.
Uno a uno: Un cliente solo puede tener un DNI y un DNI solo puede pertenecer a un cliente.
NORMALIZACIÓN DE DATOS
Primera formal normal 1NF
Cuando creamos las tablas tenemos que evitar rellenar datos de forma incorrecta. Imagina que una empresa tiene varias direcciones, no deberíamos poner en el mimo registro dos direcciones.
CIF
EMPRESA
DIRECCIÓN
POBLACIÓN
TELÉFONO
RESPONSABLE
B50505050
palomar SA
LAS FUENTES 78 // su casa nº 23
madrid
(914) 45- 64- 35
ANGEL MARTÍNEZ
Ni crear una columna para cada dirección
CIF
EMPRESA
DIRECCIÓN
POBLACIÓN
TELÉFONO
RESPONSABLE
dirección2
B50505050
palomar SA
LAS FUENTES 78
madrid
(914) 45- 64- 35
ANGEL MARTÍNEZ
su casa nº 23
La solución sería crear una segunda tabla con las direcciones y generar una relación de uno a varias.
CIF
dirección
localidad
B50505050
palomar SA
MADRID
B50505050
palomar SA
MADRID
Segunda norma formal 2NF
Si mi BBDD tiene índices compuestos (la clave principal tiene más de un índice), cualquier campo no clave debería ser dependiente de toda la clave primaria.
En el siguiente ejemplo tenemos dos claves primarias curso y fecha. En la segunda forma normal nos dice que si tenemos índices compuestos no se puede repetir ningún otro dato y en nuestro caso el titulo curso se repetiría. La opción sería crear una tabla de Títulos cursos y una relación uno a varios.
curso
fecha
titulo curso
AULA
Nº ALUMNOS
SQL101
30/10/2012
FUNDAMENTOS SQL
1
20
DB202
01/05/2015
java
5
500
SQL101
01/10/2018
FUNDAMENTOS SQL
2500
300
Tercera forma normal 3NF
Ningún campo que no sea clave debe depender de otro campo. Es importante evitar redundancia. Imagina la siguiente tabla de pedidos. Tal y como puedes ver todos los campos cuyo impuesto sea iva el porcentaje será 21%, por lo que repetiremos un dato constantemente.
Id_articulo
Cantidad
precio
Tipo impuesto
porcentaje
01
20
10
Iva
21%
02
10
50
Iva
21%
03
1
20
Ips
7%
En este caso creariamos una segunda tabla con dos campos (tipo impuesto y porcentaje). Luego relacionarimos la actual tabla por el tipo impuesto utilizando una relación de varios a uno.
Concurrencia
En una BBdd se genera concurrencia cuando dos o más usuarios acceden al mismo registro a la vez y modifican datos. Uno de los mayores dilemas que nos encontramos al crear una base de datos es si bloqueamos o no los registros para evitar concurrencia.
Podemos evitar concurrencia de varias formas:
Bloqueo pesimista
Daremos por sentado que dos usuarios están accediendo al mismo registro y no permite grabar o actualizar hasta que no lo confirme.
Bloqueo optimista
Pensaremos que no existe otro usuario actuando sobre el registro y si el sistema encuentra otro usuario nos manda un mensaje de error y nos indica que carguemos los datos de nuevo.
Comandos SQL
Existen 4 grandes tipos de comandos
DDL (data definition lenguage): Lo utilizaremos para crear y modificar la estructura de una BBDD. Podemos crear, eliminar y modificar la estructura.
CREATE(crear)
ALTER(alterar)
DROP(eliminar objeto tabla, fila)
TRUNCATE
DML(data manipulation lenguage) Lo utilizamos para realizar consultas de selección y acción en una BBDD.
SELECT(seleccionar)
INSET(insertar registro)
UPDATE(actualizar registro)
DELETE(eliminar registro)
DCL(data control lenguage) Para generar seguridad a los datos
GRANT(Otorgar)
REVOKE(revocar)
TCL(Transition control lenguage) Se utiliza para la gestión de los cambios en los datos.
COMMIT(Preparar)
ROLLBACK(retroceder)
SAVEPOINT(guardar registro)
Cláusulas SQL
Estas son las Cláusulas principales que tenemos en MySQL.
WHERE:Especifica los criterios de selección (lo utilizamos para filtrar registros)
GROUP BY:Agrupar registro por.
HAVING:Sustituye al Where en las consultas de agrupado
ORDER BY:Ordenar por
Operadores SQL
Operadores
Utilidad
<
Menor que
>
Mayor que
=
Igual que
<=
Menor o igual que
>=
mayor o igual que
Beetwen
Entre ( Entre 12 y 50)
Like
Cómo. Para comparar registros en los que se han utilizado caracteres comodín (*,?, %)
In
En, lo utilizaremos para especificar registros en un campo
And
Y lógico
Or
O lógico
Not
No es como
all
Sub consultas de lista todos los registros
Any
Sub consultas de lista alguno de los registros
%
Se utiliza como el carácter comodín * de acces
_ o ¿
Sustituye una letra
CURRENT_USER()
Nos regresa el usuario actual
¿Qué es una sentencia o instrucción en SQl?
Es una frase con una estructura determinada que utilizaremos para extraer una serie de datos almacenados en una BBDD. Para realizar esta frase utilizaremos una serie de comandos + las clausulas + Operadores + Funciones.
Lo mínimo imprescindible para crear una sentencia es un comando las columnas seleccionadas + una clausula + una tabla.
Orden de una instrucción SQl
comando
-->
Clausula From
-->
Cláusula Where
-->
Cláusula Group by
-->
Cláusula Having
-->
Cláusula OrderBy
Ver las BBDD de nuestro gestor
Esta instrucción nos regresará un listado con las BBDD existentes en nuestro gestor de bases de datos.
SHOW DATABASES;
Como crear una Base de Datos
CREATE DATABASE nombre_base;
Selecionar una BBDD
USE nama_bbdd
Eliminar una BBDD
DROP DATABASE nombre_base ;
Como utilizar la cláusula Where
Selecciona todas las filas de la tabla materiales_construcción donde la categoría sea igual a Pintura. Recuerda que los campos tipo texto se ponen entrecomillados.
SELECT *
FROM `materiales_construcción` WHERE `categoría` = "pintura"
Ejemplo de OR
Selecciona todas las filas de la tabla materiales_construcción donde la categoría sea igual a Pintura o electricidad
SELECT *
FROM `materiales_construcción` WHERE `categoría` = "pintura"OR`categoría` = "ELECTRICIDAD"
Si deseamos podemos sustituir el or por la siguiente expresión meteremos los diferentes valores entre paréntesis y los separaremos con comas.
SELECT *
FROM 'clientes'WHERE'población' IN ("MADRID", "BARCELONA");
Ejemplo de or y and
Ahora seleccionaremos los artículos de las categorías pintura y electricidad cuyo proveedor sea LEROY MERLIN ALJARAFE
SELECT *
FROM 'materiales_construcción'WHERE'categoría' IN ("pintura", "ELECTRICIDAD")AND'PROVEEDOR' = "LEROY MERLIN ALJARAFE";
Ejemplo de BETWEEN (intervalos)
El operador between lo podemos utilizar para intervalos de fechas o números. Tener en cuenta que las fechas en SQL se estructuran de la siguiente forma mes/dia/año. Si esta consulta se hace con Access tener en cuenta que la fecha se pone #mes-día-año#.
En la siguiente consulta necesitamos saber cuáles son los materiales de la tabla materiales_construcción cuyo precio se comprende entre 9 y 15
SELECT *
FROM `materiales_construcción` WHERE`PRECIO UNITARIO`BETWEEN9AND15
Intervalo fechas. Consulta para saber todos los registros de la tabla materiales comprendidos entre el 30-07-2018 y 15-08-2018. Recuerda formato fecha m/d/a
SELECT *
FROM `materiales_construcción` WHERE`PRECIO UNITARIO`BETWEEN‘01/01/2018’AND‘12/31/2018’
Como ordenar registros en una consulta SQL con la cláusula Order By
Esta cláusula la utilizaremos para ordenar los registros obtenidos en una consulta. Por defecto nos lo ordenaría de la A hasta la Z o de menor a mayor. Si deseamos que nos lo ordene de forma descendente tendremos que añadir al final la instrucción DESC.
Podemos ordenar también una consulta por varios niveles ordenar por la fila1, cada grupo ordenado de la fila1 por la fila2….
Consulta para obtener los todos los registros de la categoría de pintura ordenada por el precio unitario:
SELECT *
FROM `materiales_construcción` WHERE`categoría` = "PINTURA"ORDER BY`PRECIO UNITARIO`
Consulta para obtener los todos los registros de la categoría de pintura ordenada por el precio unitario ordenados de forma descendente.
SELECT *
FROM `materiales_construcción` WHERE`categoría` = "PINTURA"ORDER BY`MATERIAL` DESC
Consulta para obtener los artículos de la categoría pintura y electricidad ordenando de forma ascendente las categorías y cada categoría ordenada por precio unitario.
Son aquellas que utilizamos para realizar cálculos sobre una fila. Podemos sumar, contar, obtener la media. Para estos cálculos sobre los registros utilizaremos las funciones de agregado. Para realizarla necesitaremos un campo de agrupación u otro campo de cálculo. Su sintaxis sería la siguiente:
SELECTCAMPO_AGRUPACION,FUNCIÓN_AGREGADO (CAMPO_CALCULO) FROM`tabla_consulta` GROUP BY CAMPO_AGRUPACION
¿Cuáles son las funciones de agregado más utilizadas?
FUNCIÓN
USO
AVG
Promedio
COUNT
Contar
SUM
Suma
MAX
Valor máximo
MIN
Valor mínimo
CURRENT_USER()
Nos regresa el usuario actual de la aplicación
NOW()
Fecha actual del sistema
CURDATE()
Fecha actual del sistema en formato mm/dd/aaaa
CURRENT_DATE()
Fecha actual del sistema en formato mm/dd/aaaa
Suma el precio unitario de los artículos comprados a cada proveedor y agrúpa los por proveedores.
SELECT`SECCIÓN`,SUM(`PRECIO`)FROM`productos`
GROUP BY`SECCIÓN`
Cómo agregar un alias a un campo
Si deseamos ordenar un campo necesitamos renombrar el campo que nos facilita la consulta de totales y para ello y utilizaremos un alias. Para crear un alias pondremos la palabra clave AS
Cuenta los materiales comprados y el resultado lo pones en la fila nombrada como Cuenta_Proveedores_material.
SELECT`MATERIAL`,COUNT(`MATERIAL` )ASCuenta_Proveedores_materialFROM `materiales_construcción`GROUP BY `MATERIAL`ORDER BY Cuenta_Proveedores_materialDESC
En la siguiente consulta contaremos la fila de material a la fila del conteo la llamaremos Cuenta_Proveedores_material ordenaremos el resultado de mayor a menor y filtraremos por puntal 3m. Recuerda que en las consultas de agregado el where se sustituye por having.
SELECT `MATERIAL` ,COUNT( `MATERIAL` )ASCuenta_Proveedores_materialFROM`materiales_construcción`GROUP BY `MATERIAL`HAVING `MATERIAL`= "puntal 3m"ORDER BY Cuenta_Proveedores_material DESC
Consultas de cálculo
Funcion
Uso
¿Crear una consulta de cálculo?
En el siguiente ejemplo crearemos un campo que sume 1000 al precio unitario y lo llamaremos PRECIO MAS 1000 para lo que utilizaremos un alias.
SELECT
'categoría',
'material',
`PRECIO UNITARIO`,
`PRECIO UNITARIO` +10000 AS 'PRECIO MAS 1000'
FROM `materiales_construcción`
En el siguiente ejemplo redondearemos el resultado del campo PRECIO MÁS 1000
SELECT
categoría,
material,
`PRECIO UNITARIO`,ROUND(`PRECIO UNITARIO`+ 10000, 2) AS 'PRECIO MAS 1000'
FROM `materiales_construcción`
En el siguiente ejemplo incrementaremos el precio del Iva a un producto y lo redondearemos con 2 decimales.
SELECT
MATERIAL, `PRECIO UNITARIO` ,ROUND(`PRECIO UNITARIO` * 1.21, 2 ) AS 'PRECIO CON IVA'
FROM `materiales_construcción`
DATE_FORMAT( nombre_campo, '%y-%m-%d' ):
La utilizaremos para dar formato a un campo fecha %y será año (year), %m será mes (month), %d será día (day).
Podemos poner mes y año.
DATE_FORMAT( NOMBRE_CAMPO , '%m-%y' )
Día y mes
DATE_FORMAT( NOMBRE_CAMPO , '%d-%m' )
En el siguiente ejemplo le daremos formato al campo creado con la fecha de hoy:
SELECT CURDATE( ) AS hoy, `categoría` , `MATERIAL`
FROM `materiales_construcción`
CONCAT():
Esta función se utilizará para unir cadenas de texto.
SELECT
categoría,
MATERIAL,CONCAT( `categoría` , " ", `MATERIAL`) AS EJM_DE_CONCATENAR
FROM `materiales_construcción`
count()
En este ejemplo vamos a seleccionar los 3 mejores vendedores, para ello le indicaremos en el order by desc limit 3:
SELECT
id_Vendedor,
Count(id_Vendedor)
FROM
ventas_sin_aleatorios
GROUP BY
id_Vendedor
ORDER BYCount(id_Vendedor) DESC LIMIT 3
CURDATE()
Si deseamos realizar un intervalo de la ultima semana , ultimo mes, ultimo trimestre:
SELECTid_Vendedor,
Count(id_Vendedor)
FROMventas_sin_aleatoriosWHEREfecha_Venta BETWEEN SUBDATE(CURDATE(), INTERVAL 3 DAY) AND NOW()
GROUP BYid_VendedorORDER BY
Count(id_Vendedor) DESC
LIMIT 3
filtrar la ultima semana DISTINCT
Consulta de registros únicos
Utilizaremos la palabra reservada distinct para que no cargue múltiples registros, nos cargarán los registros sin repetir. Imagina que en la tabla id_producto existen mas de un movil, mas de una fibra... Con esta consulta nos cargara uno de cada tipo producto.
Utilizaremos las consultas de unión cuando necesitamos incluir en una tabla los datos otras.
Unión Externa
Union
Union ALL
Except
Insetsect
Minus
Unión interna
Inner join
Left Join
Right Join
UNION
Nos permitirá unir varias tablas pero para poderlo hacer se tienen que cumplir una serie de condiciones:
Que ambas tablas tengan el mismo número de campos o columnas.
Los campos han de ser compatibles. No puede coincidir un campo de una tabla fecha con otro texto.
Los nombres de campos resultantes serán los de la primera tabla que indiquemos.
No podremos unir campos OLE.
La tabla resultante quitará los duplicados.
En el siguiente ejemplo uniremos dos campos texto de dos tablas diferentes. Seleccionáramos los campos de la primera tabla utilizaremos UNION y seleccionaremos los campos de la segunda tabla.
SELECT`SECCIÓN` , `NOMBRE ARTÍCULO`FROM`productos` UNION
SELECTcategoría, MATERIALFROMmateriales_construcción
Union ALL
Hace lo mismo que unión pero incluyendo los duplicados genera una tabla con registros múltiples. En caso de duplicidad mostrara el de la primera tabla que le pongamos.
SELECT `SECCIÓN`, `NOMBRE ARTÍCULO` FROM`productos`UNION ALL
SELECTcategoría, MATERIALFROMmateriales_construcción
Inner join
Selecciona los registros comunes de las dos tablas. Relación de varios a varios
Todos los registros de la segunda tabla y solo aquellos que sean comunes de la primera tabla. Varios a uno.
Tabla1
Tabla2
SELECT CLIENTES.*, PEDIDOS.*, PEDIDOS.[FECHA DE PEDIDO]
FROM CLIENTES
RIGHT JOIN PEDIDOS
ON CLIENTES.CÓDIGOCLIENTE = PEDIDOS.[CÓDIGO CLIENTE]
WHERE (((PEDIDOS.[FECHA DE PEDIDO])
Between #1/1/2000# And #1/1/2018#));
SUB CONSULTAS
Es una consulta encapsulada dentro de otra consulta y existen de tres tipos:
Escalonada
De lista
Correlacionada
Select...
Select...
Para este tipo de consulta es frecuente utilizar los siguientes operadores:
Any
Para comparar con cualquiera de los registros
All
Para comparar con todos de los registros
In
Los registros son como. Se puede utilizar para filtro de coincidentes.
Not in
Los registros son como. Se puede utilizar para filtro de coincidentes.
Sub-consulta escalonada
La consulta hijo regresa un registro que compara con la consulta padre.
Ejm. Sacaremos la media de precios de los productos y seleccionaremos aquellos cuyo precio sea superior a la media
Primero sacaremos la media con AVG del campo precio
SELECT AVG(precio)
AS precio_medio
FROM `productosnuevos`
Compararemos el resultado de la consulta hijo con la consulta padre
SELECT *
FROM `productos`
WHERE `PRECIO`> ( SELECT AVG( precio)
AS precio_medio
FROM `productosnuevos`);
Si lo deseamos ordenar por sección:
SELECT *
FROM `productos`
WHERE `PRECIO`> (
SELECT AVG() AS precio_medio
FROM `productosnuevos`
ORDER BY `SECCIÓN`) ;
Sub-consulta de lista
Nuestra sub-consulta regresa una lista de campos.
EJM. Regresa todos los artículos cuyo precio sea superior a todos los de cerámica.
Primero realizaremos una consulta para saber el precio de los artículos de cerámica.
SELECT `PRECIO`
FROM `productos`
WHERE `SECCIÓN`="cerámica"
Ahora comparamos la consulta padre con la hija.
SELECT *
FROM `productos`
WHERE `PRECIO` > ALL
( SELECT `PRECIO` FROM `productos`
WHERE `SECCIÓN` ="cerámica")
ORDER BY `SECCIÓN` DESC
Ejm.
categoría todas las filas de la tabla productos nuevos cuyo precio sea mayor que cualquier registro de la tabla productos nuevos cuya sección empiece por deportes.
Regresamos el precio de los artículos de la tabla podructosnuevos cuya sección empiece por deportes… (deportes de riesgo, deportes , deportes de contacto…).
SELECT `PRECIO`
FROM `productosnuevos`
WHERE `SECCIÓN` LIKE ‘ALTA %’
Ahora unimos las dos consultas
SELECT *
FROM `productosnuevos`
WHERE `PRECIO` > ALL
(SELECT `PRECIO` FROM `productosnuevos` WHERE `SECCIÓN` LIKE 'DEPORTES%');
Sub-consulta correlacionada
Se utiliza para consultas entre tablas y utilizaremos los operadores in (consultas de coincidentes) NOT IN (consulta de no coincidentes).
Ejemplo 1
La tabla productos-pedidos contiene los siguientes campos
PRODUCTOS- PEDIDOS
NÚMERO DE PEDIDO
CÓDIGO ARTÍCULO
UNIDADES
1
AR01
11
2
AR04
10
3
AR15
4
4
AR22
18
La tabla productos tiene lo siguiente
PRODUCTOS
CÓDIGOARTÍCULO
SECCIÓN
NOMBREARTÍCULO
PRECIO
FECHA
IMPORTADO
PAÍSDEORIGEN
FOTO
AR01
FERRETERÍA
DESTORNILLADOR
7 €
22/10/2000
No
ESPAÑA
AR02
CONFECCIÓN
TRAJE CABALLERO
285 €
11/03/2002
Sí
ITALIA
Ahora nosotros necesitamos genera una consulta que nos regrese todos las filas de la tabla productos que en la tabla productos-pedidos sus artículos tengan menos de 15 unidades.
Para esto primero realizamos una sub consulta para conseguir los artículos de productos-pedidos con mayor de 15 unidades
SELECT [CÓDIGO ARTÍCULO]
FROM [PRODUCTOS - PEDIDOS]
WHERE [UNIDADES] > 15
Consulta3
CÓDIGO ARTÍCULO
AR22
AR02
AR04
AR06
AR12
AR18
AR19
Ahora ingresamos la sub-consulta en la consulta principal mostrando todos los campos de la tabla productos cuyo CÓDIGOARTÍCULO coincidan con los obtenidos en la sub-consulta realizada sobre la tabla productos-pedidos
SELECT *
FROM PRODUCTOS
WHERE [CÓDIGOARTÍCULO]
IN (
SELECT [CÓDIGO ARTÍCULO]
FROM [PRODUCTOS - PEDIDOS]
WHERE [UNIDADES] >15
)
;
Consulta3
CÓDIGOARTÍCULO
SECCIÓN
NOMBREARTÍCULO
PRECIO
FECHA
IMPORTADO
PAÍSDEORIGEN
FOTO
AR02
CONFECCIÓN
TRAJE CABALLERO
285 €
11/03/2002
Sí
ITALIA
AR04
DEPORTES
RAQUETA TENIS
93 €
20/03/2000
Sí
USA
AR06
DEPORTES
MANCUERNAS
60 €
13/09/2000
Sí
USA
AR10
JUGUETERÍA
CONSOLA VIDEO
443 €
24/09/2002
Sí
USA
Si deseamos que nos muestre aquellos que no coincidan con la subconsulta creada, utilizaremos en lugar de in (esta en), el condicional not in (no está en)
SELECT *
FROM PRODUCTOS
WHERE [CÓDIGOARTÍCULO] NOT IN
(SELECT [CÓDIGO ARTÍCULO]FROM [PRODUCTOS - PEDIDOS]WHERE [UNIDADES] >15);
Consulta3
CÓDIGOARTÍCULO
SECCIÓN
NOMBREARTÍCULO
PRECIO
FECHA
IMPORTADO
PAÍSDEORIGEN
MADRID
AR01
FERRETERÍA
DESTORNILLADOR
7 €
22/10/2000
No
ESPAÑA
MADRID
AR03
JUGUETERÍA
COCHE TELEDIRIGIDO
159 €
26/05/2002
Sí
MARRUECOS
CACERES
AR07
CONFECCIÓN
SERRUCHO
30 €
23/03/2001
Sí
FRANCIA
OVIEDO
AR08
JUGUETERÍA
CORREPASILLOS
103 €
11/04/2000
Sí
JAPÓN
MADRID
AR09
CONFECCIÓN
PANTALÓN SEÑORA
174 €
10/01/2020
Sí
MARRUECOS
GALICIA
Ejemplo 2
Vamos a realizar una consulta de aquellos clientes que no han pagado con tarjeta o que no han realizado pedidos. Para ellos utilizaremos la tabla de clientes y la tabla de pedidos.
TABLA CLIENTES
CÓDIGOCLIENTE
EMPRESA
DIRECCIÓN
POBLACION
TELEFONO
RESPONSABLE
Cl01
BELTRÁN E HIJOS
LAS FUENTES 78
BELTRÁN E HIJOS
LAS FUENTES 78
MADRID
(914) 45- 64- 35
ANGEL MARTÍNEZ
Cl02
LA MODERNA
LA PALOMA 123
OVIEDO
(985) 32- 34- 34
JUAN GARCÍA
Cl03
EL ESPAÑOLITO
MOTORES 34
BARCELONA
(934) 56- 53- 43
ANA FERNÁNDEZ
Cl04
EXPORTASA
VALLECAS 34
MADRID
(913) 45- 23- 78
ELVIRA GÓMEZ
Cl06
CONFECCIONES AMPARO
LOS MOROS 23
GIJÓN
(985) 75- 43- 32
LUÍS ÁLVAREZ
Tabla PEDIDOS
NÚMERO DE PEDIDO
CÓDIGO CLIENTE
FECHA DE PEDIDO
FORMA DE PAGO
DESCUENTO
ENVIADO
1
Cl01
11/03/2000
TARJETA
2,00%
Sí
5
Cl05
18/03/2000
APLAZADO
6,00%
No
8
Cl23
31/03/2000
CONTADO
9,00%
No
10
Cl25
12/04/2000
CONTADO
7,00%
No
90
Cl06
15/04/2000
TARJETA
2,00%
Sí
90
Cl07
21/04/2000
CONTADO
4,00%
No
5
Cl6
30/04/2000
APLAZADO
3,00%
No
Primero seleccionaremos aquellos clientes cuya forma de pago ha sido tarjeta
Resultado
id_cl
CL01
CL06
Ahora realizamos la consulta entera. Selecciona los campos Empresa y dirección de la tabla clientes que tengan pedidos pagados con tarjeta en la tabla de pedidos
Consulta Tarjeta
Empresa
Dirección
BELTRÁN E HIJOS
LAS FUENTES 78
CONFECIONES AMPARO
LOS MOROS 23
Si deseamos saber solo aquellos que realizaron los pagos sin tarjeta (no como) (efectivo, a debito….) en ese caso utilizaremos el not in
CONSULTAS DE ACCIÓN
Las consultas de acción son aquellas capaces de modificar la información que tienen las tablas y pueden ser varias:
Actualizará nuestra tabla modificando un campo o una serie de campos según un criterio dado.
En el siguiente ejemplo incrementaremos 5€ todo los productos de la tabla productos cuya sección sea ferretería.
UPDATE PRODUCTOS
SET PRECIO = PRECIO +5
WHERE SECCIÓN = "FERRETERÍA";
En la siguiente consulta modificaremos los artículos de la sección alta costura y los renombraremos costura:
UPDATE productosnuevos
SET `SECCIÓN` = "costura"
WHERE `SECCIÓN` = "ALTA COSTURA"
En la siguiente consulta mysql actualizaremos aquellos registros de la tabla productosnuevos cuya sección contenga la palabra costura (costura nueva, alta costura, costura, costura de lana…) y renombraremos la sección a ALTA COSTURA
UPDATE `productosnuevos`
SET `SECCIÓN` = "ALTA COSTURA"
WHERE `SECCIÓN` like "%costura";
En la siguiente consulta mysql actualizaremos aquellos productos de la tabla productosnuevos cuya sección contenga la palabra costura y actualizaremos el campo sección transformándolo con el mismo valor e incluyéndole 2222 antes del registro actual. Utilizaremos la función concat para concatenar datos.
UPDATE productosnuevos
SET
`SECCIÓN` = CONCAT( "2222", `SECCIÓN` )
WHERE
`SECCIÓN`
LIKE
"%COSTURA%"
;
Consulta creación tabla create table
La utilizaremos para crear una tabla nueva con los datos obtenidos de una consulta.
CREATE TABLE name_table
(
fila1 varchar (30),
fila2 varchar (50),
fila3 int (),
fila4 data ()
);
Ver los campos que contine una tabla
DESCRIBE nombre_tabla;
Insertar registros en una tabla ya existente con SQL
No hay comentarios:
Publicar un comentario