Vous êtes sur la page 1sur 18

QUÉ ES SQL.

Structure Query Lenguage: Lenguaje estructurado de consultas. Inventado por IBM

Es un lenguaje para interactuar con BBDD relacionales.

En un ordenador o servidor hay una base de datos, la manera de interactuar con esa base de datos
se hace por medio de una solicitud SQL. Para ello se necesita un SGDB (Gestor de base de datos)

GRUPOS DE COMANDOS:

Hay cuatro grandes tipos:

DDL: Se usan para crear y modificar la estructura de una base de datos (ejemplo: crear tablas,
modificar estructura de las tablas, eliminar tablas).

- CREATE
- ALTER
- DROP
- TRUNCATE

DML: Se usan para seleccionar registros de una base de datos, para insertar nuevos registros,
actualizar, etc. (Consultas de selección y de acción)

- SELECT
- INSERT
- UPDATE
- DELETE

DCL: Para proporcionar seguridad a la base de datos.

- GRANT
- REVOKE

TCL: Se utilizan para la gestión en los cambios de los datos.

- COMMIT
- ROLLBACK
- SAVEPOINT
CLAUSULAS:

INSTRUCCIÓN SQL.

Se compone de: COMANDO + CLAUSULAS + OPERADORES + FUNCIONES

No es necesario que lleve obligatoriamente los cuatro componentes. SI es necesario mínimo un


comando y una clausula.

BASE DE DATOS QUE SE VA A UTILIZAR


En la tabla de clientes se ve algo así:

La tabla productos se ve así:

CONSULTA DE SELECCIÓN SIMPLE:

Queremos mostrar todo lo que hay en los registros EMPRESA, DIRECCIÓN, POBLACIÓN desde la
tabla CLIENTES
SELECT EMPRESA, DIRECCIÓN, POBLACIÓN FROM CLIENTES

OPERADORES:
Existen los operadores lógicos y los operadores de comparación.

OPERADORES DE COMPARACIÓN.
OPERADORES LÓGICOS.

ORDEN DE ESCRITURA.

No es normal que se den todas las clausulas en una instrucción SQL, pero en caso que se usen
todas ese sería el orden.

Queremos mostrar todos los registros de NOMBREARTÍCULO, SECCIÓN, PRECIO de la tabla


PRODUCTOS donde la sección sea únicamente CERÁMICA

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO FROM PRODUCTOS WHERE SECCIÓN=”CERÁMICA”

Queremos mostrar todos los registros de NOMBREARTÍCULO, SECCIÓN, PRECIO de la tabla


PRODUCTOS donde la SECCIÓN sea únicamente CERÁMICA y DEPORTES. En este caso se usa el
operador lógico OR puesto que ponemos dos condiciones para el mismo campo (SECCIÓN).
SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO FROM PRODUCTOS WHERE SECCIÓN=”CERÁMICA”
OR SECCIÓN=”DEPORTES”

Queremos mostrar todos los artículos que son de deportes y son americanos. En esta ocasión si
usa el operador AND puesto que se está hablando de dos campos diferentes (SECCIÓN Y
PAÍSDEORIGEN).

SELECT* FROM PRODUCTOS WHERE SECCIÓN=”DEPORTES” AND PAÍSDEORIGEN=”USA”

Haremos una consulta que muestre los PRODUCTOS de ABRIL Y MARZO del año 2000.
SELECT * FROM PRODUCTOS WHERE FECHA BETWEEN ‘2000-03-01’ AND ‘2000-04-30’

SELECT * FROM PRODUCTOS WHERE FECHA >= ‘2000-03-01’ AND FECHA <=‘2000-04-30’

Cláusula Order By. Ordenando registros


Vamos a elaborar una consulta que nos muestre los PRODUCTOS de las secciones de DEPORTES y
CERÁMICA.

SELECT * FROM PRODUCTOS WHERE SECCIÓN = ‘DEPORTES’ OR SECCIÓN =’CERAMICA’

Si nos fijamos en el orden de la tabla, esta sentencia nos muestra el orden de menor a mayor
dependiendo del CÓDIGOARTÍCULO.

Queremos ordenar esta tabla por orden alfabético de la “a” a la “z” por el campo SECCIÓN.
SELECT * FROM PRODUCTOS WHERE SECCIÓN = ‘DEPORTES’ OR SECCIÓN =’CERAMICA’

ORDER BY SECCIÓN.

Si es un campo de texto ORDER BY lo va a ordenar alfabéticamente, si es un campo numérico lo


ordenará de menor a mayor. Claramente no se puede ordenar por dos campos a la vez.

Si queremos que el orden sea descendente, en caso numérico de la “z” a la “a” o en caso numérico
de mayor a menor se le agrega DESC.

de número mayor a número menor se agrega DESC

SELECT * FROM PRODUCTOS WHERE SECCIÓN = ‘DEPORTES’ OR SECCIÓN =’CERAMICA’

ORDER BY SECCIÓN DESC


Se pueden establecer varios criterios de ordenamiento. Por ejemplo a continuación se ordenaran
los campos de SECCIÓN donde la parte CERAMICA se ordenara desde su PRECIO de menor a
mayor; de igual manera la parte DEPORTES se ordenará desde su PRECIO de menor a mayor.

SELECT * FROM PRODUCTOS WHERE SECCIÓN = ‘DEPORTES’ OR SECCIÓN =’CERAMICA’

ORDER BY SECCIÓN, PRECIO

Como se observa tanto los de CERÁMICA y DEPORTERS están ordenados por PRECIO de menor a
mayor.

Se puede agregar los criterios de ordenación que sean necesarios. Por ejemplo, ahora se hará una
sentencia que ordene la SECCIÓN que tenga CERÁMICA Y DEPORTES alfabéticamente, también que
a los campos que tengan CERÁMICA y DEPORTES se ordenen alfabéticamente desde el campo
PAÍSDEORIGEN, de igual manera se organicen esos países de origen que coinciden con un PRECIO
de menor a mayor.

SELECT * FROM PRODUCTOS WHERE SECCIÓN = ‘DEPORTES’ OR SECCIÓN =’CERAMICA’

ORDER BY SECCIÓN, PAÍSDEORIGEN, PRECIO


Consultas de agrupación o totales
Estas consultas hacen cálculos por grupos. Puede ser un conteo, una media, para contar por
ejemplo cuantos clientes tengo de Barcelona, etc. Para ello se utilizan las funciones de agregado:

FUNCIONES DE AGREGADO.

Vamos a hacer una consulta de agrupación que nos muestre cuanto suman los artículos de las
SECCIONES.

Mostrar cuanto suman los artículos de FERRETERIA, Cuanto suman los artículos de DEPORTES.

Para ellos se necita el CAMPO DE AGRUPACIÓN y CAMPO DEL CALCULO.

SELECT SECCIÓN, SUM (PRECIO) FROM PRODUCTOS GROUP BY SECCIÓN


GROUP BY lo que hace es agrupar los registros que coinciden en el campo.

Si se quiere ordenar la anterior tabla por precio agregando el ORDER BY PRECIO, no se ordena,
debido a que el campo precio no existe en esta sentencia, existe es el nombre del campo
SUM(PRECIO) ¿qué hacer en estos casos? Se le agrega un ALIAS a este nombre de campo (esto no
altera el nombre del campo en la tabla) esto se hace con el AS

SELECT SECCIÓN, SUM (PRECIO) AS SUMA_ARTICULOS FROM PRODUCTOS GROUP BY SECCIÓN


ORDER BY SUMA_ARTICULOS

Ahora queremos ver la media del PRECIO de la SECCIÓN CONFECCIÓN y DEPORTES.

SELECT SECCIÓN, AVG(PRECIO) AS MEDIA_ARTICULOS FROM PRODUCTOS GRUP BY SECCIÓN


HAVING SECCIÓN = ‘DEPORTES’ OR SECCIÓN= ‘CONFECCIÓN’
En las consultas de agrupación o totales para no se usa el WHERE, se usa el HAVING para
establecer criterios.

Ahora queremos saber cuántos clientes de cada población hay.

SELECT POBLACIÓN, COUNT (CÓDIGOCLIENTE) AS N_CLIENTES FROM CLIENTES GROUP BY


POBLACIÓN

La función COUNT() no cuenta campos en blanco, para ello se usa el conteo en el campo
fundamental de la tabla en este caso CÓDIGOCLIENTE.

Ahora queremos saber el precio del artículo más caro de la SECCIÓN de CONFECCIÓN. Esto se hace
con la función MAX().

SELECT SECCIÓN, MAX(PRECIO) AS PRECIO_MAS_ALTO FROM PRODUCTOS WHERE


SECCIÓN=’CONFECCIÓN’ GROUP BY SECCIÓN

Consultas de cálculo.
Se realizan sobre registros individuales, no sobre grupos como anteriormente vimos. Es frecuente
que se usen funciones SQL, aparte de esto cada gestor de base de datos tiene sus propias
funciones. Las funciones SQL más frecuentes son:
- Now(): nos devuelve el día y la hora actuales
- Datediff (): Nos devuelve la hora diferencia entre dos fechas
- Date_format(): Nos permite formatear los fortmatos.
- Round(): Nos permite redondear
- Concat(): Nos permite concatenar dos cadenas de texto.

Vamos a hacer una consulta de cálculo sobre la tabla de PRODUCTOS. Las consultas de cálculo nos
permite mostrar los registros ya con un 21% de IVA.

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO, PRECIO*1.21 FROM PRODUCTOS

Como vemos el nombre del campo PRECIO*1.21 no es indicado, Además los decimales de este
campo son muy largos, vamos a acortarlos con la función ROUND()que se le pasa como parámetro
la expresión que se quiere redondear y el número de decimales que queremos que tenga ese
redondeo.

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO, ROUND( PRECIO*1.21,2) AS PRECIO_CON_IVA


FROM PRODUCTOS
Ahora queremos crear una consulta que refleje un campo nuevo con un descuento de 3 euros en
cada uno de los artículos.

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO, PRECIO-3 AS PRECIO_DTO FROM PRODUCTOS

Es frecuente hacer cálculos con campos de tipo fechas.

Vamos a hacer una consulta que nos muestre la diferencia de días entre los días que fue registrado
un artículo y el día de hoy. Esto se hace con la función NOW()

Primero obtendremos la fecha de hoy.

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO, FECHA, NOW() AS DIA_DE_HOY FROM PRODUCTOS


WHERE SECCIÓN=’DEPORTES’
Ahora con la función DATEDIFF() con parámetros fecha final, fecha inicial. Así obtendremos la
diferencia entre las fechas, en este caso los campos FECHA y DIA_DE_HOY.

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO, FECHA, NOW() AS DIA_DE_HOY,


DATEDIFF(NOW(),FECHA) AS DIFERENCIA FROM PRODUCTOS WHERE SECCIÓN=’DEPORTES’

Si nos fijamos el campo DIA_DE_HOY muestra un formato tanto la fecha como la hora, la función
DATE_FORMAT(fecha, ‘%D-%M’) nos permite dar formato con respecto a los parámetros que
tenga la función. También se le puede agregar año, hora.

SELECT NOMBREARTÍCULO, SECCIÓN, PRECIO, FECHA, DATE_FORMAT(NOW(),‘%D-%M’)AS


DIA_DE_HOY, DATEDIFF(NOW(),FECHA) AS DIFERENCIA FROM PRODUCTOS WHERE
SECCIÓN=’DEPORTES’

Estas funciones dependen del gestor de base de datos, estos cambian en cada gestor, para ello hay
que investigar.
Consultas Multitabla I. (consultas de
unión)
Por ejemplo si en una base de tenemos 30 tablas y queremos hacer una consulta de 5 de esas
tablas. Existen las consultas de Unión externa y de Unión interna.

CONSULTAS DE UNIÓN EXTERNA:

Funciona con los siguientes operadores:

- Union:
- Union All
- Except
- Intersect
- Minus

UNION:

Permite unir en una única consulta varias tablas almacenadas en la base de datos. Para que se
pueda hacer la unión de dos tablas se necesitan los requisitos: Las tablas deben tener el mismo
número de campos, los campos deben tener tipos de datos compatibles, no importa si los campos
tienen nombres diferentes. Y una vez que las tablas cumplen los requisitos, lo que ocurres es que
las tablas se unen en una única consulta, los campos quedan con el nombre de la tabla 1.

Con estas tablas se trabajará:


PRODUCTOS.
PRODUCTOSNUEVOS

Queremos hacer una consulta en la que nos muestre todos los artículos de DEPORTES y DEPORTES
DE RIESGO, estos se encuentran en las tablas PRODUCTOS y PRODUCTOSNUEVOS
RESPECTIVAMENTE.

SELECT * FROM PRODUCTOS WHERE SECCIÓN=’DEPORTES’ UNION SELECT * FROM


PRODUCTOSNUEVOS WHERE SECCIÓN=’DEPORTES DE RIESGO’
Como en este caso los campos tienen el mismo nombre en las tablas se muestra con normalidad,
si se cambia el nombre a un campo de la tabla se muestra únicamente el nombre de los campos de
la tabla 1.

Vamos a hacer una consulta que nos muestre los artículos más caros que 500 en la tabla
PRODUCTOS y artículos de alta costura de la tabla PRODUCTOSNUEVOS.

SELECT * FROM PRODUCTOS WHERE PRECIO >500 UNION SELECT * FROM PRODUCTOSNUEVOS
WHERE SECCIÓN=’ALTA COSTURA’

UNION ALL.

Al aplicar el UNION si hay registros repetidos se muestra en la consulta sólo un registro, cuando se
aplica UNION ALL se muestran todos los registros así estén repetidos.

Vous aimerez peut-être aussi