SQL
¿Qué es una Base de datos (BBDD)?
Es un almacén donde podremos guardar nuestros 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.
¿Qué es SQL?
Las siglas SQL provienen del inglés Structured Query Language que podemos traducir como lenguaje de consulta estructurada. Este lenguaje fue inventado por IBM y en una primera instancia lo llamó SEQUEL pero al final quedo tal y como lo conocemos.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, existen una gran multitud (Access, SQLServer, ORACLE, MySQL, DB2…) Nosotros realizaremos solicitudes con SQL a ese gestor y nos regresará el resultado nuestra consulta.
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
- TRUNCATE
- DML (data manipulation lenguage) Lo utilizamos para realizar consultas de selección y acción en una BBDD.
- SELCT (seleccionar)
- INSERT (insertar)
- UPDATE (actualizar)
- DELETE (borrar)
- 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
- FROM : Especifica la tabla a seleccionar
- 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
OPERADOR
|
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 lógico |
¿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.
Ejm.
Select fila1, fila3, fila7
From Tabla1;
Orden de una instrucción SQl
Comando |
+ |
Cláusula From |
+ |
Cláusula Where |
+ |
Cláusula Group by |
+ |
Cláusula Having |
+ |
Cláusula OrderBy |
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 `categoria` = "pintura"
Ejemplo de OR
Selecciona todas las filas de la tabla materiales_construcción donde la categoría sea igual a Pintura o electricidadSELECT *
FROM `materiales_construcción`
WHERE `categoria` = "pintura"
OR `categoria` = "ELECTRICIDAD"
Ejemplo de or y and
Ahora seleccionaremos los artículos de las categorías pintura y electricidad cuyo proveedor sea LEROY MERLIN ALJARAFESELECT *
FROM `materiales_construcción`
WHERE `categoria` = "pintura"
OR `categoria` = "ELECTRICIDAD"
AND PROVEEDOR` = "LEROY MERLIN ALJARAFE"
Ahora seleccionaremos los artículos de las categorías pintura y precio sea 9.00
SELECT *
FROM `materiales_construcción`
WHERE `categoria` = "pintura"
OR `categoria` = "ELECTRICIDAD"
AND `PRECIO SIN IVA` = 9.00
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 año-mes-día. 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`
BETWEEN 9
AND 15
Consulta para saber todos los registros de la tabla materiales comprendidos entre el 30-07-2018 y 15-08-2018.
SELECT *
FROM `materiales_construcción`
WHERE `FECHA`
BETWEEN ‘2018-07-30’
AND ‘2018-08-15’
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 `categoria` = "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 `categoria` = "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.
SELECT * .
FROM `materiales_construcción`
WHERE `categoria` = "PINTURA"
OR `categoria` = "ELECTRICIDAD"
ORDER BY `categoria` , `PRECIO UNITARIO`
Que son las consultas de agrupación o totales
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:SELECT CAMPO_AGRUPACION,FUNCIÓN_AGREGADO (CAMPO_CALCULO) .
FROM `tabla_consulta`
GROUP BY CAMPO_AGRUPACION
¿Cuáles son las funciones de agregado?
FUNCIÓN
|
USO
|
AVG
|
Promedio
|
COUNT
|
Contar
|
SUM
|
Suma
|
MAX
|
Valor máximo
|
MIN
|
Valor mínimo
|
Suma el precio unitario de los artículos comprados a cada proveedor y agrúpalos por proveedores.
SELECT `PROVEEDOR` , SUM( `PRECIO UNITARIO` )
FROM `materiales_construcción`
GROUP BY `PROVEEDOR`
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 ASCuenta los materiales comprados y el resultado lo pones en la fila nombrada como Cuenta_Proveedores_material.
SELECT `MATERIAL` , COUNT( `MATERIAL` ) AS Cuenta_Proveedores_material
FROM `materiales_construcción`
GROUP BY `MATERIAL`
ORDER BY Cuenta_Proveedores_material DESC
En la siguiente consulta contaremos la fila de material a la fila del conteo la llamaremos Cuenta_Proveedores_material oredenaremos el resultado de mayor a menor y filtraremos por puntal 3m
SELECT `MATERIAL` , COUNT( `MATERIAL` ) AS Cuenta_Proveedores_material
FROM `materiales_construcción`
GROUP BY `MATERIAL`
HAVING `MATERIAL` = "puntal 3m"
ORDER BY Cuenta_Proveedores_material DESC
CONSULTAS DE UNIÓN
- Unión externa
- Union
- Union ALL
- Except
- Insetsect
- Minus
- Unión interna
- Inner join
- Left Join
- Rhigt Join
Consultas de unión
·
Unión
externa
o
Union
o
Union ALL
o
Except
o
Insetsect
o
Minus
·
Unión
interna
o
Inner join
o
Left Join
o
Rhigt Join
Consultas de unión
·
Unión
externa
o
Union
o
Union ALL
o
Except
o
Insetsect
o
Minus
·
Unión
interna
o
Inner join
o
Left Join
o
Rhigt Join
Union
Nos permitirá unir varias tablas. Necesitamos que se cumplan
unas características:
·
Que ambas tabas tengan el mismo número de campos
·
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
SELECT categoria, MATERIAL
FROM materiales_construcción
FROM `productos`
UNION
SELECT categoria, MATERIAL
FROM materiales_construcción
Union ALL
Hace lo mismo que union pero incluye los duplicados genera
una tabla con registros multiples. En caso de duplicidad mostrara el de la
primera tabla que le pongamos.
SELECT `SECCIÓN`, `NOMBRE
ARTÍCULO`
FROM `productos`
UNION ALL
SELECT categoria, MATERIAL
FROM materiales_construcción
FROM `productos`
UNION ALL
SELECT categoria, MATERIAL
FROM materiales_construcción
Inner join
Selecciona los registros comunes de las dos tablas. Relación
de varios a varios
SELECT CLIENTES.*
FROM CLIENTES INNER JOIN PEDIDOS
ON CLIENTES.CÓDIGOCLIENTE = PEDIDOS.[CÓDIGO
CLIENTE];
Left join
Todos los registros de la primera tabla y solo aquellos de
la segunda que sean comunes. Unos a varios
SELECT CLIENTES.*
FROM CLIENTES LEFT JOIN PEDIDOS
ON CLIENTES.CÓDIGOCLIENTE = PEDIDOS.[CÓDIGO
CLIENTE];
Right join
Todos los registros de la segunda tabla y solo aquellos que
sean comunes de la primera tabla. Varios a uno
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#));
SUBCONSULTAS
Es una consulta encapsulada dentro de otra consulta y
existen de tres tipos:
·
Escalonada
·
De lista
·
Correlacionada
SELECT…
|
SELECT …
|
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( precio ) 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.
Regrésanos 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
1.
Regrésanos 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 %"
2.
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
1
AR04
10
1
AR15
4
1
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 realiamos 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
FOTO
AR01
FERRETERÍA
DESTORNILLADOR
7 €
22/10/2000
No
ESPAÑA
AR03
JUGUETERÍA
COCHE
TELEDIRIGIDO
159 €
26/05/2002
Sí
MARRUECOS
AR07
CONFECCIÓN
SERRUCHO
30 €
23/03/2001
Sí
FRANCIA
AR08
JUGUETERÍA
CORREPASILLOS
103 €
11/04/2000
Sí
JAPÓN
AR09
CONFECCIÓN
PANTALÓN
SEÑORA
174 €
10/01/2000
Sí
MARRUECOS
Ejemplo 2
Vamos a realizar una consulta de aquellos cliente que no han pagado con
tarjeta o que no han realizado pedidos. Para ellos utilizaremos la tabla de
clientes y la tabla de pedidos.
CLIENTES
CÓDIGOCLIENTE
EMPRESA
DIRECCIÓN
POBLACIÓN
TELÉFONO
RESPONSABLE
HISTORIAL
CT01
BELTRÁN E
HIJOS
LAS FUENTES
78
MADRID
(914) 45-
64- 35
ANGEL
MARTÍNEZ
CT02
LA MODERNA
LA PALOMA
123
OVIEDO
(985) 32-
34- 34
JUAN GARCÍA
CT03
EL
ESPAÑOLITO
MOTORES 34
BARCELONA
(934) 56-
53- 43
ANA
FERNÁNDEZ
CT04
EXPORTASA
VALLECAS 34
MADRID
(913) 45-
23- 78
ELVIRA
GÓMEZ
CT06
CONFECCIONES
AMPARO
LOS MOROS
23
GIJÓN
(985) 75-
43- 32
LUÍS
ÁLVAREZ
PEDIDOS
NÚMERO DE PEDIDO
CÓDIGO CLIENTE
FECHA DE PEDIDO
FORMA DE PAGO
DESCUENTO
ENVIADO
1
CT01
11/03/2000
CONTADO
2,00%
Sí
3
CT23
18/03/2000
APLAZADO
6,00%
No
5
CT25
31/03/2000
CONTADO
9,00%
No
7
CT12
12/04/2000
CONTADO
7,00%
No
8
CT01
15/04/2000
TARJETA
2,00%
Sí
9
CT21
21/04/2000
CONTADO
4,00%
No
13
CT13
30/04/2000
APLAZADO
3,00%
No
Primero seleccionaremos aquellos clientes cuya forma de pago ha sido
tarjeta
SELECT [CÓDIGO CLIENTE] FROM PEDIDOS WHERE [FORMA DE PAGO] = "TARJETA"
Consulta3
CÓDIGO
CLIENTE
CT01
CT07
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
SELECT [EMPRESA], CLIENTES.[DIRECCIÓN]
FROM CLIENTES
WHERE ( CLIENTES.[CÓDIGOCLIENTE]IN
(SELECT [CÓDIGO CLIENTE] FROM PEDIDOS WHERE [FORMA DE PAGO] = "TARJETA");
Consulta3
EMPRESA
DIRECCIÓN
BELTRÁN E
HIJOS
LAS FUENTES
78
EXPORTASA
VALLECAS 34
LA CASA DEL
JUGUETE
AMÉRICA 45
LA
CURTIDORA
OLIVARES 3
SÁEZ Y CÍA
INFANTA
MERCEDS 23
FERRETERÍA
LA ESCOBA
ORENSE 7
BAZAR EL
ARGENTINO
ATOCHA 55
Si deseamos saber solo aquellos que realizaron los pagos sin tarjeta (no
como) (efectivo, a debito….) en ese caso
utilizaremos el not in
SELECT [EMPRESA], CLIENTES.[DIRECCIÓN]
FROM CLIENTES
WHERE ( CLIENTES.[CÓDIGOCLIENTE] NOT IN
(SELECT [CÓDIGO CLIENTE] FROM PEDIDOS WHERE [FORMA DE PAGO] = "TARJETA");
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:
·
Actualización
·
Creación
de tabla
·
Eliminación
·
Datos
anexados.
Comandos DML Y DDL
·
Create
·
Update
·
Delete
·
Insert
Into
·
Create
Table
·
Select
Into
Actualización
Actualizará nuestra
tabla modificando un campo o una serie de campos según un criterio dado
Sintaxis
Update tabla set campo = nuevo valor WHERE
campo condición = condición
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%"
CREACIÓN DE TABLA
La utilizaremos para
crear una tabla nueva con los datos obtenidos de una consulta.
SINTAXIS ACCES SQL SERVER
SELEC columna_selecionadas
INTO nombre_tabla_nueva FROM nombre_tabla_consulta
WHERE filtros
SINTAXIS MYSQL
CREATE TABLE nombre_tabla_nueva SELEC columna_seleccionadas FROM nombre_tabla_consulta WHERE filtros
Ejmplo ACCES SQL SERVER.
Seleccionemos todas las filas de la
tabla clientes cuya población sea madrir y crea una tabla nueva con estos datos
nombrándola CLIENTES_MADRID
SELECT * INTO CLIENTES_MADRID FROM CLIENTES WHERE POBLACIÓN = "MADRID";
CLIENTES_MADRID
CÓDIGOCLIENTE
EMPRESA
DIRECCIÓN
POBLACIÓN
TELÉFONO
RESPONSABLE
HISTORIAL
CT01
BELTRÁN E
HIJOS
LAS FUENTES
78
MADRID
914456435
ANGEL
MARTÍNEZ
CT04
EXPORTASA
VALLECAS 34
MADRID
913452378
ELVIRA
GÓMEZ
CT07
LA CASA DEL
JUGUETE
AMÉRICA 45
MADRID
912649987
ELÍAS PÉREZ
CT10
FERETERÍA
EL CLAVO
PASEO DE
ÁLAMOS 78
MADRID
914354866
MANUEL
MENÉNDEZ
CT14
DEPORTES
GARCÍA
GUZMÁN EL
BUENO 45
MADRID
913299475
ANA JIMÉNEZ
CT19
CONFECCIONES
GALÁN
FUENCARRAL
78
MADRID
913859234
JUAN GARCÍA
CT23
EL PALACIO
DE LA MODA
ORTEGA Y
GASSET 129
MADRID
927785235
LAURA
CARRASCO
Ejmplo MYSQL.
Seleccionemos todas las filas de la
tabla clientes cuya población sea Madrid u Oviedo, crea una tabla nueva con estos datos
nombrándola CLIENTES_MADRID
CREATE TABLE CLIENTES_MADRID SELECT * FROM `CLIENTES` WHERE POBLACIÓN = "MADRID"
OR POBLACIÓN = "OVIEDO"
CÓDIGOCLIENTE
EMPRESA
DIRECCIÓN
POBLACIÓN
TELÉFONO
RESPONSABLE
HISTORIAL
CT01
BELTRÁN E HIJOS
LAS FUENTES 78
MADRID
(914) 45- 64- 35
ANGEL MARTÍNEZ
CT02
LA MODERNA
LA PALOMA 123
OVIEDO
(985) 32- 34- 34
JUAN GARCÍA
CT04
EXPORTASA
VALLECAS 34
MADRID
(913) 45- 23- 78
ELVIRA GÓMEZ
CT07
LA CASA DEL JUGUETE
AMÉRICA 45
MADRID
(912) 64- 99- 87
ELÍAS PÉREZ
CT10
FERETERÍA EL CLAVO
PASEO DE ÁLAMOS 78
MADRID
(914) 35- 48- 66
MANUEL MENÉNDEZ
Eliminación
SINTAXIS
DELETE nombre_columna
FROM nombre_tabla WHERE filtro ;
Ejemplo. Elimina la
tabla Clientes_madrid
DELETE FROM CLIENTES_MADRID ;
Ejmplo. Elimina de la tabla Clientes_madrid
aquellos registros cuya población sea MADRID y el número de teléfono termine en
5.
Mysql
DELETE FROM CLIENTES_MADRID WHERE POBLACIÓN = "MADRID" AND TELÉFONO LIKE "%5"
Acces
sql server
DELETE FROM CLIENTES_MADRID WHERE POBLACIÓN = "MADRID" AND TELÉFONO LIKE "*5"
EJEMPLO. Elimina aquellos productos de la tabla
de productos cuya sección sea deportes su precio este entre 50 y 10 euros y su
fehca este entre 20-03-200 y el 21-03-2000.
Acces
sql server
DELETE FROM PRODUCTOS WHERE SECCIÓN = "DEPORTES" AND PRECIO BETWEEN 50 AND 100 AND FECHA BETWEEN #3-20-2000# AND #3-21-2000#;
Mysql
DELETE FROM PRODUCTOS WHERE SECCIÓN = "DEPORTES" AND PRECIO BETWEEN 50 AND 100 AND FECHA BETWEEN '2000-03-05' AND '2000-03-21';
PREDICADOS DISTINCT Y DISTINCTROW
Se utilizaran para
solicitar a la consulta que no muestre duplicados, si ponemos DISTINCT delante de uno o varios campos
le indicamos que no repita un registro de esa columna.
DISTINCT
Consulta1
EMPRESA
BELTRÁN E
HIJOS
BELTRÁN E
HIJOS
BELTRÁN E
HIJOS
LA MODERNA
LA MODERNA
EXPORTASA
EXPORTASA
EXPORTASA
CONFECCIONES
AMPARO
LA CASA DEL
JUGUETE
ALMACÉN
POPULAR
ALMACÉN
POPULAR
FERETERÍA
EL CLAVO
FERNÁNDEZ
SL
CONFECCIONES
ARTÍMEZ
DEPORTES
GARCÍA
DEPORTES
MORÁN
JUGUETES LA
SONRISA
JUGUETES LA
SONRISA
LA
CURTIDORA
LÍNEA JOVEN
EL PALACIO
DE LA MODA
SÁEZ Y CÍA
DEPORTES EL
MADRILEÑO
DEPORTES EL
MADRILEÑO
FERRETERÍA
LA ESCOBA
FERRETERÍA
LA ESCOBA
CONFECCIONES
HERMINIA
CONFECCIONES
HERMINIA
BAZAR EL
ARGENTINO
LA TIENDA
ELEGANTE
BAZAR LA
FARAONA
BAZAR LA
FARAONA
Consulta2
EMPRESA
ALMACÉN
POPULAR
BAZAR EL
ARGENTINO
BAZAR LA
FARAONA
BELTRÁN E
HIJOS
CONFECCIONES
AMPARO
CONFECCIONES
ARTÍMEZ
CONFECCIONES
HERMINIA
DEPORTES EL
MADRILEÑO
DEPORTES
GARCÍA
DEPORTES
MORÁN
EL PALACIO
DE LA MODA
EXPORTASA
FERETERÍA
EL CLAVO
FERNÁNDEZ
SL
FERRETERÍA
LA ESCOBA
JUGUETES LA
SONRISA
LA CASA DEL
JUGUETE
LA
CURTIDORA
LA MODERNA
LA TIENDA
ELEGANTE
LÍNEA JOVEN
SÁEZ Y CÍA
En la siguiente consulta solicitaremos que nos
regrese la columna EMPRESA con los registros que tras comparar la tabla de
clientes con la tabla pedidos por el campo común CÓDIGOCLIENTE.
SELECT EMPRESA FROM CLIENTES INNER JOIN PEDIDOS
ON 'CÓDIGOCLIENTE' = 'CÓDIGO
CLIENTE';
Tal y como puedes ver
al existir empresas con varios pedidos al realizar esta consulta vemos empresas
repetidas.
Si utilizamos el
predicado DISTINCT los registros
obtenidos no se repetirán.
SELECT DISTINCT EMPRESA
FROM CLIENTES
INNER JOIN PEDIDOS ON 'CÓDIGOCLIENTE' = 'CÓDIGO
CLIENTE';
Si tras el predicado DISTINCT ponemos más de un campo nos regresarán
aquellos que no se dupliquen en ninguno de los campos.
SELECT DISTINCT POBLACIÓN, EMPRESA FROM CLIENTES
LEFT JOIN PEDIDOS ON `CÓDIGOCLIENTE` = 'CÓDIGO
CLIENTE'
DISTINCTROW control de duplicados
Utilizaremos DISTINCTROW cuando
deseemos que no se pueda repetir ninguna
columna de la fila.
Si deseamos realizar una consulta en la que nos regrese todas las columnas
con sección que contenga 22 y no se repitan filas.
SELECT DISTINCTROW * FROM `productosnuevos` WHERE `SECCIÓN` LIKE "%22%"
Consulta de eliminación de no
coincidentes
Para crear una
consulta de eliminación de no coincidentes es indispensable utilizar el
predicado DISTINCTROW.
Ejmp. Imaginemos que tenemos dos
tablas una con los clientes y la otra con pedidos (existe un campo en común que es el de código cliente) y deseamos eliminar aquellos clientes que no tienen pedidos.
Acces
sql server
DELETE DISTINCTROW CLIENTES.* FROM CLIENTES
LEFT JOIN PEDIDOS ON CLIENTES.CÓDIGOCLIENTE
= PEDIDOS.[CÓDIGO CLIENTE] WHERE PEDIDOS.[CÓDIGO
CLIENTE] IS
NULL
Consulta datos anexados
Anexar datos en una
tabla es copiar en ella los resultantes de una consulta. Para ello es
imprescindible que los tipos de datos de las columnas de la tabla1 sean idénticos a los de la tabla2. Y que el
número de columnas de la tabla1 sea igual al de la tabla2.
Sintaxis
INSERT INTO tabla_receptora (campo1,campo2…)
select campo1, campo2… from tabla_emisora
Acces sql server
INSERT INTO CLIENTES( EMPRESA, DIRECCIÓN )
SELECT EMPRESA, DIRECCIÓN FROM CLIENTES_MADRID
WHERE TELÉFONO LIKE "91*"
Mysql
INSERT INTO CLIENTES( EMPRESA, DIRECCIÓN )
SELECT EMPRESA, DIRECCIÓN FROM CLIENTES_MADRID
WHERE TELÉFONO LIKE "91%"
CONSULTAS DE TABLAS REFERENCIAS CRUZADAS
Una consulta de referencias cruzadas
es una tabla que representa de forma dinámica y visual los datos de nuestras tablas., posé tres
componentes Campo fila, campo columna y totales. Para realizar estas consultas
necesitamos las instrucciones GROUP BY, PIVOT y TRANSFOR. My Sql no admite
estas consultas utilizaremos Access sql server.
CAMPOS FILA (GROUP BY)
CAMPOS COLUMNAS (PIVOT)
TOTALES (TRANSFOR)
Sintaxis
Transform funión(CAMPO DE TOTALES) as ALIAS DEL TOTAL SELECT CAMPO_FILA
from
TABLA
group by CAMPO DE TOTALES
pivot COLUMNAS
TRANSFORM SUM (PRECIO) AS
TOTAL_DE_PRECIOS
SELECT NOMBREARTÍCULO
FROM PRODUCTOS
GROUP BY NOMBREARTÍCULO
PIVOT SECCIÓN
Consulta3
NOMBREARTÍCULO
CERÁMICA
CONFECCIÓN
DEPORTES
FERRETERÍA
JUGUETERÍA
OFICINA
ABRIGO CABALLERO
500.000,00
€
ABRIGO SRA
360,07 €
ALICATES
6,74 €
BALÓN BALONCESTO
75,27 €
BALÓN FÚTBOL
43,91 €
BALÓN RUGBY
111,64 €
CONSULTA DE CREACIÓN DE TABLA
Truncate (eliminar filas de una tabla)
ALTER
(MODIFICAR)
Create (CREAR)
Pata realizar esta consulta
necesitaremos utilizar los comandos DDL (Data definition lenguaje):
Drop (ELIMINAR BBDD Y TABLAS)
Existen
Existen varios tipos
de tabla:
·
TABLAS
BASE Son las que utilizamos en las BBDD que conocemos
o
PERSISTENTES
o
TEMPORALES
Es una tabla que se crea al ejecutar una función SQL o
una sentencia es una tabla de transición para crear otra consulta(informe…)
§ GLOBALES
§ LOCALES CREADAS
§ LOCALES DECLARADAS
·
TABLAS
DERIVADAS
·
TABLAS
VISTAS
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`
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` );
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( precio ) AS precio_medio
FROM `productosnuevos` )
ORDER BY `SECCIÓN`
FROM `productos`
WHERE `PRECIO` > (
SELECT AVG( precio ) 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
FROM `productos`
WHERE `PRECIO` > ALL
(SELECT `PRECIO` FROM `productos` WHERE `SECCIÓN` = "cerámica")
ORDER BY `SECCIÓN` DESC
Ejm.
Regrésanos 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
1.
Regrésanos 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 %"
2.
Ahora unimos las dos consultas
SELECT *
FROM `productosnuevos`
WHERE `PRECIO`
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
|
1
|
AR04
|
10
|
1
|
AR15
|
4
|
1
|
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 realiamos 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
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
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
|
FOTO
|
AR01
|
FERRETERÍA
|
DESTORNILLADOR
|
7 €
|
22/10/2000
|
No
|
ESPAÑA
|
|
AR03
|
JUGUETERÍA
|
COCHE
TELEDIRIGIDO
|
159 €
|
26/05/2002
|
Sí
|
MARRUECOS
|
|
AR07
|
CONFECCIÓN
|
SERRUCHO
|
30 €
|
23/03/2001
|
Sí
|
FRANCIA
|
|
AR08
|
JUGUETERÍA
|
CORREPASILLOS
|
103 €
|
11/04/2000
|
Sí
|
JAPÓN
|
|
AR09
|
CONFECCIÓN
|
PANTALÓN
SEÑORA
|
174 €
|
10/01/2000
|
Sí
|
MARRUECOS
|
Ejemplo 2
Vamos a realizar una consulta de aquellos cliente que no han pagado con
tarjeta o que no han realizado pedidos. Para ellos utilizaremos la tabla de
clientes y la tabla de pedidos.
CLIENTES
|
||||||
CÓDIGOCLIENTE
|
EMPRESA
|
DIRECCIÓN
|
POBLACIÓN
|
TELÉFONO
|
RESPONSABLE
|
HISTORIAL
|
CT01
|
BELTRÁN E
HIJOS
|
LAS FUENTES
78
|
MADRID
|
(914) 45-
64- 35
|
ANGEL
MARTÍNEZ
|
|
CT02
|
LA MODERNA
|
LA PALOMA
123
|
OVIEDO
|
(985) 32-
34- 34
|
JUAN GARCÍA
|
|
CT03
|
EL
ESPAÑOLITO
|
MOTORES 34
|
BARCELONA
|
(934) 56-
53- 43
|
ANA
FERNÁNDEZ
|
|
CT04
|
EXPORTASA
|
VALLECAS 34
|
MADRID
|
(913) 45-
23- 78
|
ELVIRA
GÓMEZ
|
|
CT06
|
CONFECCIONES
AMPARO
|
LOS MOROS
23
|
GIJÓN
|
(985) 75-
43- 32
|
LUÍS
ÁLVAREZ
|
PEDIDOS
|
|||||
NÚMERO DE PEDIDO
|
CÓDIGO CLIENTE
|
FECHA DE PEDIDO
|
FORMA DE PAGO
|
DESCUENTO
|
ENVIADO
|
1
|
CT01
|
11/03/2000
|
CONTADO
|
2,00%
|
Sí
|
3
|
CT23
|
18/03/2000
|
APLAZADO
|
6,00%
|
No
|
5
|
CT25
|
31/03/2000
|
CONTADO
|
9,00%
|
No
|
7
|
CT12
|
12/04/2000
|
CONTADO
|
7,00%
|
No
|
8
|
CT01
|
15/04/2000
|
TARJETA
|
2,00%
|
Sí
|
9
|
CT21
|
21/04/2000
|
CONTADO
|
4,00%
|
No
|
13
|
CT13
|
30/04/2000
|
APLAZADO
|
3,00%
|
No
|
Primero seleccionaremos aquellos clientes cuya forma de pago ha sido
tarjeta
SELECT [CÓDIGO CLIENTE] FROM PEDIDOS WHERE [FORMA DE PAGO] = "TARJETA"
Consulta3
|
CÓDIGO
CLIENTE
|
CT01
|
CT07
|
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
SELECT [EMPRESA], CLIENTES.[DIRECCIÓN]
FROM CLIENTES
WHERE ( CLIENTES.[CÓDIGOCLIENTE]IN
FROM CLIENTES
WHERE ( CLIENTES.[CÓDIGOCLIENTE]IN
(SELECT [CÓDIGO CLIENTE] FROM PEDIDOS WHERE [FORMA DE PAGO] = "TARJETA");
Consulta3
|
|
EMPRESA
|
DIRECCIÓN
|
BELTRÁN E
HIJOS
|
LAS FUENTES
78
|
EXPORTASA
|
VALLECAS 34
|
LA CASA DEL
JUGUETE
|
AMÉRICA 45
|
LA
CURTIDORA
|
OLIVARES 3
|
SÁEZ Y CÍA
|
INFANTA
MERCEDS 23
|
FERRETERÍA
LA ESCOBA
|
ORENSE 7
|
BAZAR EL
ARGENTINO
|
ATOCHA 55
|
Si deseamos saber solo aquellos que realizaron los pagos sin tarjeta (no
como) (efectivo, a debito….) en ese caso
utilizaremos el not in
SELECT [EMPRESA], CLIENTES.[DIRECCIÓN]
FROM CLIENTES
WHERE ( CLIENTES.[CÓDIGOCLIENTE] NOT IN
FROM CLIENTES
WHERE ( CLIENTES.[CÓDIGOCLIENTE] NOT IN
(SELECT [CÓDIGO CLIENTE] FROM PEDIDOS WHERE [FORMA DE PAGO] = "TARJETA");
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:
·
Actualización
·
Creación
de tabla
·
Eliminación
·
Datos
anexados.
Comandos DML Y DDL
·
Create
·
Update
·
Delete
·
Insert
Into
·
Create
Table
·
Select
Into
Actualización
Actualizará nuestra
tabla modificando un campo o una serie de campos según un criterio dado
Sintaxis
Update tabla set campo = nuevo valor WHERE
campo condición = condición
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%"
CREACIÓN DE TABLA
La utilizaremos para
crear una tabla nueva con los datos obtenidos de una consulta.
SINTAXIS ACCES SQL SERVER
SELEC columna_selecionadas
INTO nombre_tabla_nueva FROM nombre_tabla_consulta
WHERE filtros
SINTAXIS MYSQL
CREATE TABLE nombre_tabla_nueva SELEC columna_seleccionadas FROM nombre_tabla_consulta WHERE filtros
Ejmplo ACCES SQL SERVER.
Seleccionemos todas las filas de la
tabla clientes cuya población sea madrir y crea una tabla nueva con estos datos
nombrándola CLIENTES_MADRID
SELECT * INTO CLIENTES_MADRID FROM CLIENTES WHERE POBLACIÓN = "MADRID";
CLIENTES_MADRID
|
||||||
CÓDIGOCLIENTE
|
EMPRESA
|
DIRECCIÓN
|
POBLACIÓN
|
TELÉFONO
|
RESPONSABLE
|
HISTORIAL
|
CT01
|
BELTRÁN E
HIJOS
|
LAS FUENTES
78
|
MADRID
|
914456435
|
ANGEL
MARTÍNEZ
|
|
CT04
|
EXPORTASA
|
VALLECAS 34
|
MADRID
|
913452378
|
ELVIRA
GÓMEZ
|
|
CT07
|
LA CASA DEL
JUGUETE
|
AMÉRICA 45
|
MADRID
|
912649987
|
ELÍAS PÉREZ
|
|
CT10
|
FERETERÍA
EL CLAVO
|
PASEO DE
ÁLAMOS 78
|
MADRID
|
914354866
|
MANUEL
MENÉNDEZ
|
|
CT14
|
DEPORTES
GARCÍA
|
GUZMÁN EL
BUENO 45
|
MADRID
|
913299475
|
ANA JIMÉNEZ
|
|
CT19
|
CONFECCIONES
GALÁN
|
FUENCARRAL
78
|
MADRID
|
913859234
|
JUAN GARCÍA
|
|
CT23
|
EL PALACIO
DE LA MODA
|
ORTEGA Y
GASSET 129
|
MADRID
|
927785235
|
LAURA
CARRASCO
|
Ejmplo MYSQL.
Seleccionemos todas las filas de la
tabla clientes cuya población sea Madrid u Oviedo, crea una tabla nueva con estos datos
nombrándola CLIENTES_MADRID
CREATE TABLE CLIENTES_MADRID SELECT * FROM `CLIENTES` WHERE POBLACIÓN = "MADRID"
OR POBLACIÓN = "OVIEDO"
CÓDIGOCLIENTE
|
EMPRESA
|
DIRECCIÓN
|
POBLACIÓN
|
TELÉFONO
|
RESPONSABLE
|
HISTORIAL
|
CT01
|
BELTRÁN E HIJOS
|
LAS FUENTES 78
|
MADRID
|
(914) 45- 64- 35
|
ANGEL MARTÍNEZ
|
|
CT02
|
LA MODERNA
|
LA PALOMA 123
|
OVIEDO
|
(985) 32- 34- 34
|
JUAN GARCÍA
|
|
CT04
|
EXPORTASA
|
VALLECAS 34
|
MADRID
|
(913) 45- 23- 78
|
ELVIRA GÓMEZ
|
|
CT07
|
LA CASA DEL JUGUETE
|
AMÉRICA 45
|
MADRID
|
(912) 64- 99- 87
|
ELÍAS PÉREZ
|
|
CT10
|
FERETERÍA EL CLAVO
|
PASEO DE ÁLAMOS 78
|
MADRID
|
(914) 35- 48- 66
|
MANUEL MENÉNDEZ
|
|
Eliminación
SINTAXIS
DELETE nombre_columna
FROM nombre_tabla WHERE filtro ;
Ejemplo. Elimina la
tabla Clientes_madrid
DELETE FROM CLIENTES_MADRID ;
Ejmplo. Elimina de la tabla Clientes_madrid
aquellos registros cuya población sea MADRID y el número de teléfono termine en
5.
Mysql
DELETE FROM CLIENTES_MADRID WHERE POBLACIÓN = "MADRID" AND TELÉFONO LIKE "%5"
Acces
sql server
DELETE FROM CLIENTES_MADRID WHERE POBLACIÓN = "MADRID" AND TELÉFONO LIKE "*5"
EJEMPLO. Elimina aquellos productos de la tabla
de productos cuya sección sea deportes su precio este entre 50 y 10 euros y su
fehca este entre 20-03-200 y el 21-03-2000.
Acces
sql server
DELETE FROM PRODUCTOS WHERE SECCIÓN = "DEPORTES" AND PRECIO BETWEEN 50 AND 100 AND FECHA BETWEEN #3-20-2000# AND #3-21-2000#;
Mysql
DELETE FROM PRODUCTOS WHERE SECCIÓN = "DEPORTES" AND PRECIO BETWEEN 50 AND 100 AND FECHA BETWEEN '2000-03-05' AND '2000-03-21';
PREDICADOS DISTINCT Y DISTINCTROW
Se utilizaran para
solicitar a la consulta que no muestre duplicados, si ponemos DISTINCT delante de uno o varios campos
le indicamos que no repita un registro de esa columna.
DISTINCT
Consulta1
|
EMPRESA
|
BELTRÁN E
HIJOS
|
BELTRÁN E
HIJOS
|
BELTRÁN E
HIJOS
|
LA MODERNA
|
LA MODERNA
|
EXPORTASA
|
EXPORTASA
|
EXPORTASA
|
CONFECCIONES
AMPARO
|
LA CASA DEL
JUGUETE
|
ALMACÉN
POPULAR
|
ALMACÉN
POPULAR
|
FERETERÍA
EL CLAVO
|
FERNÁNDEZ
SL
|
CONFECCIONES
ARTÍMEZ
|
DEPORTES
GARCÍA
|
DEPORTES
MORÁN
|
JUGUETES LA
SONRISA
|
JUGUETES LA
SONRISA
|
LA
CURTIDORA
|
LÍNEA JOVEN
|
EL PALACIO
DE LA MODA
|
SÁEZ Y CÍA
|
DEPORTES EL
MADRILEÑO
|
DEPORTES EL
MADRILEÑO
|
FERRETERÍA
LA ESCOBA
|
FERRETERÍA
LA ESCOBA
|
CONFECCIONES
HERMINIA
|
CONFECCIONES
HERMINIA
|
BAZAR EL
ARGENTINO
|
LA TIENDA
ELEGANTE
|
BAZAR LA
FARAONA
|
BAZAR LA
FARAONA
|
Consulta2
|
EMPRESA
|
ALMACÉN
POPULAR
|
BAZAR EL
ARGENTINO
|
BAZAR LA
FARAONA
|
BELTRÁN E
HIJOS
|
CONFECCIONES
AMPARO
|
CONFECCIONES
ARTÍMEZ
|
CONFECCIONES
HERMINIA
|
DEPORTES EL
MADRILEÑO
|
DEPORTES
GARCÍA
|
DEPORTES
MORÁN
|
EL PALACIO
DE LA MODA
|
EXPORTASA
|
FERETERÍA
EL CLAVO
|
FERNÁNDEZ
SL
|
FERRETERÍA
LA ESCOBA
|
JUGUETES LA
SONRISA
|
LA CASA DEL
JUGUETE
|
LA
CURTIDORA
|
LA MODERNA
|
LA TIENDA
ELEGANTE
|
LÍNEA JOVEN
|
SÁEZ Y CÍA
|
En la siguiente consulta solicitaremos que nos
regrese la columna EMPRESA con los registros que tras comparar la tabla de
clientes con la tabla pedidos por el campo común CÓDIGOCLIENTE.
SELECT EMPRESA FROM CLIENTES INNER JOIN PEDIDOS
ON 'CÓDIGOCLIENTE' = 'CÓDIGO
CLIENTE';
Tal y como puedes ver
al existir empresas con varios pedidos al realizar esta consulta vemos empresas
repetidas.
Si utilizamos el
predicado DISTINCT los registros
obtenidos no se repetirán.
SELECT DISTINCT EMPRESA
FROM CLIENTES
INNER JOIN PEDIDOS ON 'CÓDIGOCLIENTE' = 'CÓDIGO CLIENTE';
FROM CLIENTES
INNER JOIN PEDIDOS ON 'CÓDIGOCLIENTE' = 'CÓDIGO CLIENTE';
Si tras el predicado DISTINCT ponemos más de un campo nos regresarán
aquellos que no se dupliquen en ninguno de los campos.
SELECT DISTINCT POBLACIÓN, EMPRESA FROM CLIENTES
LEFT JOIN PEDIDOS ON `CÓDIGOCLIENTE` = 'CÓDIGO CLIENTE'
LEFT JOIN PEDIDOS ON `CÓDIGOCLIENTE` = 'CÓDIGO CLIENTE'
DISTINCTROW control de duplicados
Utilizaremos DISTINCTROW cuando
deseemos que no se pueda repetir ninguna
columna de la fila.
Si deseamos realizar una consulta en la que nos regrese todas las columnas
con sección que contenga 22 y no se repitan filas.
SELECT DISTINCTROW * FROM `productosnuevos` WHERE `SECCIÓN` LIKE "%22%"
Consulta de eliminación de no
coincidentes
Para crear una
consulta de eliminación de no coincidentes es indispensable utilizar el
predicado DISTINCTROW.
Ejmp. Imaginemos que tenemos dos
tablas una con los clientes y la otra con pedidos (existe un campo en común que es el de código cliente) y deseamos eliminar aquellos clientes que no tienen pedidos.
Acces
sql server
DELETE DISTINCTROW CLIENTES.* FROM CLIENTES
LEFT JOIN PEDIDOS ON CLIENTES.CÓDIGOCLIENTE
= PEDIDOS.[CÓDIGO CLIENTE] WHERE PEDIDOS.[CÓDIGO
CLIENTE] IS
NULL
Consulta datos anexados
Anexar datos en una
tabla es copiar en ella los resultantes de una consulta. Para ello es
imprescindible que los tipos de datos de las columnas de la tabla1 sean idénticos a los de la tabla2. Y que el
número de columnas de la tabla1 sea igual al de la tabla2.
Sintaxis
INSERT INTO tabla_receptora (campo1,campo2…)
select campo1, campo2… from tabla_emisora
Acces sql server
INSERT INTO CLIENTES( EMPRESA, DIRECCIÓN )
SELECT EMPRESA, DIRECCIÓN FROM CLIENTES_MADRID WHERE TELÉFONO LIKE "91*"
INSERT INTO CLIENTES( EMPRESA, DIRECCIÓN )
SELECT EMPRESA, DIRECCIÓN FROM CLIENTES_MADRID WHERE TELÉFONO LIKE "91*"
Mysql
INSERT INTO CLIENTES( EMPRESA, DIRECCIÓN )
SELECT EMPRESA, DIRECCIÓN FROM CLIENTES_MADRID WHERE TELÉFONO LIKE "91%"
SELECT EMPRESA, DIRECCIÓN FROM CLIENTES_MADRID WHERE TELÉFONO LIKE "91%"
CONSULTAS DE TABLAS REFERENCIAS CRUZADAS
Una consulta de referencias cruzadas
es una tabla que representa de forma dinámica y visual los datos de nuestras tablas., posé tres
componentes Campo fila, campo columna y totales. Para realizar estas consultas
necesitamos las instrucciones GROUP BY, PIVOT y TRANSFOR. My Sql no admite
estas consultas utilizaremos Access sql server.
CAMPOS FILA (GROUP BY)
|
CAMPOS COLUMNAS (PIVOT)
|
|
TOTALES (TRANSFOR)
|
Sintaxis
Transform funión(CAMPO DE TOTALES) as ALIAS DEL TOTAL SELECT CAMPO_FILA
from
TABLA
group by CAMPO DE TOTALES
pivot COLUMNAS
TRANSFORM SUM (PRECIO) AS
TOTAL_DE_PRECIOS
SELECT NOMBREARTÍCULO
FROM PRODUCTOS
GROUP BY NOMBREARTÍCULO
PIVOT SECCIÓN
Consulta3
|
||||||
NOMBREARTÍCULO
|
CERÁMICA
|
CONFECCIÓN
|
DEPORTES
|
FERRETERÍA
|
JUGUETERÍA
|
OFICINA
|
ABRIGO CABALLERO
|
500.000,00
€
|
|||||
ABRIGO SRA
|
360,07 €
|
|||||
ALICATES
|
6,74 €
|
|||||
BALÓN BALONCESTO
|
75,27 €
|
|||||
BALÓN FÚTBOL
|
43,91 €
|
|||||
BALÓN RUGBY
|
111,64 €
|
CONSULTA DE CREACIÓN DE TABLA
Truncate (eliminar filas de una tabla)
|
ALTER
(MODIFICAR)
|
Create (CREAR)
|
Drop (ELIMINAR BBDD Y TABLAS)
|
Existen
Sintaxis para crear una tabla
Create Table
<Nombre Tabla> (Campo1 Tipo_Dato, Campo2 Tipo_Dato, Campo2 Tipo_Dato, Campo3
Tipo_Dato)
Ejemplo My sql
CREATE TABLE Tabla_practica(nombre VARCHAR( 50 ) ,Apellidos VARCHAR( 100 ) ,DNI VARCHAR( 100 ))
CREATE TABLE tabla_practica(NOMBRE VARCHAR( 50 ) , APELLIDOS VARCHAR( 50 ) , ENTERO_SIMPLE TINYINT, FECHA DATE, BOLEOANO_o_SI_NO BOOL)
Crea una tabla con los mismos
campos que antes un auto número al rpincipio que sea la clave principal.
CREATE TABLE tabla_practica(
Id_ConAutonumero INT AUTO_INCREMENT ,NOMBRE VARCHAR( 50 ) ,APELLIDOS VARCHAR( 50 ) ,ENTERO_SIMPLE TINYINT,FECHA DATE,BOLEOANO_o_SI_NO BOOL,PRIMARY KEY ( Id_ConAutonumero ))
Transact-SQL
Create
table TableHechaConAQL ( Nombre text(50), Apellidos text (100), DNI text (20),
Fecha date, Numero_entero int, decimal double)
Eliminar una tabla o una BBDD
Para eliminar de forma
definitiva una tabla o BBdd completa utilizaremos el comando DROP.
Eliminar una tabla
DROP TABLE tabla_practica
MODIFICAR UNA TABLA
AGREGAR UN CAMPO (ADD COLUMN)
ALTER TABLE nombreTabla ADD COLUMN nombre
columna
ALTER TABLE tabla_practica ADD COLUMN numero_Largo2 LONG
ELIMINAR COLUMNAS (DROP COLUMN)
ALTER TABLE tabla_practica DROP COLUMN numero_Largo2
MODIFICAR UN TIPO DATO EXISTENTE EN
UNA TABLA
Transact-SQL
ALTER TABLE tabla_practica ALTER COLUMN numero_Largo
VARCHAR(50)
MYSQL
Sintaxis
ALTER TABLE `tabla ` CHANGE `campo3` ` campo3` BOOL
ALTER TABLE `tabla_practica` CHANGE `texto` `texto` BOOL
La instrucción SET DEFAULT nos permite dar un valor por defecto a una columna en este
caso la columna dia_de_hoy tendrá por defecto la fecha 01-01-2019 solo validad en MySqul
ALTER TABLE tabla_practica ALTER COLUMN DIA_de_hOY SET DEFAULT "2019-01-01"
La instrucción DROP DEFAULT elimina
valor por defecto de un campo, solo
validad en MySqul
ALTER TABLE `tabla_practica` ALTER COLUMN DIA_de_hOY DROP DEFAULT
Insertar una fila id en una tabla
existente
ALTER TABLE `tabla_practica` ADD COLUMN `id_cliente` INT AUTO_INCREMENT PRIMARY KEY
No hay comentarios:
Publicar un comentario