SQL
SQL
SQL
El diseño de una base de datos consiste en definir la estructura de los datos que
debe tener un sistema de información determinado. Para ello se suelen seguir por
regla general unas fases en el proceso de diseño, definiendo para ello el modelo
conceptual, el lógico y el físico. (Si estás empezando con SQL, recuerda que todo
esto lo tratamos en nuestro curso de SQL y con la ventaja de poder resolver dudas
con un tutor especialista)
El modelo relacional
En el modelo relacional las dos capas de diseño conceptual y lógico, se parecen
mucho. Generalmente se implementan mediante diagramas de
Entidad/Relación (modelo conceptual) y tablas y relaciones entre éstas (modelo
lógico). Este es el modelo utilizado por los sistemas gestores de datos más habituales
(SQL Server, Oracle, MySQL...).
Nota: Aunque mucha gente no lo sabe, a las bases de datos relaciones se les
denomina así porque almacenan los datos en forma de “Relaciones” o listas de
datos, es decir, en lo que llamamos habitualmente “Tablas”. Muchas personas se
piensan que el nombre viene porque además las tablas se relacionan entre sí
utilizando claves externas. No es así, y es un concepto que debemos tener
claro. (Tabla = Relación).
Esta base de datos representa un sistema sencillo de gestión de pedidos para una
empresa ficticia. Existen conceptos que hay que manejar como: proveedores,
empleados, clientes, empresas de transporte, regiones geográficas, y por supuesto
pedidos y productos.
El diseño conceptual de la base de datos para manejar toda esta información se
puede ver en la siguiente figura, denominada diagrama Entidad/Relación o
simplemente diagrama E-R:
Como vemos existen tablas para representar cada una de estas entidades del
mundo real: Proveedores (Suppliers), Productos, Categorías de
productos, Empleados, Clientes, Transportistas (Shippers), y Pedidos (Orders) con
sus correspondientes líneas de detalle (Order Details).
Además están relacionadas entre ellas de modo que, por ejemplo, un producto
pertenece a una determinada categoría (se relacionan por el campo CategoryID) y
un proveedor (SupplierID), y lo mismo con las demás tablas.
Cada tabla posee una serie de campos que representan valores que queremos
almacenar para cada entidad. Por ejemplo, un producto posee los siguientes
atributos que se traducen en los campos correspondientes para almacenar su
información: Nombre (ProductName), Proveedor (SupplierID, que identifica al
proveedor), Categoría a la que pertenece (CategoryID), Cantidad de producto por
cada unidad a la venta (QuantityPerUnit), Precio unitario (UnitPrice), Unidades que
quedan en stock (UnitsInStock), Unidades de ese producto que están actualmente
en pedidos (UnitsOnOrder), qué cantidad debe haber para que se vuelva a solicitar
más producto al proveedor (ReorderLevel) y si está descatalogado o no
(Discontinued).
Los desarrolladores que dominan SQL están muy solicitados ¡conviértete en uno de
ellos! »
Los campos marcados con "PK" indican aquellos que son claves primarias, es decir,
que identifican de manera única a cada entidad. Por ejemplo, ProductID es el
identificador único del producto, que será por regla general un número entero que
se va incrementando cada vez que introducimos un nuevo producto (1, 2, 3, etc..).
Los campos marcados como "FK" son claves foráneas o claves externas. Indican
campos que van a almacenar claves primarias de otras tablas de modo que se
puedan relacionar con la tabla actual. Por ejemplo, en la tabla de productos el
campo CategoryID está marcado como "FK" porque en él se guardará el identificador
único de la categoría asociada al producto actual. En otras palabras: ese campo
almacenará el valor de la clave primaria (PK) de la tabla de categorías que identifica
a la categoría en la que está ese producto.
Los campos marcados con indicadores que empiezan por "I" (ej: "I1") se refieren
a índices. Los índices generan información adicional para facilitar la localización más
rápida de registros basándose en esos campos. Por ejemplo, en la tabla de
empleados (Employees) existe un índice "I1" del que forman parte los campos
Nombre y Apellidos (en negrita además porque serán también valores únicos) y que
indica que se va a facilitar la locación de los clientes mediante esos datos. También
tiene otro índice "I2" en el campo del código postal para localizar más rápidamente
a todos los clientes de una determinada zona.
Los campos marcados con indicadores que empiezan con "U" (por ejemplo U1) se
refieren a campo que deben ser únicos. Por ejemplo, en la tabla de categorías el
nombre de ésta (CategoryName) debe ser único, es decir, no puede haber -
lógicamente- dos categorías con el mismo nombre.
En este caso hemos creado cada tabla, una a una, siguiendo lo identificado en el
diagrama E-R y estableciendo índices y demás elementos según las indicaciones de
cada uno de los campos. Además hemos decidido el mejor tipo de datos que
podemos aplicar a cada campo (texto, números, fechas... que se almacenan para
cada registro).
En resumen
Según Thomas H. Grayson, un buen diseño de base de datos debe poseer siempre
las siguientes cualidades, aunque algunas puede llegar a ser contradictorias entre
sí:
Como hemos visto el diseño de una base de datos parte de un problema real que
queremos resolver y se traduce en una serie de modelos, conceptual, lógico y físico,
que debemos implementar.
El diseño lógico es mucho más sencillo puesto que no es más que pasar el diseño
anterior a una base de datos concreta. De hecho muchas herramientas profesionales
nos ofrecen la generación automática del modelo, por lo que suele ser muy rápido.
El diseño físico por regla general recae en la propia base de datos, a partir del diseño
lógico, aunque si dominamos bien esa parte elegiremos cuidadosamente índices,
restricciones o particiones así como configuraciones para determinar cómo se
almacenará físicamente esa información, en qué orden, cómo se repartirá
físicamente en el almacenamiento, etc...
Fundamentos de SQL: Cómo realizar consultas simples con SELECT
Consulta de datos
Ahora nos vamos a centrar en la “R” de CRUD, es decir, en cómo recuperar la
información que nos interesa de dentro de una base de datos, usando para ello el
lenguaje de consulta o SQL. Ya nos preocuparemos luego de cómo llegamos a
introducir los datos primeramente.
Para realizar consultas sobre las tablas de las bases de datos disponemos de la
instrucción SELECT. Con ella podemos consultar una o varias tablas. Es sin duda el
comando más versátil del lenguaje SQL.
Vamos a empezar viendo las consultas simples, basadas en una sola tabla. Veremos
cómo obtener filas y columnas de una tabla en el orden en que nos haga falta.
Aprende los fundamentos de SQL paso a paso y se te abrirá un mundo nuevo lleno de
posibilidades. »
El resultado de una consulta SELECT nos devuelve una tabla lógica. Es decir, los
resultados son una relación 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 básica de una consulta SELECT es la siguiente (los valores opcionales van
entre corchetes):
SELECT
Permite seleccionar las columnas que se van a mostrar y en el orden en que lo van a
hacer. Simplemente es la instrucción que la base de datos interpreta como que
vamos a solicitar información.
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 sólo puede incluir filas únicas. Es
decir, si al realizar una consulta hay registros exactamente iguales que aparecen más
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á más de uno, en cuyo caso
separamos cada nombre de los demás mediante comas.
Si queremos que nos devuelva todos los campos de la tabla utilizamos el comodín
“*” (asterisco).
Los nombres indicados deben coincidir exactamente con los nombre de los campos
de la tabla, pero si queremos que en nuestra tabla lógica de resultados tengan un
nombre diferente podemos utilizar:
AS
Permite renombrar columnas si lo utilizamos en la cláusula SELECT, o renombrar
tablas si lo utilizamos en la cláusula FROM. Es opcional. Con ello podremos crear
diversos alias de columnas y tablas. Enseguida veremos un ejemplo.
FROM
Esta cláusula permite indicar las tablas o vistas de las cuales vamos a obtener la
información. De momento veremos ejemplos para obtener información de una sola
tabla.
Condiciones
Son expresiones lógicas a comprobar para la condición de filtro, que tras su
resolución devuelven para cada fila TRUE o FALSE, en función de que se cumplan o
no. Se puede utilizar cualquier expresión lógica y en ella utilizar diversos
operadores como:
> (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 algún valor)
Se dice que una columna de una fila es NULL si está completamente vacía. Hay que
tener en cuenta que si se ha introducido cualquier dato, incluso en un campo
alfanumérico si se introduce una cadena en blanco o un cero en un campo numérico,
deja de ser NULL.
LIKE: para la comparación de un modelo. Para ello utiliza los caracteres
comodín especiales: “%” y “_”. Con el primero indicamos que en su lugar
puede ir cualquier cadena de caracteres, y con el segundo que puede ir
cualquier carácter individual (un solo carácter). Con la combinación de estos
caracteres podremos obtener múltiples patrones de búsqueda. 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 después contiene un solo carácter
cualquiera: Nombre LIKE ‘A_’
o El nombre empieza una A, después cualquier carácter, 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 relación de valores concretos. Por ejemplo: Ventas
de los Clientes 10, 15, 30 y 75: CodCliente IN(10, 15, 30, 75)
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 cláusula
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, utilizaríamos esta
cláusula de ordenación:
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 aún no se está habituado, pueda dar la impresión 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:
- Mostrar apellido, ciudad y región (LastName, city, region) de los empleados de USA
(nótese el uso de AS para darle el nombre en español a los campos devueltos):
FROM Employees AS E
- Mostrar los clientes que no sabemos a qué región pertenecen (o sea, que no tienen
asociada ninguna región) :
- Mostrar las distintas regiones de las que tenemos algún cliente, accediendo sólo a
la tabla de clientes:
- Mostrar los clientes que pertenecen a las regiones CA, MT o WA, ordenados por
región ascendentemente y por nombre descendentemente.
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).
Resumen
Con esto hemos visto los fundamentos de las consultas de lectura de datos con SQL.
En un posterior artículo vamos a complicar la cosa un poco y añadiremos sub-
consultas y algunas instrucciones más complejas, como agrupaciones de datos y
funciones de agregación.
BASICO
SQL es un estandar para accesar y manejar bases de datos
Este tutorial te va a mostrar como manejar bases de datos en MySQL, SQL Server, MS Access,
Oracle, Sybase, DB2 y otras bases de datos
Que es SQL?
SQL es un standar un lenguaje estructurado para consultas
SQL te permite aceder y manejar bases dedatos
SQL es un Estandar (ANSI American National Standards Institute)
SQL es un estandar pero Apesar de que es un estandar ANSI (American National Standards
Institute) hay diferentes versiones del lenguaje SQL
Y de cualquier modo, siguen cumpliendo el estandar ANSI pues estas versiones soportan la mayoria
de los comandos tales como SELECT, UPDATE, DELETE, INSERT, WHERE
Para construir un sitio web que muestre datos de una base de datos necesitaras lo siguiente:
Para realizar estos ejemplos descarga e instala SQL SERVER EXPRESS haciendo clic AQUI
Sintaxis de SQL
Tablas
Una base de datos contienen uno o mas tablas. Cada tabla esta identificada por un nombre
(ejemplo Clientes o Ordenes). Las tablas contienen registros (filas) con datos
Sentencias SQL
Muchas de las acciones que necesitas realizar en una base de datos se hacen con sentencias SQL
Manten en mente lo siguiente: las sentencias SQL no son sencibles a las mayusculas o minisculas
Algunos sistemas de bases de datos requieren un punto y coma al final de cada sentencia SQL
El punto y como es un estandar que se para cada sentencia SQL en sistemas de bases de datos
que habilitan mas de una sentencia SQL ejecutada en la misma llamada al servidor
SQL puede ser dividido en dos partes: El Lenguaje de Manipulacion de Datos (DML) y el Lenguaje
de Definicion de Datos (DDL)
DLL del SQL que permite a bases de datos y tablas ser creadas o borradas.
Tambien define indices(llaves). especifica enlaces entre tablas, y impone relaciones entre tablas.
La parte DLL del SQL, las sentencias mas importante DDL en SQL son:
La sentencia SELECT
1) SELECT nombre_columna(s)
FROM nombre_tabla
Ejemplo 1
SELECT nombre_columna(s)
FROM nombre_tabla
SELECT Nombre,Apellidos,Ciudad
FROM Personas
Ejemplo 2
Funciones de programacion como estas no son parte de este tutorial. Para aprender a accesar a
datos con la llamada a funciones espera mi siguiente tutorial ADO y PHP.
Dentro de una tabla, algunas columnas pueden contener valores duplicados. Esto no es un
problema, algunas veces tu querras listar solo los valores diferentes (distintos) en la tabla
La palabra DISTINCT puede ser usada como llave para regresar solo los valores
distintos(diferentes).
Ejemplo:
SQL WHERE
La sentencia where es usada para extraer solo los registros que cumplen con el criterio especificad
SELECT nombre_columna(s)
FROM nombre_tabla
WHERE nombre_columna operador valor
SELECT *
FROM Personas
WHERE Apellidos ='Trejo Lemus'
SQL usa comillas simples en los valores de texto (muchos sitemas manejadores de bases de datos
aceptan comillas dobles).Para SQL los valores de texto deben ser puestos entre comillas simples
SELECT *
FROM Personas
WHERE Nombre='Lucero'
SELECT *
FROM Personas
WHERE Nombre=Lucero
SELECT *
FROM Personas
WHERE P_id = 9
SELECT *
FROM Personas
WHERE P_id = '9'
Los operadores AND y OR son usados para filtrar registros basados en mas de una condicion
Operador AND
El operador AND muestra el registro si la primera condicion y la segunda condicion son verdaderas
Para seleccionar solo las personas con el Nombre igual a Marcel Abisag y el apellido igual a
Sobrevilla Trejo,
El resultado seria:
Operador OR
Ahora seleccionaremos las personas con el campo Nombre igual a "Martha" o el campo Nombre
igual a "Elvira"
Ahora seleccionaremos solo las personas con el campo Apellidos igual a "Sobrevilla Trejo" AND
Nombre igual a "Marcel Abisag" OR igual a "Jose Abraham"
SQL ORDER BY
La sentencia ORDER BY es usada para ordenar los registros en orden ascendente por default
SELECT nombre_columna(s)
FROM nombre_tabla
ORDER BY nombre_column(s) ASCDESC
Ahora vamos a seleccionar todas las personas de la tabla, pero mostrando en orden por el campo
Nombre
ORDER BY DESC
Ahora vamos a seleccionar a todas las personas de la tabla pero mostrandolas en un orden
descendente por el campo Nombre con la palabra DESC
La sentencia INSERT INTO se usa para insertar un registro o fila en una tabla
La primera forma no especifica los nombres de las columnas donde los datos seran insertados solo
los valores:
INSERT INTO nombre_tabla
VALUES (valor1, valor2, valor3,...)
La segunda forma especifica los nombres de las columnas y los valores insertados
Mostrara lo siguiente:
UPDATE nombre_tabla
SET columna1=valor, column2=valor,...
WHERE alguna_columna=algun_valor
Nota: La sentencia WEHRE en la sintaxis UPDATE, especifica cual de los registros va a ser
actualizado. Si omites la sentencia WHERE todos los registros seran actualizados.
UPDATE Personas
SET Direccion='Canoga Park', Ciudad='L.A.'
WHERE Nombre='Antonio' AND Apellido='Trejo Campos'
UPDATE Personas
SET Direccion='Canoga Park', Ciudad='L.A.'
El resultado seria:
Nota: La sentencia WHERE en la sintaxis DELETE especifica el registro o los registros que seran
borrados, si omites la sentencia WHERE, todos los registros seran borrados de la tabla
Ahora vamos a borrar la persona "Marco Antonio Trejo Lemus" en la tabla Personas con la siguiente
sentencia:
Es posible borrar todas las filas en una table sin borrar la tabla en si. Esto significa que la estructura
de la tabla, atributos e indices quedaran intactos:
or
Nota: Debes tener cuidado cuando borres registros. Ya que no podras deshacer lo que hagas con
esta sentencia.
AVANZADO
Clausula SQL TOP
El operador LIKE se usa en una sentencia WHERE para buscar un patron en una columna
Sintaxis LIKE
SELECT nombre_columna(s)
FROM nombre_tabla
WHERE nombre_columna LIKE patron
Vamos a buscar las personas que viven en la ciudad de Tampico que empiecen con "Ta" de la tabla
en cuestion
El signo "%" puede ser usado para definir comodines (letras que faltan en el patron de busqueda)
ambas antes o despues del patron de busqueda
Ahora vamos a seleccionar las personas que viven en la ciudad que comienza con una "T" de la
tabla personas
Ahora vamos a seleccionar las personas que viven en la ciudad que contiene el patron "tam" de la
tabla personas
Comodines SQL
Los comodines SQL pueden ser usados en la busqueda de datos en una base de datos
pueden sustituir a uno o mas caracteres cuando se busquen los datos
Usando el comodín %
Ahora seleccionaremos las personas que viven en la ciudad de Tampico que empiecen con "Ta" de
la tabla Personas
Ahora buscaremos las personas que viven en la ciudad que contenga el patron "ico" de la tabla
Personas
Usando el _ Comodín
Ahora selectionaremos las personas que el primer nombre comience con algun caracter
seguido de "Ma" de la tabla Personas
APENDICE 1
El siguiente codigo creara la base de datos en el servidor SQL EXPRESS
1.- Hacer clic en Inicio --> Todos los Programas --> Microsoft SQL SERVER 2008 --> SQL Server
Management Studio
3.- Hacer clic Nueva Consulta (se encuentra en el margen superior izquierdo)
Seleccionar y Copiar el siguiente "CODIGO GENERADOR
DE BASE DE DATOS" empresa:
______________________________________________________
USE master
if exists (select * from sysdatabases where name='empresa')
begin
raiserror('La base de datos existe; eliminándola....',0,1)
DROP database empresa
end
GO
raiserror('Creando base de datos empresa....',0,1)
go
CREATE DATABASE empresa
GO
USE empresa
GO
CREATE TABLE Personas(
P_id int PRIMARY KEY IDENTITY,
Nombre nchar(20) NOT NULL,
Apellidos nchar(30) NOT NULL,
Direccion nchar(40) NOT NULL,
Ciudad nchar(10) NOT NULL)
GO
GO
INSERT INTO Personas VALUES ('Marco Antonio','Trejo Lemus','Calle E 822','Tampico')INSERT
INTO Personas VALUES ('Martha Beatriz','Trejo Lemus','Calle E 822','Tampico')INSERT INTO
Personas VALUES ('Juana Elvira','Trejo Lemus','Calle E 822','Tampico')
INSERT INTO Personas VALUES ('Nora Zulma','Trejo Lemus','Calle E 822','Tampico')
INSERT INTO Personas VALUES ('Laura Lucero','Sobrevilla Trejo','Calle E 822','Tampico')INSERT
INTO Personas VALUES ('Maria de la luz','Trejo Campos','Calle E 822','Tampico')INSERT INTO
Personas VALUES ('Trinidad','Trejo Bautista','Calle E 822','Tampico')
INSERT INTO Personas VALUES ('Marcel Abisag','Sobrevilla Trejo','Calle E 822','Tampico')INSERT
INTO Personas VALUES ('Jose Abraham','Sobrevilla Trejo','Calle E 822','Tampico')INSERT INTO
Personas VALUES ('Samuel Salomon','Olmeda Trejo','Calle E 822','Tampico')
GO
select * from Personas
quit
5.- Ejecutar el codigo SQL haciendo clic sobre la opcion !Ejecutar que se muestra a continuacion:
En un post anterior de esta serie (que es el germen de este curso de SQL) veíamos qué es el
lenguaje SQL y sus diferentes subconjuntos de instrucciones. Aprendimos también
los fundamentos de diseño de una base de datos relacional. Hoy vamos a aprender los
fundamentos de consultas simples de datos con SELECT.
Nota: Si esta serie de artículos te está pareciendo interesante, entonces ni te imaginas lo que
puedes aprender con este curso de fundamentos de SQL.
Como hemos visto, las instrucciones DML (Data Manipulation Language – Lenguaje de
Manipulación de Datos) trabajan sobre los datos almacenados en nuestro SGBD, permitiendo
consultarlos o modificarlos.
En general a las operaciones básicas de manipulación de datos que podemos realizar con SQL se
les denomina operaciones CRUD (de Create, Read, Update and Delete, o sea, Crear, Leer,
Actualizar y Borrar, sería CLAB en español, pero no se usa). Lo verás utilizado de esta manera en
muchos sitios, así que apréndete ese acrónimo.
SELECT: muestra información sobre los datos almacenados en la base de datos. Dicha
información puede pertenecer a una o varias tablas. Es la “R”.
Consulta de datos
Ahora nos vamos a centrar en la “R” de CRUD, es decir, en cómo recuperar la información que nos
interesa de dentro de una base de datos, usando para ello el lenguaje de consulta o SQL. Ya nos
preocuparemos luego de cómo llegamos a introducir los datos primeramente.
Para realizar consultas sobre las tablas de las bases de datos disponemos de la instrucción SELECT.
Con ella podemos consultar una o varias tablas. Es sin duda el comando más versátil del lenguaje
SQL.
Existen muchas cláusulas asociadas a la sentencia SELECT (GROUP BY, ORDER, HAVING, UNION).
También es una de las instrucciones en la que con más frecuencia los motores de bases de datos
incorporan cláusulas adicionales al estándar, que es el que veremos aquí.
Vamos a empezar viendo las consultas simples, basadas en una sola tabla. Veremos cómo obtener
filas y columnas de una tabla en el orden en que nos haga falta.
Aprende los fundamentos de SQL paso a paso y se te abrirá un mundo nuevo lleno de
posibilidades. »
El resultado de una consulta SELECT nos devuelve una tabla lógica. Es decir, los resultados son una
relación 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 básica 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
A continuación 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 instrucción que la base de datos interpreta como que vamos a solicitar
información.
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 sólo puede incluir filas únicas. Es decir, si al
realizar una consulta hay registros exactamente iguales que aparecen más 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á más de uno, en cuyo caso separamos cada nombre de los
demás mediante comas.
Si queremos que nos devuelva todos los campos de la tabla utilizamos el comodín “*” (asterisco).
Los nombres indicados deben coincidir exactamente con los nombre de los campos de la tabla,
pero si queremos que en nuestra tabla lógica de resultados tengan un nombre diferente podemos
utilizar:
AS
FROM
Esta cláusula permite indicar las tablas o vistas de las cuales vamos a obtener la información. De
momento veremos ejemplos para obtener información de una sola tabla.
Como se ha indicado anteriormente, también se pueden renombrar las tablas usando la
instrucción “AS”.
WHERE
Especifica la condición de filtro de las filas devueltas. Se utiliza cuando no se desea que se
devuelvan todas las filas de una tabla, sino sólo las que cumplen ciertas condiciones. Lo habitual es
utilizar esta cláusula en la mayoría de las consultas.
Condiciones
Son expresiones lógicas a comprobar para la condición de filtro, que tras su resolución devuelven
para cada fila TRUE o FALSE, en función de que se cumplan o no. Se puede utilizar cualquier
expresión lógica y en ella utilizar diversos operadores como:
> (Mayor)
< (Menor)
= (Igual)
<> o != (Distinto)
Se dice que una columna de una fila es NULL si está completamente vacía. Hay que tener en
cuenta que si se ha introducido cualquier dato, incluso en un campo alfanumérico si se introduce
una cadena en blanco o un cero en un campo numérico, deja de ser NULL.
LIKE: para la comparación de un modelo. Para ello utiliza los caracteres comodín
especiales: “%” y “_”. Con el primero indicamos que en su lugar puede ir cualquier cadena
de caracteres, y con el segundo que puede ir cualquier carácter individual (un solo
carácter). Con la combinación de estos caracteres podremos obtener múltiples patrones
de búsqueda. Por ejemplo:
IN( ): para especificar una relación 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 lógicos OR, AND y NOT, así como el uso de paréntesis para controlar la
prioridad de los operadores (como en matemáticas). Por ejemplo: … (Cliente = 100 AND Provincia
= 30) OR Ventas > 1000 … que sería 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
Por ejemplo, para ordenar los resultados de forma ascendente por ciudad, y los que sean de la
misma ciudad de forma descendente por nombre, utilizaríamos esta cláusula de ordenación:
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 aún no se está habituado, pueda dar la impresión 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 apellido, ciudad y región (LastName, city, region) de los empleados de USA (nótese el
uso de AS para darle el nombre en español a los campos devueltos):
FROM Employees AS E
WHERE Country = ‘USA’
- Mostrar los clientes que no sabemos a qué región pertenecen (o sea, que no tienen asociada
ninguna región) :
- Mostrar las distintas regiones de las que tenemos algún cliente, accediendo sólo a la tabla de
clientes:
- Mostrar los clientes que pertenecen a las regiones CA, MT o WA, ordenados por región
ascendentemente y por nombre descendentemente.
- 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).
Resumen
Con esto hemos visto los fundamentos de las consultas de lectura de datos con SQL. En un
posterior artículo vamos a complicar la cosa un poco y añadiremos sub-consultas y algunas
instrucciones más complejas, como agrupaciones de datos y funciones de agregación.