Documente Academic
Documente Profesional
Documente Cultură
Escenario 52
fundamental
Lectura Fundamental
Lenguaje
Etapas deSQL
un plan de comunicación
estratégica
Contenido
2 Lenguajes SQL
En 1986, adquiere el nombre SQL-86 y es publicado por ANSI en 1987. El lenguaje ha tenido
revisiones posteriores en 1987, 1989, 1992, 1999, 2003 2005 y 2008, para introducir, a lo largo
de las distintas versiones y revisiones, características como consultas recursivas, disparadores,
características XML, entre otras funcionalidades.
SQL es un lenguaje basado en los conceptos de álgebra relacional y cálculo relacional descritos en
el escenario anterior. Incluye lenguaje de definición de datos (DDL), lenguaje de manipulación de
datos (DML) y lenguaje de control de Datos (DCL), los cuales se desarrollarán en este escenario. Si
bien, como se indicó anteriormente, SQL es un lenguaje declarativo, en la actualidad incluye algunas
capacidades procedimentales para lograr un mayor aprovechamiento del mismo. A continuación, se
presentan las instrucciones que componen el lenguaje.
POLITÉCNICO GRANCOLOMBIANO 2
2. Lenguajes SQL
Como de señalaba en el apartado anterior, existen tres grupos de instrucciones que componen el
lenguaje de consulta estructurado:
• Data definition languaje – DDL: corresponde al conjunto de instrucciones a través de las cuales
se puede implementar una base de datos previamente diseñada. Entre las instrucciones más
comunes del lenguaje encontramos: CREATE, ALTER, DROP y TRUNCATE.
• Data control languaje – DCL: establece mecanismos de acceso o negación del mismo a la base
de datos; por lo general, son relevantes en lo que a seguridad se refiere.
En seguida, se desarrolla la sintaxis general de SQL y las principales instrucciones de los lenguajes
especificados.
A continuación, señalamos algunos tipos de dato de uso común. Vale la pena mencionar que, al
momento de utilizar un SGBD, es importante consultar la referencia ofrecida por el fabricante para
cada caso (Tabla 1).
POLITÉCNICO GRANCOLOMBIANO 3
Tabla 1. Tipos de datos SQL
Enteros
Tipo de datos Rango Tamaño bytes
-263 (-9.223.372.036.854.775.808) a
BIGINT 8
263-1 (9.223.372.036.854.775.807)
-231 (-2.147.483.648) a 231-1
INT, INTEGER 4
(2.147.483.647)
SMALLINT -215 (-32.768) a 215-1 (32.767) 2
TINYINT 0 a 255 1
Decimal o de punto flotante
POLITÉCNICO GRANCOLOMBIANO 4
4. Sintaxis del lenguaje SQL
En primer lugar, el SQL es un lenguaje que en la mayoría de los casos es “case-insensitive”; es decir,
es indiferente a si se escribe en mayúsculas o minúsculas. Sin embargo, en algunos casos, la forma en
que se escriben los nombres de las tablas, las columnas o los datos puede tener relevancia. Por esa
razón, no se recomienda el uso de la convención "CamelCase” (palabras separadas por mayúsculas
como por ejemplo ‘código, Ciudad’), pues es posible que sea difícil de interpretar el significado de
la variable por parte del programador. En ese caso, se recomienda el uso de palabras separadas por
delimitadores (por ejemplo, código ciudad).
Una instrucción será ejecutada así: desde donde aparece el primer carácter hasta donde aparezca el
carácter punto y coma(;), de la forma en que se presenta en el siguiente ejemplo:
También es posible encontrar instrucciones que toman más de una línea y, por lo tanto, requieren
de un tratamiento distinto para mantener la legibilidad, como el caso del ejemplo que se presenta a
continuación:
CREATE TABLE empresa
(
nit_empresa INT PRIMARY KEY,
nombre_empresa VARCHAR(30),
direccion_empresa VARCHAR(50),
telefono_empresa VARCHAR(16)
);
Al observar el código escrito, se entenderá que el SGBD lo asumirá como una única instrucción
separada en varias líneas, pues tiene un único punto y coma (;). De hecho, si se escribiera en una
única línea generaría exactamente el mismo resultado:
POLITÉCNICO GRANCOLOMBIANO 5
No obstante, es posible que se pierda legibilidad, en especial cuando las instrucciones son cada vez
más complejas. También nótese que tenemos presente que empresa es la entidad y se desarrolla
con los atributos indicados entre paréntesis, que a su vez están separados por coma (,); y que entre
el último atributo y el último paréntesis no hay coma. La sentencia que se acaba de presentar corre
adecuadamente en MySQL; sin embargo, si la corriéramos en PostgreSQL quedaría así:
Para crear una base de datos se emplea la instrucción CREATE, la cual tiene la siguiente sintaxis:
CREATE DATABASE nombre_bd;
POLITÉCNICO GRANCOLOMBIANO 6
Así, si por ejemplo si se desea crear una base de datos en PostgreSQL para listar las bases de datos,
se empleará la instrucción \l, que producirá un resultado similar al siguiente, en el cual se listan las
bases de datos existentes en el sistema:
postgres-# \l
Listado de base de datos
Nombre Dueño Codificación Collate Ctype Privilegios
Spanish_ Spanish_
llevamos postgres UTF8
Spain.1252 Spain.1252
Spanish_ Spanish_
postgres postgres UTF8
Spain.1252 Spain.1252
Spanish_ Spanish_
samp_db postgres UTF8
Spain.1252 Spain.1252
Spanish_ Spanish_ =c/postgres
template 0 postgres UTF8
Spain.1252 Spain.1252 postgres=CTc/postgres
Spanish_ Spanish_ =c/postgres
template 1 postgres UTF8
Spain.1252 Spain.1252 postgres=CTc/postgres
Al ejecutarse la instrucción:
postgres-# \l
Listado de base de datos
Nombre Dueño Codificación Collate Ctype Privilegios
Spanish_ Spanish_
llevamos postgres UTF8
Spain.1252 Spain.1252
Spanish_ Spanish_
mi_db postgres UTF8
Spain.1252 Spain.1252
Spanish_ Spanish_
postgres postgres UTF8
Spain.1252 Spain.1252
Spanish_ Spanish_
samp_db postgres UTF8
Spain.1252 Spain.1252
Spanish_ Spanish_ =c/postgres
template 0 postgres UTF8
Spain.1252 Spain.1252 postgres=CTc/postgres
Spanish_ Spanish_ =c/postgres
template 1 postgres UTF8
Spain.1252 Spain.1252 postgres=CTc/postgres
POLITÉCNICO GRANCOLOMBIANO 7
Supongamos que deseamos cambiar el nombre de la base de datos, la sintaxis de la instrucción será la
siguiente:
(6 filas)
\c nombre_db;
De tal forma que obtendremos:
postgres=# \c mi_bd;
ADVERTENCIA: El código de página de la consola (850) difiere del código
de página de Windows (1252).
Los caracteres de 8 bits pueden funcionar incorrectamente.
Vea la página de referencia de psql «Notes for Windows users»
para obtener más detalles.
Ahora está conectado a la base de datos «mi_bd» con el usuario «postgres».
mi_bd=#
POLITÉCNICO GRANCOLOMBIANO 8
Lo anterior nos indica que la base de datos ha sido seleccionada.
Para eliminar una base de datos se utiliza la instrucción DROP DATABASE, empleando la siguiente
sintaxis:
Nótese que MySQL no tiene una instrucción para cambiar el nombre de la base de datos.
A continuación, se presentarán las instrucciones más comunes para la gestión de tablas al interior de
una base de datos.
POLITÉCNICO GRANCOLOMBIANO 9
Para mostrar las tablas de la base de datos seleccionada, la instrucción en PostgreSQL es \d y en
MySQL se emplea la instrucción SHOW TABLES;:
PostgreSQL MySQL
mi_bd=# \d mysql> SHOW TABLES;
No se encontraron
Empty set (0.02 sec)
relaciones.
Por ejemplo, para crear una tabla de estudiantes se tendrán los siguientes campos:
• Id_estudiante de tipo entero, el cual no podrá ser nulo. Este será un código que el
sistema dará de forma automática e incremental y será una llave primaria.
• Nombre será el nombre del estudiante, una cadena de caracteres de tamaño 30 y no podrá
ser nula.
PostgreSQL
CREATE TYPE sex AS ENUM ('F', 'M');
CREATE TABLE estudiante(
id_estudiante SERIAL NOT NULL PRIMARY KEY,
nombre VARCHAR(30) NOT NULL,
sexo SEX NOT NULL
);
POLITÉCNICO GRANCOLOMBIANO 10
Cuya ejecución desplegará de la siguiente manera:
CREATE TABLE
mi_bd=# \d
Listado de relaciones
Esquema Nombre Tipo Due±o
mi_bd=# \d estudiante
Tabla public.estudiante
Columna Tipo Modificadores
MySQL
POLITÉCNICO GRANCOLOMBIANO 11
Cuya ejecución desplegará así:
En el caso anterior, la instrucción ENUM, que permite de dar un conjunto de opciones cerrada de
valores al campo, podrá escribirse directamente en MySQL, mientras que requerirá de la creación de
un tipo de dato en PostgreSQL.
Si se deseara crear dos llaves primarias, las instrucciones serán en MySQL y PostgreSQL así,
respectivamente:
);
POLITÉCNICO GRANCOLOMBIANO 12
Para indicar la presencia de llaves foráneas se incluirá la instrucción FOREIGN KEY con la siguiente
sintaxis:
CONSTRAINT fk_tabla_tablaforanea
FOREIGN KEY (tablaforanea_id_tablaforanea)
REFERENCES nombre_bd.tabla_foranea (id_tabla_foranea)
ON UPDATE accion ON DELETE accion,,
ON UPDATE CASCADE(,/;)
CONSTRAINT fk_tabla_tablaforanea
FOREIGN KEY (tablaforanea_id_tablaforanea)
REFERENCES nombre_bd.tabla_foranea (id_tabla_foranea)) MATCH
SIMPLE
ON UPDATE accion ON DELETE accion,
Acción Resultado
NO ACTION, Al eliminar o modificar un registro genera un error que indica que existe una
RESTRICT violación de la llave foránea especficada.
CASCADE Elimina o actualiza las referencias en las otras tablas de manera automática.
También es posible incluir índices. Un índice permite agilizar las búsquedas por parte del SGBD,
pues organiza los datos de ese índice a manera de lista ordenada. Para crear un índice se emplea la
siguiente sintaxis:
POLITÉCNICO GRANCOLOMBIANO 13
5.2.2. Manipulación de tablas
Renombrar tablas
ALTER TABLE nombre_tabla RENAME nuevo_nombre;
Por ejemplo:
ALTER TABLE estudiantes ADD programa VARCHAR(20) NULL, anio_ingreso
INT NULL;
Eliminar índice
DROP INDEX identificador_indice;
Eliminar tabla
DROP TABLE IF EXIST nombre_tabla;
Las anteriores son algunos de los formatos de las sentencias más representativas. Sin embargo, se
recomienda consultar las referencias de los fabricantes para establecer variaciones en la sintaxis, al
igual que para establecer otras instrucciones que se ajusten a las necesidades concretas.
Para manipular los datos incluidos en una tabla, se emplean principalmente las instrucciones INSERT,
SELECT, UPDATE y DELETE. A continuación, se describen algunas maneras en que se presenta la
sintaxis para la manipulación de datos.
POLITÉCNICO GRANCOLOMBIANO 14
Inserción de registros: para insertar valores de registros en una tabla se emplea, de forma genérica, la
siguiente sintaxis:
Sin embargo, al tener llaves primarias, el campo 1 no requeriría de la asignación de valor. Por esa razón
se recomienda la siguiente sintaxis:
Así, para el ejemplo que venimos trabajando en secciones anteriores tendríamos, tanto para
PostgreSQL como para MySQL, lo siguiente:
mi_bd=# INSERT INTO estudiante (nombre,sexo) VALUES ('Luis Leyva', 'M');
INSERT 0 1
mi_bd=# INSERT INTO estudiante (nombre,sexo) VALUES ('Monica Galindo', 'M');
INSERT 0 1
mi_bd=# INSERT INTO estudiante (nombre,sexo) VALUES ('Pedro Jaramillo','M');
INSERT 0 1
mysql> INSERT INTO estudiante VALUES (NULL, 'Luis Leyva', 'M');
Query OK, 1 row affected (0.12 sec)
1 Luis Leyva M
2 Monica Galindo M
3 Pedro Jaramillo | M
(3 filas)
Por otro lado, podemos hacer inserción de un registro empleando las siguientes sintaxis:
POLITÉCNICO GRANCOLOMBIANO 15
mysql> SELECT * FROM estudiante;
Columna nombre sexo
1 Luis Leyva M
2 Monica Galindo M
3 Pedro Jaramillo | M
3 rows in set (0.00 sec)
Modificación de registros
Para insertar valores de registros en una tabla se emplea, de forma genérica, la siguiente sintaxis:
UPDATE nombre_tabla SET columna=valor WHERE condición;
En este punto, empleamos la expresión WHERE, la cual permite colocar una condición a partir
de la cual se hacen búsquedas o modificaciones. Al igual que en la mayoría de los lenguajes de
programación, el SQL emplea operadores para comparar campos con valores o campos entre sí. Los
operadores incluidos en el SQL se muestran en las Tablas 3 y 4.
Así, aplicando esta instrucción al ejercicio que se viene trabajando, tenemos:
POLITÉCNICO GRANCOLOMBIANO 16
Tabla 4. Operadores lógicos en SQL
Y obtenemos, respectivamente:
Eliminación de registros: para eliminar registros completos de una tabla se emplea, de forma genérica,
1 Luis Leyva M
2 Monica Galindo F
3 Pedro Jaramillo M
(3 filas)
1 Luis Leyva M
2 Monica Galindo F
3 Pedro Jaramillo M
3 rows in set (0.00 sec)
POLITÉCNICO GRANCOLOMBIANO 17
la siguiente sintaxis:
DELETE FROM nombre_tabla WHERE criterio;
5.2.4. Consultas
Para consultar el contenido completo de una tabla, como ya lo hemos hecho en apartados anteriores,
se emplea la siguiente sintaxis:
SELECT * FROM nombre_tabla;
Si se desea obtener un conjunto de columnas y también una condición que sirva como criterio de
consulta, se aplicará la siguiente sintaxis:
SELECT columna(s) FROM nombre_tabla; WHERE condición;
(1 fila)
Para consultar los datos con ordenamiento se emplea la expresión ORDER BY. Por otro lado, si la
consulta se desea ascendente, se acompaña por la expresión ASC. En caso de esperar una consulta
descendiente, se incluye la expresión DESC.
POLITÉCNICO GRANCOLOMBIANO 18
SELECT nombre, sexo FROM estudiante
mysql> SELECT * FROM estudiante;
ORDER BY nombre DESC;
nombre sexo nombre sexo
1 Luis Leyva M
2 Monica Galindo F
3 Pedro Jaramillo M
Al emplear los operadores mencionados anteriormente, es posible obtener datos que se encuentren
en un rango de valores. A continuación, se presentan algunas sintaxis propuestas para obtener este
objetivo:
SELECT columna(s) FROM nombre_tabla WHERE columna > valor;
SELECT columna(s) FROM nombre_tabla WHERE columna < valor;
SELECT columna(s) FROM nombre_tabla WHERE columna BETWEEN valor
AND valor;
Es posible buscar cadenas o subcadenas al interior de una columna mediante el uso de la expresión
LIKE, como se presenta a continuación:
SELECT columna(s) FROM nombre_tabla WHERE columna LIKE '%valor%';
(%=cualquiera)
POLITÉCNICO GRANCOLOMBIANO 19
mysql> SELECT nombre FROM estudiante WHERE nombre LIKE '%e%';
nombre
Luis Leyva
Pedro Jaramillo
2 rows in set (0.00 sec)
En el ejemplo anterior, buscaremos las filas cuyo nombre contenga la cadena ‘e’:
De forma análoga, es posible buscar cadenas al interior de una columna que no contengan
determinadas cadenas de caracteres al utilizar NOT LIKE;
SELECT columna(s)FROM nombre_tabla WHERE columna NOT LIKE
'%valor%';
mysql> SELECT nombre FROM estudiante WHERE nombre NOT LIKE '%va';
nombre
Monica Galindo
Pedro Jaramillo
2 rows in set (0.00 sec)
Por ejemplo, buscar los nombres de los estudiantes que no terminen en ‘va’:
Es posible buscar coincidencia de valores de datos en una columna al emplear la expresión IN. La
sintaxis es la siguiente:
SELECT columna(s) FROM nombre_tabla WHERE columna IN (valor,
valor);
Luis Leyva
Pedro Jaramillo
2 rows in set (0.00 sec)
Una consulta es finalmente una tabla que corresponde a un subconjunto de otra tabla más amplia.
De tal forma que es posible realizar una subconsulta a partir de otra consulta, como se presenta en la
siguiente sintaxis:
SELECT columna(s) FROM nombre_tabla
WHERE columna = ANY(SELECT columna(s) FROM nombre_tabla; WHERE
condición);
POLITÉCNICO GRANCOLOMBIANO 20
5.2.5. Operaciones
A continuación, se presenta la sintaxis de algunas operaciones útiles para la obtención de datos que
permiten interpretar lo contenido en las tablas.
Desviación estándar (STDDEV): la desviación estándar de los datos de una columna. Por ejemplo:
Contar (COUNT): cuenta la cantidad de veces que están presentes los datos en una columna. Por
ejemplo:
Como se están empleando tablas relacionales, es probable que la llave primara de una tabla
corresponda a un campo que contenga una llave foránea en otra tabla. Es posible unir columnas de
ambas tablas empleando la expresión INNER JOIN, de acuerdo con la siguiente sintaxis:
SELECT columna(s) FROM tabla1 INNER JOIN tabla2 ON tabla1.campo =
tabla2.campo;
También es posible unir las filas de dos tablas al emplear la instrucción UNION. Las columnas que se
unirán deben ser del mismo tipo.
SELECT columna(s) FROM tabla1 WHERE condición UNION SELECT
columna(s) FROM tabla2 WHERE condición;
POLITÉCNICO GRANCOLOMBIANO 21
5.3. Vistas
Hay otro tipo de relaciones SQL que se asemejan a las consultas, pero que no tienen un registro
físico. En realidad, corresponden a tablas virtuales. Se denominan vistas y existen solo en memoria.
Para su creación se emplea la expresión CREATE VIEW y la sintaxis general es como se presenta a
continuación.
POLITÉCNICO GRANCOLOMBIANO 22
Referencias
Date, C. (2001). Introducción a los sistemas de bases de datos. Naucalpan de Juárez, México: Pearson
Education.
Elmasri, R. & Navathe, S. (2007). Fundamentos de Sistemas de Bases de Datos. Madrid: Pearson,
Addison Wesley.
INFORMACIÓN TÉCNICA
POLITÉCNICO GRANCOLOMBIANO 24