Conceptos generales, estructura básica, predicados y operadores. Tipos de datos.
SQL
Introducción
El lenguaje de consulta estructurado SQL (Standard Query Language) ) es un lenguaje de base de datos normalizado, utilizado por el motor de base de datos de Microsoft Jet el cual nos permite crear tablas y obtener datos de ella de manera muy sencilla.
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.
Para exponer mas claramente los conceptos se realizaran ejemplo sobre relaciones que se crearan aquí para entender mejor como funciona SQL.
Cuando nos refiramos a relación estamos hablando mas concretamente de la tabla de datos en si, y sus atributos serán los campos de la tabla. Como ejemplo la siguiente relación (tabla) la llamaremos persona y sus atributos ( campos ) son nombre, apellido y Id
ID |
NOMBRE |
APELLIDO |
34568 |
JOSE |
ALVAREZ |
54856 |
PABLO |
LÓPEZ |
56640 |
ROBERTO |
SÁNCHEZ |
71280 |
JUAN |
BALDERAS |
42389 |
RUBEN |
LÓPEZ |
54836 |
SANDRA |
BULLOCK |
Existen dos tipos de comandos SQL:
- los DLL que permiten crear y definir nuevas bases de datos, campos e índices.
- los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.
Comandos DLL
CREATE Utilizado para crear nuevas tablas, campos e índices
DROP Empleado para eliminar tablas e índices
ALTER Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos.
Comandos DML
SELECT Utilizado para consultar registros de la base de datos que satisfagan un criterio determinado
INSERT Utilizado para cargar lotes de datos en la base de datos en una única operación.
UPDATE Utilizado para modificar los valores de los campos y registros especificados
DELETE Utilizado para eliminar registros de una tabla de una base de datos
Estructura básica
Las cláusulas son condiciones de modificación utilizadas para definir los datos que desea seleccionar o manipular.
FROM Utilizada para especificar la tabla de la cual se van a seleccionar los registros
WHERE Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar
GROUP BY Utilizada para separar los registros seleccionados en grupos específicos
HAVING Utilizada para expresar la condición que debe satisfacer cada grupo
ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con un orden específico
La estructura básica de una expresión para consulta SQL consta de tres elementos:
- SELECT
- FROM
- WHERE
Consultas de Selección
Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros.
Una consulta básica en SQL tiene la forma:
SELECT A1,A2,...,An
FROM r1,r2,...,rn
WHERE P
Donde:
A = atributo ( Campo de la tabla )
r = relación ( Tabla )
P = condición
Ejemplo: Seleccionar todos los nombres de las personas que tengan el apellido LÓPEZ de la tabla PERSONA
SELECT nombre
FROM persona
WHERE apellido = “LÓPEZ”;
APELLIDO |
ID |
LÓPEZ |
54856 |
LÓPEZ |
42389 |
El resultado de una consulta es por supuesto otra relación (Tabla). Si se omite la cláusula WHERE, el predicado P es verdadero. La lista A1, A2,..., An puede sustituirse por un asterisco (*) para seleccionar todos los atributos de todas las relaciones que aparecen en la cláusula FROM, aunque no es conveniente elegir esta ultima opción salvo que sea necesario pues desperdiciamos mucho tiempo en obtenerlo.
Predicados y operadores.
Los operadores lógicos en SQL son:
- AND Es el "y" lógico. Evalua dos condiciones y devuelve un valor de verdad sólo si ambas son ciertas.
- OR Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de verdar si alguna de las dos es cierta.
- NOT Negación lógica. Devuelve el valor contrario de la expresión.
La lógica de estos operadores es igual que en cualquier lenguaje de programación y sirven para unir predicados.
Las operaciones aritméticas en SQL son:
- + ( Suma )
- - ( Resta )
- * ( Multiplicación )
- / ( División )
Funciones de Agregado
Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de registros para devolver un único valor que se aplica a un grupo de registros.
Función |
Descripción |
AVG |
Utilizada para calcular el promedio de los valores de un campo determinado |
COUNT |
Utilizada para devolver el número de registros de la selección |
SUM |
Utilizada para devolver la suma de todos los valores de un campo determinado |
MAX |
Utilizada para devolver el valor más alto de un campo especificado |
MIN |
Utilizada para devolver el valor más bajo de un campo especificado |
Operadores de Comparación
Operador |
Uso |
< |
Menor que |
> |
Mayor que |
<> |
Distinto de |
<= |
Menor ó Igual que |
>= |
Mayor ó Igual que |
= |
Igual que |
BETWEEN |
Utilizado para especificar un intervalo de valores. |
LIKE |
Utilizado en la comparación de un modelo |
| In | Utilizado para especificar registros de una base de datos |
El operador de comparación BETWEEN, se utiliza para valores comprendidos.
Ejemplo: Encontrar todos los nombres y Id de las personas cuyos Id sea mayor que 50 mil y menor a 60 mil
SELECT nombre, Id
FROM persona
WHERE Id BETWEEN 50000 and 60000
NOMBRE |
ID |
PABLO |
54856 |
ROBERTO |
56640 |
SANDRA |
54836 |
Ordenar los registros.
Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la cláusula ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo:
SELECT Nombre, Apellido, Id FROM persona ORDER BY Nombre;
Esta consulta devuelve los campos Nombre, Apellido y Id ordenados por el campo Nombre.
El resultado sería:
JOSE |
ALVAREZ |
34568 |
JUAN |
BALDERAS |
71280 |
PABLO |
LÓPEZ |
54856 |
ROBERTO |
SANCHEZ |
56640 |
RUBEN |
LÓPEZ |
42389 |
SANDRA |
BULLOCK |
54836 |
Consultas con Predicado
El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar, los posibles predicados son:
| Predicado | Descripción |
ALL |
Devuelve todos los campos de la tabla |
TOP |
Devuelve un determinado número de registros de la tabla |
DISTINCT |
Omite los registros cuyos campos seleccionados coincidan totalmente |
DISTINCTROW |
Omite los registros duplicados basándose en la totalidad del registro y no sólo en los campos seleccionados. |
Si no se incluye ninguno de los predicados se asume ALL. El Motor de base de datos selecciona todos los registros que cumplen las condiciones de la instrucción SQL.
Con el uso de este predicado obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, se recomienda por su rapidez indicar el listado de campos deseados. Ejemplo:
SELECT ALL FROM persona;
SELECT * FROM persona;
TOP
Devuelve un cierto número de registros que entran entre al principio o al final de un rango especificado por una cláusula ORDER BY. Supongamos que queremos recuperar los nombres de las 3 primeras personas de nuestra tabla ejemplo.
SELECT TOP 3 Nombre, Apellido FROM persona ORDER BY Apellido;
Si no se incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario de 3 registros de la tabla persona .El predicado TOP no elige entre valores iguales.
Se puede utilizar la palabra reservada PERCENT para devolver un cierto porcentaje de registros que caen al principio o al final de un rango especificado por la cláusula ORDER BY. Ejemplo:
SELECT TOP 30 PERCENT Nombre, Apellido FROM persona
ORDER BY Apellido;
La cláusula WHERE
La cláusula WHERE puede usarse para determinar qué registros de las tablas enumeradas en la cláusula FROM aparecerán en los resultados de la instrucción SELECT. Depués de escribir esta cláusula se deben especificar las condiciones. Si no se emplea esta cláusula, la consulta devolverá todas las filas de la tabla. WHERE es opcional, pero cuando aparece debe ir a continuación de FROM.
SELECT Nombre, Apellido FROM persona WHERE Id > 56000;
Obtendríamos el siguiente resultado:
ROBERTO |
SANCHEZ |
56640 |
JUAN |
BALDERAS |
71280 |
SELECT Nombre, Apellido FROM persona WHERE Apellido ="López";
Consultas de Acción
Las consultas de acción son aquellas que no devuelven ningún registro, son las encargadas de acciones como añadir y borrar y modificar registros.
DELETE
Crea una consulta de eliminación que elimina los registros de una o más de las tablas listadas en la cláusula FROM que satisfagan la cláusula WHERE. Esta consulta elimina los registros completos, no es posible eliminar el contenido de algún campo en concreto. Su sintaxis es:
DELETE Tabla.* FROM Tabla WHERE criterio
La opción tabla.* se utiliza cuando el origen está basado en varias tablas, y sirve para indicar en qué tabla vamos a borrar.
DELETE * FROM persona WHERE Apellido = "Sánchez";
La opción * es opcional y es la que se asume por defecto y se puede poner unicamente cuando el origen es una sola tabla.
Nota importante. Una vez borrados, los registros no se pueden recuperar.
Para saber con seguridad qué registros se eliminarán, primero se puede ejecutar una consulta de selección que utilice el mismo criterio y después ejecutar la consulta de borrado. Es importante mantener copias de seguridad de los datos por si se eliminan los registros equivocados, podrán ser recuperarados.
INSERT INTO
La inserción de nuevos datos en una tabla se realiza añadiendo filas enteras a la tabla, la sentencia SQL que lo permite es la orden INSERT INTO.
Esta consulta puede ser de dos tipo: Insertar un único registro ó Insertar en una tabla los registros contenidos en otra tabla.
Para insertar un único Registro:
En este caso la sintaxis es la siguiente:
INSERT INTO Tabla (campo1, campo2, .., campoN)
VALUES (valor1, valor2, ..., valorN)
Por ejemplo utilizando nuestra tabla muestra.
INSERT INTO persona (Nombre, Apellido, Id) VALUES ('Luis', 'Sánchez', '54122');
Para insertar Registros de otra Tabla:
INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen
De esta forma los campos de TablaOrigen se grabarán en Tabla, para realizar esta operación es necesario que todos los campos de TablaOrigen estén contenidos con igual nombre en Tabla. Tabla deberá poseer todos los campos de TablaOrigen (igual nombre e igual tipo).
UPDATE
Crea una consulta de actualización que cambia los valores de los campos de una tabla especificada basándose en un criterio específico. Su sintaxis es:
UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorN
WHERE Criterio;
Ejemplo:
UPDATE persona SET Id = 12345 WHERE Id = 34568;
Tipos de Datos
Los tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios sinónimos válidos reconocidos por dichos tipos de datos.
Los tipos de datos primarios son:
BINARY, BIT, BYTE, COUNTER, CURRENCY, DATETIME, SINGLE, DOUBLE, SHORT, LONG, LONGTEXT, LONGBINARY, TEXT
Estructuras de las Tablas
Creación de Tablas Nuevas.
La sentencia CREATE TABLE sirve para crear la estructura de una tabla no para rellenarla con datos, nos permite definir las columnas que tiene y ciertas restricciones que deben cumplir esas columnas.
La sintaxis es la siguiente:
CREATE TABLE tabla (campo1 tipo (tamaño) índice1 ,
campo2 tipo (tamaño) índice2 , ...,
índice multicampo , ... )
Donde:
tabla nombre de la tabla que estamos definiendo.
campo1, campo2 nombre de la columna que estamos definiendo
tipo: tipo de dato de la columna, todos los datos almacenados en la columna deberán ser de ese tipo.
indice1, indice2 Es una cláusula CONSTRAINT que define el tipo de indice a crear. Esta cláusula en opcional.
indice multicampo Es una cláusula CONSTRAINT que define el tipo de indice multicampos a crear. Un índice multicampo es aquel que está indexado por el contenido de varios campos. Esta cláusula en opcional.
Ejemplos:
CREATE TABLE persona (Nombre TEXT (25) , Apellido TEXT (50));
Crea una nueva tabla llamada PERSONA con dos campos, uno llamado Nombre de tipo texto y longutid 25 y otro llamado apellidos con longitud 50.
CREATE TABLE persona (Id INTEGER CONSTRAINT IndicePrimario PRIMARY, Nombre TEXT, Apellido TEXT, Fecha_Nacimiento DATETIME);
Crea una tabla llamada PERSONA con un campo Texto de longitud predeterminada (50) llamado Nombre y otro igual llamado Apellido, crea otro campo llamado Fecha_Nacimiento de tipo Fecha/Hora y el campo Id de tipo entero el que establece como clave principal.
ID |
NOMBRE |
APELLIDO |
FECHA_NAC |
34568 |
JOSE |
ALVAREZ |
19/06/1975 |
54856 |
PABLO |
LÓPEZ |
03/08/1973 |
56640 |
ROBERTO |
SÁNCHEZ |
08/05/1980 |
71280 |
JUAN |
BALDERAS |
02/06/1979 |
42389 |
RUBEN |
LÓPEZ |
03/06/1976 |
54836 |
SANDRA |
BULLOCK |
04/04/1979 |
La cláusula CONSTRAINT
Se utiliza la cláusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar índices. Existen dos sintaxis para esta cláusula dependiendo si desea Crear ó Eliminar un índice de un único campo o si se trata de un campo multiíndice.
Tipo de Indice |
Descripción |
UNIQUE |
Genera un índece de clave única, lo que implica que los registros de la tabla no pueden contener el mismo valor en los campos indexados. |
PRIMARY KEY |
Genera un índice primario en el campo o los campos especificados. Todos los campos de la clave principal deben ser únicos y no nulos, cada tabla sólo puede contener una única clave principal. |
FOREIGN KEY |
Genera un índice externo (toma como valor del índice de los campos contenidos en otras tablas). Una clave foránea es una columna o conjunto de columnas que contiene un valor que hace referencia a una fila de otra tabla, |
Modificar el Diseño de una Tabla.
Modifica el diseño de una tabla ya existente, se pueden modificar los campos o los índices existentes. Su sintaxis es:
ALTER TABLE tabla {ADD {COLUMN tipo de campo[(tamaño)] [CONSTRAINT índice] CONSTRAINT índice multicampo} |
DROP {COLUMN campo I CONSTRAINT nombre del índice} }
En donde:
tabla Es el nombre de la tabla que se desea modificar.
campo Es el nombre del campo que se va a añadir o eliminar.
tipo Es el tipo de campo que se va a añadir.
tamaño El el tamaño del campo que se va a añadir (sólo para campos de texto).
índice Es el nombre del índice del campo (cuando se crean campos) o el nombre del índice de la tabla que se desea eliminar.
índice multicampo Es el nombre del índice del campo multicampo (cuando se crean campos) o el nombre del índice de la tabla que se desea eliminar.
ADD COLUMN Se utiliza para añadir un nuevo campo a la tabla, indicando el nombre, el tipo de campo y opcionalmente el tamaño (para campos de tipo texto).
ADD Se utliza para agregar un índice de multicampos o de un único campo.
DROP COLUMN Se utliza para borrar un campo. Se especifica únicamente el nombre del campo.
DROP Se utiliza para eliminar un índice. Se especifica únicamente el nombre del índice a continuación de la palabra reservada CONSTRAINT.
Ejemplo:
Agrega un campo Salario de tipo Moneda a la tabla persona.
ALTER TABLE persona ADD COLUMN Salario CURRENCY;
Elimina el campo Salario de la tabla persona.
ALTER TABLE persona DROP COLUMN Salario;
DROP TABLE
La sentencia DROP TABLE sirve para eliminar una tabla. No se puede eliminar una tabla si está abierta, tampoco la podemos eliminar si el borrado infringe las reglas de integridad referencial (si interviene como tabla padre en una relación y tiene registros relacionados).
La sintaxis es la siguiente:
DROP TABLE tabla1
Ejemplo:
DROP TABLE persona
Elimina de la base de datos la tabla persona.
| Ir a Inicio |
|---|
