Tutorial de SQL. Introducción

Introducción

SQL son las siglas de Structured Query Language, que traducido significa Lenguaje de consulta estructurado y que es el estandar de facto para acceso a base de datos.

En lenguaje SQL surgió a raiz de la creación en IBM durante la decada de los 70 de un sistema de base de datos llamado "System R". Para manipular y recuperar datos de dicho sistema se diseño un lenguaje llamado SEQUEL (Standard English Query Language) que finalmente se convertiría en SQL (la historia del cambio de nombre es curiosa y se debió a que el nombre SEQUEL ya estaba registrado por otra compañía, aún así hoy en día una de las pronunciaciones para SQL es, precisamente SEQUEL).

Este no pretende ser un tutorial de base de datos sino una pequeña introducción a SQL de forma que es recomendable saber algo de bases de datos antes de meterse en SQL. Es conveniente saber lo que es una base de datos, su estructura y cuanto menos algunos conceptos básicos (como el hecho de que está organizada en tablas, campos y registros). Si no lo has hecho ya y no tienes esos conceptos sería mejor que comenzaras por la Introducción a Bases de Datos. Además esto es, como se indica, solo una introducción, en posteriores entregas iremos viendo métodos más complejos, especialmente en lo que a los operadores de selección se refiere e iremos entrando con más profundidad en cada uno de ellos.

¿Estandar?

En principio SQL es un estandar ISO desde 1987 sin embargo la especificación SQL es bastante grande y compleja de forma que casi ninguna base de datos implementa la especificación de forma totalmente completa. Por otro lado, las grandes cases de bases de datos (ORACLE o SQL Server por ejemplo) han añadido diversa funcionalidad de forma no homogenea y "fuera" de la especificación a sus propias bases de datos.

En principio SQL, a efectos prácticos, no se puede decir que sea un estandar. Ahora bien, que nadie se asuste, la mayoría de las aplicaciones sencillas funcionarán prácticamente sin cambiar código SQL ya que en muchos casos las diferencias son minimas o se dan en sentencias que, en general se utilizan poco, de forma que la mayor parte de las consultas SQL funcionarán en cualquier base de datos tanto si es Access como si es ORACLE o MySQL.

Dicho lo anterior sin embargo, a modo de ejemplo, en ORACLE las consultas con parametros (que son como argumentos que se deben suministrar a una cadena) se forman precediendo el nombre del parametro con ":" mientras que en SQL Server se forman precediendolo de "@".

DML y DDL

Dentro del lenguaje SQL podemos distinguir las sentencias en dos tipos dependiendo de la función que realicen. Así podemos distinguir entre sentencias DML y DDL.

DML son las siglas de Data Manipulation Language (lenguaje de manipulación de datos) y engloba todas aquellas sentencias que nos permiten consultar o modificar los datos almacenados en la base de datos. Dentro de estas sentencias se encuentran las consultas SELECT, INSERT y DELETE por ejemplo que nos permiten (como veremos más adelante) consultar, insertar y borrar datos de la base de datos respectivamente.

DDL son las siglas de Data Definition Language (lenguaje de definicion de datos) y engloba todas aquellas sentencias que nos permiten definir la propia forma de los datos, es decir, su estructura. Esto, como norma general para las base de datos relacionales, quiere decir modificar la estructura de las tablas que forman la base de datos. Dentro de estas sencencias se encuentran consultas como por ejemplo CREATE TABLE o ADD COLUMN que permiten crear una tabla en la base de datos o añadir una columna a una tabla respectivamente.

Consultas de base de datos

En esta primera parte del tutorial vamos a ver las consultas más comunes de acceso a la base de datos, es decir, aquellas que nos van a permitir obtener datos de la base de datos, insertarlos, actualizarlos y borrarlos y que, como norma general, constituiran el 80% de las consultas que realicemos sobre una base de datos.

Nota: En el artículo se utiliza la palabra consulta para referirse a cualquier tipo de comando SQL independientemente de que sea una consulta propiamente dicha (SELECT) o cualquier otro tipo de consulta como por ejemplo un INSERT.

SELECT

La consulta SELECT nos permite obtener información de la base de datos. Su sintaxis general es la siguiente:

SELECT Tabla1.campo1, Tabla2.campo2 FROM Tabla1, Tabla2 WHERE condiciones

En toda base de datos actual que siga el modelo relacional la información está organizada en tablas y campos. La consulta select nos permite obtener los datos de determinados campos de una o varias tablas, imponer condiciones sobre ellos y realizar otras operaciones de conjuntos (tales como uniones o intersecciones).

Vamos a ver algunos ejemplos sencillos. Para todos ellos vamos a suponer que tenemos dos tablas, la tabla empresas y la tabla productos con los siguientes datos

Empresas
IdEmpresa Nombre Provincia
1 PreMuch Systems Madrid
2 Ocasium Barcelona

Productos
IdProducto IdEmpresa Producto Precio
1 1 CX System 1542
2 1 MX System 2100
3 2 Ford Escort 2500
4 2 Opel Laguna 4500
5 1 Ultra System 2800
Ejemplo1: Selección simple.

Si queremos seleccionar todos los campos de una tabla dada podemos utilizar la siguiente consulta:

SELECT * FROM Empresas

que nos devolverá lo siguiente:

IdEmpresa Nombre Provincia
1 PreMuch Systems Madrid
2 Ocasium Barcelona

En este caso el asterisco (*) en la sección que especifica los campos de la consulta indica que deseamos que la consulta devuelva todos los campos de la consulta

Ejemplo2: Selección solo de determinados campos

Si queremos obtener la información de tan solo determinados campos de la tabla deberemos especificar dichos campos separados por comas como en la siguiente consulta

SELECT Producto, Precio FROM Productos

lo cual produce el siguiente resultado

Producto Precio
CX System 1542
MX System 2100
Ford Escort 2500
Opel Laguna 4500
Ultra System 2800
Ejemplo 3: Selección condicionada
Podemos imponer determinadas condiciones a los campos que nos va a devolver la consulta, por ejemplo si queremos tan solo aquellos campos de la consulta anterior cuyo precio sea inferior a 2600 tendremos

SELECT Producto, Precio FROM Productos WHERE Precio < 2600

La clausula WHERE nos permite imponer condiciones que deben cumplir los campos que devuelva la consulta, hay diversos operadores que veremos más adelante, incluyendo los de comparación (&lt;, &gt;, =) algunos matemáticos (MAX, MIN, SUM) y algunos otros, en nuestro caso la consulta nos devolverá un subconjunto de la anterior, formada por solo aquellos cuyo precio es menor que 2600.

Producto Precio
CX System 1542
MX System 2100
Ford Escort 2500

Otra consulta podría ser, por ejemplo, devolver tan solo aquellos productos pertenecientes a la empresa cuyo identificador es el 2.

SELECT Producto, Precio FROM Productos WHERE IdEmpresa = 2

Cuyo resultado sería

Producto Precio
Ford Escort 2500
Opel Laguna 4500
Ejemplo 4: Selección de varias tablas. Join simple
A veces lo que necesitamos es mezclar los datos de varias tablas. Por ejemplo, en las tablas anteriores quizá queramos obtener todos los productos que pertenecen a la empresa PreMuch Systems (pero sin saber cual es el identificador de dicha empresa). Una forma de hacerlo sería con dos consultas, una para obtener el identificador de la empresa con ese nombre y otra, una vez sabido dicho identificador, para obtener los productos como hemos hecho en el caso anterior. Sin embargo SQL nos permite hacerlo de una forma mucho más sencilla

    SELECT Producto, Precio FROM Productos, Empresas WHERE
    Empresas.Nombre = 'PreMuch Systems' AND
    Empresas.IdEmpresa = Productos.IdEmpresa

Cuyos resultados son

Producto Precio
CX System 1542
MX System 2100
Ultra System 2800

Si examinamos el código anterior podemos observar que, en lenguaje llano, lo que le estamos diciendo a SQL es: "dame los campos Producto y Precio consultando las tablas Productos y Empresas en las que el nombre de la empresa sea PreMuch Systems y cuyo id de empresa coincida con el id de empresa de la tabla productos".

Podemos observar también que en los campos en los que no existe conflicto, es decir, posibilidad de que SQL se "equivoque" podemos usar los nombres normales (Producto y Precio solo existen en la tabla Productos asi que no hay posibilidad de equivocacion) sin embargo IdEmpresa existe en ambas tablas por lo que debemos especificar a que campo nos referimos poniendo el nombre de la tabla seguido de un punto (.) y después el nombre del campo para que no haya ambiguedades. Esto lo podemos hacer, de hecho, para todos los campos que queramos, por ejemplo el campo Nombre solo existe en la tabla Empresas pero aún así le hemos precedido del nombre de la tabla.

INSERT

Las consultas de inserción nos permiten, como su nombre indica, introducir datos en la base de datos. Su sintaxis general es la siguiente:

INSERT INTO Tabla (campo1, campo2, campo3) VALUES (valor1, valor2, valor3)

donde tabla indica la tabla en la que vamos a insertar el registro, campo1, campo2 ... indican los campos a los que vamos a dar valores en nuestra inserción y valor1, valor2 ... indican los valores para dichos campos (valor1 para el campo1, valor2 para el campo2, etc)

Hay otra sintaxis para la consulta que omite los nombres de los campos

INSERT INTO Tabla VALUES (valor1, valor2, valor3)

en la cual se omiten los nombres de los campos. En este caso deberemos proporcionar tantos valores como campos tenga la tabla y además en el orden correcto, por ejemplo para la tabla Empresas anterior habrá que suministrar los valores id, nombre y ciudad y además en ese orden (la única excepción a esto es el primer campo o campos autoincrementales que suelen corresponderse con las claves).

Las consultas de inserción son razonablemente más sencillas que las consultas de selección, fundamentalmente porque constituyen tan solo datos a insertar en una sola tabla. Aún así, antes de pasar a los ejemplos, merece la pena tocar algunas peculiaridades.

  • Campos con valores por omision En una tabla un campo puede estar definido con un valor por omisión. Esto indica que, si no se suministra ninguno, dicho valor se usara automáticamente. Igualmente los campos autoincrementales se calculan automáticamente incrementando en uno el valor del último registro introducido. Para estos campos no es necesario introducir un valor en la consulta INSERT si no se desea.
  • Campos NULL y NOTNULL En una tabla un determinado campo puede también definirse como NOTNULL lo que indica que siempre deberá introducirse un valor para dicho campo o de lo contrario la consulta fallará. Como es obvio siempre debermos proporcionar un valor válido para dichos campos.
  • Campos autoincrementales Los campos autoincrementales no solo pueden dejarse vacios (no introducir su valor en la consulta) sino que por lo general debe hacerse así. Lo más normal es que dichos campos pertenezcan a las claves de la tabla y sean identificadores numéricos sin más sentido que el de poder relacionar unas tablas con otras.
Ejempo:

Insertar un registro en la tabla empresas (una nueva empresa)

INSERT INTO Empresas (IdEmpresa, Nombre, Ciudad)
                     VALUES(3, 'TheAlphasite', 'Madrid')

o bién

  INSERT INTO Empresas VALUES(3,'TheAlphasite', 'Madrid')

e incluso si asumimos que el campo IdEmpresa es autoincremental podríamos hacer

INSERT INTO Empresas VALUES('TheAlphasite', 'Madrid')

En cualquiera de los casos obtendríamos una nueva entrada en nuesta tabla Empresas

Empresas
IdEmpresa Nombre Provincia
1 PreMuch Systems Madrid
2 Ocasium Barcelona
3 TheAlphasite Madrid

UPDATE

La consulta update permite actualizar (modificar) datos ya existentes en la base de datos. Su sintaxis general es

UPDATE Tabla SET campo1 = valor1, campo2 = valor2 WHERE condicion

Las consultas UPDATE nos permiten tan solo actualizar datos existentes, es decir, si no existe un registro que coincida con la condición (o si la tablas esta vacía aunque no haya condición). Veamos algunos ejemplos

Ejemplo 1: Update simple
Si no imponemos restricciones una consulta update actualizará todos los campos de la tabla poniendo los valores suministrados.

  UPDATE Productos SET Precio = 3000

producirá el siguiente resultado

IdProducto IdEmpresa Producto Precio
1 1 CX System 3000
2 1 MX System 3000
3 2 Ford Escort 3000
4 2 Opel Laguna 3000
5 1 Ultra System 3000
Ejemplo 2: Update condicionado

Podemos imponer el mismo tipo de condiciones al UPDATE que las que imponiamos en las consultas SELECT. Por ejemplo, si queremos cambiar el precio de todos aquellos productos cuyo precio sea inferior a 2300 tendremos

  UPDATE Productos SET Precio = 1500 WHERE Precio < 2300

que produce el siguiente resultado

IdProducto IdEmpresa Producto Precio
1 1 CX System 1500
2 1 MX System 1500
3 2 Ford Escort 2500
4 2 Opel Laguna 4500
5 1 Ultra System 2800

o si queremos modificar solo los productos de la empresa cuyo id es el 2

  UPDATE Productos SET Precio = 1500 WHERE IdEmpresa = 2

IdProducto IdEmpresa Producto Precio
1 1 CX System 1542
2 1 MX System 2100
3 2 Ford Escort 1500
4 2 Opel Laguna 1500
5 1 Ultra System 2800

DELETE

Para finalizar la consulta DELETE nos permite eliminar registros de una tabla, su sintaxis general es

DELETE FROM Tabla WHERE condicion

Si omitimos la condición estaremos borrando todos los registros de la tabla dada

Ejemplo 1: Borrar todos los registros de una tabla
  DELETE FROM Productos

aunque la siguiente consulta también se considera válida

  DELETE * FROM Productos

Ejemplo2: Borrado selectivo
El uso de la condición nos permite seleccionar con mayor precisión cuales son exactamente los registros que deseamos borrar.

  DELETE FROM Productos WHERE Precio < 2500

que produciría el siguiente resultado (observad que es menor (&lt;) y no menor o igual (&lt;=))

IdProducto IdEmpresa Producto Precio
4 2 Opel Laguna 4500
5 1 Ultra System 2800

O por ejemplo podemos borrar todas las empresas ubicadas en Madrid

  DELETE FROM Empresas WHERE Ciudad = 'Madrid'

Notas finales

Solo hemos cubierto algunas de las acciones más básicas que se pueden llevar a cabo. SQL es un lenguaje con muchisimo potencial en sus consultas (principalmente de selección) y nos hemos dejado fuera cosas como consultas anidadas, varios tipos de JOINS entre tablas (mezclar los datos de varias tablas) y algunas otras cosas que veremos más adelante.

Por otro lado en todos los ejemplos las palabras reservadas (select, from, etc) están escritas en mayusculas. SQL es case insensitive, es decir, no distingue entre mayusculas y minusculas, sin embargo yo recomendaría utilizar siempre ese estilo para facilitar la lectura.

6
Average: 6 (3 votes)
Your rating: None