El lenguaje SQL
(lenguaje de consulta estructurado) es un lenguaje que permite “actuar” sobre
una base de datos.
Con este
lenguaje se pueden construir órdenes que permiten hacer lo siguiente (entre
otras cosas):
-
Añadir registros a las tablas.
-
Modificar registros de las tablas.
-
Eliminar registros de las tablas.
-
Realizar Consultas sobre las tablas.
Gracias a este
lenguaje, se construirán órdenes desde nuestra aplicación java, que se
aplicarán a la base de datos, actuando sobre ella.
Las órdenes de añadir, modificar, eliminar realizan
cambios dentro de la base de datos, pero no devuelven nada al programa java.
Por otro lado,
cuando se da una orden de realizar una
consulta, la base de datos nos devuelve el resultado de dicha consulta:
Gracias a este
lenguaje, nuestra aplicación tiene dominio total sobre la base de datos. Puede
actuar sobre ella introduciendo nuevos datos, o modificando los que había, o
eliminándolos. También puede extraer información de ella accediendo a través de
consultas a la base de datos.
A continuación
se comentarán las reglas básicas de este lenguaje.
Creación de consultas en SQL
Se
empezará estudiando como realizar consultas sobre una base de datos usando el
lenguaje SQL (más adelante se verá como realizar consultas de acción: añadir,
modificar o eliminar registros).
Código base en SQL para realizar consultas:
Para consultar
una base de datos usará un código general como el que sigue:
SELECT campos a
visualizar
FROM tablas donde se encuentran dichos campos
WHERE condiciones que deben cumplir los registros
ORDER BY forma de ordenar la consulta
Como puede ver,
una consulta en SQL tiene cuatro partes (SELECT, FROM, WHERE y ORDER BY) de las
cuales solo las dos primeras son obligatorias.
Se debe mantener
el orden indicado. Es decir, primero SELECT, luego FROM, luego WHERE y luego
ORDER BY.
A continuación
se verán ejemplos de uso de este código general.
Visualizar una tabla entera (todos los campos y
todos los registros):
Ejemplo: “Visualizar la tabla Clientes”
SELECT *
FROM Clientes
Observa,
el * significa ver todos los campos. En el FROM se indica la tabla que se
quiere ver.
Visualizar algunos campos de una tabla (algunos
campos y todos los registros):
Ejemplo: “Visualizar ruc, nombre y direccion de
todos los clientes”
SELECT Clientes.ruc, Clientes.nombre, Clientes.direccion
FROM Clientes
Observa
como se indican los campos a visualizar en la cláusula SELECT. Se indica la
tabla y luego el nombre del campo, separados por un punto.
Visualizar solo aquellos registros de la tabla que
cumplan una condición:
Ejemplo: “Visualizar todos los campos de aquellos
trabajadores que cobren un sueldo superior a los 1000 soles”
SELECT *
FROM Trabajadores
WHERE Trabajadores.sueldo > 1000
Observa
el uso de la cláusula WHERE para aplicar una condición al resultado.
Ejemplo: “Visualizar nombres, apellidos y sueldo de
aquellos trabajadores que cobren un sueldo entre 4000 y 6000 soles”
SELECT Trabajadores.nombres, Trabajadores.apellidos, Trabajadores.sueldo
FROM Trabajadores
WHERE Trabajadores.sueldo BETWEEN 4000 AND 6000
Observa
el uso de BETWEEN – AND para indicar que
el sueldo esté entre 4000 y 6000.
NOTA: Más adelante en este ejercicio guiado se
muestran las distintas posibilidades que tenemos a la hora de indicar criterios
en la cláusula WHERE.
Visualizar el contenido de una tabla ordenado:
Ejemplo: “Visualizar la tabla de Trabajadores ordenada
por sueldo de menor a mayor”
SELECT *
FROM Trabajadores
ORDER BY Trabajadores.sueldo ASC
Observa
el uso de la cláusula ORDER BY para
indicar que se ordene por sueldo. La palabra ASC indica “ascendente” (de menor
a mayor).
Ejemplo: “Visualizar nombres, apellidos y sueldo de
los trabajadores ordenados por sueldos de mayor a menor”
SELECT Trabajadores.nombres, Trabajadores.apellidos, Trabajadores.sueldo
FROM Trabajadores
ORDER BY Trabajadores.sueldo DESC
Observa
el uso de DESC para indicar una ordenación descendente.
Ejemplo: “Visualizar nombres, apellidos y sueldo de
los trabajadores que cobren más de 1000 soles, ordenados por apellidos y nombres”
SELECT Trabajadores.nombres, Trabajadores.apellidos, Trabajadores.sueldo
FROM Trabajadores
WHERE Trabajadores.sueldo > 1000
ORDER BY Trabajadores.apellidos ASC, Trabajadores.nombres ASC
Observa
aquí como ordenar por dos campos, primero por apellidos y luego por nombres.
Esto significa que aquellos trabajadores que tengan los mismos apellidos serán
ordenados por los nombres.
Visualizar datos de varias tablas:
Ejemplo: “Visualizar todos los servicios. Interesa
que aparezca el nombre del trabajador que hizo el servicio, la fecha del
servicio realizado y el tipo de servicio”
SELECT Trabajadores.nombres, Servicios.fecha, Servicios.tipo
FROM Trabajadores, Servicios
WHERE Trabajadores.dni = Servicios.dni
Observa
aquí como se indica en la cláusula FROM las dos tablas de las que extraemos
datos. Es importante que te fijes también en como se unen ambas tablas
igualando en la cláusula WHERE el campo de unión de ambas tablas, que en el
ejemplo es el dni.
Ejemplo: “Visualizar todos los servicios. Interesa
que aparezca el nombre del trabajador que hizo el servicio, el tipo de servicio
y el nombre del cliente al que se le hizo el servicio”
SELECT Trabajadores.nombres, Servicios.tipo, Clientes.nombre
FROM Trabajadores, Servicios, Clientes
WHERE Trabajadores.dni = Servicios.dni AND Servicios.ruc =
Clientes.ruc
Observa
aquí una consulta sobre tres tablas, las cuales aparecen en el FROM. Es
necesario indicar en la cláusula WHERE los campos de unión. La tabla Trabajadores se relaciona con la tabla Servicios a través del campo dni,
y la tabla Servicios se relaciona
con Clientes a través del campo ruc.
Observa el uso de AND para unir varias condiciones.
Ejemplo: “Visualizar los servicios que hayan
costado más de 200 soles. Interesa ver la fecha del servicio, el nombre del
cliente y el coste ordenado por cantidad”
SELECT Servicios.fecha,
Clientes.nombre, Servicios.cantidad_cobrada
FROM Servicios,
Clientes
WHERE Servicios.ruc =
Clientes.ruc AND Servicios.cantidad_cobrada > 200
ORDER BY Servicios.cantidad_cobrada
Observa
como la cláusula WHERE contiene por un lado la condición de unión de ambas
tablas y por otro lado la condición que se busca (cantidad_cobrada > 200).
FORMA DE INDICAR CRITERIOS EN LA CLÁUSULA WHERE:
Se van a indicar
a continuación una serie de reglas que se deben seguir a la hora de crear
condiciones en la cláusula WHERE de una consulta SQL.
Operadores Relacionales:
Operador
|
Significado
|
Ejemplos
|
=
|
Igual que
|
WHERE cantidad_cobrada
= 200
WHERE tipo =
‘Limpieza’
WHERE fecha = ‘08-05-2006’
|
>
|
Mayor que
(para números)
Posterior a
(para fechas)
|
WHERE cantidad_cobrada
> 200
WHERE fecha
> ‘08-05-2006’
|
>=
|
Mayor o igual
que
(para números)
Esa fecha o
posterior
(para fechas)
|
WHERE cantidad_cobrada
>= 200
WHERE fecha
>= ‘08-05-2006’
|
<
|
Menor que
(para números)
Anterior a
(para fechas)
|
WHERE cantidad_cobrada
< 200
WHERE fecha
< ‘08-05-2006’
|
<=
|
Menor o igual
que
(para números)
Esa fecha o
anterior
(para fechas)
|
WHERE cantidad_cobrada
<= 200
WHERE fecha
<= ‘08-05-2006’
|
<>
|
Distinto de
(para números,
fechas y textos)
|
WHERE cantidad_cobrada
<> 200
WHERE fecha
<> ‘08-05-2006’
WHERE tipo
<> ‘Limpieza’
|
Between ... and
|
Entre valor1 y
valor2
(aplicable a
números y fechas)
|
WHERE cantidad_cobrada BETWEEN 100 AND 200
WHERE fecha BETWEEN ‘08-05-2006’ AND ‘01-12-2006’
|
Like ‘cadena%’
|
Que empiece
por cadena
(aplicable a
textos)
|
WHERE nombres LIKE
‘Jose%’
|
Like ‘%cadena’
|
Que termine
en cadena
(aplicable a
textos)
|
WHERE nombres LIKE
‘%Jose’
|
Like ‘%cadena%’
|
Que contenga cadena
(aplicable a
textos)
|
WHERE nombres
LIKE ‘%Jose%’
|
IS NULL
|
Que el campo
esté vacío
(aplicable a
números, textos, fechas)
|
WHERE telefono IS NULL
|
NOT ... IS NULL
|
Que el campo
no esté vacío
(aplicable a
números, textos, fechas)
|
WHERE NOT telefono IS NULL
|
Operadores Lógicos:
Operador
|
Significado
|
Ejemplos
|
AND
|
Verifica a que
se cumplan las dos condiciones que une.
|
WHERE cantidad_cobrada
> 200 AND tipo = ‘Limpieza’
(Debe
cumplirse que la cantidad sea mayor de 200 y que el tipo de servicio sea Limpieza)
|
OR
|
Basta con que
se cumpla una sola de las dos condiciones que une.
|
WHERE cantidad_cobrada
> 200 OR tipo = ‘Limpieza’
(Basta con que
la cantidad_cobrada sea mayor de 200, o que el tipo de servicio sea Limpieza
para que se cumpla la condición)
|
NOT
|
Si no se
cumple la condición, la condición global se cumple.
|
WHERE NOT cantidad_cobrada > 200
(Se cumple la
condición si la cantidad NO es mayor de 200)
|
Forma de indicar los
valores:
Como puedes
observar en los ejemplos anteriores, tendrás que tener en cuenta las siguientes
reglas para indicar valores:
Valores numéricos:
Indica los
valores numéricos tal cual, teniendo en cuenta que debes usar el punto decimal
cuando quieras representar decimales.
Ejemplo:
WHERE cantidad_cobrada
> 200.12
Valores de texto:
Los valores de
texto se indican rodeándolos entre comillas simples: ‘
Ejemplos:
WHERE
nombre = ‘Jose’
WHERE
direccion LIKE ‘%avenida%’
Valores de fecha:
Las fechas se
indican rodeándolas entre comillas simples ( ‘ ). Se debe tener en cuenta que las
fechas deben indicarse separadas por guiones – o barras / y que su formato debe
ser el siguiente:
Mes – Día –
Año
Ejemplos:
WHERE fecha
> ‘02-01-2005’
(Significa que
la fecha debe ser posterior al 01 de febrero de 2005)
WHERE fecha
<> ‘10-12-2006’
(Significa que
la fecha debe ser distinta del 12 de Octubre de 2006)
Forma de indicar los
campos:
Normalmente los
campos que se usan en el WHERE (y en otras cláusulas) se indican de la
siguiente forma:
Tabla.campo
Por ejemplo:
WHERE Trabajadores.sueldo
> 1000
(sueldo es un campo de la tabla Trabajadores)
Si tenemos la
seguridad de que no existe otro campo de otra tabla que se llame igual,
entonces podemos prescindir del nombre de la tabla.
Por ejemplo:
WHERE
sueldo > 1000
(No
existe otro campo sueldo en otras tablas de la consulta).
En el caso de
que el nombre del campo contenga espacios, entonces tendremos que rodear el
campo con corchetes.
Por ejemplo:
WHERE
[sueldo del trabajador] > 1000
(El campo se
llama sueldo del trabajador).
EJERCICIO GUIADO Nº 1
SQL
Server permite la creación de consultas usando el Lenguaje de Consulta
Estructurado - SQL. Esto nos permitirá practicar con dicho lenguaje SQL antes
de que se aplique posteriormente en nuestras aplicaciones Java.
En este
ejercicio guiado se explicará como crear una consulta usando el lenguaje SQL en
Microsoft SQL Server.
- Abre
el programa SQL server y ubica la base de datos AMANUVA.
- Vamos a crear una nueva consulta, por lo que
tendrás que hacer clic derecho en AMANUVA y elije la opción New
Query:
- El resultado es que aparece una pantalla en
blanco donde escribiremos la consulta SQL.
- Para empezar mostraremos el contenido de la
tabla Trabajadores. Para ello,
debes escribir la siguiente consulta SQL:
SELECT *
FROM
trabajadores
- Para ver el resultado de esta consulta debes pulsar la tecla F5 del teclado.
- El resultado es que verás en la parte inferior el
contenido de la tabla Trabajadores:
- Acabas de crear una consulta dentro de SQL Server usando el lenguaje SQL.
- Ahora modificaremos la consulta para que solo
nos muestre los campos nombres, apellidos, sueldo y fecha_entrada. Para ello tendrás que escribir la siguiente
consulta:
SELECT Trabajadores.nombres,
Trabajadores.apellidos, Trabajadores.sueldo, Trabajadores.fecha_entrada
FROM
Trabajadores
- Pulsa la tecla F5 para ver el resultado de la
consulta. Observa como ahora solo vemos los campos indicados:
- Ahora cambia la consulta para que quede así:
SELECT Trabajadores.nombres,
Trabajadores.apellidos, Trabajadores.sueldo, Trabajadores.fecha_entrada
FROM Trabajadores
WHERE Trabajadores.apellidos
LIKE 'be%'
Como ves, hemos añadido una cláusula WHERE,
para buscar solo aquellos trabajadores cuyo apellido comience con be.
- Comprueba el resultado:
- Vuelve a la zona de edición SQL. Vamos a
complicar un poco la consulta.
Supongamos que queremos ver los servicios que han realizado cada uno de
estos trabajadores. Para ello tendremos que incluir a la tabla Servicios en la consulta.
Supongamos que queremos ver el tipo de servicio realizado y el coste de
cada servicio. Por otro lado, de cada trabajador solo queremos ver los nombres
y los apellidos.
Hay que tener en cuenta que es necesario añadir en el WHERE una
condición que iguale el campo de unión entre la tabla Trabajadores y la tabla Servicios. Este campo de unión es el dni.
La consulta debe quedar así:
SELECT Trabajadores.nombres,
Trabajadores.apellidos, Servicios.tipo, Servicios.cantidad_cobrada
FROM Trabajadores,
Servicios
WHERE Trabajadores.apellidos
LIKE 'be%' AND Trabajadores.dni = Servicios.dni
(Observa la inclusión en el FROM de la tabla Servicios, y como se ha añadido una condición de unión entre la
tabla Trabajadores y Servicios
a través del campo dni).
- Visualiza el resultado de la consulta (pulsando
F5). Aparecerá lo siguiente:
Como ves, aparecen todos los servicios y los nombres y apellidos del
trabajador que hizo cada uno. Solo aparecen los servicios de los trabajadores
cuyo apellido comience en ‘be’.
- Vamos a complicar aún más la consulta. Esta
vez vamos a hacer que aparezca el nombre del cliente al que se le hizo el
servicio.
Esto implica la inclusión de una nueva tabla (Clientes) y la necesidad de relacionar la tabla Servicios con la tabla Clientes según el modelo E-R de esta
base de datos. El campo de unión es el ruc.
Modifica la consulta para que quede de la siguiente forma:
SELECT Trabajadores.nombres,
Trabajadores.apellidos, Servicios.tipo, Servicios.cantidad_cobrada, Clientes.nombre
FROM Trabajadores,
Servicios, Clientes
WHERE Trabajadores.apellidos
LIKE 'be%' AND Trabajadores.dni=Servicios.dni AND Servicios.ruc=Clientes.ruc
(Observa la inclusión de la tabla Clientes
en la cláusula FROM, y la adición de una nueva condición de unión, entre la
tabla Servicios y la tabla Clientes en la cláusula WHERE. Esta
condición de unión une ambas tablas usando el campo ruc).
- Veamos el resultado de la consulta:
Como se puede observar, aparece el listado de los servicios realizados
por los trabajadores cuyo apellido comience en ‘be’. Aparece información incluida en tres tablas distintas: Trabajadores, Servicios y Clientes.
- Añadiremos una última modificación a la
consulta y la finalizaremos.
Ahora estableceremos un orden. Concretamente, ordenaremos el resultado
de la consulta de mayor a menor según la cantidad cobrada por el servicio. Para
ello tendremos que añadir una cláusula ORDER BY:
SELECT Trabajadores.nombres,
Trabajadores.apellidos, Servicios.tipo, Servicios.cantidad_cobrada, Clientes.nombre
FROM Trabajadores,
Servicios, Clientes
WHERE Trabajadores.apellidos
LIKE 'be%' AND Trabajadores.dni=Servicios.dni AND Servicios.ruc=Clientes.ruc
ORDER BY Servicios.cantidad_cobrada
DESC
- Ejecuta la consulta y observa el resultado.
Ahora el listado de servicios aparece ordenado de forma descendente según la cantidad cobrada
por el servicio:
- Hemos finalizado con la consulta. Ciérrela y
guárdela. Puede ponerle de nombre Servicios
realizados por trabajadores be.
- Este ha sido un ejemplo de consulta realizada
en SQL Server usando el lenguaje de consulta estructurado - SQL. Este
lenguaje será vital para hacer que nuestra aplicación java manipule la
base de datos correspondiente.
NOTA:
En
Internet se pueden encontrar múltiples manuales sobre SQL. Se recomienda buscar
información sobre el tema para ampliar los conocimientos aquí expuestos.
La
sintaxis del lenguaje de consulta estructurado - SQL puede variar según el
programa de base de datos que se use. En este ejercicio guiado se ha usado la
sintaxis del SQL incluido en el programa SQL Server. Tenga en cuenta que puede
haber variaciones entre este SQL y el incluido en otro gestor de base de datos,
aunque estas variaciones son mínimas.
CONCLUSIONES:
El lenguaje de consulta estructurado - SQL permite
manipular la base de datos.
A través de este lenguaje, se pueden crear órdenes que
permitan:
- Introducir nuevos datos en la base de datos.
- Eliminar datos de la base de datos.
- Modificar datos de la base de datos.
- Realizar consultas sobre la base de datos.
Para realizar consultas en la base de datos usando
el lenguaje SQL es necesario usar instrucciones SELECT, las cuales tienen la
siguiente forma general:
SELECT campos a visualizar
FROM tablas a las que pertenecen dichos campos
WHERE condiciones a cumplir, condiciones de unión
de tablas
ORDER BY campos por los que se ordena
El programa SQL Server permite crear consultas
usando el lenguaje SQL, por lo que puede ser una buena herramienta para
practicar este lenguaje.
Nuestro programa de bases de datos java, usará este
lenguaje para manipular la base de datos correspondiente.
No hay comentarios.:
Publicar un comentario