Base de Datos
Lenguaje SQL: DDL, DML, DCL, DQL.
• Prof: Ramón A. Aray L.
SQL
• El lenguaje usado para comunicarse con una base de datos se llama
Lenguaje de Consulta Estructurado (Structured Query Language –
SQL), el cual se ha consolidado como el lenguaje estándar de las base
de datos relacionales. Es un lenguaje muy fácil de usar y parece tan
simple como el inglés.
• SQL es un lenguaje estandarizado que sirve para definir y manipular los
datos de una base de datos relacional. De acuerdo con el modelo
relacional de datos, la base de datos se crea como un conjunto de tablas
y las relaciones se representan mediante valores en las tablas.
• IBM originalmente desarrolló SQL a comienzos de los setentas, llamado
inicialmente “Sequel”, cambió después su nombre a SQL. En 1986 el
ANSI y el ISO presentaron un estándar para SQL llamado SQL-86, en
1992 presentaron el SQL-92, actualmente, está vigente el SQL-99
(SQL3) que es soportado por muchos RDBMS.
SQL
• SQL tiene las siguientes partes:
• Lenguaje de Definición de Datos (Data Definition Language – DDL):
El DDL de SQL proporciona comandos para definir los objetos de la base
de datos. Una tabla, por ejemplo, es un objeto de la base de datos. Otros
objetos de la base de datos incluyan vistas, índices y procedimientos
almacenados.
• Lenguaje de Manipulación de Datos (Data Manipulation Language –
DML): El DML de SQL proporciona comandos para insertar, eliminar y
modificar registros en la(s) tabla(s).
• Lenguaje de Control de Datos (Data Control Language – DCL):
Mientras que el DDL y el DML se refieren a la manipulación de datos
dentro de la base de datos, el DCL del SQL proporciona comandos para
manejar y controlar datos. Ayuda al administrador a controlar la
seguridad y los accesos a los datos, es decir, ayuda a mantener,
administrar y a realizar un control ordenado sobre los datos.
• Lenguaje de Consulta de Datos (Data Query Language – DQL): El
DQL del SQL proporciona comandos para recuperar datos desde tablas.
La Sentencia SELECT es un comando DQL.
SQL - DDL
• Los siguientes son algunos de los comandos SQL pertenecientes a DDL:
• CREATE: El comando CREATE se usa para crear objetos de la base de
datos. Tablas, vistas e índices son algunos ejemplos de objetos de la
base de datos. La sentencia CREATE se usa para describir la estructura
de un objeto de la base de datos.
• Sintaxis para crear una tabla:
– CREATE TABLE nombre_de_la_tabla (
• nombre_de_la_columna1 tipo_de_dato,
• nombre_de_la_columna2 tipo_de_dato,
• …
• nombre_de_la_columnan tipo_de_dato);
SQL - DDL
• Considere la tabla juguetes de la base de datos que se crea
como sigue:
– CREATE TABLE juguetes (
• id_comprador INTEGER NOT NULL,
• producto VARCHAR(40) NOT NULL,
• precio DOUBLE);
• La sentencia anterior, cuando es ejecutada en una
herramienta de SQL, crea una tabla con el nombre juguetes.
La sentencia también incluye algunos nombres de
columnas, sus respectivos tipos de datos y las restricciones
de tipo NOT NULL de las columnas. Hay una palabra clave
NOT NULL en la sentencia anterior.
• La palabra NOT NULL significa que la columna debe tener
un valor en cada fila. NULL indica ningún valor o un valor no
aplicable y es un concepto importante en cualquier RDBMS.
SQL - DDL
• ALTER: El comando ALTER se usa para modificar la estructura de
objetos de la base de datos. Este comando se usa por ejemplo para
agregar una nueva columna a una tabla.
• Sintaxis para agregar columna a una tabla:
– ALTER TABLE juguetes
– ADD COLUMN id_vendedor integer;
• Cuando esta sentencia SQL es ejecutada, una nueva columna llamada
id_vendedor de tipo de dato numérico se agrega a la tabla juguetes.
SQL - DDL
• DROP: El comando DROP se usa para eliminar objetos de la base de
datos. Ejemplo:
– DROP TABLE juguetes;
– DROP VIEW vista_juguetes;
– DROP INDEX indice_juguetes;
• Estos comandos SQL eliminan los siguientes objetos de la base de
datos: la tabla juguetes, la vista vista_juguetes y el índice indice_juguetes.
SQL - DCL
• El Lenguaje de Control de Datos (DCL) es el lenguaje que
se usa para controlar el acceso de datos. Muchos sistemas
tienen grandes volúmenes de datos, que usan muchos
usuarios. En tales situaciones, es importante el monitoreo y
el control del acceso a los datos para garantizar la seguridad
de los datos y prevenir el acceso ilegal a los mismos.
• Los principales comandos DCL son:
– GRANT: Se usa para otorgar privilegios a los usuarios.
– GRANT privilegios ON base/tabla TO usuario [IDENTIFIED by
´contraseña´];
– REVOKE: Se usa para remover los privilegios a los usuarios.
– REVOKE privilegios ON base/tabla FROM usuario [, usuario];
SQL - DML
• El DML se usa para la manipulación de los datos, agregar, eliminar y
actualizar valores.
• Agregar Datos: El comando INSERT se usa para agregar datos a una
tabla. La sintaxis de este comando es como sigue:
– INSERT INTO nombre_de_la_tabla (columna1,columna2)
– VALUES (valor1, valor2);
• Ejemplo:
– INSERT INTO juguetes (id_comprador, producto, precio, id_vendedor)
VALUES (21, ´Barbie’, 200, 01);
• La tabla juguetes contiene 4 columnas: id_comprador, producto, precio y
id_vendedor. La sentencia anterior contiene una lista de columnas
ordenadas y una lista de valores ordenados para las columnas.
SQL - DML
• Otra forma de escribir la sentencia INSERT sería:
– INSERT INTO juguetes VALUES (21, ‘Barbie’, 200, 01);
• Esta sentencia no incluye los nombres de las columnas. Si los nombres
de las columnas no se listan en una sentencia INSERT, entonces la
cláusula VALUES debe contener los valores para todas las columnas en
el mismo orden en el que están listadas las columnas en la tabla.
• La siguiente es otra variación de la sentencia INSERT:
– INSERT INTO juguetes (id_comprador, producto, id_vendedor)
– VALUES (02, ‘Barbie’, 22);
• La sentencia anterior no incluye todas las columnas de la tabla. La
columna precio no está presente así que la tabla tendrá un valor NULL en
la columna precio.
SQL - DML
• Eliminar Datos: La fila que fue insertada en la sección anterior puede
ser ahora eliminada de la base de datos usando el comando DELETE.
La sintaxis del comando DELETE es la siguiente:
– DELTE FROM nombre_de_la_tabla WHERE condición;
• En el comando DELETE, la condición WHERE es opcional. Si la
condición no es especificada, todas las filas son eliminadas. De otra
forma, solo las filas que satisfacen la condición seran eliminadas.
Considere la siguiente sentencia:
– DELETE FROM juguetes WHERE producto = ‘Barbie’;
• En este caso, no solo la última fila que se había agregado será
eliminada, sino también todas las filas que contienen el valor ‘Barbie’ en
producto. Para eliminar solo la última fila agregada , tenemos la siguiente
sentencia:
– DELETE FROM juguetes
– WHERE producto = ‘Barbie’ AND id_comprador = 02 AND id_vendedor =
22;
SQL - DML
• Actualizar Datos: A continuación, se actualizará el precio a los prodctos
“Silla” de la tabla juguetes.
• La sintaxis del comando UPDATE es el siguiente:
– UPDATE nombre_de_la_tabla SET Col1 = valor1, Col2 = valor2 WHERE
condición;
• Tenemos el siguiente ejemplo:
– UPDATE juguetes SET precio = 500 WHERE producto = ‘Silla’;
• Esto coloca el precio de todas la Sillas en 500.
SQL - DQL
• La sentencia SELECT.
• La sentencia SELECT se usa para recuperar datos de las tablas. La
sentencia SELECT puede ser: un simple SELECT o uno condicional. En
una sentencia SELECT condicional, los datos recuperados se basan en
una condición dada.
• Seleccionar datos de todas las columnas de la tabla.
– SELECT * FROM nombre_de_la_tabla;
• Seleccionar datos de ciertas columnas de la tabla.
– SELECT nombrecol1, nombrecol2, …, nombrecoln FROM
nombre_de_la_tabla;
• SELECT nombre, ciudad, estado FROM direcciondeempleado;
SQL - DQL
• Selección Condicional.
• La sentencia SELECT proporciona todos los registros de la tabla. Si se
requiere solo aquellos registros de la tabla que satisfacen una condición
específica, entonces se utiliza la sentencia SELECT condicional con la
cláusula WHERE.
– SELECT * FROM nombre_de_la_tabla WHERE nombre_col = valor;
– SELECT nombre, apellido, cargo FROM empleado WHERE salario >=
3500;
• Funciones Agregadas:
– SUM.
– AVG.
– MIN.
– COUNT.
– MAX.
SQL - DQL
• Función SUM.
– SELECT SUM(salario) FROM empleado;
• Función AVG.
– SELECT AVG(salario) FROM empleado;
• Función MIN.
– SELECT MIN(salario) FROM empleado WHERE cargo = ‘gerente’;
• Función COUNT.
– SELECT COUNT(*) FROM empleado WHERE cargo = ‘técnico’;
• Función MAX.
– SELECT MAX(salario) FROM empleado WHERE cargo = ‘supervisor’;
SQL - DQL
• Condiciones Compuestas y Operadores Lógicos.
• Operador AND.
• Este operador une dos o más condiciones y muestra todas las filas que
satisfacen todas las condiciones de la cláusula WHERE. Por ejemplo,
para mostrar todos los empleados cuya posición sea ‘Personal’ y cuyo
salario sea mayor a 40000, se puede escribir la siguiente consulta:
– SELECT idnoempleado FROM estadisticasempleados
– WHERE salario > 40000 AND posicion = ‘Personal’;
• Operador OR.
• Este operador une dos o más condiciones. Muestra todas las filas que
satisfacen al menos una condición de la cláusula WHERE. Para mostrar
todos los empleados que ganan un salario menor que 40000 o que
obtienen beneficios menores que 10000 se puede escribir la siguiente
consulta:
SQL - DQL
– SELECT idnoempleado FROM estadisticasempleados
– WHERE salario< 40000 OR beneficios < 10000;
• Combinar los operadores AND y OR.
• Es posible combinar los operadores AND y OR en una sola sentencia.
Por ejemplo, para listar todos los ‘Gerente’ que ganan un salario mayor
que 60000 o que obtienen beneficios mayores que 12000, se puede
escribir la siguiente consulta:
– SELECT idnoempleado FROM estadisticasempleados
– WHERE posicion = ‘Gerente’ AND salario > 60000 OR beneficios >
12000;
• El orden de precedencia es importante en este caso. Donde el operador
AND precede al operador OR por lo que AND se evalúa primero y luego
se evalúa el operador OR.
SQL - DQL
• Operador IN
• Se usa para realizar comparaciones con la lista de valores. Por ejemplo,
observe la siguiente consulta:
– SELECT idnoempleado FROM estadisticasempleados
– WHERE posicion = ‘Gerente’ OR posicion = ‘Personal’;
• La consulta lista todos los empleados que son ‘Gerente’ o ‘Personal’. La
consulta se puede escribir usando el operador IN.
– SELECT idnoempleado FROM estadisticasempleados
– WHERE posicion IN (‘Gerente’, ‘Personal’);
• En la consulta anterior, mencionan las posiciones de los empleados en
los que se está interesado como un conjunto de valores que tienen que
ser comparados. Los valores están separados por comas y encerrados
entre paréntesis después del operador IN.
• El operador IN verifica si la condición satisface alguno de los valores que
están entre paréntesis.
SQL - DQL
• Operador BETWEEN.
• Se usa para comprobar si cierto valor está dentro de un rango dado. Por
ejemplo, asuma que se está interesado en encontrar a todos los
empleados que ganan salarios dentro de un rango de 30000 a 50000.
– SELECT idnoempleado FROM estadisticasempleados
– WHERE salario BETWEEN 30000 AND 50000;
• Operador NOT.
• Si se está interesado en listar todos los empleados que no ganan un
salario de 30000 a 50000, se puede escribir la siguiente consulta:
– SELECT idnoempleado FROM estadisticaempleados
– WHERE salario NOT BETWEEN 30000 AND 50000;
• La siguiente consulta lista todos los empleados que no son ‘Gerente’.
– SELECT idnoempleado FROM estadisticaempleados
– WHERE posicion NOT IN (‘Gerente’);
SQL - DQL
• Operador LIKE
• Se usa para verificar patrones dentro de cadenas de caracteres,
compararlos y listar los resultados. Por ejemplo, suponga que se quiere
listar todos los empleados cuyos apellidos empiezan con ‘S’.
– SELECT nombre, apellido FROM direccionempleado WHERE apellido LIKE
‘S%’;
• El signo de porcentaje (%) se usa para representar cero (0) o más
caracteres.
• Para encontrar personas cuyo apellido contengan ‘S’, se escribe ‘%S%’.
• Asuma que alguien está interesado en listar los empleados que contiene
una ‘S’ como la tercera letra de su apellido. En ese caso se usa ‘___S%’.
El (_) indica un carácter no conocido.
SQL - DQL
• Operador CONCAT.
• Se usa para combinar dos cadenas de caracteres o dos campos (del tipo
cadena de caracteres).
• Si se quiere saber el nombre completo de un empleado, se debe
concatenar el nombre y apellido del empleado.
– SELECT CONCAT (nombre, ‘.’ ,apellido) FROM direccionempleado;
• Salida: [Link]
• Alias de los nombres de columnas.
• A los nombres de columnas se le puede asignar un alias. En el ejemplo
anterior la columna no tiene nombre. En la siguiente sentencia
asignamos un nombre de columna.
– SELECT CONCAT (nombre, ‘.’ ,apellido) AS “Nombre Completo” FROM
direccionempleado;
SQL - DQL
• Cláusula ORDER BY.
• Se usa para dar formato a la salida basándose en un campo y en un
cierto orden, el cual puede ser descendente o ascendente. Por defecto
se listan de forma ascendente.
– SELECT * FROM estadisticasempleados ORDER BY salario;
– SELECT * FROM estadisticasempleados ORDER BY salario ASC;
– SELECT * FROM estadisticasempleados ORDER BY salario DESC;
– SELECT * FROM estadisticasempleados ORDER BY posicion ASC, salario
DESC;
SQL - DQL
• Manejo de valores nulos (NULL).
• NULL se usa básicamente cuando el campo escogido no tiene un valor
conocido válido.
• NULL evalúa a sí mismo en cualquier expresión 4 + NULL *2 = NULL.
• Cuando en una definición se indica que un campo es NOT NULL, implica
que el campo debe tener un valor válido.
• El valor NULL no puede ser chequeado usando una ecuación aritmética
con el signo =. Solo puede ser chequeado usando el operador IS.
– SELECT * FROM estadisticasempleados WHERE beneficios IS NULL;
• Salida: muestra todos los empleados que no tienen monto en beneficios.
– SELECT * FROM estadisticasempleados WHERE beneficios IS NOT NULL;
• Salida: muestra todos los empleados que tienen monto en beneficios.
SQL - DQL
• La cláusula DISTINCT.
• Si se necesita encontrar una lista única de posiciones disponibles en la
tabla estadisticasempleados, se puede ejecutar la siguiente consulta:
• SELECT DISTINCT posicion FROM estadisticasempleados;
• Salida: posicion
• ---------------------
• Gerente
• Personal
• Principiante
• Esta consulta no muestra los valores más de una vez,
independientemente de que estén duplicados en la tabla. La cláusula
DISTINCT lista filas únicas.