Está en la página 1de 12

Operaciones bsicas de manipulacin de datos

en SQL
Como hemos visto, las instrucciones DML (Data Manipulation Language
Lenguaje de Manipulacin de Datos) trabajan sobre los datos almacenados en
nuestro SGBD, permitiendo consultarlos o modificarlos.
En general a las operaciones bsicas de manipulacin de datos que podemos
realizar con SQL se les denominaoperaciones CRUD (de Create, Read, Update
and Delete, o sea, Crear, Leer, Actualizar y Borrar, sera CLAB en espaol, pero
no se usa). Lo vers utilizado de esta manera en muchos sitios, as que
aprndete ese acrnimo.
Hay cuatro instrucciones para realizar estas tareas:

INSERT: Inserta filas en una tabla. Se corresponde con la C de


CRUD.

SELECT: muestra informacin sobre los datos almacenados en la base


de datos. Dicha informacin puede pertenecer a una o varias tablas.
Es la R.

UPDATE: Actualiza informacin de una tabla. Es, obviamente, la U.

DELETE: Borra filas de una tabla. Se corresponde con la D.

Consulta de datos
Ahora nos vamos a centrar en la R de CRUD, es decir, en cmo recuperar la
informacin que nos interesa de dentro de una base de datos, usando
para ello el lenguaje de consulta o SQL. Ya nos preocuparemos luego de cmo
llegamos a introducir los datos primeramente.
Para realizar consultas sobre las tablas de las bases de datos disponemos de la
instruccin SELECT. Con ella podemos consultar una o varias tablas. Es sin
duda el comando ms verstil del lenguaje SQL.
Existen muchas clusulas asociadas a la sentencia SELECT (GROUP BY, ORDER,
HAVING, UNION). Tambin es una de las instrucciones en la que con ms
frecuencia los motores de bases de datos incorporan clusulas adicionales al
estndar, que es el que veremos aqu.

BONUS: Consigue tu ebook recopilatorio GRATIS >> Hroe en


SQL: manual de iniciacin
Vamos a empezar viendo las consultas simples, basadas en una sola tabla.
Veremos cmo obtener filas y columnas de una tabla en el orden en que nos
haga falta.
El resultado de una consulta SELECT nos devuelve una tabla lgica. Es decir,
los resultados son una relacin de datos, que tiene filas/registros, con una serie
de campos/columnas. Igual que cualquier tabla de la base de datos. Sin
embargo esta tabla est en memoria mientras la utilicemos, y luego se
descarta. Cada vez que ejecutamos la consulta se vuelve a calcular el resultado.
La sintaxis bsica de una consulta SELECT es la siguiente (los valores
opcionales van entre corchetes):
SELECT [ ALL / DISTINC ] [ * ] / [ListaColumnas_Expresiones] AS
[Expresion]
FROM Nombre_Tabla_Vista
WHERE Condiciones
ORDER BY ListaColumnas [ ASC / DESC ]
A continuacin analizaremos cada una de las partes de la consulta para
entenderla mejor.

SELECT
Permite seleccionar las columnas que se van a mostrar y en el orden en que lo
van a hacer. Simplemente es la instruccin que la base de datos interpreta
como que vamos a solicitar informacin.

ALL / DISTINCT

ALL es el valor predeterminado, especifica que el conjunto de resultados puede


incluir filas duplicadas. Por regla general nunca se utiliza.
DISTINCT especifica que el conjunto de resultados slo puede incluir filas
nicas. Es decir, si al realizar una consulta hay registros exactamente iguales

que aparecen ms de una vez, stos se eliminan. Muy til en muchas


ocasiones.

Nombres de campos
Se debe especificar una lista de nombres de campos de la tabla que nos
interesan y que por tanto queremos devolver. Normalmente habr ms de uno,
en cuyo caso separamos cada nombre de los dems mediante comas.
Se puede anteponer el nombre de la tabla al nombre de las columnas,
utilizando el formato Tabla.Columna. Adems de nombres de columnas, en esta
lista se pueden poner constantes, expresiones aritmticas, y funciones, para
obtener campos calculados de manera dinmica.
Si queremos que nos devuelva todos los campos de la tabla utilizamos el
comodn * (asterisco).
Los nombres indicados deben coincidir exactamente con los nombre de los
campos de la tabla, pero si queremos que en nuestra tabla lgica de resultados
tengan un nombre diferente podemos utilizar:

AS
Permite renombrar columnas si lo utilizamos en la clusula SELECT, o renombrar
tablas si lo utilizamos en la clusula FROM. Es opcional. Con ello podremos crear
diversos alias de columnas y tablas. Enseguida veremos un ejemplo.

FROM
Esta clusula permite indicar las tablas o vistas de las cuales vamos a obtener
la informacin. De momento veremos ejemplos para obtener informacin de
una sola tabla.
Como se ha indicado anteriormente, tambin se pueden renombrar las tablas
usando la instruccin AS.

WHERE
Especifica la condicin de filtro de las filas devueltas. Se utiliza cuando no se
desea que se devuelvan todas las filas de una tabla, sino slo las que cumplen

ciertas condiciones. Lo habitual es utilizar esta clusula en la mayora de las


consultas.

Condiciones
Son expresiones lgicas a comprobar para la condicin de filtro, que tras su
resolucin devuelven para cada fila TRUE o FALSE, en funcin de que se
cumplan o no. Se puede utilizar cualquier expresin lgica y en ella
utilizar diversos operadorescomo:

> (Mayor)

>= (Mayor o igual)

< (Menor)

<= (Menor o igual)

= (Igual)

<> o != (Distinto)

IS [NOT] NULL (para comprobar si el valor de una columna es o no es


nula, es decir, si contiene o no contiene algn valor)

Se dice que una columna de una fila es NULL si est completamente vaca. Hay
que tener en cuenta que si se ha introducido cualquier dato, incluso en un
campo alfanumrico si se introduce una cadena en blanco o un cero en un
campo numrico, deja de ser NULL.

LIKE: para la comparacin de un modelo. Para ello utiliza los


caracteres comodn especiales: % y _. Con el primero indicamos
que en su lugar puede ir cualquier cadena de caracteres, y con el
segundo que puede ir cualquier carcter individual (un solo carcter).
Con la combinacin de estos caracteres podremos obtener mltiples
patrones de bsqueda. Por ejemplo:
o

El nombre empieza por A: Nombre LIKE A%

El nombre acaba por A: Nombre LIKE %A

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

El nombre empieza por A y despus contiene un solo


carcter cualquiera: Nombre LIKE A_

El nombre empieza una A, despus cualquier carcter, luego


una E y al final cualquier cadena de caracteres:Nombre LIKE
A_E%

BETWEEN: para un intervalo de valores. Por ejemplo:

Clientes entre el 30 y el 100: CodCliente BETWEEN 30 AND


100

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

Lenguaje de manipulacin de datos (I)


Consulta de datos.
El proceso ms importate que podemos llevar a cabo en una base de datos es la
consulta de los datos. De nada servira una base de datos si no
puedieramos consultarla. Es adems la operacin que efectuaremos con mayor
frecuencia.

Para consultar la informacin SQL pone a nuestra disposicin la


sentencia SELECT.
[arriba]

La sentencia SELECT
La sentencia SELECT nos permite consultar los datos almacenados en una tabla
de la base de datos.
El formato de la sentencia select es:

SELECT [ALL | DISTINCT ]


<nombre_campo> [{,<nombre_campo>}]
FROM <nombre_tabla>|<nombre_vista>
[{,<nombre_tabla>|<nombre_vista>}]
[WHERE <condicion> [{ AND|OR <condicion>}]]
[GROUP BY <nombre_campo> [{,<nombre_campo >}]]
[HAVING <condicion>[{ AND|OR <condicion>}]]
[ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]
[{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]

Veamos por partes que quiere decir cada una de las partes que conforman la
sentecia.
Significado
SELECT

ALL

Palabra clave que indica que la sentencia de SQL que queremos ejecutar es
de seleccin.

Indica que queremos seleccionar todos los valores.Es el valor por defecto y no
suele especificarse casi nunca.

DISTINCT Indica que queremos seleccionar slo los valores distintos.

FROM

Indica la tabla (o tablas) desde la que queremos recuperar los datos. En el


caso de que exista ms de una tabla se denomina a la consulta "consulta
combinada" o "join". En las consultas combinadas es necesario aplicar una
condicin de combinacin a travs de una clusula WHERE.

WHERE

Especifica una condicin que debe cumplirse para que los datos sean
devueltos por la consulta. Admite los operadores lgicos AND y OR.

GROUP BY

Especifica la agrupacin que se da a los datos. Se usa siempre en


combinacin con funciones agregadas.

HAVING

Especifica una condicin que debe cumplirse para los datosEspecifica una
condicin que debe cumplirse para que los datos sean devueltos por la
consulta. Su funcionamiento es similar al de WHERE pero aplicado al
conjunto de resultados devueltos por la consulta. Debe aplicarse siempre
junto a GROUP BY y la condicion debe estar referida a los campos contenidos
en ella.

Presenta el resultado ordenado por las columnas indicadas. El orden puede


ORDER BY expresarse conASC (orden ascendente) y DESC (orden descendente). El valor

predeterminado es ASC.

Para formular una consulta a la tabla tCoches (creada en el captulo de tablas) y


recuperar los campos matricula, marca, modelo, color, numero_kilometros,
num_plazas debemos ejecutar la siguiente consulta. Los datos seran devueltos
ordenados por marca y por modelo en orden ascendente, de menor a mayor.

SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
ORDER BY marca,modelo;

La palabra clave FROM indica que los datos sern recuperados de la tabla
tCoches. Podriamos haber especificado mas de una tabla, pero esto se ver en el
apartado de consultas combinadas.
Tambien podramos haber simplicado la consulta a travs del uso del comodin de
campos, el asterisco "*".

SELECT *
FROM tCoches
ORDER BY marca,modelo;

El uso del asterisco indica que queremos que la consulta devuelva todos los
campos que existen en la tabla.
[arriba]

La clusula WHERE
La clusula WHERE es la instruccin que nos permite filtrar el resultado de una
sentencia SELECT. Habitualmente no deseamos obtener toda la informacin
existente en la tabla, sino que queremos obtener slo la informacin que nos resulte
util es ese momento. La clusula WHERE filtra los datos antes de ser devueltos por
la consulta.
En nuestro ejemplo, si queremos consultar un coche en concreto debemos
agregar una clusula WHERE. Esta clusula especifica una o varias condiciones que
deben cumplirse para que la sentencia SELECT devuelva los datos. Por ejemplo,
para que la consulta devuelva slo los datos del coche con maricula M-1525-ZA
debemos ejecutar la siguiente sentencia:

SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
WHERE matricula = 'M-1525-ZA';
Cuando en una clusula where queremos incluir un tipo texto,
debemos incluir el valor entre comillas simples.

Adems, podemos utilizar tantas condiciones como queramos, utilizando los


operadores lgicos AND y OR . El siguiente ejemplo muestra una consulta que
devolver los coches cuyas matriculas sean M-1525-ZA o bien M-2566-AA.

SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
WHERE matricula = 'M-1525-ZA'
OR matricula = 'M-2566-AA' ;

Adems una condicin WHERE puede ser negada a travs del operador
lgico NOT. La siguiente consulta devolver todos los datos de la tabla tCohes
menos el que tenga matricula M-1525-ZA.

SELECT matricula,
marca,

modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
WHERE NOT matricula = 'M-1525-ZA' ;

Podemos tambien obtener las diferentes marcas y modelos de coches ejecutando


la consulta.

SELECT DISTINCT marca,


modelo
FROM tCoches;

La ver los valores distintos. En el caso anterior se devolveran lpalabra


clave DISTINCT indica que slo queremos os valores distintos del par formado por
los campos marca y modelo.
[arriba]

La clusula ORDER BY
Como ya hemos visto en los ejemplos anteriores podemos especificar el orden en
el que sern devueltos los datos a travs de la clusula ORDER BY.

SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
ORDER BY marca ASC,modelo DESC;

Como podemos ver en el ejemplo podemos especificar la ordenacin ascendente


o descendente a travs de las palabras clave ASCy DESC. La ordenacin depende
del tipo de datos que este definido en la columna, de forma que un campo nmerico
ser ordenado como tal, y un alfanmerico se ordenar de la A a la Z, aunque su
contenido sea nmerico. De esta forma el valor 100 se devuelve antes que el 11.
Tambin podemos especificar el en la clusula ORDER BY el ndice nmerico del
campo dentro del la sentencia SELECT para la ordenacin, el siguiente ejemplo
ordenara los datos por el campo marca, ya que aparece en segundo lugar dentro
de la lista de campos que componen la SELECT.

SELECT matricula,
marca,
modelo,
color,
numero_kilometros,
num_plazas
FROM tCoches
ORDER BY 2;

También podría gustarte