Sunteți pe pagina 1din 24

Unidad 13 / Escenario

Escenario 52
fundamental
Lectura Fundamental

Lenguaje
Etapas deSQL
un plan de comunicación
estratégica

Contenido

1 Generalidades del lenguaje de consulta estructurada SQL

2 Lenguajes SQL

3 Tipos de datos SQL

4 Sintaxis del lenguaje SQL

5 Instrucciones comunes en SQL

Palabras clave: SQL -Structured Query Languaje.


Introducción
En el presente escenario se aborda el lenguaje de consulta estructurada SQL (por sus siglas en inglés
Structured Query Languaje), con el que se espera concretar los conceptos vistos en los escenarios
anteriores, en aplicaciones específicas en sistemas de gestión de bases de datos (SGBD). Este
lenguaje es declarativo y no procedimental. Dicho de otra forma, las consultas están orientadas a
determinar lo que hay que hacer y no a la manera en que se alcanza el objetivo propuesto, como
ocurre en lenguajes de programación como C++ o Java. De esta forma, el SQL es un lenguaje
que busca ofrecer al usuario capacidades para la definición, manipulación y control de los datos.
En los siguientes apartados, se presentarán las principales características del lenguaje y sus
instrucciones particulares.

1. Generalidades del lenguaje de consulta estructurada SQL


El SQL es un lenguaje estándar ampliamente difundido, que es empleado por la mayoría de los
sistemas de gestión de bases de datos (SGBD), cuyo nombre oficial es “Estándar Internacional
de Lenguaje de Base de Datos SQL” (Date, 2001, p.83), con algunas muy leves variaciones entre
fabricantes. El SQL fue desarrollado originalmente por IBM Research durante la década de los 70,
con el nombre de SEQUEL (Structured English Query Language). Por esta razón, en el mercado,
la mayoría de los productos relacionados con SQL son pronunciados de la manera en que se leería
su predecesor.

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 manipulation languaje – DML: establece el conjunto de instrucciones por medio de


las cuales se realizan actividades para insertar, consultar, modificar o eliminar datos. Las
instrucciones representativas de este lenguaje son: SELECT, INSERT, UPDATE, DELETE.

• 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.

3. Tipos de datos SQL


Cada SGBD contiene una definición propia de los tipos de datos. Así, si se desea almacenar un valor
monetario que contenga centavos, es necesario emplear un tipo que contenga decimales, tal como un
NUMERIC o un FLOAT. Si se desea almacenar el número de integrantes de un equipo se empleará
un INTEGER y si se desea almacenar un nombre se podría emplear un VARCHAR ().

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

Tipo de datos Rango Tamaño bytes


Máximo 38 dígitos según parámetros –
DECIMAL(), NUMERIC() Varía
valores exactos
FLOAT(), DOUBLE() Varía según parámetros – valores aproximados Varía
REAL() Varía según parámetros – valores aproximados Varía
Tiempo
Tipo de datos Rango Tamaño bytes
DATE Fechas desde 0001-01-01 3
DATETIME Fechas desde 0001-01-01 8
Desde 00:00:00.0000000 hasta
TIME Varía
23:59:59.9999999
Cadenas y caracteres

Tipo de datos Rango Tamaño bytes

CHAR, CHARACTER 1 carácter 1


VARCHAR(), Cadena de caracteres –
Varía
CHARACTER VARYNG () Hasta 4000 caracteres
Booleanos

Tipo de datos Rango Tamaño bytes

BOOLEAN, BIT true o false 1

Fuente: elaboración propia

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:

SELECT * FROM grupos;


Si bien, la mayoría de los sistemas de gestión de bases de datos no son sensibles a las mayúsculas, se
emplea con frecuencia una convención en la que se escriben en mayúsculas las palabras reservadas
del sistema, como SELECT, FROM, ORDER BY, etc.; y en minúsculas, aquellas expresiones propias
de denominaciones de tablas, atributos o datos. En el caso del ejemplo anterior, es una línea en la que
se seleccionan todos los campos (al emplearse el carácter *) de la tabla grupos.

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:

CREATE TABLE empresa(nit_empresa INT PRIMARY KEY,nombre_


empresa VARCHAR(30),direccion_empresa VARCHAR(50),telefono_
empresa VARCHAR(16));

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í:

CREATE TABLE empresa


(
nit_empresa INTEGER PRIMARY KEY,
nombre_empresa CHARACTER VARYNG(30),
direccion_empresa CHARACTER VARYNG (50),
telefono_empresa CHARACTER VARYNG (16)
);
Vale la pena señalar esta diferencia / similitud para indicar que, si bien SQL tiene una sintaxis general
uniforme, existen diferencias entre SGBD, como ocurre en este caso por los tipos de datos. Por
último, los sistemas de gestión de bases de datos, por lo general fueron creados para trabajar en modo
consola. Sin embargo, hoy existen numerosas interfaces gráficas que facilitan en trabajo en SQL.

5. Instrucciones comunes en SQL


El presente escenario no pretende abarcar todas las instrucciones contenidas en el lenguaje SQL,
debido al tiempo, espacio, complejidad y diferencias entre los SGBD. Aunque, existen diferencias
entre los sistemas de gestión de bases de datos, en general vamos a tratar las instrucciones más
comunes al lenguaje SQL. Para efectos del presente escenario, se presentarán las instrucciones en
PostgreSQL y MySQL (del cual se deriva MariaDB); los demás SGBD tienen sintaxis similares con
algunas variaciones.

5.1. Creación de una base de datos

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:

CREATE DATABASE mi_db WITH OWNER postgres;

Se presentará el siguiente cambio mostrando que la base de datos ha sido creada:

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:

ALTER DATABASE nombre_anterior RENAME TO nuevo_nombre;


De tal manera, que al ejecutar la instrucción:

ALTER DATABASE mi_db RENAME TO mi_bd;


Obtendremos:

postgres=# ALTER DATABASE mi_db RENAME TO mi_bd;


ALTER DATABASE
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

(6 filas)

Para seleccionar la base de datos se escribirá la siguiente instrucción

\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:

DROP DATABASE nombre_db;


Si llevamos a cabo acciones similares en MySQL, se establecerán las siguientes instrucciones:

Nótese que MySQL no tiene una instrucción para cambiar el nombre de la base de datos.

5.2. Gestión de tablas

A continuación, se presentarán las instrucciones más comunes para la gestión de tablas al interior de
una base de datos.

5.2.1. Creación de tablas

mysql> SHOW DATABASES; mysql> CREATE DATABASE mi_db;


Query OK, 1 row affected (0.15 sec)
Database mysql> SHOW DATABASES;
information_schema Database
mysql
information_schema
performance_schema
mi_db
sakila
mysql
sys
performance_schema
world
sakila
sys
world

mysql> SELECT DATABASE(); mysql> USE mi_db;


Database changed
DATABASE() mysql> SELECT DATABASE();
NULL
DATABASE()
mi_db

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.

Para crear una tabla se emplea la siguiente construcción sintáctica:

CREATE TABLE nombre_tabla(campo_1 TIPO, … campo_n TIPO);

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.

• Sexo será un dato que tendrá solo 2 opciones 'F' y 'M'.

Entonces, las sentencias para crear las tablas quedarán así:

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:

mi_bd=# CREATE TYPE sex AS ENUM ('F', 'M');


CREATE TYPE
mi_bd=#
mi_bd=# CREATE TABLE estudiante(
mi_bd(# id_estudiante SERIAL NOT NULL PRIMARY KEY,
mi_bd(# nombre VARCHAR(30) NOT NULL,
mi_bd(# sexo SEX NOT NULL
mi_bd(# );

CREATE TABLE

mi_bd=# \d
Listado de relaciones
Esquema Nombre Tipo Due±o

public estudiante tabla postgres


public estudiante_id_estudiante_seq secuencia postgres

mi_bd=# \d estudiante
Tabla public.estudiante
Columna Tipo Modificadores

not null valor por omisión nextval('estudiante_id_


id_estudiante integer
estudiante_seq'::regclass)

nombre character varying(30) not null

sexo sex not null


"estudiante_pkey" PRIMARY KEY, btree (id_estudiante)

MySQL

CREATE TABLE estudiante(


id_estudiante INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(30) NOT NULL,
sexo ENUM('F', 'M') NOT NULL
);

POLITÉCNICO GRANCOLOMBIANO 11
Cuya ejecución desplegará así:

mysql> CREATE TABLE estudiante(


-> id_estudiante INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> nombre VARCHAR(30) NOT NULL,
-> sexo ENUM('F', 'M') NOT NULL
-> );

mysql> SHOW TABLES


Tables_in_mi_db
estudiante

mysql> DESCRIBE estudiante;


Field Type Null Key Default Extra
id_estudiante int(11) NO PRI NULL auto_increment

nombre varchar(30) NO NULL

sexo enum('F','M' NO NULL

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:

CREATE TABLE estudiante(


id_estudiante INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(30) NOT NULL,
sexo ENUM('F', 'M') NOT NULL,
PRIMARY KEY(id_estudiante,nombre);
);
CREATE TABLE estudiante(
id_estudiante SERIAL NOT NULL,
nombre VARCHAR(30) NOT NULL,
sexo SEX NOT NULL,
CONSTRAINT estudiante_pkey PRIMARY KEY (id_estudiante,
nombre)

);

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,

En la Tabla 2 se muestran las acciones que se pueden llevar a cabo.

Tabla 2. Acciones en cascada para mantener integridad referencial

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.

SET NULL Asigna el valor de NULL a todas las referencias.


SET DEFAULT Asigna a las referencias un valor definido.

Fuente: elaboración propia

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:

CREATE INDEX identificador_indice ON tabla(campo);

POLITÉCNICO GRANCOLOMBIANO 13
5.2.2. Manipulación de tablas

A continuación, se presentarán una serie de instrucciones para la modificación de tablas:

Renombrar tablas
ALTER TABLE nombre_tabla RENAME nuevo_nombre;

Adicionar una columna a la tabla.


ALTER TABLE nombre_tabla ADD nueva_columna [información del
dato];

Por ejemplo:
ALTER TABLE estudiantes ADD programa VARCHAR(20) NULL, anio_ingreso
INT NULL;

Modificar columna en la tabla


ALTER TABLE nombre_tabla MODIFY columna [nueva información del
dato]
ALTER TABLE nombre_tabla ALTER COLUMN columna TYPE nuevo_tipo;
ALTER TABLE nombre_tabla RENAME COLUMN nombre_actual TO nombre_
nuevo;

Eliminar columna en la tabla


ALTER TABLE nombre_tabla DROP COLUMN columna;

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.

5.2.3. Manipulación de datos

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:

INSERT INTO nombre_tabla VALUES (Valor_campo1,Valor_campo2,…


Vcalor_campoN);

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:

INSERT INTO nombre_tabla (columna1,…columnaN)


VALUES (Valor_campo1,…Vcalor_campoN);

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)

mi_bd=# SELECT * FROM estudiante;


Columna nombre sexo

1 Luis Leyva M

2 Monica Galindo M

3 Pedro Jaramillo | M
(3 filas)

mysql> INSERT INTO estudiante VALUES (NULL, 'Monica Galindo', 'M');


Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO estudiante (nombre,sexo) VALUES ('Pedro Jaramillo','M');
Query OK, 1 row affected (0.07 sec)

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)

INSERT INTO nombre_tabla SET columna1=valor1,


columna2=valor2…;

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:

Tabla 3. Operadores de comparación en SQL

Operador de comparación Significado


= Igual
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
<> Diferente
Fuente: Elaboración propia (2017)

POLITÉCNICO GRANCOLOMBIANO 16
Tabla 4. Operadores lógicos en SQL

Operador Lógico Es TRUE si:


ALL Todas las comparaciones del conjunto es TRUE
AND Las dos expresiones booleanas tienen el valor TRUE
ANY Por lo menos una de las comparaciones del conjunto es TRUE
BETWEEN Si el operando está entre un intervalo
EXIST Cualquiera de las filas está contenida en una subconsulta
IN El dato es igual a alguno de la lista de expresiones
LIKE Si hay coincidencia entre un operando y un patrón
NOT Un operador booleano tiene el valor FALSE (invierte el valor)
OR Alguna de las dos expresiones booleanas tienen el valor TRUE
SOME Alguna comparación es TRUE
Fuente: Elaboración propia (2017)

UPDATE estudiante SET sexo='F' WHERE id_estudiante = 2;

Y obtenemos, respectivamente:
Eliminación de registros: para eliminar registros completos de una tabla se emplea, de forma genérica,

mi_bd=# SELECT * FROM estudiante;


Columna nombre sexo

1 Luis Leyva M

2 Monica Galindo F

3 Pedro Jaramillo M
(3 filas)

mysql> SELECT * FROM estudiante;


Columna nombre sexo

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 solo se desea obtener un conjunto de columnas, se aplicará la siguiente sintaxis:


SELECT columna(s) 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;

mysql> SELECT nombre FROM estudiante WHERE sexo='F';


nombre
Monica Galindo

1 row in set (0.00 sec)

mi_bd=# SELECT nombre FROM estudiante WHERE sexo='F';


nombre
Monica Galindo

(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.

SELECT columna(s) FROM nombre_tabla ORDER BY columna ASC;

SELECT columna(s) FROM nombre_tabla ORDER BY columna DESC;

POLITÉCNICO GRANCOLOMBIANO 18
SELECT nombre, sexo FROM estudiante
mysql> SELECT * FROM estudiante;
ORDER BY nombre DESC;
nombre sexo nombre sexo

Luis Leyva M Luis Leyva M

Monica Galindo F Monica Galindo F

Pedro Jaramillo M Pedro Jaramillo M


3 rows in set (0.00 sec) 3 rows in set (0.00 sec)

Continuando con el ejemplo propuesto, veamos la aplicación de ORDER BY:


En algunos casos, al definir los nombres de las columnas, una palabra se queda corta para nombrar las
columnas. Por esta razón, vale la pena emplear un ALIAS, de tal manera que hace que la tabla tenga
una lectura más clara. Un ejemplo del uso de alias se expresa en la siguiente sintaxis y ejemplo:

mysql> SELECT id_estudiante, nombre AS 'nombres y


apellidos', sexo FROM estudiante;
id_estudiante nombre sexo

1 Luis Leyva M

2 Monica Galindo F

3 Pedro Jaramillo M

3 rows in set (0.00 sec)

SELECT columna AS alias FROM nombre_tabla;

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);

mysql> SELECT nombre FROM estudiante WHERE id_estudiante IN ('1', '3');


nombre

Luis Leyva

Pedro Jaramillo
2 rows in set (0.00 sec)

Aplicándolo al ejemplo, tenemos:

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.

Suma (SUM): la suma de los datos de una columna. Por ejemplo:

SELECT SUM(columna)FROM nombre_tabla;

Promedio (AVG): el promedio de los datos de una columna. Por ejemplo:

SELECT AVG(columna)FROM nombre_tabla;

Desviación estándar (STDDEV): la desviación estándar de los datos de una columna. Por ejemplo:

SELECT STDDEV(columna) FROM nombre_tabla;

Contar (COUNT): cuenta la cantidad de veces que están presentes los datos en una columna. Por
ejemplo:

SELECT COUNT(columna) FROM nombre_tabla;

Máximo (MAX): devuelve el mayor de los datos de una columna. A saber:

MÁXIMO:SELECT MAX(columna) FROM nombre_tabla;

Mínimo (MIN): devuelve el mínimo de los datos de una columna, así:

MÍNIMO:SELECT MIN(columna) FROM nombre_tabla;

5.2.6. Consultas entre tablas

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.

CREATE VIEW nombre_vista AS SELECT columna(s) FROM nombre_tabla


WHERE condició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

Módulo: Fundamentos de bases de datos

Unidad 3: Lenguaje de consulta estructurado-SQL

Escenario 5: Fundamentos del lenguaje SQL

Autor: Luis Ernesto Leyva Camargo

Asesor Pedagógico: María del Pilar Rivera Acosta

Diseñador Gráfico: David A. Rivera Virgüez

Asistente: Ana Milena Raga Amador

Este material pertenece al Politécnico Grancolombiano.


Prohibida su reproducción total o parcial.

POLITÉCNICO GRANCOLOMBIANO 24

S-ar putea să vă placă și