Leyendo registros de una tabla

Consultas simples

Select

Con select le indicamos a la base de datos que deseamos hacer una consulta de cualquier tipo a la base de datos sin necesidad de ningún procedimiento. La sentencia select es muy amplia en sus cláusulas y variantes permitiendo la capacidad de mostrar las consultas complejas en poco tiempo de una base de datos.

La sentencia select obtiene las filas de la base de datos y nos permite realizar la selección de una o varias filas o columnas de una o varias tablas.

La sintaxis es:

o

  • select.- Esta cláusula es la más potente de SQL ya que admite multitud de variantes. Se usa para listar columnas de las tablas que se desean ver en el resultado de una consulta.
  • columna1, columna2, columnax.- nombres de las columnas o campos cuyos datos queremos obtener. Con el asterisco (*) le decimos a la tabla que seleccione todas las columnas.
  • from.- Esta clausula nos lleva hacia la tabla que queremos consultar. Listando las tablas que queremos analizar listando las columnas enunciadas en select.
  • nombre_tabla.- Tabla desde donde leeremos los datos.

Un ejemplo, abriremos nuestra tabla CLIENTES para hacer una consulta:

Más o menos podemos traducirlo como “Busca la información de todos los campos de la tabla CLIENTES“. Nuestro DB BROWSE for SQLITE mostrará la tabla completa (Depende de la configuración de la pantalla DB BROWSE for SQLITE mostrará la tabla parcialmente por este motivo personalmente he recurrido a un montaje para mostrar la tabla completa):

Vamos a consultar un conjunto de datos como son NOMBRE, APELLIDOS y DNI:

Mostraría la salida:

Distinct

Como su nombre indica, esta sentencia nos permite calcular los diferentes valores de un conjunto de columnas.

La sintaxis es:

  • select distinct.- Indicamos a la base de datos que buscaremos valores únicos.
  • columna1, columnax.- nombres de las columnas o campos cuyos datos queremos obtener. Con el asterisco (*) le decimos a la tabla que seleccione todas las columnas.
  • nombre_tabla.- Tabla desde donde leeremos los datos.

Ejemplo para obtener una lista con los nombres de nuestros clientes:

Mostrará solo los nombres de los clientes.

Podemos hacer una consulta desde un conjunto de campos:

Order by

Esta clausula establece que la columna o columnas deberán ser ordenadas.

Mostrará los nombres y apellidos ordenados por NOMBRE en modo ascendente (por defecto).

 Mostrará los nombres y apellidos ordenados por NOMBRE en modo descendente.

En este último ejemplo vemos que no hay diferencia entre poner la clausula ASC o no ponerla, ya que sin ASC el criterio por defecto será el orden ascendente.

Limit

Indicamos a la base de datos que solo queremos recuperar los primeros registros de una consulta. Su sintaxis es:

  • select.- Lista las columnas de las tablas que se desean ver en el resultado de una consulta.
  • limit.- Indicamos a la base de datos un límite de registros que queremos ver.
  • numero_registros.- La cantidad de registros que mostrará la consulta.

Un ejemplo, queremos mostrar los tres clientes con más edad:

Count

Esta función aritmética nos permite contar el número de filas de una tabla determinada. Las variadas sintaxis de esta función son:

Donde:

  • select.- Se usa para listar columnas de las tablas que se desean ver en el resultado de una consulta.
  • count
    1. count (‘nombre_columna’).- cuenta las filas del nombre_columna que contengan el valor de la columna especificada. O sea las columnas que no sean NULL.
    2. count (*).- Directamente cuenta las filas.
    3. count (distinct nombre_columna).- Cuenta los valores que son diferentes ignorando las filas que son NULL.
  • from.- Esta clausula nos lleva hacia la tabla que queremos consultar. Listando las tablas que queremos analizar listando las columnas enunciadas en select. En este caso nuestra tabla CLIENTES.

Un ejemplo representativo de cada opción:

Nos mostraría el número de clientes de nuestra base de datos.

Mostraría el número de clientes con DNI.

Mostrará el número de clientes de nuestra tabla obviando los repetidos gracias a distinct.

  • Desde nuestra base de datos CLIENTES. Escribe los que tengan el DNI.
  • Averigua las edades de nuestros clientes.
  • Mostrar Nombres y Apellidos y fecha de nacimiento de nuestros clientes.

Where

Esta clausula establece los criterios de selección de ciertas filas que serán listadas las columnas enunciadas desde select. La clausula where establece los criterios de selección de ciertas filas en el resultado de la consulta gracias a las condiciones de búsqueda. Si se omite, el resultado de la búsqueda será todas las filas de la tabla enunciada en from.

Veamos unos ejemplos con nuestra tabla CLIENTES:

Mostrará los registros de nuestros clientes que se llamen Antonio. O lo que es lo mismo “Busca información de los CLIENTES con NOMBRE Antonio“.

Comparaciones simples

Lo más habitual sería buscar filas en donde una o varias columnas cumplan una condición determinada de filtrado. Por ejemplo:

  • Clientes con un DNI determinado
  • Productos con según que importe.
  • Libros por categorías.

Para construir esto SQL dispone de los siguientes operadores simples:

Ten en cuenta que…

  • las cadenas de texto deben ir entre comillas simples (‘ ‘).
  • las comparaciones (“Mayor que”, “Menor que”, etc, …) numéricas se hacen de forma natural, es decir, los números menores son negativos y los mayores positivos.
  • la base de datos tiene en cuenta si un texto está en mayúscula o minúscula por lo que ANTONIO es diferente a Antonio.
  • con estos operadores los valores NULL (nulos) quedan descartados, así que solo se mostrarán los datos que contengan algún valor.

Según nuestra tabla CLIENTES que hemos creado, haz las siguientes consultas:

  • Busca el nombre de un cliente cuyo DNI sea  78665424D.
  • DNI de los clientes cuyo DNI sea diferente de 78665424D.
  • Datos de todos los CLIENTES con el nombre de Silvia.
  • Clientes con más de 35 años.
  • Clientes con más de 10 puntos ordenados de mayor a menor.

Between

Este operador testea si un valor se encuentra entre un valor especificado. Equivale a los operadores <= y >=.

Donde:

  • nombre_columna.- Columna numérica cuyo valor vamos a comparar.
  • between.- Habilita la selección de un rango…
  • valor1.- …valor mínimo que puede tener la columna para cumplir la condición.
  • and.- operador de condición.
  • valor2.- Valor máximo de la columna.

Veamos un ejemplo:

Este ejemplo no cumple una premisa esencial y es que el valor 1 tiene que ser menor que el valor2, con lo cual la base de datos no devolverá ningún dato.

Ahora sí, nos muestra los clientes con edades comprendidas entre los 32 y los 45 años.

In

Esta clausula nos permite buscar un conjunto de valores tanto numéricos como de texto. Su sintaxis es:

Donde:

  • columna.- Columna cuyo valor vamos a buscar.
  • in.- Busca un conjunto de valores entre comillas simples (‘ ‘) si se trata de texto y separados por coma (,).
  • (valor1,valor2).- Conjunto de valores sobre el que se realiza la búsqueda.

Un ejemplo:

Resultado de la consulta:

Operadores lógicos

Para entender los operadores lógicos veamos la tabla de la verdad:

El operador de condición “x and y” hace que en el criterio de búsqueda se cumplan las dos condiciones “x e y“, mientras que el operador “x or y” basta con que se cumpla una de las dos condiciones “x o y“.

Un ejemplo con los operadores and y or:

En este ejemplo le estamos pidiendo a la tabla CLIENTES que muestre los campos NOMBRE y FECHA_NAC mientras que se cumplan las dos condiciones, que el NOMBRE sea Antonio y la FECHA_NAC sea 1968-06-05.

Segundo ejemplo:

En esta consulta estamos pidiendo a la base de datos CLIENTES que nos muestre los campos NOMBRE y EDAD que coincida, el NOMBRE con Roberto o la EDAD que sean 25 años.

Is null

Este operador devuelve el valor booleano TRUE  si el operador es null, o FALSE si no lo es. Es muy importante usar esta expresión cuando queramos evaluar si una expresión es nula ya que si utilizamos las comparaciones normales nos daría un valor erróneo. Su sintaxis es:

Donde:

  • columna.- Es la columna donde haremos la comparación.
  • null.- Muestra los campos en los que no se introdujeron datos.

Ejemplo:

Muestra el NOMBRE de los CLIENTES que no tienen DNI.

Not

Invierte el sentido de una condición, por eso es indispensable que se use en combinación con un operador simple “<, >, =, …”, complejo “in, between, is null” o lógico “and, or“.

Veamos unos ejemplos utilizando nuestra base de datos CLIENTES:

Con operador not:

Queremos consultar el NOMBREAPELLIDOS y EDAD de nuestra base de datos CLIENTES, que tengan 32 años;  el operador lógico not contradice lo que dice el operador simple “!=” que dice que sea distinto a 32..

Sin operador not:

Sin el operador lógico not, nos muestra los registros que sean distintos a 32.

Un ejemplo con el operador between:

Muestra la EDAD comprendida entre 18 y 32 años.

Ejemplo con not between:

Todo lo contrario del ejemplo de arriba, aquí nos muestra la EDAD que sea distinta a las comprendidas entre los 18 y 32 años.

Ejemplo con is null:

En este ejemplo nos muestra los CLIENTES que no tienen el DNI.

Ejemplo is not null:

Como vemos is not contradice el ejemplo anterior mostrando el DNI de los clientes que tienen D.N.I.

Ejemplo in:

Consultamos nuestra tabla CLIENTES para que muestre los DNI de Antonio y Silvia.

Ejemplo con not in:

Esta tabla muestra lo contrario del ejemplo anterior mostrando los NOMBRES, APELLIDOS y DNI de los CLIENTES que no se llamen ni Antonio ni Silvia.

Usando paréntesis “( )”

Lo veremos con un ejemplo:

Busca los clientes que se llamen Roberto y tengan 32 años de EDAD o que no se llamen Roberto y sean mayores de 40 años.

Es básico utilizar los paréntesis en todas las operaciones en las que se incluyan operadores lógicos and y or ya que de lo contrario podría tener resultados inesperados.

Si escribimos omitiendo los paréntesis:

No mostrará ningún tipo de dato, esto es debido a que el operador not solo afecta a la primera condición, es decir, es como si escribiéramos:

Busca los clientes que no se llamen Roberto y tengan 27 años.

Para terminar esta sección unos ejercicios haber como te desenvuelves:

  • Muestra los clientes mayores de 30 años.
  • Mostrar los clientes que se llamen Laura o Hector, o que no se llamen ni Hector ni Laura y además tengan el número de teléfono 665452132.
  • Clientes con el DNI 03498734R, número de socio mayor de 1000 y mayor de 18 años.
  • Clientes cuya edad este comprendida entre los 32 y 45 años.