Anda di halaman 1dari 11

Leccin 2 - Consultas I (SQL SELECT

FROM WHERE)

Si este fuese un manual de SQL, o alguno de los muchos cursos SQL que se pueden encontrar
por la web, ahora tocara abordar la instalacin de un SGBD para posteriormente crear una BD
con algunas tablas de ejemplo con las que empezar a trabajar. Pero este curso pretende ser
diferente. Si ahora se expusiera lo antes mencionado, corremos el riesgo de que usted pierda
el inters por la materia, adems, el SQL no incluye la instalacin del SGBD ni la creacin de
tablas. Si usted, por ejemplo, desea aprender electricidad, a caso ha de fabricar bombillas,
cables y el generador elctrico con el que poder trabajar? Obviamente no.

En este curso la BD y las tablas con las que trabajar las tiene accesibles mediante el banco de
pruebas, as que empezaremos directamente por lo que ser la tnica de este curso: las
consultas SQL, que es digamos donde est la miga, y no ser hasta el final del curso que se
ver la creacin de tablas y como modificar la informacin. A fin de cuentas no tiene
demasiado sentido aprender a crear tablas cuando aun no sabe que hacer con ellas.

Consultas SQL

Abordemos las consultas SQL con un caso prctico. Sobre la tabla EMPLEADOS se plantea la
siguiente cuestin:

Qu empleados tienen un salario mayor a 1350?

La respuesta es simple: Jos y Carlos tiene un salario mayor a 1350, pero si tuvisemos 500
empleados nos llevara ms tiempo responder, y al final tampoco tendramos la certeza de no
habernos equivocado. El SQL nos permite responder estas preguntas de forma rpida y fiable,
salvo error al construir la consulta o errores en los propios datos.

Vamos pues a construir la consulta que nos permita responder a esta cuestin.

Preguntas de Construccin
Para construir una consulta SQL debemos hacernos como mnimo tres preguntas:

Primero hemos de preguntarnos: qu datos nos estn pidiendo?


En este caso, el nombre y los apellidos de los empleados.

Lo siguiente que nos preguntamos es: dnde estn esos datos?


Obviamente estn en la tabla empleados.

Y por ltimo: qu requisitos deben cumplir los registros?


En este caso, que el sueldo del empleado sea superior a 1350.

Vamos a suponer por un momento que el SGBD, que es quien intermedia entre el usuario y la
BD, fuese una persona; la BD un archivo de papel, y el jefe pide lo siguiente: "Necesito saber
qu empleados cobran ms de 1350 euros? Usted, que conoce bien el archivo(tablas) y que
datos contiene la ficha de un empleado (campos de la tabla EMPLEADOS), mentalmente se
hace las preguntas de construccin y le dice a su ayudante que siempre espera ordenes
concretas:

Selecciname el NOMBRE y los APELLIDOS


del archivo EMPLEADOS
cuyo SALARIO sea mayor a 1350

El ayudante sirve la peticin y se la entrega para que finalmente usted se la facilite a su jefe.
Que papel ocuparan hoy en una empresa moderna? El jefe sigue siendo el jefe, eso est
claro, pero usted ha pasado a ser el informtico, y su ayudante el SGBD.

Sintaxis SQL
En SQL la forma de operar es parecida, esta informacin se obtiene mediante la siguiente
consulta:

CDIGO: SELECCIONAR TODO

select NOMBRE , APELLIDOS


from EMPLEADOS
where SALARIO > 1350

llevar cdigo al banco de pruebas

Obsrvese que en la consulta los nombres de los objectos de base de datos (tabla y campos) los
escribimos en maysculas, mientras que para las palabras reservadas de la consulta SQL (select,
from, where) lo hacemos en minsculas; esto tiene nicamente un propsito esttico, con
intencin de hacer el cdigo ms ordenado y legible. Puede no ser as siempre, dependiendo del
SGBD y/o del sistema operativo(windows, linux, ...) donde trabaje el SGBD, este puede ser
sensible a maysculas y minsculas.

Y el resultado que nos devuelve el SGBD es:


Parecido a lo que nos entregara nuestro ayudante en el archivo, una lista con la respuesta o
solucin a la cuestin planteada. Como ve, tanto el modo de solicitar la informacin al SGBD,
sea clsico o informatizado, como el modo en que este nos muestra la informacin, son muy
similares, al menos en este caso. No podemos afirmar lo mismo del tiempo en que uno y otro
tardan en facilitarnos la informacin solicitada.

Forma general

En general una consulta SQL simple tendr la siguiente forma:

CDIGO: SELECCIONAR TODO

select CAMPOS(separados por comas)


from TABLA
where CONDICION

El SQL permite al usuario desentenderse de como el SGBD ejecuta la consulta, al igual que
usted se desentiende de como su ayudante en el archivo de papel se las ingenia para
facilitarle la informacin. Usted esperar pacientemente tras el mostrador a que su ayudante
prepare su pedido y le entregue los datos. Dicho de otro modo, basta con saber como pedir la
informacin y no como proceder a reunirla.
***

Resumen
Hemos visto como construir una consulta SQL simple y concreta, que nos da la solucin a una
cuestin concreta.

Se ha definido la forma general de una consulta SQL simple:

CDIGO: SELECCIONAR TODO

select CAMPOS(separados por comas)


from TABLA
where CONDICION

Destacar tambin la utilidad de las preguntas de construccin para ayudarnos a construir la


consulta.
1. Qu datos nos piden?
2. Dnde estn los datos?
3. Qu requisitos debe cumplir los registros?
En una empresa moderna un informtico cumple la funcin de encargado del archivo, y sus
ayudantes son hoy los sistemas informatizados.
***
Ejercicio
Intente hallar una consulta que devuelva el nombre, apellidos y la fecha de nacimiento de
aquellos empleados que cobren ms de 1350 euros.

Puede probar su funcionamiento en el banco de pruebas

Sugerencia: si enva el cdigo SQL que sigue a este prrafo desde el banco de pruebas al
SGBD, este le reportar la lista de campos de la tabla EMPLEADOS bajo una columna titulada
Fied(termino en ingls que significa campo). Esto le puede venir bien para tener presente los
nombres de los campos de la tabla EMPLEADOS mientras desarrolla el ejercicio.

CDIGO: SELECCIONAR TODO

describe EMPLEADOS

La siguiente sentencia ms simplificada es equivalente:

CDIGO: SELECCIONAR TODO

desc EMPLEADOS

llevar cdigo al banco de pruebas

Fundamentos de SQL: Cmo


realizar consultas simples con
SELECT
Escrito por campusMVP el 23 junio 2014 09:00

Quieres programar apps con Swift, y lo sabes... Aprende con nosotros!


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%

o El nombre acaba por A: Nombre LIKE %A

o El nombre contiene la letra A: Nombre LIKE %A%

o El nombre empieza por A y despus contiene un solo carcter cualquiera: Nombre

LIKE A_
o 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

o Clientes nacidos entre 1970 y 1979: FechaNac BETWEEN 19700101 AND

19791231

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