Este documento describe el lenguaje SQL y sus componentes principales. SQL se utiliza para definir y manipular datos en bases de datos relacionales y consta de tres lenguajes: DDL para definir objetos de base de datos, DML para manipular datos, y DQL para consultar datos. El documento explica comandos como CREATE, ALTER, DROP, INSERT, y DELETE y conceptos como tablas, campos, claves primarias y foráneas.
Nos permite conocer y realizar operaciones con los diversos comandos que existen.como es el create,alter,drop,truncate en el administrado de base de datos sql server
Nos permite conocer y realizar operaciones con los diversos comandos que existen.como es el create,alter,drop,truncate en el administrado de base de datos sql server
Instrucciones del procedimiento para la oferta y la gestión conjunta del proceso de admisión a los centros públicos de primer ciclo de educación infantil de Pamplona para el curso 2024-2025.
1. . Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Modelo Relacional, Entidad, Relaciones, atributos, cardinalidad. Tablas, Campos, laves primarias,
claves foráneas, restricciones, clausulas sql
Unidad II: El Lenguaje de Base de Datos SQL
Objetivo de la Unidad:
Al finalizar esta unidad de aprendizaje los alumnos comprenden e interpreta el lenguaje SQL
Desarrollo
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 bases 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.
Cada RDBMS viene con una herramienta de uso interactivo que permite al usuario ingresar sentencias
SQL y pasarlas a la base de datos para su ejecución. Estas sentencias, técnicamente llamadas consultas
(queries), ayudan a crear, acceder y dar mantenimiento a los distintos objetos de la base de datos.
Introducción
El lenguaje SQL sirve para el acceso a la información almacenada en las bases de datos. Es un
lenguaje sencillo de consulta, que permite realizar operaciones de selección, inserción, actualización y
borrado de datos, así como operaciones administrativas sobre las bases de datos.
SQL es un estándar mantenido por ANSI, por lo que las bases del lenguaje son las mismas en la
mayoría de los motores de bases de datos relacionales. Una persona que conozca las bases del
lenguaje, con el acceso a una referencia básica del motor particular con el que esté trabajando será
capaz de escribir consultas para cualquier base de datos. La estructura de las consultas es
prácticamente igual, aunque existen pequeñas diferencias a la hora de organizar los bloques de las
sentencias y especificar operaciones o funciones de administración. También dependiendo del motor
de base de datos puede tener soporte a algunas operaciones extra cómo procedimientos o
transacciones, así como un juego de funciones específico.
Objetivo de la guía
En esta unidad se abordará el lenguaje universal de las base de datos. El objetivo que nos planteamos
es que, al finalizar el alumno sea capaz de realizar el Modelo físico de datos de un sistema de
información y realizar las diferentes consultas a la base de datos
Requerimientos.
Se debe contar con: Un (1) computador teniendo como mínimo el Sistema Operativo Libre
( Canaima/Ubuntu), SGBD MYSQL (phpmyadmin)
Componentes.
2. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Componentes del SQL
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.
El SQL tiene las siguientes partes:
Lenguaje de Definición de Datos (Data Definition Language - DDL): El DDL del 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 incluyen vistas, índices y procedimientos almacenados.
El Comando 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
);
Clave Primaria
La clave primaria es una columna de una tabla, la cual se usa para identificar un registro en la tabla. Para que un
campo sea una clave primaria, su valor debe ser NOT NULL y debe ser único. El campo debe tener un valor
válido, el cual debe ser completamente diferente de los otros valores.
Una tabla puede tener sólo una clave primaria, ésta también puede ser una clave compuesta, donde más de una
columna se combinan para actuar como la clave primaria. Las columnas individuales de la clave primaria
compuesta deben tener valores válidos. La combinación de las columnas de la clave compuesta debe ser única.
Por ejemplo, considere la tabla juguetes de la base de datos que se crea como sigue:
CREATE TABLE juguetes (
id_comprador INTEGER NOT NULL PRIMARY KEY,
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. La palabra Primary key indica que ese campo es
la clave primaria de la tabla
Hay una palabra clave NOT NULL en la sentencia CREATE 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.
Clave Foránea
La clave foránea es una columna en una tabla cuyos valores son dependientes de los valores existentes en otras
tablas.
Una columna se denomina una clave foránea sólo si se refiere a una columna de la clave primaria de otra tabla.
Una restricción definida entre una clave foránea y una clave primaria se llama restricción de integridad
referencial.
La tabla que contiene la clave primaria a la cual hace referencia la clave foránea, se denomina tabla padre. La
tabla que contiene la clave foránea se denomina tabla hija.
3. . Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Los valores permitidos en una columna de clave foránea son valores de las columnas a las que referencian o son
valores nulos.
La clave primaria desempeña un papel importante al hacer cumplir las restricciones de integridad referencial.
FOREIGN KEY (key_id) REFERENCES tabla (clave primaria) ON DELETE CASCADE.
Tabla padres
CREATE TABLE cliente (
id_cliente INT NOT NULL,
nombre VARCHAR(30) NOT NULL,
PRIMARY KEY(id_cliente),
Tabla hija
CREATE TABLE factura (
id_factura INT NOT NULL,
id_cliente INT NOT NULL,
monto DOUBLE,
fecha DATE,
PRIMARY KEY(id_factura),
FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente) ON DELETE CASCADE
);
Clave primaria compuestas
PRIMARY KEY(id_campo1,id_campo2).
CREATE TABLE articulo(
id_articulo INT NOT NULL,
nombre VARCHAR(30) NOT NULL,
costo DOUBLE,
precio DOUBLE,
PRIMARY KEY(id_articulo),
);
CREATE TABLE detalle_factura(
id_factura int INT NOT NULL,
id_articulo INT NOT NULL,
cantidad INT NOT NULL,
PRIMARY KEY(id_factura,id_articulo)
FOREIGN KEY (id_art) REFERENCES articulo(id_articulo) ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (id_fact) REFERENCES factura(id_factura) ON UPDATE CASCADE ON
DELETE CASCADE)
ENGINE=INNODB;
El Comando 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. El siguiente ejemplo muestra cómo las columnas
pueden ser agregadas a una tabla.
ALTER TABLE juguetes
ADD COLUMN id_vendedor integer;
Cuando la sentencia SQL anterior es ejecutada, una nueva columna llamada id_vendedor de tipo de dato
numérico se agrega a la tabla juguetes.
El Comando DROP
El comando DROP se usa para eliminar objetos de la base de datos. Por ejemplo:
DROP TABLE juguetes;
4. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
DROP VIEW vista_juguetes;
DROP INDEX indice_juguetes;
Los comandos SQL anteriores eliminan los siguientes objetos de la base de datos: la tabla juguetes, la
vista vista_juguetes y el índice indice_juguetes.
Lenguaje de Manipulación de Datos (Data Manipulation Language - DML): El DML del SQL
proporciona comandos para insertar, eliminar y modificar registros en la(s) tabla(s).
El DML se usa para la manipulación de los datos: agregar, eliminar y actualizar losvalores.
Algunos de los comandos SQL en esta categoría se listan a continuación:
• INSERT: Se usa para agregar valores en la tabla. Formato:
INSERT into nombre_de_la_tabla (columna1,columna2 )
VALUES (valor1, valor2);
El siguiente comando inserta una fila en una tabla: INSERT INTO juguetes (id_comprador, producto,
precio, id_vendedor) VALUES (21, 'Barbie', 200.00, 01); La tabla juguetes contiene cuatro 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.
A continuación se muestra otra forma de escribir la sentencia INSERT:
INSERT INTO juguetes VALUES (21, 'Barbie', 200.00, 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.
El orden en el cual las columnas son creadas en una tabla es dependiente del orden en que fueron
colocadas las columnas en la sentencia CREATE, cuando la tabla fue creada.
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. El orden de las columnas en la sentencia INSERT anterior ha
sido cambiado. Sin embargo, el orden de las columnas no importa si los nombres de las columnas se mencionan
explícitamente y se enumeran los valores de las columnas correspondientes.
• DELETE: Se usa para eliminar valores de la tabla.
DELETE 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, sólo las filas que satisfacen la condición serán 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, se usará la siguiente
instrucción:
DELETE FROM juguetes WHERE producto = 'Barbie' AND id_comprador = 02 AND
id_vendedor = 22;
• UPDATE: Se usa para actualizar o cambiar los valores presentes en la tabla.
A continuación, se actualiza el precio a los productos “Silla” de la tabla juguetes.
La sintaxis del comando UPDATE es:
UPDATE nombre_de_la_tabla SET Col1=valor1, Col2=valor2
WHERE Condición;
Se puede hacer esto con la siguiente instrucción:
UPDATE juguetes SET precio = 500.00 WHERE producto = 'Silla';
Esto coloca el precio de todas las sillas a 500.00.
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.
5. . Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
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
La sintaxis básica de la sentencia SELECT es como sigue:
SELECT * FROM nombre_de_la_tabla;
La sentencia anterior se usa para obtener todas las columnas de la tabla. El * denota todas las columnas.
• Seleccionar Datos de Ciertas Columnas de la Tabla
Lo siguiente es la sintaxis para obtener ciertas columnas específicas de la tabla:
SELECT nombrecol1, nombrecol2, …, nombrecoln FROM
nombre_de_la_tabla;
Para obtener las columnas Nombre, Ciudad y Estado listadas en la Tabla 1.4, se puede ejecutar la siguiente
sentencia SQL:
SELECT nombre, ciudad, estado FROM direcciondeempleado;
Se muestra la capacidad de SQL para escoger los valores de ciertas columnas que son requeridas por el usuario.
Selección Condicional
La sentencia SELECT proporciona todos los registros de la tabla. Si se requiere sólo aquellos registros en la
tabla que satisfacen una condición específica, entonces se usa la sentencia SELECT condicional con la cláusula
WHERE.
La Cláusula WHERE
Lo siguiente es la sintaxis de la cláusula WHERE:
SELECT * FROM nombre_de_la_tabla WHERE NOMBRE_COL = VALOR;
La cláusula WHERE se usa para especificar que sólo ciertas filas de la tabla deben mostrarse. Ésta se usa junto
a los operadores relacionales tales como mayor que, menor que o igual a.
Operadores Relacionales Útiles
Hay seis operadores relacionales en SQL, como se muestra :
= Igual
<> o != Diferente
< Menor que
> Mayor que
<= Menor o igual a
>= Mayor o igual a
Considere un ejemplo sobre el uso de operadores relacionales y la cláusula WHERE.
Observe la Tabla 1.6, la cual contiene el detalle de los salarios y las posiciones de los empleados de una
organización.
6. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Para ver los idnoempleado de aquellos empleados que tienen un salario de $50,000 o más, se puede ejecutar la
siguiente sentencia SQL:
SELECT idnoempleado FROM estadisticasdeempleados WHERE salario >= 50000;
Note que se usa el signo >= (mayor o igual a). Esto es porque se quiere ver la lista de aquellos empleados cuyos
salarios son mayores o iguales a $50,000, listados todos juntos. El resultado del comando anterior será:
IDNOEMPLEADO
------------
010
105
152
215
244
La descripción WHERE salario >= 50000, se conoce como una condición, es decir, una operación la cual al
evaluarse da verdadero o falso. Las condiciones se pueden usar también para columnas de texto. Observe la
siguiente sentencia:
SELECT idnoempleado FROM estadisticasdeempleados WHERE posicion = 'Gerente';
Esta sentencia muestra los idnoempleado de todos los registros que cumplen con posicion= 'Gerente'. Cualquier
texto que aparezca en la sentencia debe estar encerrado entre comillas simples ('). Note que el valor Gerente en
la cláusula WHERE es sensible a las mayúsculas y minúsculas (case sensitive) y por lo tanto, debe ser
comparado en la forma como está almacenado en la tabla.
Funciones Agregadas
Las funciones agregadas, también conocidas como funciones de grupo, se usan en sentencias SQL para trabajar
sobre conjuntos o grupos específicos de filas.
A continuación se presentan las cinco funciones agregadas más importantes:
La Función SUM
SELECT SUM(salario) FROM estadisticasdeempleados;
La consulta anterior retorna el salario total de todos los empleados de la tabla. El resultado de la consulta es:
1___
455000
La Función AVG
SELECT AVG(salario) FROM estadisticasdeempleados;
La consulta retorna el salario promedio de los empleados listados en la tabla. El
resultado es: 1___50555
La Función MIN
SELECT MIN(beneficios) FROM estadisticasdeempleados WHERE posicion = 'Gerente'
La función MIN toma el nombre de la columna e identifica el valor mínimo disponible en esa columna para las
filas que satisfacen una condición, si es dada. En la consulta anterior, la cláusula WHERE limita las filas a los
empleados que son 'Gerente'. La función MIN identifica el mínimo beneficio ganado por un „Gerente‟. La
consulta anterior retorna el siguiente resultado:
7. . Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
1__
12500
La Función COUNT
SELECT COUNT(*) FROM estadisticasdeempleados WHERE posicion = 'Personal';
La consulta cuenta el número de empleados que pertenecen a la posición 'Personal'. En el ejemplo anterior, la
función COUNT toma * como el nombre de una columna. El * denota todas las columnas en la tabla. En este
caso, se refiere a las filas en la tabla que satisfacen la condición dada.
El * se puede usar sólo con la función COUNT y no con otras funciones agregadas.
Otras funciones agregadas toman los nombres de las columnas o expresiones como entrada.
La consulta anterior retorna el siguiente resultado:
1
3
La función count sólo contabiliza los registros donde la columna seleccionada tenga valores distintos a null.
La Función MAX
La función MAX() retorna el máximo valor para una columna dada, entre el conjunto de filas seleccionadas.
Observe la siguiente sentencia.
SELECT MAX(SALARIO) FROM estadisticasdeempleados;
Esta consulta retorna el salario máximo ganado por un empleado listado en la tabla:
1__
75000
Condiciones Compuestas y Operadores Lógicos
El Operador AND
El operador AND une dos o más condiciones y muestra todas las filas que satisfacen todas las condiciones en la
cláusula WHERE. Por ejemplo, para mostrar todos los empleados cuya posición sea „Personal‟ y cuyo salario es
mayor a $40,000, se puede escribir la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE salario > 40000 AND posicion = 'Personal';
El Operador OR
El operador OR une dos o más condiciones. Muestra todas las filas que satisfacen al menos una condición en la
cláusula WHERE. Para mostrar todos los empleados que ganan un salario menor que $40,000 ó que obtienen
beneficios menores que $10,000, se puede escribir la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados
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 $60,000 o que obtienen beneficios mayores que $12,000, se puede
escribir la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE posicion = 'Gerente' AND salario > 60000 OR beneficios > 12000;
La sentencia SQL anterior usa los operadores AND y OR. El orden de precedencia es importante en este caso.
En este caso, el operador AND precede al operador OR por lo que las condiciones con el operador AND se
evalúan primero y luego se evalúan las condiciones con el operador OR.
El orden en el cual la sentencia SQL anterior se ejecuta es el siguiente:
posicion = 'Gerente' AND salario > 60000 = X
X OR beneficios > 12000
Paso 1: Limita las filas a las personas que son gerente y ganan un salario mayor que $60,000.
Paso 2: Limita las filas a las personas del Paso 1 o las personas que tienen beneficios mayor que $12,000.
La sentencia SQL anterior puede ser también escrita de la siguiente forma:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE (posicion = 'Gerente' AND salario > 60000) OR beneficios > 12000;
8. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Las condiciones que están entre paréntesis se evalúan primero. Estos sobre escriben cualquier orden de
precedencia.
Ahora observe la siguiente consulta y descubra lo que hace:
SELECT idnoempleado FROM estadisticasdeempleados WHERE posicion = 'Gerente' AND (salario > 60000
OR beneficios > 12000);
Como se mencionó anteriormente, las condiciones entre paréntesis se evalúan primero, y luego las otras
condiciones. Los pasos involucrados en la evaluación de la consulta anterior son los siguientes: salario > 60000
OR beneficios > 12000 = X WHERE posicion = 'Gerente' AND X
Paso 1: Identifique las filas de las personas que ganan un salario mayor que $60,000 o beneficios mayores que
$12,000.
Paso 2: Identifique las personas que son gerente y que satisfacen el Paso 1.
El Operador IN
El operador IN se usa para realizar comparaciones con una lista de valores. Por ejemplo, observe la siguiente
consulta:
SELECT idnoempleado FROM estadisticasdeempleados WHERE posicion='Gerente' OR posicion= 'Personal';
La consulta lista todos los empleados que son gerente o del personal. La consulta se puede escribir usando un
operador IN.
SELECT idnoempleado FROM estadisticasdeempleados 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.
El Operador BETWEEN
El 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 un
rango de [$30,000 a $50,000]. ¿Cómo se escribe esta consulta?
Rango del salario [30000 a 50000]
SELECT idnoempleado FROM estadisticasdeempleados WHERE salario >= 30000 AND salario <= 50000;
La consulta anterior se puede escribir también usando el operador BETWEEN.
SELECT idnoempleado FROM estadisticasdeempleados WHERE salario BETWEEN 30000 AND 50000;
El operador BETWEEN incluye los valores de $30000 y $50000.
El Operador NOT
En el ejemplo anterior, si se está interesado en listar todos los empleados que no ganan un salario de $30,000 a
$50,000, se puede escribir la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados WHERE salario NOT BETWEEN 30000 AND 50000;
La siguiente consulta lista todos los empleados que no son gerente.
SELECT idnoempleado FROM estadisticasdeempleados WHERE posicion NOT IN ('Gerente');
El operador NOT es un operador unario (evalúa una condición, invirtiendo su valor), mientras que los
operadores AND y OR evalúan dos condiciones.
Orden de Precedencia para los Operadores Lógicos
El orden de precedencia para los operadores lógicos se muestra a continuación. El operador NOT tiene mayor
precedencia que los operadores AND y OR.
• NOT
• AND
• OR
El Operador LIKE
El operador LIKE se usa para verificar patrones dentro de cadenas de caracteres, compararlos y mostrar los
resultados.
Por ejemplo, suponga que se quieren listar todos los empleados cuyos apellidos comienzan con „S‟. Se puede
escribir la siguiente consulta:
SELECT nombre, apellido FROM direcciondeempleado WHERE apellido LIKE 'S%';
9. . Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
El signo de porcentaje (%) se usa para representar cero o más caracteres. En el ejemplo anterior, „S%„
especifica cualquier nombre que comience con „S‟, seguido de cero o más caracteres. Para listar aquellas
personas cuyos apellidos terminen en „S‟, se usa „%S„, que especifica cualquier nombre que termine con „S‟,
precedido de cero o más caracteres.
Para encontrar personas cuyos apellidos contengan „S‟, se escribe „%S%„. Esto especifica cualquier nombre que
contenga „S‟ precedido o seguido de cero o más caracteres.
Asuma que alguien está interesado en listar los empleados que tienen una „S‟ como la tercera letra en sus
apellidos. En ese caso, se usa „__S%„. El „_‟ indica un carácter no conocido.
En el ejemplo anterior, los dos caracteres no conocidos están seguidos por una „S‟, y luego están seguidos de
cero o más caracteres (%).
El Operador de Concatenación
El operador de concatenación se usa para combinar dos cadenas de caracteres o dos campos (del tipo cadena de
caracteres). El operador se denota por „CONCAT()‟. Si se quiere saber el nombre completo de un empleado, se
debe concatenar el nombre y el apellido del empleado.
Se puede usar la siguiente consulta para esto:
SELECT CONCAT (nombre,„.‟,apellido) FROM direcciondeempleado;
1
-------------------------------
Mike.Dennis
Susan.Ikelar
Rob.Heimann
Sarah.Connors
En la consulta anterior, entre los valores de las columnas, se ha concatenado un signo punto que separa el
nombre y el apellido.
Alias de los Nombres de Columnas
A los nombres de las columnas se les puede asignar un alias. Por ejemplo, en la consulta de concatenación
anterior, el nombre de la columna es extraño. Si la consulta se escribe de la siguiente manera, el nombre de la
columna se visualizará mucho mejor.
SELECT CONCAT (nombre,„.‟,apellido) AS “Nombre Completo” FROM direcciondeempleado;
Resultado de la sentencia anterior:
Nombre Completo
-------------------------------
Mike.Dennis
Susan.Ikelar
Rob.Heimann
Sarah.Connors
La Cláusula ORDER BY
La 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, la cláusula ORDER BY lista los datos de la columna en orden
ascendente.
SELECT * FROM estadisticasdeempleados ORDER BY salario;
La consulta anterior lista los empleados en el orden ascendente de los valores de la columna salario, ya que no
se utilizó la palabra ASC ni la palabra DESC.
SELECT * FROM estadisticasdeempleados ORDER BY salario ASC;
La consulta anterior lista los empleados en el orden ascendente de los valores de la columna salario. El
empleado que tenga el salario más bajo ocupará el primer registro en el resultado.
SELECT * FROM estadisticasdeempleados ORDER BY salario DESC;
10. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
La consulta anterior lista los empleados en el orden descendente de los valores de la columna salario. El
empleado que tenga el salario más alto ocupará el primer registro en el resultado.
La cláusula ORDER BY se puede usar para múltiples columnas, tal como se muestra a continuación:
SELECT * FROM estadisticasdeempleados ORDER BY posicion ASC, salario DESC;
La consulta anterior lista los empleados en orden ascendente de la posición de trabajo.
Dentro de una posición, los empleados se listan en orden descendente de la columna salario.
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 =. Sólo puede ser
chequeado usando el operador IS.
Observe la siguiente consulta.
SELECT * FROM estadisticasdeempleados WHERE beneficios IS NULL;
La consulta muestra todos los empleados que no tienen monto alguno por beneficios.
Estos registros de los empleados no tienen ningún valor en la columna beneficios.
SELECT * FROM estadisticasdeempleados WHERE beneficios IS NOT NULL;
La consulta anterior muestra todos los empleados a quienes se le ha asignado un monto por beneficios.
La Cláusula DISTINCT
Si se necesita encontrar una lista única de posiciones disponibles en la tabla estadisticasdeempleados, se puede
ejecutar la siguiente consulta:
SELECT DISTINCT posicion FROM estadisticasdeempleados;
Resultado de la sentencia anterior:
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.
SQL Avanzados
La Condición para el JOIN
Los datos están distribuidos en diferentes tablas debido a la normalización. La normalización se realiza para
evitar la redundancia y para integrar los datos almacenados en distintas tablas. Cuando el usuario quiere obtener
información completa consultando más de una tabla, debe JOIN (UNIR) los datos de las distintas tablas.
Las sentencias SELECT de SQL que obtienen y combinan datos de múltiples tablas son llamadas JOINS.
Un JOIN ayuda a vincular dos o más tablas a través de un valor de un atributo en común en estas tablas. Existen
muchos tipos de JOINS los cuales se lista a continuación:
• Cartesian
• Natural/Equi (INNER)
• Right Outer
• Left Outer
• Full Outer
• Self
Extender una Consulta Simple a un JOIN
Asuma que hay una casa de campo que proporciona cuartos a sus clientes. Un cliente puede reservar un cuarto
con anticipación. Dos tablas, la tabla Reservaciones y la tabla Cuartos, han sido diseñadas para el sistema.
11. . Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
La tabla Reservaciones contiene información sobre cuándo el cuarto está reservado, quién lo reservó y cuándo
podrá estar disponible para rentarlo otra vez, etc. La tabla Cuartos contiene el nombre del cuarto, la ubicación
del cuarto y otros detalles específicos del cuarto.
La siguiente consulta mostrará los detalles de la reservación para el id_usuario 37.
SELECT id_cuarto, hora_inicio, hora_fin FROM reservaciones WHERE id_usuario = 37;
La tabla Reservaciones contiene solo el id_cuarto. No tiene el nombre del cuarto ni la ubicación del cuarto. El
nombre del cuarto y la ubicación están en la tabla Cuartos. Esta información también debe ser obtenida. Este
proceso involucra obtener datos de las dos tablas. Se deben seguir los siguientes pasos para escribir una
operación JOIN y obtener la información requerida.
Paso 1: Agregar la nueva tabla a la cláusula FROM.
SELECT id_cuarto, hora_inicio, hora_fin FROM reservaciones, cuartos WHERE id_usuario = 37;
Cada fila en la tabla Cuartos se unirá con cada fila de la tabla Reservaciones, donde el id_usuario concuerda con
el usuario registrado. Esto dará como resultado un producto Cartesiano parcial, porque aunque la cláusula
WHERE estuviera incluida, no existe la operación JOIN de las dos tablas en dicha cláusula.
Paso 2: Agregar otra condición a la cláusula WHERE.
SELECT id_cuarto, hora_inicio, hora_fin FROM reservaciones, cuartos WHERE id_usuario = 37 AND
reservaciones.id_cuarto = cuartos.id_cuarto;
La consulta anterior produce un error de ejecución SQL. El ejecutor SQL no sabrá qué id_cuarto está buscando
el usuario, ya que el nombre de la columna no está identificada por un nombre de tabla en la cláusula select.
Paso 3: Buscar en columnas definidas ambiguamente.
Las tablas Reservaciones y Cuartos contienen ambas una columna llamada id_cuarto. Por lo que la columna
id_cuarto en la lista del SELECT tiene que ser prefijada con reservaciones.
Nota: Las columnas hora_inicio y hora_fin no necesitan ser prefijadas o identificadas ya que están presentes
solamente en la tabla Reservaciones.
SELECT reservaciones.id_cuarto, hora_inicio, hora_fin FROM reservaciones, cuartos WHERE id_usuario = 37
AND reservaciones.id_cuarto = cuartos.id_cuarto;
Paso 4: Probar la consulta.
La consulta debe ser probada. Cuando se prueba, la consulta anterior funciona bien.
Puesto que el ejercicio era obtener los nombres de los cuartos junto con la ubicación, el nombre del cuarto y la
ubicación no fueron incluidos en la cláusula SELECT.
Paso 5: Agregar nuevas columnas a la lista SELECT.
Finalmente, en esta etapa, las columnas nombre_cuarto y ubicación se agregan a la lista de columnas que se está
consultando.
SELECT reservaciones.id_cuarto, hora_inicio, hora_fin, cuartos.nombre_cuarto, cuartos.ubicación FROM
reservaciones, cuartos WHERE id_usuario = 37 AND reservaciones.id_cuarto = cuartos.id_cuarto;
Escribir Subconsultas
Una subconsulta (subquery) es una consulta dentro de una consulta. Es una sentencia SELECT anidada dentro
de otra sentencia SELECT. En el ejemplo anterior si se tuviera que encontrar los productos comprados por
„Bob‟, se puede escribir la siguiente consulta:
SELECT articulo FROM relacionventas WHERE idcomprador=(SELECT idpropietario FROM
propietarioarticulos WHERE nombre=‟Bob‟);
La tabla Relacionventas no contiene el nombre del comprador. Contiene sólo el idcomprador. El nombre del
comprador se encuentra en la tabla Propietarioarticulos. En la consulta anterior, la consulta más interna es
ejecutada primero, la cual retorna el valor de idcomprador. Luego, este valor es comparado en la cláusula
WHERE de la consulta externa para obtener el resultado deseado.
El operador „=‟ se puede usar en comparaciones con un solo valor. Si la consulta interna del ejemplo anterior
retorna más de un idpropietario, lo cual es muy probable debido a que puede haber más de una persona cuyo
nombre sea „Bob‟, entonces la consulta anterior dará como resultado un error SQL de ejecución.
En esos casos, se usa el operador IN.
SELECT articulo FROM relacionventas WHERE idcomprador IN (SELECT idpropietario FROM
propietarioarticulos WHERE nombre=‟Bob‟);
12. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
La consulta anterior obtendrá todos los objetos comprados por personas cuyo nombre sea „Bob‟.
Las subconsultas pueden ser anidadas a niveles bastantes profundos. Se pueden escribir dentro de otras
subconsultas. El orden de ejecución siempre será desde la subconsulta más interna a la consulta padre más
externa.
Las subconsultas también se pueden escribir en sentencias UPDATE y DELETE. Por ejemplo, cuando el estado
de un pedido efectuado por „Bob‟ tiene que ser actualizado a despachado, se tiene:
UPDATE pedidos SET estado=‟Distribuido‟ WHERE idpropietario =(SELECT idpropietario FROM
propietarioarticulos WHERE nombre=‟Bob‟);
Si todos los pedidos hechos por Bob van a ser eliminados, entonces se escribe la siguiente consulta:
DELETE FROM pedidos WHERE idpropietario =(SELECT idpropietario FROM propietarioarticulos
WHERE nombre=‟Bob‟);
Hay dos tipos de subconsultas: correlacionada y no correlacionada.
Todos los ejemplos de subconsultas anteriores son subconsultas no correlacionadas.
Subconsulta Correlacionada
Se explica con un ejemplo la subconsulta correlacionada. Observe la siguiente sentencia SQL:
SELECT articulos.precio_articulo FROM artículos WHERE EXISTS (SELECT nombre_articulo FROM
relacionventas WHERE relacionventas.nombre_articulo = articulos.nombre_articulo);
La consulta lista los precios de los articulos asociados a las ventas. La consulta anterior contiene dos partes: la
consulta padre y la consulta hijo. Las subconsultas correlacionadas son consultas en las cuales la consulta hijo
se refiere a la columna de la consulta padre.
La consulta padre es:
SELECT articulos.precio_articulo FROM artículos WHERE EXISTS;
La consulta hijo es:
SELECT nombre_articulo FROM relacionventas WHERE relacionventas.nombre_articulo =
articulos.nombre_articulo;
EXISTS es un operador que evalúa una sentencia SQL. Si la sentencia SQL retorna filas, entonces la sentencia
es evaluada como verdadera. Si la sentencia SQL no retorna filas, entonces la sentencia es evaluada como falsa.
En el ejemplo anterior, la consulta hija es evaluada por el operador EXISTS. Por cada fila retornada por la
consulta padre, la consulta hijo es evaluada. Si la evaluación da como resultado verdadero, entonces se muestra
la fila de la consulta padre.
Para cada artículo en la tabla articulos, si la tabla relacionventas contiene este artículo, entonces el artículo tiene
ventas asociadas con él y se muestra el precio del artículo.
En el ejemplo anterior, articulos.nombre_articulo es la columna de la consulta padre que está siendo utilizada
por la consulta hijo.
Las subconsultas no correlacionadas son ejecutadas una vez por toda la sentencia, mientras que las subconsultas
correlacionadas son ejecutadas una vez por cada fila en la consulta padre.
Operación de Unión
Una operación Unión es una operación de conjunto (SET) que combina los resultados de dos o más consultas,
elimina los registros duplicados y presenta el resultado.
Consideremos el ejemplo:
SELECT noemp,nombreempleado FROM departamentoventas
UNION
SELECT noemp,nombreempleado FROM departamentomarketing;
La consulta anterior busca información de todos los empleados que trabajan para los departamentos de ventas o
de marketing. Si un empleado trabaja para ambos departamentos, su nombre se lista sólo una vez. Se eliminan
los duplicados. Mientras se usa el operador UNION, las consultas pueden tener solamente columnas que tengan
el mismo tipo de datos, y estén mencionadas en el mismo orden.
Referencias Bibliográficas
IBM Capacitación (2008) Base de Datos I