miércoles, 24 de agosto de 2016

042.- Base De Datos - Lenguaje de Consulta Estructurado - SQL - Java y NetBeans

Lenguaje de Consulta SQL

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.

  1. Abre el programa SQL server y ubica la base de datos AMANUVA.

  1. Vamos a crear una nueva consulta, por lo que tendrás que hacer clic derecho en AMANUVA y elije la opción New Query:

  1. El resultado es que aparece una pantalla en blanco donde escribiremos la consulta SQL.

  1. Para empezar mostraremos el contenido de la tabla Trabajadores. Para ello, debes escribir la siguiente consulta SQL:

SELECT *
FROM trabajadores



  1. Para ver el resultado de esta consulta debes pulsar la tecla F5 del teclado.

  1. El resultado es que verás en la parte inferior el contenido de la tabla Trabajadores:



  1. Acabas de crear una consulta dentro de SQL Server usando el lenguaje SQL.

  1. 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

  1. Pulsa la tecla F5 para ver el resultado de la consulta. Observa como ahora solo vemos los campos indicados:



  1. 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.

  1. Comprueba el resultado:



  1. 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).


  1. 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’.


  1. 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).


  1. 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.


  1. 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



  1. 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:



  1. Hemos finalizado con la consulta. Ciérrela y guárdela. Puede ponerle de nombre Servicios realizados por trabajadores be.


  1. 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