SQL

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 38

Diseñando una base de datos en el modelo relacional

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)

 En el diseño conceptual se hace una descripción de alto nivel de la estructura


de la base de datos, independientemente del SGBD (Sistema Gestor de Bases
de Datos) que se vaya a utilizar para manipularla. Su objetivo es describir el
contenido de información de la base de datos y no las estructuras de
almacenamiento que se necesitarán para manejar dicha información.
 El diseño lógico parte del resultado del diseño conceptual y da como
resultado una descripción de la estructura de la base de datos en términos
de las estructuras de datos que puede procesar un tipo de SGBD. El diseño
lógico depende del tipo de SGBD que se vaya a utilizar, se adapta a la
tecnología que se debe emplear, pero no depende del producto concreto. En
el caso de bases de datos convencionales relacionales (basadas en SQL para
entendernos), el diseño lógico consiste en definir las tablas que existirán, las
relaciones entre ellas, normalizarlas, etc...
 El diseño físico parte del lógico y da como resultado una descripción de la
implementación de una base de datos en memoria secundaria: las estructuras
de almacenamiento y los métodos utilizados para tener un acceso eficiente a
los datos. Aquí el objetivo es conseguir una mayor eficiencia, y se tienen en
cuenta aspectos concretos del SGBD sobre el que se vaya a implementar. Por
regla general esto es transparente para el usuario, aunque conocer cómo se
implementa ayuda a optimizar el rendimiento y la escalabilidad del sistema.

Nota: Si esta serie de artículos sobre SQL te está pareciendo interesante, ni te


imaginas lo que puedes aprender con este curso de fundamentos de SQL.

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

El modelo relacional de bases de datos se rige por algunas normas sencillas:

 Todos los datos se representan en forma de tablas (también llamadas


“relaciones”, ver nota anterior). Incluso los resultados de consultar otras
tablas. La tabla es además la unidad de almacenamiento principal.
 Las tablas están compuestas por filas (o registros) y columnas (o campos) que
almacenan cada uno de los registros (la información sobre una entidad
concreta, considerados una unidad).
 Las filas y las columnas, en principio, carecen de orden a la hora de ser
almacenadas. Aunque en la implementación del diseño físico de cada SGBD
esto no suele ser así. Por ejemplo, en SQL Server si añadimos una clave de tipo
"Clustered" a una tabla haremos que los datos se ordenen físicamente por el
campo correspondiente.
 El orden de las columnas lo determina cada consulta (que se realizan
usando SQL).
 Cada tabla debe poseer una clave primaria, esto es, un identificador único de
cada registro compuesto por una o más columnas.
 Para establecer una relación entre dos tablas es necesario incluir, en forma
de columna, en una de ellas la clave primaria de la otra. A esta columna se le
llama clave externa. Ambos conceptos de clave son extremadamente
importantes en el diseño de bases de datos.

Basándose en estos principios se diseñan las diferentes bases de datos relacionales,


definiendo un diseño conceptual y un diseño lógico, que luego se implementa en el
diseño físico usando para ello el gestor de bases de datos de nuestra elección (por
ejemplo SQL Server).

Por ejemplo, consideremos la conocida base de datos Northwind de Microsoft.

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:

(pulsa para aumentar)

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.

Como vemos, un diseño conceptual no es más que una representación formal y


acotada de entidades que existen en el mundo real, así como de sus restricciones, y
que están relacionadas con el dominio del problema que queremos resolver.
Modelo lógico
Una vez tenemos claro el modelo E-R debemos traducirlo a un modelo lógico
directamente en el propio sistema gestor de bases de datos (Oracle, MySQL, SQL
Server...). Si hemos utilizado alguna herramienta profesional para crear el diagrama
E-R, seguramente podremos generar automáticamente las instrucciones necesarias
para crear la base de datos.

La mayoría de los generadores de diagramas E-R (por ejemplo Microsoft Visio)


ofrecen la capacidad de exportar el modelo directamente a los SGBD más populares.

Entonces, todo este modelo conceptual se traduce en un modelo lógico que


trasladaremos a la base de datos concreta que estemos utilizando y que
generalmente será muy parecido. Por ejemplo, este es el mismo modelo anterior,
mostrado ya como tablas en un diagrama de SQL Server:

(pulsa para aumentar)

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

Su representación gráfica en la base de datos es muy similar, sin embargo el modelo


físico (cómo se almacena esto físicamente), puede variar mucho de un SGBD a otro
y según la configuración que le demos.

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í:

 Reflejar la estructura del problema en el mundo real.


 Ser capaz de representar todos los datos esperados, incluso con el paso del
tiempo.
 Evitar el almacenamiento de información redundante.
 Proporcionar un acceso eficaz a los datos.
 Mantener la integridad de los datos a lo largo del tiempo.
 Ser claro, coherente y de fácil comprensión.

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 primero, el diseño conceptual, es el que más tiempo nos va a llevar pues


debemos pensar muy bien cómo vamos a representar las entidades del mundo real
que queremos representar, qué datos almacenaremos, cómo los relacionaremos
entre sí, etc...

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

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.

Operaciones básicas de manipulación de datos en


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.

Hay cuatro instrucciones para realizar estas tareas:

 INSERT: Inserta filas en una tabla. Se corresponde con la “C” de CRUD.


 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”.
 UPDATE: Actualiza información 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 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
ORDER BY ListaColumnas [ ASC / DESC ]

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.

Se puede anteponer el nombre de la tabla al nombre de las columnas, utilizando el


formato Tabla.Columna. Además de nombres de columnas, en esta lista se pueden
poner constantes, expresiones aritméticas, y funciones, para obtener campos
calculados de manera dinámica.

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.

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)
 >= (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)

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

… 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 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:

SELECT * FROM Customers

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

SELECT E.LastName AS Apellido, City AS Ciudad, Region

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

SELECT * FROM Customers WHERE Region IS NULL

- Mostrar las distintas regiones de las que tenemos algún cliente, accediendo sólo 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
región 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 código está entre el 2 y el 9:

SELECT * FROM Employees WHERE EmployeeID BETWEEN 2 AND 9

- Mostrar los clientes cuya dirección 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).

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)

Que puede hacer SQL?

SQL puede ejecutar consultas a una base de datos


SQL puede obtener datos de una base de datos
SQL puede insertar registros en una base de datos
SQL puede actualizar registros de una base de datos
SQL puede borrar registros de una base de datos
SQL puede crear nuevas bases de datos
SQL puede crear nuevas tablas en una base de datos
SQL puede crear procedimientos almacenados(codigo almacenado) en una base de datos
SQL puede crear vistas en una base de datos
SQL puede configurar permisos a tablas, procedimientos, y vistas

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

Que es una RDBMS?

RDBMS (del inglés Relational database management system)


SGBD (Sistema de gestión de base de datos relacional)
es la base para el SQL y para todas las bases de datos modernas
como MS SQL Server, IBM DB2, Oracle, MySQL, and Microsoft Access.

Los datos en un RDBMS se almacenan en objetos llamados tablas


Una tabla es una coleccion relacionada de entradas que consiste en columnas
y filas

Usando SQL en tu Sitio Web

Para construir un sitio web que muestre datos de una base de datos necesitaras lo siguiente:

* Un programa de bases de datos RDBMS (MS Access, SQL Server, MySQL)


* Un lenguaje del lado del servidor tales como PHP o ASP
* SQL
* HTML/CSS

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

Creamos la base de datos

CREATE DATABASE empresa

Creamos la tabla Personas

CREATE TABLE dbo.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

Insertamos algunos registros:

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

Muchas de las acciones que necesitas realizar en una base de datos se hacen con sentencias SQL

Seleccionamos todos los registros de la tabla

Las siguiente sentencia seleccionara todos los registros de la tabla "Personas" :

SELECT * FROM Personas

Abajo esta un ejemplo del resultado de la sentencia a la tabla llamada "Personas":


Este tutorial te enseñara acerca de las diferentes declaraciones en SQL

Manten en mente lo siguiente: las sentencias SQL no son sencibles a las mayusculas o minisculas

Punto y coma despues de las sentencias SQL

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 DML Y DLL

SQL puede ser dividido en dos partes: El Lenguaje de Manipulacion de Datos (DML) y el Lenguaje
de Definicion de Datos (DDL)

La parte DML del SQL de los comandos de consulta y actualizacion son:

SELECT - extrae datos de una base de datos


UPDATE - actualiza datos en una base de datos
DELETE - borra datos de una base de datos
INSERT INTO - inserta datos dentro de una base de datos

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:

CREATE DATABASE - crea una nueva base de datos


ALTER DATABASE - modifica una base de datos
CREATE TABLE - crea una nueva tabla
ALTER TABLE - modifica una tabla
DROP TABLE - borra una tabla
CREATE INDEX - crea un indice (llave de busqueda)
DROP INDEX - borra un indice

La sentencia SELECT

La sentencia SELECT es usada para seleccionar datos de una base de datos.

El resultado es almacenado en una tabla temporal, llamada tabla-resultado


La sintaxis SQL de la sentencia SELECT es:

1) SELECT nombre_columna(s)
FROM nombre_tabla

2) SELECT * FROM nombre_tabla

Ejemplo 1

SELECT nombre_columna(s)
FROM nombre_tabla

SELECT Nombre,Apellidos,Ciudad
FROM Personas

Ejemplo 2

SELECT * FROM nombre_tabla


SELECT * FROM nombre_tabla

Navegacion en una tabla de resultados

Muchos sistemas de bases de datos permiten la navegacion en la tabla de resultados programando


funciones como: Moverse-Al-Primero, Obtener-Contenido-Registro, Moverse-Al-Siguiente-Registro,
etc.

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.

La sentencia SELECT DISTINCT

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

Sintaxis SQL SELECT DISTINCT

SELECT DISTINCT nombre_columna(s)


FROM nombre_table

Ejemplo:

SELECT DISTINCT Apellidos


FROM Personas

Abajo esta el resultado de la sentencia DISTINCT a la tabla "Personas":


SELECT DISTINCT Ciudad FROM Personas

Abajo esta el resultado de la sentencia DISTINCT a la tabla "Personas":

SQL WHERE

La sentencia where es usada para extraer solo los registros que cumplen con el criterio especificad

La Sintaxis SQL WHERE

SELECT nombre_columna(s)
FROM nombre_tabla
WHERE nombre_columna operador valor

Ejemplo de la sentecia WHERE

SELECT *
FROM Personas
WHERE Apellidos ='Trejo Lemus'

Comillas en los campos de texto

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

Los valores numericos no deben ser puestos entre comillas


Para valores de texto:

Esta es la forma correcta:

SELECT *
FROM Personas
WHERE Nombre='Lucero'

Esta es la forma equivocada:

SELECT *
FROM Personas
WHERE Nombre=Lucero

Para valores numericos:

Esta es la forma correcta:

SELECT *
FROM Personas
WHERE P_id = 9

Esta es la forma incorrecta:

SELECT *
FROM Personas
WHERE P_id = '9'

Operadores permitidos en la sentencia WHERE


Con la sentencia WHERE, los siguientes operadores pueden ser usados:

Operadores SQL AND y OR

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

El operador OR muestra el registro si la primera o la segunda condicion es verdadera

Ahora teniendo en cuenta la siguiente tabla:

Para seleccionar solo las personas con el Nombre igual a Marcel Abisag y el apellido igual a
Sobrevilla Trejo,

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas


WHERE Nombre='Marcel Abisag'
AND Apellidos='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"

Usaremos la siguiente sentencia SELECT

SELECT * FROM Personas


WHERE Nombre='Martha Beatriz'
OR Nombre='Juana Elvira'

El resultado sera el siguiente:


Combinando AND & OR

Puedes combinar el AND y el OR (usando parentesis para formar expresiones complejas)

Ahora seleccionaremos solo las personas con el campo Apellidos igual a "Sobrevilla Trejo" AND
Nombre igual a "Marcel Abisag" OR igual a "Jose Abraham"

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas WHERE


Apellidos='Sobrevilla Trejo'
AND (Nombre='Marcel Abisag' OR Nombre='Jose Abraham')

El resultado sera el siguiente:

SQL ORDER BY

The ORDER BY keyword is used to sort the result-set.


La sentencia ORDER BY es usada para ordenar un resultado ordenado por una columna especifica

La sentencia ORDER BY es usada para ordenar los registros en orden ascendente por default

Si quieres ordenar los registros en orden descendente utiliza la palabra DESC

Sintaxis SQL ORDER BY

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

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas


ORDER BY Nombre

El resultado sera el siguiente:

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

We use the following SELECT statement:

SELECT * FROM Personas


ORDER BY Nombre DESC

El resultado sera el siguiente:

Sentencia SQL INSERT INTO

La sentencia INSERT INTO se usa para insertar un registro o fila en una tabla

Sintaxis SQL INSERT INTO


Es posible escribir la sentencia INSET INTO en dos formas

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

INSERT INTO nombre_tabla (columna1, columna2, columna3,...)


VALUES (valor1, valor2, valor3,...)

Ejemplo INSERT INTO

Dado que tenemos la siguiente tabla Personas:

Insertaremos un nuevo registro de la siguiente forma:

INSERT INTO Personas


VALUES ('Martha', 'Lemus Hurtado', 'Canoga Park', 'L.A.')

El resultado lo mostrariamos con la sentencia SELECT * FROM Personas y seria el siguiente:

Insertar Datos solo en columnas especificadas


Es posible agregar datos en columnas especificas
Las siguientes sentencias SQL agregaran una nueva fila, pero solo agregaran datos en las columnas
Nombre y Apellidos

INSERT INTO Personas (Nombre, Apellidos)


VALUES ('Antonio', 'Trejo Campos')

Para mostrar el resultado con la sentencia: SELECT * FROM Personas

Mostrara lo siguiente:

Sentencia SQL UPDATE Statement

La sentencia UPDATE es usada para actualizar registros en una tabla

Sintaxis SQL UPDATE

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.

Ahora vamos a actualizar la persona "Antonio Trejo Campos" en la tabla Personas


Usaremos la siguientes sentencias SQL:

UPDATE Personas
SET Direccion='Canoga Park', Ciudad='L.A.'
WHERE Nombre='Antonio' AND Apellido='Trejo Campos'

El resultado sera el siguiente:


CUIDADO!!! al utilizar la sentencia UPDATE

Si omites la sentencia WHERE se actualizaran todos los registros de esta forma:

UPDATE Personas
SET Direccion='Canoga Park', Ciudad='L.A.'

El resultado seria:

Sentencia SQL DELETE

La sentencia DELETE se usa para borrar registros o filas en una tabla

Sintaxis SQL DELETE

DELETE FROM nombre_tabla


WHERE alguna_columna=algun_valor

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:

DELETE FROM Personas


WHERE Nombre='Marco Antonio' AND Apellidos='Trejo Lemus'
SELECT * FROM Personas

El resultado sera el siguiente:

Borrar todas las filas

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:

DELETE FROM nombre_tabla

or

DELETE * FROM nombre_tabla

Nota: Debes tener cuidado cuando borres registros. Ya que no podras deshacer lo que hagas con
esta sentencia.

AVANZADO
Clausula SQL TOP

La clausula TOP se usa para especificar el numer de registros que existen


puede verificar la longitud de las tablas con miles de registros, regresando el numero de registros

Nota: No todas las bases de datos soportan la clausula TOP

Sintaxis SQL Server

SELECT TOP numeroporciento nombre_columna(s)


FROM nombre_tabla
Ahora seleccionaremos solo los dos primeros registros de la tabla que se muestra abajo:

Utilizaremos las siguientes sentencias SELECT:

SELECT TOP 2 * FROM Personas

El resultado sera el siguiente:

Sentencia SQL TOP PERCENT

Ahora seleccionaremos solo el 50% de los registros en la tabla


Usaremos las siguientes sentencias SELECT:

SELECT TOP 50 PERCENT * FROM Personas

El resultado se muestra abajo en la tabla:

Operador SQL LIKE

Operador SQL LIKE

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

Ejemplo de operador LIKE


En la tabla "Personas" :

Vamos a buscar las personas que viven en la ciudad de Tampico que empiecen con "Ta" de la tabla
en cuestion

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas


WHERE Ciudad LIKE 'Ta%'

El signo "%" puede ser usado para definir comodines (letras que faltan en el patron de busqueda)
ambas antes o despues del patron de busqueda

El resultado seria el siguiente:

Ahora vamos a seleccionar las personas que viven en la ciudad que comienza con una "T" de la
tabla personas

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas


WHERE Ciudad LIKE '%T'

El resultado seria el siguiente:

Ahora vamos a seleccionar las personas que viven en la ciudad que contiene el patron "tam" de la
tabla personas

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas


WHERE Ciudad LIKE '%tam%'

El resultado seria el siguiente:


Tambien es posible seleccionar las personas que viven en la ciudad que no contienen el patron
"tamp" de la tabla personas, usando la palabra clave NOT

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas


WHERE Ciudad NOT LIKE '%tamp%'

El resultado seria el siguiente:

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

Los comodines deben usarse con el operador LIKE

Se pueden usar con SQL los siguientes comodines:

Usando el comodín %
Ahora seleccionaremos las personas que viven en la ciudad de Tampico que empiecen con "Ta" de
la tabla Personas

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas


WHERE Ciudad LIKE 'Ta%'

Ahora buscaremos las personas que viven en la ciudad que contenga el patron "ico" de la tabla
Personas

Usaremos la siguiente sentencia SELECT:

SELECT * FROM Personas


WHERE Ciudad LIKE '%ico%'

Usando el _ Comodín
Ahora selectionaremos las personas que el primer nombre comience con algun caracter
seguido de "Ma" de la tabla Personas

Usaremos la siguiente sentencia SELECT:


SELECT * FROM Personas
WHERE Nombre LIKE '_ar'

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

2.- Hacer clic en el boton CONECTAR

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

4.- Pegar el codigo

5.- Ejecutar el codigo SQL haciendo clic sobre la opcion !Ejecutar que se muestra a continuacion:

Fundamentos de SQL: Cómo realizar consultas simples con SELECT

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.

Operaciones básicas de manipulación de datos en 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.

Hay cuatro instrucciones para realizar estas tareas:

 INSERT: Inserta filas en una tabla. Se corresponde con la “C” de CRUD.

 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”.

 UPDATE: Actualiza información 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 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

ORDER BY ListaColumnas [ ASC / DESC ]

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.

Se puede anteponer el nombre de la tabla al nombre de las columnas, utilizando el


formato Tabla.Columna. Además de nombres de columnas, en esta lista se pueden poner
constantes, expresiones aritméticas, y funciones, para obtener campos calculados de manera
dinámica.

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

 >= (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)

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

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:

… 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 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:

SELECT * FROM Customers

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

SELECT E.LastName AS Apellido, City AS Ciudad, Region

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

SELECT * FROM Customers WHERE Region IS NULL

- Mostrar las distintas regiones de las que tenemos algún cliente, accediendo sólo 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 región
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 código está entre el 2 y el 9:

SELECT * FROM Employees WHERE EmployeeID BETWEEN 2 AND 9

- Mostrar los clientes cuya dirección 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).

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.

También podría gustarte