Seguidores

MIS WEBS



jueves, 28 de marzo de 2019

Apuntes SQL 2018

SQL

¿QUÉ ES UNA BASE DE DATOS (BBDD)?
DEFINICÓN SQL
SGDB
COMANDOS
CLÁUSULAS
OPERADORES
SENTENCIA O INSTRUCCIÓN
ORDEN DE UNA INSTRUCCIÓN SQL
CLÁUSULA WHERE
EJEMPLO DE OR
EJEMPLO DE OR Y AND
EJEMPLO DE BETWEEN (INTERVALOS)
ORDENAR REGISTROS CLÁUSULA ORDER BY
CONSULTAS DE AGRUPACIÓN O TOTALES
FUNCIONES DE AGREGADO
QUE ES UN ALIAS
CONSULTAS DE CÁLCULO
CONSULTAS DE UNIÓN

¿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 electricidad
SELECT *
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 ALJARAFE
SELECT *
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 AS
Cuenta 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



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

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

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
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
ITALIA
AR04
DEPORTES
RAQUETA TENIS
93 €
20/03/2000
USA
AR06
DEPORTES
MANCUERNAS
60 €
13/09/2000
USA
AR10
JUGUETERÍA
CONSOLA VIDEO
443 €
24/09/2002
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
MARRUECOS
AR07
CONFECCIÓN
SERRUCHO
30 €
23/03/2001
FRANCIA
AR08
JUGUETERÍA
CORREPASILLOS
103 €
11/04/2000
JAPÓN
AR09
CONFECCIÓN
PANTALÓN SEÑORA
174 €
10/01/2000
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%
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%
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

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

Buscar este blog

Sandisk y Western Digital