Fundamentos de SQL: Cmo
realizar consultas simples con
SELECT
Escrito por campusMVP el 23 junio 2014 09:00
Necesitas dominar SQL Server. Y lo sabes...
En un post anterior veamos qu es el lenguaje SQL y sus diferentes
subconjuntos de instrucciones. Aprendimos tambin losfundamentos de diseo
de una base de datos relacional. Hoy vamos a aprender los fundamentos
de consultas simples de datos con SELECT.
Operaciones bsicas de manipulacin de datos en SQL
Como hemos visto, las instrucciones DML (Data Manipulation Language
Lenguaje de Manipulacin de Datos) trabajan sobre los datos almacenados en
nuestro SGBD, permitiendo consultarlos o modificarlos.
En general a las operaciones bsicas de manipulacin de datos que podemos
realizar con SQL se les denominaoperaciones CRUD (de Create, Read, Update
and Delete, o sea, Crear, Leer, Actualizar y Borrar, sera CLAB en espaol, pero
no se usa). Lo vers utilizado de esta manera en muchos sitios, as que
aprndete ese acrnimo.
Hay cuatro instrucciones para realizar estas tareas:
INSERT: Inserta filas en una tabla. Se corresponde con la C de
CRUD.
SELECT: muestra informacin sobre los datos almacenados en la base
de datos. Dicha informacin puede pertenecer a una o varias tablas.
Es la R.
UPDATE: Actualiza informacin de una tabla. Es, obviamente, la U.
DELETE: Borra filas de una tabla. Se corresponde con la D.
Consulta de datos
Ahora nos vamos a centrar en la R de CRUD, es decir, en cmo recuperar la
informacin que nos interesa de dentro de una base de datos, usando
para ello el lenguaje de consulta o SQL. Ya nos preocuparemos luego de cmo
llegamos a introducir los datos primeramente.
Para realizar consultas sobre las tablas de las bases de datos disponemos de la
instruccin SELECT. Con ella podemos consultar una o varias tablas. Es sin
duda el comando ms verstil del lenguaje SQL.
Existen muchas clusulas asociadas a la sentencia SELECT (GROUP BY, ORDER,
HAVING, UNION). Tambin es una de las instrucciones en la que con ms
frecuencia los motores de bases de datos incorporan clusulas adicionales al
estndar, que es el que veremos aqu.
BONUS: Consigue tu ebook recopilatorio GRATIS >> Hroe en
SQL: manual de iniciacin
Vamos a empezar viendo las consultas simples, basadas en una sola tabla.
Veremos cmo obtener filas y columnas de una tabla en el orden en que nos
haga falta.
El resultado de una consulta SELECT nos devuelve una tabla lgica. Es decir,
los resultados son una relacin de datos, que tiene filas/registros, con una serie
de campos/columnas. Igual que cualquier tabla de la base de datos. Sin
embargo esta tabla est en memoria mientras la utilicemos, y luego se
descarta. Cada vez que ejecutamos la consulta se vuelve a calcular el resultado.
La sintaxis bsica de una consulta SELECT es la siguiente (los valores
opcionales van entre corchetes):
SELECT [ ALL / DISTINC ] [ * ] / [ListaColumnas_Expresiones] AS
[Expresion]
FROM Nombre_Tabla_Vista
WHERE Condiciones
ORDER BY ListaColumnas [ ASC / DESC ]
A continuacin analizaremos cada una de las partes de la consulta para
entenderla mejor.
SELECT
Permite seleccionar las columnas que se van a mostrar y en el orden en que lo
van a hacer. Simplemente es la instruccin que la base de datos interpreta
como que vamos a solicitar informacin.
ALL / DISTINCT
ALL es el valor predeterminado, especifica que el conjunto de resultados puede
incluir filas duplicadas. Por regla general nunca se utiliza.
DISTINCT especifica que el conjunto de resultados slo puede incluir filas
nicas. Es decir, si al realizar una consulta hay registros exactamente iguales
que aparecen ms de una vez, stos se eliminan. Muy til en muchas
ocasiones.
Nombres de campos
Se debe especificar una lista de nombres de campos de la tabla que nos
interesan y que por tanto queremos devolver. Normalmente habr ms de uno,
en cuyo caso separamos cada nombre de los dems mediante comas.
Se puede anteponer el nombre de la tabla al nombre de las columnas,
utilizando el formato Tabla.Columna. Adems de nombres de columnas, en esta
lista se pueden poner constantes, expresiones aritmticas, y funciones, para
obtener campos calculados de manera dinmica.
Si queremos que nos devuelva todos los campos de la tabla utilizamos el
comodn * (asterisco).
Los nombres indicados deben coincidir exactamente con los nombre de los
campos de la tabla, pero si queremos que en nuestra tabla lgica de resultados
tengan un nombre diferente podemos utilizar:
AS
Permite renombrar columnas si lo utilizamos en la clusula SELECT, o renombrar
tablas si lo utilizamos en la clusula FROM. Es opcional. Con ello podremos crear
diversos alias de columnas y tablas. Enseguida veremos un ejemplo.
FROM
Esta clusula permite indicar las tablas o vistas de las cuales vamos a obtener
la informacin. De momento veremos ejemplos para obtener informacin de
una sola tabla.
Como se ha indicado anteriormente, tambin se pueden renombrar las tablas
usando la instruccin AS.
WHERE
Especifica la condicin de filtro de las filas devueltas. Se utiliza cuando no se
desea que se devuelvan todas las filas de una tabla, sino slo las que cumplen
ciertas condiciones. Lo habitual es utilizar esta clusula en la mayora de las
consultas.
Condiciones
Son expresiones lgicas a comprobar para la condicin de filtro, que tras su
resolucin devuelven para cada fila TRUE o FALSE, en funcin de que se
cumplan o no. Se puede utilizar cualquier expresin lgica y en ella
utilizar diversos operadorescomo:
> (Mayor)
>= (Mayor o igual)
< (Menor)
<= (Menor o igual)
= (Igual)
<> o != (Distinto)
IS [NOT] NULL (para comprobar si el valor de una columna es o no es
nula, es decir, si contiene o no contiene algn valor)
Se dice que una columna de una fila es NULL si est completamente vaca. Hay
que tener en cuenta que si se ha introducido cualquier dato, incluso en un
campo alfanumrico si se introduce una cadena en blanco o un cero en un
campo numrico, deja de ser NULL.
LIKE: para la comparacin de un modelo. Para ello utiliza los
caracteres comodn especiales: % y _. Con el primero indicamos
que en su lugar puede ir cualquier cadena de caracteres, y con el
segundo que puede ir cualquier carcter individual (un solo carcter).
Con la combinacin de estos caracteres podremos obtener mltiples
patrones de bsqueda. Por ejemplo:
o
El nombre empieza por A: Nombre LIKE A%
El nombre acaba por A: Nombre LIKE %A
El nombre contiene la letra A: Nombre LIKE %A%
El nombre empieza por A y despus contiene un solo
carcter cualquiera: Nombre LIKE A_
El nombre empieza una A, despus cualquier carcter, luego
una E y al final cualquier cadena de caracteres:Nombre LIKE
A_E%
BETWEEN: para un intervalo de valores. Por ejemplo:
o
Clientes entre el 30 y el 100: CodCliente BETWEEN 30 AND
100
Clientes nacidos entre 1970 y 1979: FechaNac
19700101 AND 19791231
BETWEEN
IN( ): para especificar una relacin de valores concretos. Por ejemplo:
Ventas de los Clientes 10, 15, 30 y 75:CodCliente IN(10, 15, 30,
75)
Por supuesto es posible combinar varias condiciones simples de los operadores
anteriores utilizando los operadores lgicosOR, AND y NOT, as como el uso de
parntesis
para
controlar
la
prioridad
de
los
operadores
(como
en
matemticas). Por ejemplo: (Cliente = 100 AND Provincia = 30) OR
Ventas > 1000 que sera para los clientes de las provincias 100 y 30 o
cualquier cliente cuyas ventas superen 1000.
ORDER BY
Define el orden de las filas del conjunto de resultados. Se especifica el campo o
campos (separados por comas) por los cuales queremos ordenar los resultados.
ASC / DESC
ASC es el valor predeterminado, especifica que la columna indicad en la
clusula ORDER BY se ordenar de forma ascendente, o sea, de menor a mayor.
Si por el contrario se especifica DESC se ordenar de forma descendente (de
mayor a menor).
Por ejemplo, para ordenar los resultados de forma ascendente por ciudad, y los
que sean de la misma ciudad de forma descendente por nombre, utilizaramos
esta clusula de ordenacin:
ORDER BY Ciudad, Nombre DESC
Como a la columna Ciudad no le hemos puesto ASC o DESC se usar para la
misma el valor predeterminado (que es ASC)
OJO: Aunque al principio si an no se est habituado, pueda dar la impresin de
que se ordena por ambas columnas en orden descendente. Si es eso lo que
queremos deberemos escribir ORDER BY Ciudad DESC, Nombre DESC
Algunos ejemplos
Para terminar este repaso a las consultas simples practicarlas un poco, veamos
algunos ejemplos con la base de datos Northwind en SQL Server:
- Mostrar todos los datos de los Clientes de nuestra empresa:
SELECT * FROM Customers
- Mostrar apellido, ciudad y regin (LastName, city, region) de los empleados de
USA (ntese el uso de AS para darle el nombre en espaol a los campos
devueltos):
SELECT E.LastName AS Apellido, City AS Ciudad, Region
FROM Employees AS E
WHERE Country = USA
- Mostrar los clientes que no sabemos a qu regin pertenecen (o sea, que no
tienen asociada ninguna regin) :
SELECT * FROM Customers WHERE Region IS NULL
- Mostrar las distintas regiones de las que tenemos algn cliente, accediendo
slo a la tabla de clientes:
SELECT DISTINCT Region FROM Customers WHERE Region IS NOT NULL
- Mostrar los clientes que pertenecen a las regiones CA, MT o WA, ordenados
por regin ascendentemente y por nombre descendentemente.
CODE SELECT * FROM Customers WHERE Region IN(CA, MT, WA)
ORDER BY Region, CompanyName DESC
- Mostrar los clientes cuyo nombre empieza por la letra W:
SELECT * FROM Customers WHERE CompanyName LIKE W%
- Mostrar los empleados cuyo cdigo est entre el 2 y el 9:
SELECT * FROM Employees WHERE EmployeeID BETWEEN 2 AND 9
- Mostrar los clientes cuya direccin contenga ki:
SELECT * FROM Customers WHERE Address LIKE %ki%
- Mostrar las Ventas del producto 65 con cantidades entre 5 y 10, o que no
tengan descuento:
SELECT * FROM [Order Details] WHERE (ProductID = 65 AND Quantity
BETWEEN 5 AND 10) OR Discount = 0
Nota: En SQL Server, para utilizar nombres de objetos con caracteres
especiales se deben poner entre corchetes. Por ejemplo en la consulta anterior
[Order Details] se escribe entre corchetes porque lleva un espacio en blanco en
su nombre. En otros SGBDR se utilizan comillas dobles (Oracle, por ejemplo:
Order Details) y en otros se usan comillas simples (por ejemplo en MySQL).