SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
J. P. Cid - SQL
4343
4.SQL
1. Introducción
El Lenguaje de Consulta Estructurado (SQL – Structured Query Language) es un lenguaje de base de datos normali-
zado, utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones sobre los datos
o sobre la estructura de los mismos.
Como sucede con cualquier sistema de normalización hay excepciones para casi todo; de hecho, cada motor de
bases de datos tiene sus peculiaridades, por lo tanto, el lenguaje SQL normalizado (ANSI) no resulta adecuado para
resolver todos los problemas que se pueden presentar. Al menos se puede asegurar que cualquier sentencia escrita
en ANSI será interpretable por cualquier motor de datos.
La historia de SQL comienza en 1974 con la definición, por parte de Donald Chamberlin y su equipo de IBM, de un
lenguaje para la especificación de bases de datos relacionales. Este primer lenguaje se llamó SEQUEL (Structured
EnglishQueryLanguage) yse implementó en unprototipollamadoSEQUEL-XRMentre 1974 y1975.
Las experimentaciones con SEQUEL condujeron entre 1976 y 1977 a una revisión del lenguaje (SEQUEL/2), que
cambió de nombre por motivos legales, convirtiéndose en SQL. El prototipo (System R), basado en este lenguaje,se
adoptóyutilizó internamente enIBM yalgunos de sus clientes.
Gracias al éxito de este sistema, que no estaba todavía comercializado, también otras compañías empezaron a
desarrollar sus productos relacionales basados en SQL. A partir de 1981, IBM comenzó a entregar sus productos
relacionales y en 1983 empezó a vender DB2. Durante los años ochenta, numerosas e importantes compañías (Ora-
cle y Sybase entre otros) comercializaron productos basados en SQL, convirtiéndolo en el estándar industrial en
basesde datos relacionales.
En 1986, el ANSI adoptó SQL (sustancialmente adoptó el dialecto SQL de IBM) como estándar para los lenguajes
relacionales yen 1987 se transformó en estándarISO con el nombre de SQL/86. Ha sufrido diversas revisiones que
han conducidoa lasversionesSQL/89, SQL/92, SQL/99, SQL/2003, SQL/2006, SQL/2008…
El tener un estándar definido por un lenguaje para bases de datos relacionales abre el camino a la intercomunicabi-
lidad entre los productos que se basanen él. Desde el punto de vista práctico, cada compañía adopta e implementa
en la propia base de datos sólo el corazón del lenguaje SQL, denominado Entry level, o, como máximo, el Interme-
diate level, extendiéndolo a partir de aquí según la visión particular.
2. Componentes de SQL
Las sentencias del lenguaje SQL están compuestas por comandos, predicados, cláusulas, operadores y funciones de
agregado (se emplearán palabras reservadas). Estos elementos se combinan en las instrucciones para crear, actuali-
zar y manipular las bases de datos. Pueden existir variaciones entre ANSI SQL ylas distintas variantes que se revisan
(My SQL, SQL server, Oracle y Access), se preferirá la forma ANSI y, en caso de que existieran variaciones,se aborda-
rán en las partes específicas.
2.1. Comandos
También llamados verbos. Permiten realizar operaciones sobre los datos contenidos en una base de datos. Los
comandos serán explicados uno a uno, en el que se empleará una sintaxis descriptiva general, en el que se emplea-
rán mayúsculas para palabras reservadas, minúsculas para los datos, entre corchetes los elementos opcionales (no
SQL Componentes de SQL
Operadores
Bloque III - Programación 2017
44
tienen por qué estar presentes) y la barra vertical para distinguir elementos alternativos (al menos ha de estar uno
de ellos). Existen tres grandes grupos.
Lenguaje Comando Descripción página
DML
Data ManipulationLanguage.
Acceso
SELECT Consultasque satisfaganun criterio 47
INSERT Agrega datos 51
UPDATE Actualiza los datos 51
DELETE Elimina datos 52
DDL
Data DefinitionLanguage.
Creación ymodificación
CREATE Crea elementos 53
DROP Elimina elementos 53
ALTER Modifica elementos 53
DCL
Data Control Language
Control
GRANT Asignación de privilegios 54
REVOKE Denegación de privilegios 54
COMMIT Confirmaciónde los cambios efectuados 54
ROLLBACK Rechazo de los cambios efectuados 54
2.2. Predicados
Son restricciones, específicaspara cada comando, que se aplicansobre los datos sobre los que actúa el comando.
Predicado Descripción Uso por
ALL Devuelve todas las filasde todas las columnas SELECT
DISTINCT Se muestranlos valoresdistintos, eliminando lasrepeticiones adicionales
Si se consultan varias columnas, considerará repetidos sólo los que posean mismos
valores del registroconsiderando todaslas columnas
SELECT
DEFAULT Determina el valor por defecto CREATE
ONLY Limita el rangode actuacióndel comando sóloa la tablaespecificada UPDATE
DELETE
2.3. Cláusulas
Son condiciones utilizadaspara definir el métodode actuación de los comandos.
Cláusula Descripción Comando
FROM Delimitador del origende lascolumnas a consultar SELECT
WHERE Restricción de la consulta bajouna condiciónbooleana SELECT
UPDATE
DELETE
GROUPBY Agrupa los resultados de la consulta en una fila SELECT
HAVING Restricción de la consulta bajouna condiciónbooleana SELECT
ORDER BY Permite ordenar el resultadode la consulta SELECT
CASE Permite la sustituciónde unvalor por otro N/A
2.4. Operadores
Permite el manejo de los datos. Por cuestiones de adaptación a la semántica, serán desarrollados en Operadores,
página 49.
Comparación
< Menor que
> Mayor que
<> Distintode
<= Menor o igual que
>= Mayor o igual que
= Igual que
Lógicos
IS Devuelve un valor de verdadsi lascondiciones soniguales
NOT Devuelve el valor contrariode la expresión
Componentes de SQL
Datos
TEMA
4
J. P. Cid - SQL
454545
AND Devuelve un valor de verdadsi ambascondiciones sonciertas
OR Devuelve un valor de verdadsi alguna de las condicioneses cierta
XOR Devuelve un valor de verdadsi lascondiciones tienenvalores de verdad distintos
Eqv Devuelve un valor de verdadsi lascondiciones tienenvalores de verdad idénticos
Imp Devuelve un valor de verdado Null ante valores de verdado Null
Propios
BETWEEN Utilizadopara especificar unintervalode valores
IN Utilizadopara especificar valores concretos.
LIKE Utilizadoenla comparación de unmodelode búsqueda
SUBSTRING Extrae parte de la cadena de caracteres
|| Operador de concatenación de dos cadenasde textos
2.5. Funciones
Son susceptibles de no estar en todas las variantes o emplear palabras reservadas diferentes. A continuación se
indicanlas más relevantes.
Agregado
Una función de agregado procesa todos los valores seleccionados en una única columna para generar un único
resultado. Suelenemplearse de forma conjunta conla cláusula GROUPBY, dado que devuelve unresultadoúnico.
AVG Hallael valor medio de los valores existentesenla columna indicada ylo devuelve comoresultado
COUNT Cuenta el número de filas que contiene unvalor no nuloylo devuelve como resultado.
MIN Devuelve el valor mínimoexistente enla columna indicada
MAX Devuelve el valor máximo existente enla columna indicada
SUM Calcula la suma de los valorescontenidos enla columna indicada ylo devuelve comoresultado.
Cadena
Permitenoperar sobre secuencias o cadenas de caracteres.
CHAR_LENGTH Devuelve el númerode caracteresexistente enel dato facilitado
CONVERT Convierte la cadena a una representación distinta
LOWER Convierte la cadena enminúsculas
POSITION Devuelve la posición de una subcadena
SUBSTRING Extrae parte de una cadena. Dada su relevancia se considera unoperador propio(página 49)
TRANSLATE Convierte cadenas entre conjuntos de caracteres
TRIM Elimina espacios sobrantes enla cadena
UPPER Convierte la cadena enmayúsculas
Integradas
Devuelveninformación facilitada por el propio Sistema de gestión de bases de datos relacionales (SGBDR), sin preci-
sar ninguna información sobre la que actuar.
CURRENT_DATE Entrega la fecha actual
CURRENT_TIME Entrega la hora actual
CURRENT_TIMESTAMP Entrega la fecha yhora actuales
CURRENT_USER yUSER Identifica al usuarioque está operando sobre la base de datos
SESSION_USER Facilita el identificador delusuario si es distintode CURRENT_USER
SYSTEM_USER Identifica al usuariosegún la cuenta del sistema operativo
2.6. Datos
A continuación se indican los tipos de datos, su denominación en las diferentes variantes y las operaciones más
frecuentes sobre los datos.
SQL Componentes de SQL
Otros elementos a considerar
Bloque III - Programación 2017
46
Tipo de Datos ANSI SQL Oracle SQL Server My SQL Access
BIT BOOLEAN BIT BOOLEAN BIT
Cadena de texto CHAR CHAR CHAR CHAR CHARACTER
VARCHAR VARCHAR VARCHAR VARCHAR TEXT
Numéricos SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT
INTEGER INTEGER INTEGER INTEGER INTEGER
DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL
FLOAT FLOAT FLOAT FLOAT FLOAT
Fecha yhora DATE DATE DATE/DATETIME DATE DATE
TIME TIME/DATETIME DATETIME
TIMESTAMP TIMESTAMP TIMESTAMP
Objetos binarios BLOB BLOB BINARY BLOB BINARY
Operacionessobre datos. Permitenmodificar los datos. Puedenser:
- Caracteres. Permiten la manipulación de cadenas de caracteres. Son SUBSTRING y ||(ver
"Operadores" enla página 49).
- Conversión (casting). Permite la conversión de dato de un tipo a otro del tipo TIPO. Su sin-
taxis es CAST (dato AS TIPO)
- Fecha. De acuerdo a ANSI SQL, cuando se realizan operaciones numéricas sobre fechas es
necesaria la conversión del tipo de dato (las considera cadenas de texto). MY SQL tiene una
conversión específica para dato cuando es de tipo fecha TO_DAYS(dato). Como excep-
ción, Access permite la manipulación directamente, aunque permite convertir las fechas a
cadenas de textomediante CDATE (dato).
- Numéricas. Los símbolos son +, -, * y /, siendo respectivamente la suma, la resta, el pro-
ducto y la división de dos valores numéricos. Su sintaxis es: valor_1 símbo-
lo_operador_numérico valor_2
- Sustitución. Mediante la cláusula CASE permite las sustituciones de valor por resulta-
do. Su sintaxis (se indican dos sustituciones aunque queda a discreción) depende de la va-
riante utilizada:
o ANSI SQL (admite el usode aliascomoopción)
CASE. Columna
WHEN valor_1 THEN resultado_1
WHEN valor_n THEN resultado_n
END [AS nombre]
o Access (admite el uso de alias comoopción)
SWITCH (valor_1, resultado_1,
valor_n, resultado_n)
[AS nombre]
2.7. Otros elementos a considerar
A continuaciónse indicanotros elementos, aunque noforman uncomponente propio, son relevantes en SQL:
- Comentarios. Permiten la inserción de texto que sólo será comprensible para el usuario
humano, siendo omitido porel SGBDR a la hora de ser interpretado. Se iniciarán mediante
el uso de /* y se cerrarán con */. Existen otras formas de insertar comentarios, pero esta
es aceptada por todas las variantes ypermite multilínea.
- Literales. Permiten la inserción de cadenas de textosustituyendo un valor. Se realizan inser-
tando la cadena entre "" (comillas dobles), en algunas variantesse aceptaránsimples.
- Metacaracteres. El carácter % (* en el caso de Access) representa una cadena de uno o va-
rios caracteres cualquiera. El carácter _ (subrayado) representa a un único carácter que
puede ser sustituidopor cualquier carácter.
- Paréntesis. Permiten la inserción de operaciones o sentencias en su interior, para alterar el
orden de precedencia, las operaciones en su interior serán evaluadas y devueltas como va-
Comandos DML
SELECT
TEMA
4
J. P. Cid - SQL
474747
lores. Esto permite alterar el orden de precedencia de izquierda a derecha. Se realizan in-
sertando la operación o sentencia entre ().
3. Comandos DML
3.1. SELECT
La sintaxis de la consulta, selección, o pregunta, SELECT se emplea para poder recuperar una serie de datos de la
base que cumplan alguna condición. Se trata del tipo de sentencia más compleja de SQL. Se escribe igual para todos
los lenguajes estudiados.
SELECT [DISTINCT|ALL] *|valores, columnas [AS alias]
FROM tablas|vista|SELECT
[WHERE [GROUP BY[HAVING]] [ORDER BY]];
Si no se realiza especificación de opción en los predicados, DISTINCT|ALL, se empleará pordefecto la alternativa
ALL. Existenejemplos en la página 56.
Uso simple
La forma más sencilla, sinopciones, es de la forma:
SELECT *
FROM tabla;
Donde se recuperarán todas las columnas, y su contenido, de tabla. Si no se especifican valores o columna,
será tomado por defectola opción *.
Para poder seleccionar sóloalgunas columnas de tabla se empleala sintaxisde la forma:
SELECT columna_n, columna_m
FROM tabla;
Donde se recuperaran columna_n y columna_m, y su contenido, de tabla. A cada columna o valor indicado tras
el comando SELECT, podrá ser invocado por el resto de las cláusulas por el parámetro posicional . En esta forma
sintáctica general columna_n podría ser llamado, simplemente, indicando 1 y columna_m indicando2.
Es recomendable, para agilizar el proceso del SGBDR y evitar ambigüedades (en ocasiones el nombre de una colum-
na está repetido en varias tablas), realizar la identificación única de las columnas con calificadores. Esto se realiza
anteponiendo el nombre de la tabla a la que pertenece la columna yseparándolos por un punto. La sintaxis sería de
la forma:
SELECT tabla_1.columna_n, tabla_2.columna_n, tabla_1.columna_m
FROM tabla_1, tabla_2;
Donde se recuperará una tabla con la primera columna con el encabezado columna_n, y el contenido de colum-
na_n de tabla_1, la segunda columna conel encabezado columna_n, yel contenido de columna_n de tabla_2,
y una tercera columna con el encabezado columna_m, yel contenidode columna_mde tabla_1.
Alias
En ocasiones puede serútil emplearun alias, para que la consulta devuelva un encabezado más agradable. La sen-
tencia sería:
SELECT columna_n, columna_m AS Nombre
FROM tabla;
Donde se recuperaría una tabla con la primera columna con el encabezado columna_n, y su contenido, y la segun-
da columna conel encabezado Nombreyel contenidode columna_m.
En My SQL puede omitirse el uso de AS si el alias se encuentra entre comillas. Es decir, en My SQL, la consulta ante-
rior podría haberse escritocomo:
SELECT columna_n, columna_m "Nombre"
FROM tabla;
SQL Comandos DML
SELECT
Bloque III - Programación 2017
48
El uso del alias en tablas puede ser recomendable, especialmente si se va a realizar la identificación única de las
columnas, para poder reducirla longitud de la sentencia a escribir. A diferencia de su uso en columnas, el uso de
alias en las tablas se realiza sin la palabra reservada AS, ya que hay SGBDR que podrían interpretarlo como el pro-
ducto de tablas. La sintaxissería de la forma:
SELECT t1.columna_n, t2.columna_n, t1.columna_m
FROM tabla_1 t1, tabla_2 t2;
Donde se recuperará una tabla con la primera columna con el encabezado columna_n, y el contenido de colum-
na_n de tabla_1, la segunda columna conel encabezado columna_n, yel contenido de columna_n de tabla_2,
y una tercera columna con el encabezado columna_m, yel contenidode columna_mde tabla_1.
WHERE
Filtra la consulta bajo una condición booleana, de este modo los valores devueltos quedarán restringidos. La sintaxis
típica sería de la forma:
SELECT columna_n
FROM tabla
WHERE condición_búsqueda;
Donde se recuperaría una tabla con la columna con el encabezado columna_n de tabla y el contenido de colum-
na_n cuyas filas posean valores que cumplan condición_búsqueda.
La condición de búsqueda se desglosa en la página 49.
GROUPBY
Permite agrupar una serie de filassegúnel contenidode una o másde sus columnas. La sintaxis general sería
SELECT columna_n, columna_m
FROM tabla
GROUP BY columna_n;
No permite el uso de alias ni de parámetros posicionales . Es estrictamente necesario que la/s columna/s que son
agrupadas estén entre las llamadas porla consulta. El resultado ofrecería una única fila por cada valor de colum-
na_n.
HAVING
Filtra la agrupación bajo una condición booleana, de este modo los valores devueltos quedan restringidos. Es de uso
estrictopara GROUPBY yequivalente a WHERE. La sintaxis generalsería.
SELECT columna_n, columna_m
FROM tabla
GROUP BY columna_n;
HAVING condición_búsqueda;
La condición de búsqueda se desglosa en la página 49.
ORDER BY
Es la última cláusula que aparecerá en una sentencia, si es usada, además sólo puede usarse una vez en toda la
sentencia. La sintaxistípica sería de la forma:
SELECT columnas
FROM tablas
ORDER BY columna_1 [ASC|DESC] [, columna_2 [ASC|DESC]];
Donde se indica la consulta simple SELECT columnas FROM tablas como un modo genérico de indicar consul-
tas referidas a columnas y tablas determinadas, cuyo resultado se encuentra ordenado por columna_1, perte-
nezca o no a columnas, presente en tablas (mediante llamada explícita o implícita) de forma ASC (ascendente) o
DESC (descendente). Por omisión se ordenará ASC. La opción [, columna_2 [ASC|DESC]] indica que, a igual
valor enlas filas de columna_1, será ordenado también por columna_2 (pudiendo añadirse tantos subpatrones de
ordenamiento como se desee). Al igual que en el caso de columna_1, ha de estar presente en tablas, no es nece-
sario que pertenezca a columnas y, en caso de omisión del sentido de ordenamiento, será ASC. En caso de que
columna_1o columna_2 pertenezcana columnas, podrá emplearse el parámetro posicional.
Comandos DML
SELECT
TEMA
4
J. P. Cid - SQL
494949
La condiciónde búsqueda
Se denomina comúnmente condición de búsqueda a una condición que realiza la evaluación mediante operadores
(página 49). El resultadode condición_búsqueda puede resultar en unodelos tres valores de verdad:
- TRUE: condición_búsqueda se cumple. La fila será incluida enlos resultados.
- FALSE: condición_búsqueda nose cumple. La filaserá excluida enlos resultados.
- NULL: condición_búsquedaimposiblede verificar. La fila será omitida en los resultados.
Operadores
Para la evaluación de condición_búsqueda se emplean los operadores ya introducidos (página 44). Generalmen-
te la condición de búsqueda es empleada con los cláusulas WHERE (página 48)y HAVING (página 48), por lo que se ha
optado por omitir la cláusula (iría situada al inicio de la sintaxis). En ocasiones estos operadores pueden actuar
sobre valores, ajenos a la condición de búsqueda.
- Operadores de comparación o relacionales. Son empleados para realizar una comparación
de los valores que cumplan una condición determinada por su valor. Quedarían de forma
general como:
columna OPERADOR_relacional valor
Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por
la cláusula FROM; OPERADOR_relacional corresponde con uno de los operadores de
comparación o relacionales; y valor corresponde con el valor comparado. Tanto el valor
comparado como los valores de columna han de perteneceral mismo tipo de datos (pági-
na 45) o el SGBDRpodría devolver unerror de ejecución.
- Operador lógico unitario IS. Es empleado para realizar una comparación de las columnas
que carezcande valor, es decir, posean valor NULL. Quedarían de forma general como:
columna IS [NOT] NULL
Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por
la cláusula FROM; Puede utilizarse NOT para que la operación devuelva los valores contrarios
a la expresión.
- Operadores lógicos. Son empleados para realizar una comparación entre dos valores boo-
leanos, generalmente originados en operaciones relacionales previas. Quedarían de forma
general como:
condición_búsqueda_1 OPERADOR_lógico condición_búsqueda_2
Donde condición_búsqueda_1 y condición_búsqueda_2 pueden ser operaciones de
comparación relacional, propia o lógica, lo relevante es que tengan un valor de verdad co-
mo resultado, yOPERADOR_lógico corresponde con unode los operadores lógicos.
- Operador propio BETWEEN. Es empleado para determinar un rango de valores entre unos
límites inferior ysuperior. Quedaría de forma generalcomo:
columna [NOT] BETWEEN valor_inferior AND valor_superior
Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por
la cláusula FROM; valor_inferior corresponde al valor más bajo y valor_superior al
nivel más alto; y, AND, corresponde con la palabra reservada correspondiente al operador
lógico. Puede utilizarse NOT para que la operación devuelva los valores contrarios a la ex-
presión. Tanto los valores valor_inferior y valor_superior como los valores de co-
lumna han de pertenecer al mismo tipo de datos (página 45) o el SGBDR podría devolver un
error de ejecución.
- Operador propio IN. Es empleado para determinaruna lista de posibles valores. Quedaría
de forma general como:
columna [NOT] IN ("valor_1"[,"valor_n"])
Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por
la cláusula FROM; "valor_1" corresponde a una expresión de cadena de texto, se pueden
añadir de forma opcional tantos valores como se quiera, intercalando una coma entre to-
dos los valores. La lista de valores siempre ha de ir entre paréntesis. Puede utilizarse NOT
para que la operación devuelva los valores contrarios a la expresión. Los valores de colum-
na seránevaluados comode tipode datos CHAR (ver "Datos"página 45).
SQL Comandos DML
SELECT
Bloque III - Programación 2017
50
- Operador propio LIKE. Es empleado para determinarun rango de valores que se parezcan
a una búsqueda aproximada. Quedaría de forma general como:
columna [NOT] LIKE "patrón"
Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por
la cláusula FROM; patrón corresponde a una expresión regular (cadena de texto y/o meta-
caracter/es) y se entrecomilla para indicarque el SGBDR lo considere una cadena de texto.
Puede utilizarse NOT para que la operación devuelva los valores contrarios a la expresión.
Los valores de columna serán evaluados como de tipo de datos (página 45) de cadena de
caracteres. El uso de expresiones regulares en SQL es equivalente a su uso en UNIX/LINUX,
(ver "¡Error! No se encuentra el origen de la referencia." página ¡Error! Marcador no
definido.), aunque es necesario recordar que ANSI SQL utiliza % como metacaracter equiva-
lente a cualquier cadena de texto.
- Operador propio SUBSTRING, devuelve la subcadena de longitud caracteres, desde la
posición inicio de cadena. Tiene varias sintaxis, dependiendode la variante utilizada
ANSI SQL SUBSTRING (cadena FROM inicio FOR longitud)
SQL Server SUBSTRING (Cadena, inicio, longitud)
Oracle SUBSTR (Cadena, inicio, longitud)
Access MID (Cadena, inicio, longitud)
- Operador propio ||. Es empleado para concatenar dos cadenas de textos. SQL Server em-
plea + yAccess emplea&. Quedaría de forma general:
cadena_1 || cadena_2
Donde cadena_1 y cadena_2sonvalores tratados como CHAR.
Subconsultas
Al realizar una consulta SELECT, como sabemos, se obtienen los valores o filas que cumplen una serie de condici o-
nes. En ocasiones se emplea la respuesta de una pregunta SELECT de forma anidada para, así, poder utilizar su
resultado como valores. Estos valores pueden ser empleados por otros comandos, como puede ser otra consulta
SELECT, o para suevaluaciónpor operadores para la evaluación de condición_búsqueda.
Operacionesde conjuntos
SQL es un lenguaje construido desde la teoría de conjuntos algebraicos, por lo que permite las operaciones pro-
puestas en el modelo de Codd (ver "Modelo de Codd" página 21). Han de cumplirse dos condiciones, que las colum-
nas posean tipos de datos iguales o compatibles (si no sería necesario realizar una operación de cambio de datos o
CAST); sólo se permite una cláusula ORDER BY (página 48), al final de la sentencia. Las operaciones de conjuntos
son:
- Unión. Efectúa la unión de dos conjuntos, eliminando los repetidos. La sintaxis general sería
SUBCONSULTA UNION [ALL] SUBCONSULTA; donde SUBCONSULTA corresponde a una
subconsulta SELECT yla opción ALL es para no eliminar los resultados repetidos. En térmi-
nos generales, se considera equivalente al usode OR columna IN.
- Intersección. Efectúa la comparación de dos conjuntos y devuelve los elementos comunes.
La sintaxis general sería SUBCONSULTA INTERSECT SUBCONSULTA; donde SUBCONSUL-
TA corresponde a una subconsulta SELECT. No se encuentra disponible en todas las varian-
tes. En términos generales, se considera equivalente al usode AND columna IN.
- Diferencia. Elimina del primer conjunto los elementos presentes en el segundo. La sintaxis
general sería SUBCONSULTA EXCEPT SUBCONSULTA; donde SUBCONSULTA corresponde
a una subconsulta SELECT. No se encuentra disponible en todas las variantes, o la forma
con una palabra reservada diferente. En términos generales, se considera equivalente al
uso de AND columna NOT IN.
- Combinación (JOIN). Permiten combinar columnas en un único resultado, pudiendo anidar-
se combinaciones dentro de combinaciones, aunque en alguna de las variantes precisará de
Comandos DML
UPDATE
TEMA
4
J. P. Cid - SQL
515151
ir entre paréntesis. Las más relevantes son las combinaciones internas (INNER), externas
(OUTER) ylas cruzadas (CROSS)
25
.
o Combinaciones por equivalencia o uniones internas (INNER JOIN). La sintaxis ge-
neral sería SELECT columnas FROM tabla_1 INNER JOIN tabla_2 ON
condición_búsqueda;. Es equivalente a usar SELECT columnas FROM ta-
bla_1, tabla_2 WHERE condición_búsqueda. Realiza las combinaciones
de las filas de lastablasque poseenuncontenido equivalente.
o Combinaciones no exclusivas o uniones externas (OUTER JOIN). La sintaxis general
sería SELECT columnas FROM tabla_1 LEFT|RIGHT|FULL [OUTER]
JOIN tabla_2 ON condición_búsqueda;. Se considera que tabla_1 es-
tá a la izquierda y tabla_2 está a la derecha. Según la posibilidad elegida, y
atendiendo a la relación establecida en condición_búsqueda, LEFT toma to-
das las filas de la primera tabla y sólo las concordantes de la segunda; RIGHT
toma todas las filas de la segunda tabla y sólo las concordantes de la primera;
FULL toma todas las filas de las dos tablas distribuidas en las columnas elegidas .
La opción OUTERincluye las filas noconcordantescon el valor NULL.
o Producto cartesiano (CROSS JOIN). Permite combinar todas las filas de la columna
de la primera tabla con todas las filas de la columna de la segunda tabla. La sinta-
xis general sería SELECT tabla_1.columna_1, tabla_2.columna_2 FROM
tabla CROSS JOIN tabla_2;. Es equivalente a haber realizado la consulta
SELECT columna_1, columna_2 FROM tabla_1, tabla_2;.
La autocombinación, operaciones de combinación de una tabla sobre sí misma, tienen la necesidad del uso de alias
en las tablas, otorgandoa la misma tabla dos alias distintos.
3.2. INSERT
Permite agregar filas a una tabla. La sintaxis generales
INSERT INTO tabla [(columna_n, columna_m)]
VALUES (valor_n, valor_m);
Aunque algunas variantes admitenla cláusulaINTO como opcional, ANSI SQL loconsidera obligatorio.
La sintaxis general se usará en caso de que no se conozca el orden de las columnas, pero sí los nombres o se quiera
omitirvalores,si la definición de la columna lo permite. En caso de que se omitanlos nombres de las columnas, será
necesario introducir los valores respetando los tipos de datos correspondientes en el ordenen el que se encuentran
definidas las columnas. Entre los valores se pueden emplear NULL (sin valor asignado), o DEFAULT (tomará el valor
que se definió por defectoo NULL si nose definió) o resultados de funciones.
3.3. UPDATE
Permite el cambio de informaciónde fila/s. La sintaxis general es
UPDATE [ONLY] tabla
SET columna_n = valor_1 [, columna_m = valor_2]
[WHERE condición_búsqueda];
Donde ONLY hace referencia explícita a sólo modificar tabla (no está en todas las variantes); columna_n es la
columna en la que se quiere cambiar el valor; valor_1 es el nuevo valor de esa columna; [, columna_m =
valor_2] hace referencia a que en la misma sentencia se pueden cambiar tantas columnas y sus valores como se
desee; y WHERE condición_búsqueda, aunque opcional, es muy recomendable para limitar el alcance de la
sustitución, de lo contrario todos los valores de columna_n pasarán a ser valor_1. Entre los valores se pueden
emplear NULL (sin valor asignado) o DEFAULT (tomará el valor que se definió por defecto o NULL si no se definió) o
resultados de funciones.
25
Existe tambiénla combinaciónNATURAL, desintaxis general SELECT columnas FROM tabla_1 NATURAL JOIN
tabla_2; que realiza una acciónde tipoINNER JOIN, sinespecificar la relación, comparandotodas las columnas denombre
común que existan enla tabla.
SQL Comandos DDL
Restricciones
Bloque III - Programación 2017
52
3.4. DELETE
Permite eliminar filas de una tabla. La sintaxis general es
DELETE FROM [ONLY] tabla
[WHERE condición_búsqueda];
Donde ONLY hace referencia explícita a sólo modificar tabla (no está en todas las variantes); y [WHERE condi-
ción_búsqueda], aunque opcional,es muy recomendable para limitar el alcance de la eliminación, de lo contrario
todas las filasde tabla serán eliminadas.
4. Comandos DDL
4.1. Elementos
Cuando se trabaja con los comandos del lenguaje de definición de datos se trabaja sobre los elementos, los cuales
puedenser:
- Columna (COLUMN), se trata de una columna de una tabla.
- Función (FUNCTION), se trata de rutinas definidas por el usuario.
- Índice (INDEX), es una secuencia ordenada de datos almacenada
internamente para acelerar operaciones. No pertenece al estándar.
- Procedimiento (PROCEDURE), es una secuencia de sentencias que pue-
den der invocadas mediante un nombre asignado.
- Perfil (ROLE), es la definición de privilegios para usuario/s o
grupo/s de usuarios.
- Desencadenador o disparador (TRIGGER), es el mecanismo por el que se ejecuta auto-
máticamente una acciónante unevento. Los máshabituales son BEFORE yAFTER.
- Tabla (TABLE), es una tablade datos.
- Vista (VIEW), es una consulta SELECT a la que se le ha asignado
un nombre para suuso.
No todos estos elementos pueden ser empleados por todos los comandos DDL. La sintaxis general de los comandos
DDL sería extraordinariamente compleja sin definirel elemento. Referiremos, de forma general, los comandos DDL
a las tablas.
4.2. Restricciones
Para cumplirlas restricciones del modelo relacional (página 25), en las tablas se definen dos posibles restricciones:
de dominio, referente a los tipos de valores aceptables que puede tomar cada columna (página 45), y de tabla,
referente a limitacionesadicionales. Estas restricciones pueden ser unode los siguientescinco tipos:
- NOT NULL, establece la obligatoriedadde contenido.
- UNIQUE, establece que el valor seaúnico (norepetido).
- PRIMARY KEY, establece la clave primaria. Esto conlleva las restricciones NOT NULL y UNI-
QUE.
- FOREIGN KEY, establece una clave externa o foránea o ajena o referencial, restringiendo los
valores afectados a aquellos ya existentes en otra tabla.
- CHECK, establece una condición definida sobre los valores.
La sintaxis general de restricción es
CONSTRAINT [nombre_restricción] tipo_restricción (columnas)
Donde CONSTRAINT es opcional si la restricción es aplicada a una columna y obligatoria si es aplicada a la tabla,
nombre_restricción es la opción de otorgar un identificador a la restricción para poder tratarla como un ele-
mento más de la lista de elementos para DDL, tipo_restricción es la/s restricción/es procedente/s de la lista
que se aplicany(columnas)es la columna/s sobre la/s que se aplicará la restricción.
Comandos DCL
GRANT y REVOKE
TEMA
4
J. P. Cid - SQL
535353
4.3. CREATE
Permite la creaciónde elementos
26
. Referidoa la creación de tablas tendría una sintaxis general
CREATE TABLE tabla (
Col_1 tip_1 [DEFAULT val_def_1] [tip_rest_col_1]
[, Col_2 tip_2 [DEFAULT val_def_2] [tip_rest_col_2]]
CONSTRAINT [nombre_rest_1] tip_rest_1 (columnas)
);
Donde tabla es el nombre de la tabla a crear;Col_1 es el nombre de la columna;tip_1 es el tipo de dato al que se
restringe la columna ("Datos" de la página 45);[DEFAULT val_def_1] es opcional y hace referencia a la creación
de un valor por defecto val_def_1 para la columna si al añadir una fila no se ha indica el valor; ti-
po_rest_col_1 es opcional y hace referencia a la/s restricción/es aplicada/s a la columna; [, Col_2 tip_2
[DEFAULT val_def_2] [tip_rest_col_2]] indica que pueden añadirse tantas columnas como se desee,
mediante la misma sintaxis que las descritas; CONSTRAINT [nombre_rest_1] tip_rest_1 (columnas) hace
referencia a restricciones específicas de la tabla que tienen nombre, para ser invocadas como elemento, y/o afectan
a varias columnas.
4.4. DROP
Permite la eliminaciónde elementos. La sintaxis general es
DROP tipo_elemento nombre_elemento;
Donde tipo_elemento es uno de los elementos DDL y nombre_elemento es el identificador que posee ese
elemento. Para poder actuar sobre algunos elementos o las restricciones ha de anidarse dentro de ALTER, actuando
como cláusula.
4.5. ALTER
Permite la modificaciónde elementos. La sintaxis generalsería
ALTER TABLE tabla
ADD|DROP|ALTER COLUMN|CONSTRAINT nombre [atributos];
Donde tabla es el nombre de la tabla a modificar; ADD|DROP|ALTER es una opción de cláusulas para añadir o
eliminar o modificar; COLUMN|CONSTRAINT es una opción para operar la cláusula sobre una columna o sobre una
restricción; nombre hace referencia al identificador del elemento sobre el que se va a operar; y [atributos] es
un modo genérico de indicar las opciones de operación como serían el tipo de dato, el tipo de restricción o los
valores por defecto.
5. Comandos DCL
5.1. GRANT y REVOKE
Actúan sobre los privilegios de los usuarios, concediéndoselos (GRANT) o revocándoselos (REVOKE). Poseen distin-
tas sintaxisgenerales.
Privilegios
ALL PRIVILEGES Privilegios completos
SELECT Consulta de datos
INSERT Adiciónde datos
UPDATE Actualización de datos
DELETE Borrado de filas
26
Existe una sintaxis especialpara el copiadode tablas medianteSELECT:
SELECT * INTO tabla_d from tabla_o
Copia las columnas y su contenidode tabla_oa tabla_d.
SQL Rutinas
Atendidas
Bloque III - Programación 2017
54
EXECUTE Ejecución de funciones yprocedimientos (rutinas)
REFERENCES Definiciónde restricciones de integridad referencial
USAGE Uso de untipode dato, secuencia numérica o conjuntode caracteres
GRANT
GRANT tip_priv [(columna)]
[ON tabla]
TO usuario
[WITH GRANT OPTION];
Donde tip_priv es el tipo de privilegio/s que se otorga/n; (columna) es la opción de indicar privilegio/s sobre
columna/s específica/s; ON tabla es la opción de indicar privilegio/s sobre tabla; usuario es el nombre del
usuario al que se está concediendo privilegio/s; y, WITH GRANT OPTION permite que el usuario delegue privile-
gios a otrousuario, sinnecesidadde ser concedidos por el administrador.
REVOKE
REVOKE [GRANT OPTION FOR]
Tip_priv [(columna)]
[ON tabla]
FROM usuario
[CASCADE|RESTRICT];
Donde GRANT OPTION FOR retira la capacidad de delegación del privilegio indicado; tip_priv es el tipo de
privilegio/s que se revoca/n; (columna) es la opción de indicar privilegio/s sobre columna/s específica/s; ON
tabla es la opción de indicarprivilegio/s sobre tabla;usuario es el nombre del usuario al que se está revocando
privilegio/s; y, CASCADE|RESTRICT es la opción de determinar el efecto sobre los usuarios delegados retirándose-
los (CASCADE)o manteniéndoselos (RESTRICT).
5.2. COMMIT y ROLLBACK
Algunos SGBDR no finalizan automáticamente las transacciones (no actualizan automáticamente los datos), por lo
que las modificaciones de la sesión actual han de ser confirmadas para hacer efectivos los cambios (COMMIT) o
rechazadas para deshacer los cambios efectuados (ROLLBACK). Carecen de sintaxis y consisten sólo en el uso del
comando de control de concurrencia.
6. Rutinas
6.1. Atendidas
Procedimientos
Los procedimientos sonuna secuencia de sentenciasa las que se les ha asignado unidentificador.
La creaciónde unprocedimientoresponde a la sintaxisgeneral:
CREATE PROCEDURE nomProc [(parámetros)] AS
[LANGUAGE lengua]
sentencias
Donde CREATE puede ser DECLARATE; nomProc es el identificador del procedimiento a crear; parámetros hace
referencia a la opción de definir la lista de parámetros;la opción LANGUAGE lengua permite determinar el lenguaje
lengua utilizado en el procedimiento nomProc; y, sentencias hace referencia a la secuencia de sentencias em-
pleadas.
Los parámetros poseen la sintaxis [IN|OUT|INOUT] nomPara tipo [DEFAULT val] donde la opción
IN|OUT|INOUT sirve para indicar el sentido del parámetro como facilitado como entrada (IN), devuelto por el
procedimiento a su salida (OUT) o entrada ysalida (INOUT); nomPara es el identificador del parámetro; tipo es el
tipo de dato asociado(ver "Datos" página 45);y, DEFAULT val es la opciónde asignarle el valor por defecto val.
Ejemplos
Tablas
TEMA
4
J. P. Cid - SQL
555555
La secuencia de sentencias inserta en la creación irá entre las palabras reservadas BEGIN y END. En caso de que las
sentencias se encuentren de forma externa a la creación se usaría EXTERNAL precediendo al identificador de la
ubicación.
La ejecución de un procedimiento se efectúa mediante la sintaxis CALL nomProc, aunque existen dialectos donde
se usa EXECUTE.
Funciones
Las funciones son una secuencia de sentencias que devuelven un valor. La sintaxis general es, respetando la misma
nomenclatura:
CREATE FUNCTION nomFun [(parámetros)]
RETURNS tipo AS
[LANGUAGE lengua]
sentencias
Donde CREATE puede ser DECLARATE; nomFun es el identificador de la función a crear; parámetros hace refe-
rencia a la opción de definir la lista de parámetros ; tipo es el tipo de dato asociado (ver "Datos" página 45); la
opción LANGUAGE lengua permite determinar el lenguaje lengua utilizado en el procedimiento nomProc; y,
sentencias hace referencia a la secuencia de sentencias empleadas (de la misma forma que en los procedimien-
tos).
6.2. Desatendidas
Los disparadores, también llamados desencadenadores o trigger, son procedimientos (por lo que no devuelven
valor) que se ejecutan automáticamente ante una acción concreta (evento). La sintaxisgeneral sería:
CREATE TRIGGER trig_nom
FOR|BEFORE|AFTER|(INSTEAD OF) Evento
ON elemento
[REFERING OLD|NEWelemento AS alias]
AS
sentencias
Donde trig_nom es el identificador del desencadenador; FOR|BEFORE|AFTER|INSTEAD OF hace referencia a
que el desencadenador se dé antes (BEFORE en el caso de que sea un evento DML y FOR para un evento DCL),
después (AFTER) o en lugar de (INSTEAD OF
27
) realizar la acción; Evento hace referencia a la acción realizada
sobre elemento siendo una o varias (irían separadas por comas) de las siguientes acciones: INSERT, UPDATE,
DELETE, CREATE, ALTER, DROP, GRANT, DENY o REVOKE, junto con la especificación sintáctica completa de ele-
mento/s sobre lo/s que se actúa; elemento es el elemento sobre el que está ocurriendo el evento,lo más habitual
es que sea sobre tablas o vistas; REFERING OLD|NEWnom AS alias hace referencia a la opción de asignar un
identificador alias al valorde elemento antes de la operación (concatenando OLD a su identificador) o después
de la operación (concatenando NEW); y, sentencias hace referencia a la secuencia de sentencias empleadas (de la
misma forma que enlos procedimientos).
7. Ejemplos
La estructura general de este apartado será, en general, introducir el código de ejemplo y, a continuación, la res-
puesta a la sentencia. Ambos irán en formatodiferente para poder distinguirlos.
7.1. Tablas
En este epígrafe incluiremos las tablas que usaremos durante los ejemplos. En caso de que exista alguna actualiza-
ción se indicará y, desde ese momento, la tablaserá la modificada.
27
En la sintaxis general figura entreparéntesis por claridad de|.
SQL Ejemplos
SELECT
Bloque III - Programación 2017
56
Pedidos
Cod Modelo Color Comercial Reclamado
1 H Civ Gris Juan N
2 T Arg Azul María N
3 T Aur Negro Victoria S
4 N Duk Rojo María S
5 H Hrv Rojo Juan N
6 H Jrv Azul Juan
Clientes
Contacto Nombre Apellido Población Fecha
5553494 Rosina Pérez Sarria 04/07/2009
5552717 Francisco Jiménez Rebollada 02/11/1997
5450256 Manuel Vizcaíno Adrada 15/08/2004
Entregados
Id Contacto Cod Fecha
1 5450256 3 31/03/2008
2 5552717 4 29/02/2012
7.2. SELECT
SELECT *
/* Consulta más simple */
FROM Entregados;
Id Contacto Cod Fecha
1 5450256 3 31/03/2008
2 5552717 4 29/02/2012
SELECT Comercial
/* Consulta eligiendo el contenido */
FROM Pedidos;
Comercial
Juan
María
Victoria
María
Juan
Juan
SELECT Pedidos.Modelo, Entregados.Cod, Entregados.Fecha
/* Consulta con calificadores */
FROM Pedidos, Entregados;
Modelo Cod Fecha
H Civ 3 31/03/2008
H Civ 4 29/02/2012
T Arg 3 31/03/2008
T Arg 4 29/02/2012
T Aur 3 31/03/2008
T Aur 4 29/02/2012
N Duk 3 31/03/2008
N Duk 4 29/02/2012
H Hrv 3 31/03/2008
H Hrv 4 29/02/2012
H Jrv 3 31/03/2008
H Jrv 4 29/02/2012
Ejemplos
SELECT
TEMA
4
J. P. Cid - SQL
575757
SELECT Id AS Marcador, Contacto
/* Uso de Alias en Columnas */
FROM Entregados;
Marcador Contacto
1 5450256
2 5552717
SELECT p.Modelo, e.Cod AS ID, e.Fecha
/* Uso de Alias en Filas y Columnas */
FROM Pedidos p, Entregados e;
Modelo ID Fecha
H Civ 3 31/03/2008
H Civ 4 29/02/2012
T Arg 3 31/03/2008
T Arg 4 29/02/2012
T Aur 3 31/03/2008
T Aur 4 29/02/2012
N Duk 3 31/03/2008
N Duk 4 29/02/2012
H Hrv 3 31/03/2008
H Hrv 4 29/02/2012
H Jrv 3 31/03/2008
H Jrv 4 29/02/2012
SELECT DISTINCT Comercial
/* Uso DISTINCT */
FROM Pedidos;
Comercial
Juan
María
Victoria
SELECT DISTINCT Comercial, Reclamado
/* Uso DISTINCT con dos columnas */
FROM Pedidos;
Comercial Reclamado
Juan N
María N
Victoria S
María S
Juan
SELECT p.Modelo, e.Fecha
/* Uso WHERE con Operador de Comparación igual */
FROM Pedidos p, Entregados e
WHERE p.Cod = e.Cod;
Modelo Fecha
T Aur 31/03/2008
N Duk 29/02/2012
SELECT Modelo, Color
/* Uso WHERE con Operador Lógico AND */
FROM Pedidos
WHERE Reclamado = "N" AND Comercial = "María";
Modelo Color
T Arg Azul
SQL Ejemplos
SELECT
Bloque III - Programación 2017
58
SELECT Modelo, Color
/* Ejercicio precedencia sin paréntesis */
/* Uso WHERE con Operador Lógico */
FROM Pedidos
WHERE Reclamado = "N" AND Comercial = "María" OR Comercial = "Victoria";
Modelo Color
T Arg Azul
T Aur Negro
SELECT Modelo, Color
/* Ejercicio precedencia con paréntesis */
FROM Pedidos
WHERE Reclamado = "N" AND (Comercial = "María" OR Comercial = "Victoria");
Modelo Color
T Arg Azul
SELECT Modelo, Color, Comercial
/* Uso LIKE y metacaracter % */
FROM Pedidos
WHERE Modelo LIKE "%A%";
Modelo Color Comercial
T Arg Azul María
T Aur Negro Victoria
SELECT Modelo, Color, Comercial
/* Uso LIKE y metacaracter _ */
FROM Pedidos
WHERE Modelo LIKE "H _rv"
Modelo Color Comercial
H Hrv Rojo Juan
H Jrv Azul Juan
SELECT Modelo, Color
/* Uso BETWEEN */
FROM Pedidos
WHERE Cod BETWEEN 2 AND 5;
Modelo Color
T Arg Azul
T Aur Negro
N Duk Rojo
H Hrv Rojo
SELECT Modelo
/* Uso IN */
FROM Pedidos
WHERE Color IN ("Rojo", "Azul");
Modelo
T Arg
N Duk
H Hrv
H Jrv
Ejemplos
SELECT
TEMA
4
J. P. Cid - SQL
595959
SELECT Modelo, Comercial
/* Uso IS */
FROM Pedidos
WHERE Reclamado IS NULL;
Modelo Comercial
H Jrv Juan
SELECT Modelo, Color
/* Uso IN */
/* Uso subconsulta */
FROM Pedidos
WHERE Cod IN
(SELECT Cod FROM Entregados);
Modelo Color
T Aur Negro
N Duk Rojo
SELECT Modelo, "En stock" AS Estado
/* Uso de literales */
/* Uso de Alias */
/* Operador de relación igual que */
FROM Pedidos
WHERE Reclamado = "N";
Modelo Estado
H Civ En stock
T Arg En stock
H Hrv En stock
SELECT Contacto, (Contacto + 99) AS Telefono
/* Uso Operador Numérico*/
/* Uso Alias */
FROM Clientes;
Contacto Telefono
5553494 5553593
5552717 5552816
5450256 5450355
SELECT Contacto, Fecha, CURRENT_DATE AS Actualizado
/* Uso CURRENT_DATE */
/* Uso Alias */
FROM Entregados;
Contacto Fecha Actualizado
5450256 31/03/2008 10/11/2017
5552717 29/02/2012 10/11/2017
SELECT Modelo, Color
/* Uso SUBSTRING */
FROM Pedidos
WHERE SUBSTRING (Modelo FROM 1 FOR 1) = "H";
Modelo Color
H Civ Gris
H Hrv Rojo
H Jrv Azul
SQL Ejemplos
Operaciones de conjuntos
Bloque III - Programación 2017
60
SELECT Modelo, Comercial,
/* Uso de CASE */
CASE Reclamado
When "N" then "Sí"
When "S" then "No"
END AS Almacenado
FROM Pedidos;
Modelo Comercial Almacenado
H Civ Juan Sí
T Arg María Sí
T Aur Victoria No
N Duk María No
H Hrv Juan Sí
H Jrv Juan
7.3. Operaciones de conjuntos
SELECT Contacto FROM Clientes
/* Uso UNION */
UNION
SELECT Contacto FROM Entregados;
Contacto
5553494
5552717
5450256
SELECT Contacto FROM Clientes
/* Uso UNION ALL*/
UNION ALL
SELECT Contacto FROM Entregados;
Contacto
5553494
5552717
5450256
5450256
5552717
SELECT Contacto FROM Clientes
/* Uso INTERSECT ALL*/
INTERSECT
SELECT Contacto FROM Entregados;
Contacto
5553494
5552717
5450256
SELECT Contacto FROM Clientes
/* Uso EXCEPT ALL*/
EXCEPT
SELECT Contacto FROM Entregados;
Contacto
5553494
SELECT c.Nombre, c.Apellido, e.Fecha AS Día
/* Uso INNER JOIN */
/* Uso Alias */
FROM Clientes c
INNER JOIN Entregados e
ON c.Contacto = e.Contacto;
Nombre Apellido Día
Francisco Jiménez 29/02/2012
Manuel Vizcaíno 31/03/2008
Ejemplos
Operaciones de conjuntos
TEMA
4
J. P. Cid - SQL
616161
SELECT c.Nombre, c.Apellido, e.Fecha AS Día
/* Uso LEFT OUTER JOIN */
/* Uso Alias */
FROM Clientes c
LEFT OUTER JOIN Entregados e
ON c.Contacto = e.Contacto;
Nombre Apellido Día
Rosina Pérez
Francisco Jiménez 29/02/2012
Manuel Vizcaíno 31/03/2008
SELECT e.Fecha AS Día, p.Modelo
/* Uso RIGHT OUTER JOIN */
/* Uso Alias */
FROM Entregados e
RIGHT OUTER JOIN Pedidos p
ON e.Cod=p.Cod;
Día Modelo
H Civ
T Arg
31/03/2008 T Aur
29/02/2012 N Duk
H Hrv
H Jrv
SELECT Cod, Nombre
/* Uso CROSS JOIN */
FROM Entregados
CROSS JOIN Clientes;
Cod Nombre
3 Rosina
3 Francisco
3 Manuel
4 Rosina
4 Francisco
4 Manuel
SELECT p1.Modelo, p1.Color, p1.Comercial
/* Uso autocombinación */
/* Uso mixto de parámetro posicional en ORDER BY */
FROM Pedidos p1
INNER JOIN Pedidos p2
ON p1.Comercial = p2.Comercial AND p1.Reclamado = "N"
ORDER BY 3, p1.Modelo DESC;
Modelo Color Comercial
H Hrv Rojo Juan
H Civ Gris Juan
T Arg Azul María
SELECT Color, COUNT (Color) AS Existencias
/* Uso COUNT */
/* Uso parámetro posicional en ORDER BY */
FROM Pedidos
GROUP BY Color
ORDER BY 1;
Color Existencias
Azul 2
Gris 1
Negro 1
Rojo 2
SQL Ejemplos
INSERT
Bloque III - Programación 2017
62
7.4. SELECT complejas
SELECT CASE SUBSTRING (Modelo FROM 1 TO 1)
WHEN "H" THEN "Honda"
WHEN "T" THEN "Toyota"
WHEN "N" THEN "Nissan"
END AS Fabricante, COUNT (SUBSTRING (Modelo FROM 1 TO 1)) AS Modelos
FROM Pedidos
GROUP BY SUBSTRING (Modelo FROM 1 TO 1)
ORDER BY Fabricante;
Fabricante Modelos
Honda 3
Nissan 1
Toyota 2
SELECT CASE SUBSTRING (Modelo FROM 1 TO 1)
WHEN "H" THEN "Honda"
WHEN "T" THEN "Toyota"
WHEN "N" THEN "Nissan"
END AS Fabricante, COUNT (SUBSTRING (Modelo FROM 1 TO 1)) AS Modelos
FROM Pedidos
WHERE Reclamado = "N"
GROUP BY SUBSTRING (Modelo FROM 1 TO 1)
HAVING COUNT(SUBSTRING (Modelo FROM 1 TO 1))>1
ORDER BY Fabricante;
Fabricante Modelos
Honda 2
7.5. INSERT
INSERT INTO Pedidos
VALUES (
(SELECT MAX (Cod) FROM Pedidos)+1,
"R Sx4", "Amarillo", "Victoria", NULL
);
1 fila actualizada
SELECT *
/* Se asume que se realizó la transacción automáticamente */
FROM Pedidos;
Cod Modelo Color Comercial Reclamado
1 H Civ Gris Juan N
2 T Arg Azul María N
3 T Aur Negro Victoria S
4 N Duk Rojo María S
5 H Hrv Rojo Juan N
6 H Jrv Azul Juan
7 R Sx4 Amarillo Victoria
INSERT INTO Clientes (Apellido, Nombre, Contacto, Población, Fecha)
VALUES (Velasco, Luis, 5553595, Pinto, CURRENT_DATE);
1 fila actualizada
SELECT *
/* Se asume que se realizó la transacción automáticamente */
FROM Clientes;
Contacto Nombre Apellido Población Fecha
5553494 Rosina Pérez Sarria 04/07/2009
5552717 Francisco Jiménez Rebollada 02/11/1997
5450256 Manuel Vizcaíno Adrada 15/08/2004
5553595 Luis Velasco Pinto 10/11/2017
Ejemplos
DROP
TEMA
4
J. P. Cid - SQL
636363
7.6. UPDATE
UPDATE ONLY Pedidos
SET Reclamado = "N"
WHERE Reclamado IS NULL;
2 filas actualizadas
SELECT *
/* Se asume que se realizó la transacción automáticamente */
FROM Pedidos;
Cod Modelo Color Comercial Reclamado
1 H Civ Gris Juan N
2 T Arg Azul María N
3 T Aur Negro Victoria S
4 N Duk Rojo María S
5 H Hrv Rojo Juan N
6 H Jrv Azul Juan N
7 R Sx4 Amarillo Victoria N
UPDATE ONLY Pedidos
SET Color = "Amarillo", Comercial = "María"
WHERE Cod = 6 ;
1 fila actualizada
SELECT *
/* Se asume que se realizó la transacción automáticamente */
FROM Pedidos;
Cod Modelo Color Comercial Reclamado
1 H Civ Gris Juan N
2 T Arg Azul María N
3 T Aur Negro Victoria S
4 N Duk Rojo María S
5 H Hrv Rojo Juan N
6 H Jrv Amarillo María N
7 R Sx4 Amarillo Victoria N
7.7. DELETE
DELETE ONLY FROM Pedidos
WHERE Reclamado = "S";
2 filas actualizadas
SELECT *
/* Se asume que se realizó la transacción automáticamente */
/* y que las restricciones lo permiten */
FROM Pedidos;
Cod Modelo Color Comercial Reclamado
1 H Civ Gris Juan N
2 T Arg Azul María N
5 H Hrv Rojo Juan N
6 H Jrv Amarillo María N
7 R Sx4 Amarillo Victoria N
7.8. DROP
DROP TABLE Pedidos;
DROP TABLE Clientes;
DROP TABLE Entregados; /* Hemos borrado todas las tablas */
SQL Ejemplos
ALTER
Bloque III - Programación 2017
64
7.9. CREATE
CREATE TABLE Pedidos (
/* Crea la tabla Pedidos vacía */
Cod INTEGER DEFAULT ((SELECT MAX (Cod) FROM Pedidos)+1),
/* Impone un valor por defecto */
/* con una subconsulta añadiendo uno al siguiente código */
Modelo CHAR (5) NOT NULL CHECK (Modelo LIKE ([A-Z]||" "|| "[A-Z]"||"__")),
/* Impone que modelo sea una cadena de 5 caracteres en el que sea una mayúscu-
la, un espacio en blanco, una mayúscula y dos caracteres cualquiera. */
Color CHAR (30) DEFAULT NULL,
Comercial CHAR (30) DEFAULT CURRENT_USER NOT NULL,
/* Impone que tiene que haber una cadena de hasta 15 caracteres y, por defec-
to, otorga el nombre del usuario que está operando*/
Reclamado CHAR (1) DEFAULT NULL,
CONSTRAINT PK_Pedidos PRIMARY KEY (Cod),
/* Crea la restricción PK_Pedidos, que fija Cod como clave primaria*/
CONSTRAING Reclamado_val CHECK (Reclamado = "S" OR Reclamado = "N" OR Reclamado =
NULL)
/* Crea la restricción Reclamado_val e impone que el valor sólo puede ser una
de las tres opciones */
);
CREATE TABLE Clientes (
/* Crea la tabla Clientes vacía */
Contacto CHAR (7) NOT NULL,
Nombre CHAR (30) NOT NULL,
Apellido CHAR (30) NOT NULL,
Población CHAR (30),
Fecha DATE DEFAULT CURRENT_DATE NOT NULL,
CONSTRAINT PK_Clientes PRIMARY KEY (Contacto, Nombre, Apellido)
/* Establece la clave primaria, a la que llama PK_Clientes, usando las colum-
nas Contacto, Nombre y Apellido)
);
CREATE TABLE Entregados
/* Crea la tabla Entregados */
Id INTEGER DEFAULT ((SELECT MAX (Id) FROM Entregados)+1),
Contacto CHAR (7),
Cod INTEGER,
Ficha DATE DEFAULT CURRENT_DATE NOT NULL,
/* Esta columna tiene una errata deliberada */
CONSTRAINT PK_Entregados PRIMARY KEY (Id),
/* Establece la columna Id como clave primaria */
CONSTRAINT FK_Contacto FOREIGN KEY Contacto REFERENCES Contacto (Clientes)
/* Impone que la columna Contacto sólo pueda tomar un valor de los existentes
en la columna homónima de la tabla Clientes
CONSTRAINT NN_Contacto NOT NULL (Cod)
/* Impone que la columna Cod tenga un valor */
);
7.10. ALTER
ALTER TABLE Entregados
/* Eliminaremos la columna con errata */
DROP COLUMN Ficha;
ALTER TABLE Entregados
/* Añadimos la columna sin errata */
ADD COLUMN Fecha DATE DEFAULT CURRENT_DATE NOT NULL;
Ejemplos
ALTER
TEMA
4
J. P. Cid - SQL
656565
ALTER TABLE Entregados
/* Eliminamos la restricción que afectaba a la columna Cod de Entregados */
DROP CONSTRAINT NN_Contacto;
ALTER TABLE Entregados
/* Añadimos la restricción de que los valores de la columna Cod de Entregados
procedan de los valores existentes en la columna Cod de Pedidos */
ADD CONSTRAINT FK_Cod FOREIGN KEY Cod REFERENCES Cod (Pedidos);

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Lenguaje Sql
Lenguaje SqlLenguaje Sql
Lenguaje Sql
 
Lenguaje sql
Lenguaje sqlLenguaje sql
Lenguaje sql
 
Sql presentacion
Sql presentacionSql presentacion
Sql presentacion
 
SQL Server conceptos basicos,DDL Lenguaje de definicion datos,DMLLenguaje de ...
SQL Server conceptos basicos,DDL Lenguaje de definicion datos,DMLLenguaje de ...SQL Server conceptos basicos,DDL Lenguaje de definicion datos,DMLLenguaje de ...
SQL Server conceptos basicos,DDL Lenguaje de definicion datos,DMLLenguaje de ...
 
Introducción al SQL
Introducción al SQLIntroducción al SQL
Introducción al SQL
 
Lenguaje Transact SQL
Lenguaje Transact SQL Lenguaje Transact SQL
Lenguaje Transact SQL
 
Instrucciones Transact S Q L
Instrucciones Transact  S Q LInstrucciones Transact  S Q L
Instrucciones Transact S Q L
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
Bases de datos módulo 3 el lenguaje sql
Bases de datos módulo 3 el lenguaje sqlBases de datos módulo 3 el lenguaje sql
Bases de datos módulo 3 el lenguaje sql
 
LENGUAJE TRANSACT SQL
 LENGUAJE TRANSACT SQL LENGUAJE TRANSACT SQL
LENGUAJE TRANSACT SQL
 
Lenguaje de consulta de datos
Lenguaje de consulta de datosLenguaje de consulta de datos
Lenguaje de consulta de datos
 
103305862 t-sql
103305862 t-sql103305862 t-sql
103305862 t-sql
 
Introducción a sql
Introducción a  sqlIntroducción a  sql
Introducción a sql
 
SQL
SQLSQL
SQL
 
Plsql y paquetes
Plsql y paquetesPlsql y paquetes
Plsql y paquetes
 
Intro sql y plsql
Intro sql y plsqlIntro sql y plsql
Intro sql y plsql
 
Curso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL AvanzadoCurso Oracle11g Lenguaje PL/SQL Avanzado
Curso Oracle11g Lenguaje PL/SQL Avanzado
 
Presentacion Sql
Presentacion SqlPresentacion Sql
Presentacion Sql
 
Curso Básico de Pl Sql Oracle
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracle
 

Similar a Structured Query Language (Guía rápida)

ANSI SQL
ANSI SQLANSI SQL
ANSI SQLMartha
 
TEMA3-SQL-(PARTE 1).pdf
TEMA3-SQL-(PARTE 1).pdfTEMA3-SQL-(PARTE 1).pdf
TEMA3-SQL-(PARTE 1).pdfalukardconde1
 
SQL (Structured Query Language): Informe de Lectura Unidad 3
SQL (Structured Query Language): Informe de Lectura Unidad 3SQL (Structured Query Language): Informe de Lectura Unidad 3
SQL (Structured Query Language): Informe de Lectura Unidad 3JuanMiguelCustodioMo
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageInés Rosero
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageDoris Aguagallo
 
6 150113092523-conversion-gate01
6 150113092523-conversion-gate016 150113092523-conversion-gate01
6 150113092523-conversion-gate01Dyego de Alvaro
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageWilliam Lozano
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageYoly QC
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageChars Orden
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageAny Saula
 
6. SQL structured query language
6. SQL   structured query language6. SQL   structured query language
6. SQL structured query languageMarcelo Herrera
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languagejhonny tenesaca
 
6. sql structured query language2
6. sql   structured query language26. sql   structured query language2
6. sql structured query language2Oscar Valdivieso
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query languageLiliana Charco
 

Similar a Structured Query Language (Guía rápida) (20)

scrib,my plick,slide boom
scrib,my plick,slide boomscrib,my plick,slide boom
scrib,my plick,slide boom
 
scrib,my plick, slide boom
scrib,my plick, slide boomscrib,my plick, slide boom
scrib,my plick, slide boom
 
Transac sql
Transac sqlTransac sql
Transac sql
 
ANSI SQL
ANSI SQLANSI SQL
ANSI SQL
 
TEMA3-SQL-(PARTE 1).pdf
TEMA3-SQL-(PARTE 1).pdfTEMA3-SQL-(PARTE 1).pdf
TEMA3-SQL-(PARTE 1).pdf
 
SQL (Structured Query Language): Informe de Lectura Unidad 3
SQL (Structured Query Language): Informe de Lectura Unidad 3SQL (Structured Query Language): Informe de Lectura Unidad 3
SQL (Structured Query Language): Informe de Lectura Unidad 3
 
Introducción SQL : Primera semana
Introducción SQL : Primera semanaIntroducción SQL : Primera semana
Introducción SQL : Primera semana
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6 150113092523-conversion-gate01
6 150113092523-conversion-gate016 150113092523-conversion-gate01
6 150113092523-conversion-gate01
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. SQL structured query language
6. SQL   structured query language6. SQL   structured query language
6. SQL structured query language
 
111
111111
111
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 
6. sql structured query language2
6. sql   structured query language26. sql   structured query language2
6. sql structured query language2
 
6. sql structured query language
6. sql   structured query language6. sql   structured query language
6. sql structured query language
 

Último

Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 

Último (20)

Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 

Structured Query Language (Guía rápida)

  • 1. J. P. Cid - SQL 4343 4.SQL 1. Introducción El Lenguaje de Consulta Estructurado (SQL – Structured Query Language) es un lenguaje de base de datos normali- zado, utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones sobre los datos o sobre la estructura de los mismos. Como sucede con cualquier sistema de normalización hay excepciones para casi todo; de hecho, cada motor de bases de datos tiene sus peculiaridades, por lo tanto, el lenguaje SQL normalizado (ANSI) no resulta adecuado para resolver todos los problemas que se pueden presentar. Al menos se puede asegurar que cualquier sentencia escrita en ANSI será interpretable por cualquier motor de datos. La historia de SQL comienza en 1974 con la definición, por parte de Donald Chamberlin y su equipo de IBM, de un lenguaje para la especificación de bases de datos relacionales. Este primer lenguaje se llamó SEQUEL (Structured EnglishQueryLanguage) yse implementó en unprototipollamadoSEQUEL-XRMentre 1974 y1975. Las experimentaciones con SEQUEL condujeron entre 1976 y 1977 a una revisión del lenguaje (SEQUEL/2), que cambió de nombre por motivos legales, convirtiéndose en SQL. El prototipo (System R), basado en este lenguaje,se adoptóyutilizó internamente enIBM yalgunos de sus clientes. Gracias al éxito de este sistema, que no estaba todavía comercializado, también otras compañías empezaron a desarrollar sus productos relacionales basados en SQL. A partir de 1981, IBM comenzó a entregar sus productos relacionales y en 1983 empezó a vender DB2. Durante los años ochenta, numerosas e importantes compañías (Ora- cle y Sybase entre otros) comercializaron productos basados en SQL, convirtiéndolo en el estándar industrial en basesde datos relacionales. En 1986, el ANSI adoptó SQL (sustancialmente adoptó el dialecto SQL de IBM) como estándar para los lenguajes relacionales yen 1987 se transformó en estándarISO con el nombre de SQL/86. Ha sufrido diversas revisiones que han conducidoa lasversionesSQL/89, SQL/92, SQL/99, SQL/2003, SQL/2006, SQL/2008… El tener un estándar definido por un lenguaje para bases de datos relacionales abre el camino a la intercomunicabi- lidad entre los productos que se basanen él. Desde el punto de vista práctico, cada compañía adopta e implementa en la propia base de datos sólo el corazón del lenguaje SQL, denominado Entry level, o, como máximo, el Interme- diate level, extendiéndolo a partir de aquí según la visión particular. 2. Componentes de SQL Las sentencias del lenguaje SQL están compuestas por comandos, predicados, cláusulas, operadores y funciones de agregado (se emplearán palabras reservadas). Estos elementos se combinan en las instrucciones para crear, actuali- zar y manipular las bases de datos. Pueden existir variaciones entre ANSI SQL ylas distintas variantes que se revisan (My SQL, SQL server, Oracle y Access), se preferirá la forma ANSI y, en caso de que existieran variaciones,se aborda- rán en las partes específicas. 2.1. Comandos También llamados verbos. Permiten realizar operaciones sobre los datos contenidos en una base de datos. Los comandos serán explicados uno a uno, en el que se empleará una sintaxis descriptiva general, en el que se emplea- rán mayúsculas para palabras reservadas, minúsculas para los datos, entre corchetes los elementos opcionales (no
  • 2. SQL Componentes de SQL Operadores Bloque III - Programación 2017 44 tienen por qué estar presentes) y la barra vertical para distinguir elementos alternativos (al menos ha de estar uno de ellos). Existen tres grandes grupos. Lenguaje Comando Descripción página DML Data ManipulationLanguage. Acceso SELECT Consultasque satisfaganun criterio 47 INSERT Agrega datos 51 UPDATE Actualiza los datos 51 DELETE Elimina datos 52 DDL Data DefinitionLanguage. Creación ymodificación CREATE Crea elementos 53 DROP Elimina elementos 53 ALTER Modifica elementos 53 DCL Data Control Language Control GRANT Asignación de privilegios 54 REVOKE Denegación de privilegios 54 COMMIT Confirmaciónde los cambios efectuados 54 ROLLBACK Rechazo de los cambios efectuados 54 2.2. Predicados Son restricciones, específicaspara cada comando, que se aplicansobre los datos sobre los que actúa el comando. Predicado Descripción Uso por ALL Devuelve todas las filasde todas las columnas SELECT DISTINCT Se muestranlos valoresdistintos, eliminando lasrepeticiones adicionales Si se consultan varias columnas, considerará repetidos sólo los que posean mismos valores del registroconsiderando todaslas columnas SELECT DEFAULT Determina el valor por defecto CREATE ONLY Limita el rangode actuacióndel comando sóloa la tablaespecificada UPDATE DELETE 2.3. Cláusulas Son condiciones utilizadaspara definir el métodode actuación de los comandos. Cláusula Descripción Comando FROM Delimitador del origende lascolumnas a consultar SELECT WHERE Restricción de la consulta bajouna condiciónbooleana SELECT UPDATE DELETE GROUPBY Agrupa los resultados de la consulta en una fila SELECT HAVING Restricción de la consulta bajouna condiciónbooleana SELECT ORDER BY Permite ordenar el resultadode la consulta SELECT CASE Permite la sustituciónde unvalor por otro N/A 2.4. Operadores Permite el manejo de los datos. Por cuestiones de adaptación a la semántica, serán desarrollados en Operadores, página 49. Comparación < Menor que > Mayor que <> Distintode <= Menor o igual que >= Mayor o igual que = Igual que Lógicos IS Devuelve un valor de verdadsi lascondiciones soniguales NOT Devuelve el valor contrariode la expresión
  • 3. Componentes de SQL Datos TEMA 4 J. P. Cid - SQL 454545 AND Devuelve un valor de verdadsi ambascondiciones sonciertas OR Devuelve un valor de verdadsi alguna de las condicioneses cierta XOR Devuelve un valor de verdadsi lascondiciones tienenvalores de verdad distintos Eqv Devuelve un valor de verdadsi lascondiciones tienenvalores de verdad idénticos Imp Devuelve un valor de verdado Null ante valores de verdado Null Propios BETWEEN Utilizadopara especificar unintervalode valores IN Utilizadopara especificar valores concretos. LIKE Utilizadoenla comparación de unmodelode búsqueda SUBSTRING Extrae parte de la cadena de caracteres || Operador de concatenación de dos cadenasde textos 2.5. Funciones Son susceptibles de no estar en todas las variantes o emplear palabras reservadas diferentes. A continuación se indicanlas más relevantes. Agregado Una función de agregado procesa todos los valores seleccionados en una única columna para generar un único resultado. Suelenemplearse de forma conjunta conla cláusula GROUPBY, dado que devuelve unresultadoúnico. AVG Hallael valor medio de los valores existentesenla columna indicada ylo devuelve comoresultado COUNT Cuenta el número de filas que contiene unvalor no nuloylo devuelve como resultado. MIN Devuelve el valor mínimoexistente enla columna indicada MAX Devuelve el valor máximo existente enla columna indicada SUM Calcula la suma de los valorescontenidos enla columna indicada ylo devuelve comoresultado. Cadena Permitenoperar sobre secuencias o cadenas de caracteres. CHAR_LENGTH Devuelve el númerode caracteresexistente enel dato facilitado CONVERT Convierte la cadena a una representación distinta LOWER Convierte la cadena enminúsculas POSITION Devuelve la posición de una subcadena SUBSTRING Extrae parte de una cadena. Dada su relevancia se considera unoperador propio(página 49) TRANSLATE Convierte cadenas entre conjuntos de caracteres TRIM Elimina espacios sobrantes enla cadena UPPER Convierte la cadena enmayúsculas Integradas Devuelveninformación facilitada por el propio Sistema de gestión de bases de datos relacionales (SGBDR), sin preci- sar ninguna información sobre la que actuar. CURRENT_DATE Entrega la fecha actual CURRENT_TIME Entrega la hora actual CURRENT_TIMESTAMP Entrega la fecha yhora actuales CURRENT_USER yUSER Identifica al usuarioque está operando sobre la base de datos SESSION_USER Facilita el identificador delusuario si es distintode CURRENT_USER SYSTEM_USER Identifica al usuariosegún la cuenta del sistema operativo 2.6. Datos A continuación se indican los tipos de datos, su denominación en las diferentes variantes y las operaciones más frecuentes sobre los datos.
  • 4. SQL Componentes de SQL Otros elementos a considerar Bloque III - Programación 2017 46 Tipo de Datos ANSI SQL Oracle SQL Server My SQL Access BIT BOOLEAN BIT BOOLEAN BIT Cadena de texto CHAR CHAR CHAR CHAR CHARACTER VARCHAR VARCHAR VARCHAR VARCHAR TEXT Numéricos SMALLINT SMALLINT SMALLINT SMALLINT SMALLINT INTEGER INTEGER INTEGER INTEGER INTEGER DECIMAL DECIMAL DECIMAL DECIMAL DECIMAL FLOAT FLOAT FLOAT FLOAT FLOAT Fecha yhora DATE DATE DATE/DATETIME DATE DATE TIME TIME/DATETIME DATETIME TIMESTAMP TIMESTAMP TIMESTAMP Objetos binarios BLOB BLOB BINARY BLOB BINARY Operacionessobre datos. Permitenmodificar los datos. Puedenser: - Caracteres. Permiten la manipulación de cadenas de caracteres. Son SUBSTRING y ||(ver "Operadores" enla página 49). - Conversión (casting). Permite la conversión de dato de un tipo a otro del tipo TIPO. Su sin- taxis es CAST (dato AS TIPO) - Fecha. De acuerdo a ANSI SQL, cuando se realizan operaciones numéricas sobre fechas es necesaria la conversión del tipo de dato (las considera cadenas de texto). MY SQL tiene una conversión específica para dato cuando es de tipo fecha TO_DAYS(dato). Como excep- ción, Access permite la manipulación directamente, aunque permite convertir las fechas a cadenas de textomediante CDATE (dato). - Numéricas. Los símbolos son +, -, * y /, siendo respectivamente la suma, la resta, el pro- ducto y la división de dos valores numéricos. Su sintaxis es: valor_1 símbo- lo_operador_numérico valor_2 - Sustitución. Mediante la cláusula CASE permite las sustituciones de valor por resulta- do. Su sintaxis (se indican dos sustituciones aunque queda a discreción) depende de la va- riante utilizada: o ANSI SQL (admite el usode aliascomoopción) CASE. Columna WHEN valor_1 THEN resultado_1 WHEN valor_n THEN resultado_n END [AS nombre] o Access (admite el uso de alias comoopción) SWITCH (valor_1, resultado_1, valor_n, resultado_n) [AS nombre] 2.7. Otros elementos a considerar A continuaciónse indicanotros elementos, aunque noforman uncomponente propio, son relevantes en SQL: - Comentarios. Permiten la inserción de texto que sólo será comprensible para el usuario humano, siendo omitido porel SGBDR a la hora de ser interpretado. Se iniciarán mediante el uso de /* y se cerrarán con */. Existen otras formas de insertar comentarios, pero esta es aceptada por todas las variantes ypermite multilínea. - Literales. Permiten la inserción de cadenas de textosustituyendo un valor. Se realizan inser- tando la cadena entre "" (comillas dobles), en algunas variantesse aceptaránsimples. - Metacaracteres. El carácter % (* en el caso de Access) representa una cadena de uno o va- rios caracteres cualquiera. El carácter _ (subrayado) representa a un único carácter que puede ser sustituidopor cualquier carácter. - Paréntesis. Permiten la inserción de operaciones o sentencias en su interior, para alterar el orden de precedencia, las operaciones en su interior serán evaluadas y devueltas como va-
  • 5. Comandos DML SELECT TEMA 4 J. P. Cid - SQL 474747 lores. Esto permite alterar el orden de precedencia de izquierda a derecha. Se realizan in- sertando la operación o sentencia entre (). 3. Comandos DML 3.1. SELECT La sintaxis de la consulta, selección, o pregunta, SELECT se emplea para poder recuperar una serie de datos de la base que cumplan alguna condición. Se trata del tipo de sentencia más compleja de SQL. Se escribe igual para todos los lenguajes estudiados. SELECT [DISTINCT|ALL] *|valores, columnas [AS alias] FROM tablas|vista|SELECT [WHERE [GROUP BY[HAVING]] [ORDER BY]]; Si no se realiza especificación de opción en los predicados, DISTINCT|ALL, se empleará pordefecto la alternativa ALL. Existenejemplos en la página 56. Uso simple La forma más sencilla, sinopciones, es de la forma: SELECT * FROM tabla; Donde se recuperarán todas las columnas, y su contenido, de tabla. Si no se especifican valores o columna, será tomado por defectola opción *. Para poder seleccionar sóloalgunas columnas de tabla se empleala sintaxisde la forma: SELECT columna_n, columna_m FROM tabla; Donde se recuperaran columna_n y columna_m, y su contenido, de tabla. A cada columna o valor indicado tras el comando SELECT, podrá ser invocado por el resto de las cláusulas por el parámetro posicional . En esta forma sintáctica general columna_n podría ser llamado, simplemente, indicando 1 y columna_m indicando2. Es recomendable, para agilizar el proceso del SGBDR y evitar ambigüedades (en ocasiones el nombre de una colum- na está repetido en varias tablas), realizar la identificación única de las columnas con calificadores. Esto se realiza anteponiendo el nombre de la tabla a la que pertenece la columna yseparándolos por un punto. La sintaxis sería de la forma: SELECT tabla_1.columna_n, tabla_2.columna_n, tabla_1.columna_m FROM tabla_1, tabla_2; Donde se recuperará una tabla con la primera columna con el encabezado columna_n, y el contenido de colum- na_n de tabla_1, la segunda columna conel encabezado columna_n, yel contenido de columna_n de tabla_2, y una tercera columna con el encabezado columna_m, yel contenidode columna_mde tabla_1. Alias En ocasiones puede serútil emplearun alias, para que la consulta devuelva un encabezado más agradable. La sen- tencia sería: SELECT columna_n, columna_m AS Nombre FROM tabla; Donde se recuperaría una tabla con la primera columna con el encabezado columna_n, y su contenido, y la segun- da columna conel encabezado Nombreyel contenidode columna_m. En My SQL puede omitirse el uso de AS si el alias se encuentra entre comillas. Es decir, en My SQL, la consulta ante- rior podría haberse escritocomo: SELECT columna_n, columna_m "Nombre" FROM tabla;
  • 6. SQL Comandos DML SELECT Bloque III - Programación 2017 48 El uso del alias en tablas puede ser recomendable, especialmente si se va a realizar la identificación única de las columnas, para poder reducirla longitud de la sentencia a escribir. A diferencia de su uso en columnas, el uso de alias en las tablas se realiza sin la palabra reservada AS, ya que hay SGBDR que podrían interpretarlo como el pro- ducto de tablas. La sintaxissería de la forma: SELECT t1.columna_n, t2.columna_n, t1.columna_m FROM tabla_1 t1, tabla_2 t2; Donde se recuperará una tabla con la primera columna con el encabezado columna_n, y el contenido de colum- na_n de tabla_1, la segunda columna conel encabezado columna_n, yel contenido de columna_n de tabla_2, y una tercera columna con el encabezado columna_m, yel contenidode columna_mde tabla_1. WHERE Filtra la consulta bajo una condición booleana, de este modo los valores devueltos quedarán restringidos. La sintaxis típica sería de la forma: SELECT columna_n FROM tabla WHERE condición_búsqueda; Donde se recuperaría una tabla con la columna con el encabezado columna_n de tabla y el contenido de colum- na_n cuyas filas posean valores que cumplan condición_búsqueda. La condición de búsqueda se desglosa en la página 49. GROUPBY Permite agrupar una serie de filassegúnel contenidode una o másde sus columnas. La sintaxis general sería SELECT columna_n, columna_m FROM tabla GROUP BY columna_n; No permite el uso de alias ni de parámetros posicionales . Es estrictamente necesario que la/s columna/s que son agrupadas estén entre las llamadas porla consulta. El resultado ofrecería una única fila por cada valor de colum- na_n. HAVING Filtra la agrupación bajo una condición booleana, de este modo los valores devueltos quedan restringidos. Es de uso estrictopara GROUPBY yequivalente a WHERE. La sintaxis generalsería. SELECT columna_n, columna_m FROM tabla GROUP BY columna_n; HAVING condición_búsqueda; La condición de búsqueda se desglosa en la página 49. ORDER BY Es la última cláusula que aparecerá en una sentencia, si es usada, además sólo puede usarse una vez en toda la sentencia. La sintaxistípica sería de la forma: SELECT columnas FROM tablas ORDER BY columna_1 [ASC|DESC] [, columna_2 [ASC|DESC]]; Donde se indica la consulta simple SELECT columnas FROM tablas como un modo genérico de indicar consul- tas referidas a columnas y tablas determinadas, cuyo resultado se encuentra ordenado por columna_1, perte- nezca o no a columnas, presente en tablas (mediante llamada explícita o implícita) de forma ASC (ascendente) o DESC (descendente). Por omisión se ordenará ASC. La opción [, columna_2 [ASC|DESC]] indica que, a igual valor enlas filas de columna_1, será ordenado también por columna_2 (pudiendo añadirse tantos subpatrones de ordenamiento como se desee). Al igual que en el caso de columna_1, ha de estar presente en tablas, no es nece- sario que pertenezca a columnas y, en caso de omisión del sentido de ordenamiento, será ASC. En caso de que columna_1o columna_2 pertenezcana columnas, podrá emplearse el parámetro posicional.
  • 7. Comandos DML SELECT TEMA 4 J. P. Cid - SQL 494949 La condiciónde búsqueda Se denomina comúnmente condición de búsqueda a una condición que realiza la evaluación mediante operadores (página 49). El resultadode condición_búsqueda puede resultar en unodelos tres valores de verdad: - TRUE: condición_búsqueda se cumple. La fila será incluida enlos resultados. - FALSE: condición_búsqueda nose cumple. La filaserá excluida enlos resultados. - NULL: condición_búsquedaimposiblede verificar. La fila será omitida en los resultados. Operadores Para la evaluación de condición_búsqueda se emplean los operadores ya introducidos (página 44). Generalmen- te la condición de búsqueda es empleada con los cláusulas WHERE (página 48)y HAVING (página 48), por lo que se ha optado por omitir la cláusula (iría situada al inicio de la sintaxis). En ocasiones estos operadores pueden actuar sobre valores, ajenos a la condición de búsqueda. - Operadores de comparación o relacionales. Son empleados para realizar una comparación de los valores que cumplan una condición determinada por su valor. Quedarían de forma general como: columna OPERADOR_relacional valor Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por la cláusula FROM; OPERADOR_relacional corresponde con uno de los operadores de comparación o relacionales; y valor corresponde con el valor comparado. Tanto el valor comparado como los valores de columna han de perteneceral mismo tipo de datos (pági- na 45) o el SGBDRpodría devolver unerror de ejecución. - Operador lógico unitario IS. Es empleado para realizar una comparación de las columnas que carezcande valor, es decir, posean valor NULL. Quedarían de forma general como: columna IS [NOT] NULL Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por la cláusula FROM; Puede utilizarse NOT para que la operación devuelva los valores contrarios a la expresión. - Operadores lógicos. Son empleados para realizar una comparación entre dos valores boo- leanos, generalmente originados en operaciones relacionales previas. Quedarían de forma general como: condición_búsqueda_1 OPERADOR_lógico condición_búsqueda_2 Donde condición_búsqueda_1 y condición_búsqueda_2 pueden ser operaciones de comparación relacional, propia o lógica, lo relevante es que tengan un valor de verdad co- mo resultado, yOPERADOR_lógico corresponde con unode los operadores lógicos. - Operador propio BETWEEN. Es empleado para determinar un rango de valores entre unos límites inferior ysuperior. Quedaría de forma generalcomo: columna [NOT] BETWEEN valor_inferior AND valor_superior Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por la cláusula FROM; valor_inferior corresponde al valor más bajo y valor_superior al nivel más alto; y, AND, corresponde con la palabra reservada correspondiente al operador lógico. Puede utilizarse NOT para que la operación devuelva los valores contrarios a la ex- presión. Tanto los valores valor_inferior y valor_superior como los valores de co- lumna han de pertenecer al mismo tipo de datos (página 45) o el SGBDR podría devolver un error de ejecución. - Operador propio IN. Es empleado para determinaruna lista de posibles valores. Quedaría de forma general como: columna [NOT] IN ("valor_1"[,"valor_n"]) Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por la cláusula FROM; "valor_1" corresponde a una expresión de cadena de texto, se pueden añadir de forma opcional tantos valores como se quiera, intercalando una coma entre to- dos los valores. La lista de valores siempre ha de ir entre paréntesis. Puede utilizarse NOT para que la operación devuelva los valores contrarios a la expresión. Los valores de colum- na seránevaluados comode tipode datos CHAR (ver "Datos"página 45).
  • 8. SQL Comandos DML SELECT Bloque III - Programación 2017 50 - Operador propio LIKE. Es empleado para determinarun rango de valores que se parezcan a una búsqueda aproximada. Quedaría de forma general como: columna [NOT] LIKE "patrón" Donde columna pertenece a una de las columnas pertenecientes a las tablas limitadas por la cláusula FROM; patrón corresponde a una expresión regular (cadena de texto y/o meta- caracter/es) y se entrecomilla para indicarque el SGBDR lo considere una cadena de texto. Puede utilizarse NOT para que la operación devuelva los valores contrarios a la expresión. Los valores de columna serán evaluados como de tipo de datos (página 45) de cadena de caracteres. El uso de expresiones regulares en SQL es equivalente a su uso en UNIX/LINUX, (ver "¡Error! No se encuentra el origen de la referencia." página ¡Error! Marcador no definido.), aunque es necesario recordar que ANSI SQL utiliza % como metacaracter equiva- lente a cualquier cadena de texto. - Operador propio SUBSTRING, devuelve la subcadena de longitud caracteres, desde la posición inicio de cadena. Tiene varias sintaxis, dependiendode la variante utilizada ANSI SQL SUBSTRING (cadena FROM inicio FOR longitud) SQL Server SUBSTRING (Cadena, inicio, longitud) Oracle SUBSTR (Cadena, inicio, longitud) Access MID (Cadena, inicio, longitud) - Operador propio ||. Es empleado para concatenar dos cadenas de textos. SQL Server em- plea + yAccess emplea&. Quedaría de forma general: cadena_1 || cadena_2 Donde cadena_1 y cadena_2sonvalores tratados como CHAR. Subconsultas Al realizar una consulta SELECT, como sabemos, se obtienen los valores o filas que cumplen una serie de condici o- nes. En ocasiones se emplea la respuesta de una pregunta SELECT de forma anidada para, así, poder utilizar su resultado como valores. Estos valores pueden ser empleados por otros comandos, como puede ser otra consulta SELECT, o para suevaluaciónpor operadores para la evaluación de condición_búsqueda. Operacionesde conjuntos SQL es un lenguaje construido desde la teoría de conjuntos algebraicos, por lo que permite las operaciones pro- puestas en el modelo de Codd (ver "Modelo de Codd" página 21). Han de cumplirse dos condiciones, que las colum- nas posean tipos de datos iguales o compatibles (si no sería necesario realizar una operación de cambio de datos o CAST); sólo se permite una cláusula ORDER BY (página 48), al final de la sentencia. Las operaciones de conjuntos son: - Unión. Efectúa la unión de dos conjuntos, eliminando los repetidos. La sintaxis general sería SUBCONSULTA UNION [ALL] SUBCONSULTA; donde SUBCONSULTA corresponde a una subconsulta SELECT yla opción ALL es para no eliminar los resultados repetidos. En térmi- nos generales, se considera equivalente al usode OR columna IN. - Intersección. Efectúa la comparación de dos conjuntos y devuelve los elementos comunes. La sintaxis general sería SUBCONSULTA INTERSECT SUBCONSULTA; donde SUBCONSUL- TA corresponde a una subconsulta SELECT. No se encuentra disponible en todas las varian- tes. En términos generales, se considera equivalente al usode AND columna IN. - Diferencia. Elimina del primer conjunto los elementos presentes en el segundo. La sintaxis general sería SUBCONSULTA EXCEPT SUBCONSULTA; donde SUBCONSULTA corresponde a una subconsulta SELECT. No se encuentra disponible en todas las variantes, o la forma con una palabra reservada diferente. En términos generales, se considera equivalente al uso de AND columna NOT IN. - Combinación (JOIN). Permiten combinar columnas en un único resultado, pudiendo anidar- se combinaciones dentro de combinaciones, aunque en alguna de las variantes precisará de
  • 9. Comandos DML UPDATE TEMA 4 J. P. Cid - SQL 515151 ir entre paréntesis. Las más relevantes son las combinaciones internas (INNER), externas (OUTER) ylas cruzadas (CROSS) 25 . o Combinaciones por equivalencia o uniones internas (INNER JOIN). La sintaxis ge- neral sería SELECT columnas FROM tabla_1 INNER JOIN tabla_2 ON condición_búsqueda;. Es equivalente a usar SELECT columnas FROM ta- bla_1, tabla_2 WHERE condición_búsqueda. Realiza las combinaciones de las filas de lastablasque poseenuncontenido equivalente. o Combinaciones no exclusivas o uniones externas (OUTER JOIN). La sintaxis general sería SELECT columnas FROM tabla_1 LEFT|RIGHT|FULL [OUTER] JOIN tabla_2 ON condición_búsqueda;. Se considera que tabla_1 es- tá a la izquierda y tabla_2 está a la derecha. Según la posibilidad elegida, y atendiendo a la relación establecida en condición_búsqueda, LEFT toma to- das las filas de la primera tabla y sólo las concordantes de la segunda; RIGHT toma todas las filas de la segunda tabla y sólo las concordantes de la primera; FULL toma todas las filas de las dos tablas distribuidas en las columnas elegidas . La opción OUTERincluye las filas noconcordantescon el valor NULL. o Producto cartesiano (CROSS JOIN). Permite combinar todas las filas de la columna de la primera tabla con todas las filas de la columna de la segunda tabla. La sinta- xis general sería SELECT tabla_1.columna_1, tabla_2.columna_2 FROM tabla CROSS JOIN tabla_2;. Es equivalente a haber realizado la consulta SELECT columna_1, columna_2 FROM tabla_1, tabla_2;. La autocombinación, operaciones de combinación de una tabla sobre sí misma, tienen la necesidad del uso de alias en las tablas, otorgandoa la misma tabla dos alias distintos. 3.2. INSERT Permite agregar filas a una tabla. La sintaxis generales INSERT INTO tabla [(columna_n, columna_m)] VALUES (valor_n, valor_m); Aunque algunas variantes admitenla cláusulaINTO como opcional, ANSI SQL loconsidera obligatorio. La sintaxis general se usará en caso de que no se conozca el orden de las columnas, pero sí los nombres o se quiera omitirvalores,si la definición de la columna lo permite. En caso de que se omitanlos nombres de las columnas, será necesario introducir los valores respetando los tipos de datos correspondientes en el ordenen el que se encuentran definidas las columnas. Entre los valores se pueden emplear NULL (sin valor asignado), o DEFAULT (tomará el valor que se definió por defectoo NULL si nose definió) o resultados de funciones. 3.3. UPDATE Permite el cambio de informaciónde fila/s. La sintaxis general es UPDATE [ONLY] tabla SET columna_n = valor_1 [, columna_m = valor_2] [WHERE condición_búsqueda]; Donde ONLY hace referencia explícita a sólo modificar tabla (no está en todas las variantes); columna_n es la columna en la que se quiere cambiar el valor; valor_1 es el nuevo valor de esa columna; [, columna_m = valor_2] hace referencia a que en la misma sentencia se pueden cambiar tantas columnas y sus valores como se desee; y WHERE condición_búsqueda, aunque opcional, es muy recomendable para limitar el alcance de la sustitución, de lo contrario todos los valores de columna_n pasarán a ser valor_1. Entre los valores se pueden emplear NULL (sin valor asignado) o DEFAULT (tomará el valor que se definió por defecto o NULL si no se definió) o resultados de funciones. 25 Existe tambiénla combinaciónNATURAL, desintaxis general SELECT columnas FROM tabla_1 NATURAL JOIN tabla_2; que realiza una acciónde tipoINNER JOIN, sinespecificar la relación, comparandotodas las columnas denombre común que existan enla tabla.
  • 10. SQL Comandos DDL Restricciones Bloque III - Programación 2017 52 3.4. DELETE Permite eliminar filas de una tabla. La sintaxis general es DELETE FROM [ONLY] tabla [WHERE condición_búsqueda]; Donde ONLY hace referencia explícita a sólo modificar tabla (no está en todas las variantes); y [WHERE condi- ción_búsqueda], aunque opcional,es muy recomendable para limitar el alcance de la eliminación, de lo contrario todas las filasde tabla serán eliminadas. 4. Comandos DDL 4.1. Elementos Cuando se trabaja con los comandos del lenguaje de definición de datos se trabaja sobre los elementos, los cuales puedenser: - Columna (COLUMN), se trata de una columna de una tabla. - Función (FUNCTION), se trata de rutinas definidas por el usuario. - Índice (INDEX), es una secuencia ordenada de datos almacenada internamente para acelerar operaciones. No pertenece al estándar. - Procedimiento (PROCEDURE), es una secuencia de sentencias que pue- den der invocadas mediante un nombre asignado. - Perfil (ROLE), es la definición de privilegios para usuario/s o grupo/s de usuarios. - Desencadenador o disparador (TRIGGER), es el mecanismo por el que se ejecuta auto- máticamente una acciónante unevento. Los máshabituales son BEFORE yAFTER. - Tabla (TABLE), es una tablade datos. - Vista (VIEW), es una consulta SELECT a la que se le ha asignado un nombre para suuso. No todos estos elementos pueden ser empleados por todos los comandos DDL. La sintaxis general de los comandos DDL sería extraordinariamente compleja sin definirel elemento. Referiremos, de forma general, los comandos DDL a las tablas. 4.2. Restricciones Para cumplirlas restricciones del modelo relacional (página 25), en las tablas se definen dos posibles restricciones: de dominio, referente a los tipos de valores aceptables que puede tomar cada columna (página 45), y de tabla, referente a limitacionesadicionales. Estas restricciones pueden ser unode los siguientescinco tipos: - NOT NULL, establece la obligatoriedadde contenido. - UNIQUE, establece que el valor seaúnico (norepetido). - PRIMARY KEY, establece la clave primaria. Esto conlleva las restricciones NOT NULL y UNI- QUE. - FOREIGN KEY, establece una clave externa o foránea o ajena o referencial, restringiendo los valores afectados a aquellos ya existentes en otra tabla. - CHECK, establece una condición definida sobre los valores. La sintaxis general de restricción es CONSTRAINT [nombre_restricción] tipo_restricción (columnas) Donde CONSTRAINT es opcional si la restricción es aplicada a una columna y obligatoria si es aplicada a la tabla, nombre_restricción es la opción de otorgar un identificador a la restricción para poder tratarla como un ele- mento más de la lista de elementos para DDL, tipo_restricción es la/s restricción/es procedente/s de la lista que se aplicany(columnas)es la columna/s sobre la/s que se aplicará la restricción.
  • 11. Comandos DCL GRANT y REVOKE TEMA 4 J. P. Cid - SQL 535353 4.3. CREATE Permite la creaciónde elementos 26 . Referidoa la creación de tablas tendría una sintaxis general CREATE TABLE tabla ( Col_1 tip_1 [DEFAULT val_def_1] [tip_rest_col_1] [, Col_2 tip_2 [DEFAULT val_def_2] [tip_rest_col_2]] CONSTRAINT [nombre_rest_1] tip_rest_1 (columnas) ); Donde tabla es el nombre de la tabla a crear;Col_1 es el nombre de la columna;tip_1 es el tipo de dato al que se restringe la columna ("Datos" de la página 45);[DEFAULT val_def_1] es opcional y hace referencia a la creación de un valor por defecto val_def_1 para la columna si al añadir una fila no se ha indica el valor; ti- po_rest_col_1 es opcional y hace referencia a la/s restricción/es aplicada/s a la columna; [, Col_2 tip_2 [DEFAULT val_def_2] [tip_rest_col_2]] indica que pueden añadirse tantas columnas como se desee, mediante la misma sintaxis que las descritas; CONSTRAINT [nombre_rest_1] tip_rest_1 (columnas) hace referencia a restricciones específicas de la tabla que tienen nombre, para ser invocadas como elemento, y/o afectan a varias columnas. 4.4. DROP Permite la eliminaciónde elementos. La sintaxis general es DROP tipo_elemento nombre_elemento; Donde tipo_elemento es uno de los elementos DDL y nombre_elemento es el identificador que posee ese elemento. Para poder actuar sobre algunos elementos o las restricciones ha de anidarse dentro de ALTER, actuando como cláusula. 4.5. ALTER Permite la modificaciónde elementos. La sintaxis generalsería ALTER TABLE tabla ADD|DROP|ALTER COLUMN|CONSTRAINT nombre [atributos]; Donde tabla es el nombre de la tabla a modificar; ADD|DROP|ALTER es una opción de cláusulas para añadir o eliminar o modificar; COLUMN|CONSTRAINT es una opción para operar la cláusula sobre una columna o sobre una restricción; nombre hace referencia al identificador del elemento sobre el que se va a operar; y [atributos] es un modo genérico de indicar las opciones de operación como serían el tipo de dato, el tipo de restricción o los valores por defecto. 5. Comandos DCL 5.1. GRANT y REVOKE Actúan sobre los privilegios de los usuarios, concediéndoselos (GRANT) o revocándoselos (REVOKE). Poseen distin- tas sintaxisgenerales. Privilegios ALL PRIVILEGES Privilegios completos SELECT Consulta de datos INSERT Adiciónde datos UPDATE Actualización de datos DELETE Borrado de filas 26 Existe una sintaxis especialpara el copiadode tablas medianteSELECT: SELECT * INTO tabla_d from tabla_o Copia las columnas y su contenidode tabla_oa tabla_d.
  • 12. SQL Rutinas Atendidas Bloque III - Programación 2017 54 EXECUTE Ejecución de funciones yprocedimientos (rutinas) REFERENCES Definiciónde restricciones de integridad referencial USAGE Uso de untipode dato, secuencia numérica o conjuntode caracteres GRANT GRANT tip_priv [(columna)] [ON tabla] TO usuario [WITH GRANT OPTION]; Donde tip_priv es el tipo de privilegio/s que se otorga/n; (columna) es la opción de indicar privilegio/s sobre columna/s específica/s; ON tabla es la opción de indicar privilegio/s sobre tabla; usuario es el nombre del usuario al que se está concediendo privilegio/s; y, WITH GRANT OPTION permite que el usuario delegue privile- gios a otrousuario, sinnecesidadde ser concedidos por el administrador. REVOKE REVOKE [GRANT OPTION FOR] Tip_priv [(columna)] [ON tabla] FROM usuario [CASCADE|RESTRICT]; Donde GRANT OPTION FOR retira la capacidad de delegación del privilegio indicado; tip_priv es el tipo de privilegio/s que se revoca/n; (columna) es la opción de indicar privilegio/s sobre columna/s específica/s; ON tabla es la opción de indicarprivilegio/s sobre tabla;usuario es el nombre del usuario al que se está revocando privilegio/s; y, CASCADE|RESTRICT es la opción de determinar el efecto sobre los usuarios delegados retirándose- los (CASCADE)o manteniéndoselos (RESTRICT). 5.2. COMMIT y ROLLBACK Algunos SGBDR no finalizan automáticamente las transacciones (no actualizan automáticamente los datos), por lo que las modificaciones de la sesión actual han de ser confirmadas para hacer efectivos los cambios (COMMIT) o rechazadas para deshacer los cambios efectuados (ROLLBACK). Carecen de sintaxis y consisten sólo en el uso del comando de control de concurrencia. 6. Rutinas 6.1. Atendidas Procedimientos Los procedimientos sonuna secuencia de sentenciasa las que se les ha asignado unidentificador. La creaciónde unprocedimientoresponde a la sintaxisgeneral: CREATE PROCEDURE nomProc [(parámetros)] AS [LANGUAGE lengua] sentencias Donde CREATE puede ser DECLARATE; nomProc es el identificador del procedimiento a crear; parámetros hace referencia a la opción de definir la lista de parámetros;la opción LANGUAGE lengua permite determinar el lenguaje lengua utilizado en el procedimiento nomProc; y, sentencias hace referencia a la secuencia de sentencias em- pleadas. Los parámetros poseen la sintaxis [IN|OUT|INOUT] nomPara tipo [DEFAULT val] donde la opción IN|OUT|INOUT sirve para indicar el sentido del parámetro como facilitado como entrada (IN), devuelto por el procedimiento a su salida (OUT) o entrada ysalida (INOUT); nomPara es el identificador del parámetro; tipo es el tipo de dato asociado(ver "Datos" página 45);y, DEFAULT val es la opciónde asignarle el valor por defecto val.
  • 13. Ejemplos Tablas TEMA 4 J. P. Cid - SQL 555555 La secuencia de sentencias inserta en la creación irá entre las palabras reservadas BEGIN y END. En caso de que las sentencias se encuentren de forma externa a la creación se usaría EXTERNAL precediendo al identificador de la ubicación. La ejecución de un procedimiento se efectúa mediante la sintaxis CALL nomProc, aunque existen dialectos donde se usa EXECUTE. Funciones Las funciones son una secuencia de sentencias que devuelven un valor. La sintaxis general es, respetando la misma nomenclatura: CREATE FUNCTION nomFun [(parámetros)] RETURNS tipo AS [LANGUAGE lengua] sentencias Donde CREATE puede ser DECLARATE; nomFun es el identificador de la función a crear; parámetros hace refe- rencia a la opción de definir la lista de parámetros ; tipo es el tipo de dato asociado (ver "Datos" página 45); la opción LANGUAGE lengua permite determinar el lenguaje lengua utilizado en el procedimiento nomProc; y, sentencias hace referencia a la secuencia de sentencias empleadas (de la misma forma que en los procedimien- tos). 6.2. Desatendidas Los disparadores, también llamados desencadenadores o trigger, son procedimientos (por lo que no devuelven valor) que se ejecutan automáticamente ante una acción concreta (evento). La sintaxisgeneral sería: CREATE TRIGGER trig_nom FOR|BEFORE|AFTER|(INSTEAD OF) Evento ON elemento [REFERING OLD|NEWelemento AS alias] AS sentencias Donde trig_nom es el identificador del desencadenador; FOR|BEFORE|AFTER|INSTEAD OF hace referencia a que el desencadenador se dé antes (BEFORE en el caso de que sea un evento DML y FOR para un evento DCL), después (AFTER) o en lugar de (INSTEAD OF 27 ) realizar la acción; Evento hace referencia a la acción realizada sobre elemento siendo una o varias (irían separadas por comas) de las siguientes acciones: INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, GRANT, DENY o REVOKE, junto con la especificación sintáctica completa de ele- mento/s sobre lo/s que se actúa; elemento es el elemento sobre el que está ocurriendo el evento,lo más habitual es que sea sobre tablas o vistas; REFERING OLD|NEWnom AS alias hace referencia a la opción de asignar un identificador alias al valorde elemento antes de la operación (concatenando OLD a su identificador) o después de la operación (concatenando NEW); y, sentencias hace referencia a la secuencia de sentencias empleadas (de la misma forma que enlos procedimientos). 7. Ejemplos La estructura general de este apartado será, en general, introducir el código de ejemplo y, a continuación, la res- puesta a la sentencia. Ambos irán en formatodiferente para poder distinguirlos. 7.1. Tablas En este epígrafe incluiremos las tablas que usaremos durante los ejemplos. En caso de que exista alguna actualiza- ción se indicará y, desde ese momento, la tablaserá la modificada. 27 En la sintaxis general figura entreparéntesis por claridad de|.
  • 14. SQL Ejemplos SELECT Bloque III - Programación 2017 56 Pedidos Cod Modelo Color Comercial Reclamado 1 H Civ Gris Juan N 2 T Arg Azul María N 3 T Aur Negro Victoria S 4 N Duk Rojo María S 5 H Hrv Rojo Juan N 6 H Jrv Azul Juan Clientes Contacto Nombre Apellido Población Fecha 5553494 Rosina Pérez Sarria 04/07/2009 5552717 Francisco Jiménez Rebollada 02/11/1997 5450256 Manuel Vizcaíno Adrada 15/08/2004 Entregados Id Contacto Cod Fecha 1 5450256 3 31/03/2008 2 5552717 4 29/02/2012 7.2. SELECT SELECT * /* Consulta más simple */ FROM Entregados; Id Contacto Cod Fecha 1 5450256 3 31/03/2008 2 5552717 4 29/02/2012 SELECT Comercial /* Consulta eligiendo el contenido */ FROM Pedidos; Comercial Juan María Victoria María Juan Juan SELECT Pedidos.Modelo, Entregados.Cod, Entregados.Fecha /* Consulta con calificadores */ FROM Pedidos, Entregados; Modelo Cod Fecha H Civ 3 31/03/2008 H Civ 4 29/02/2012 T Arg 3 31/03/2008 T Arg 4 29/02/2012 T Aur 3 31/03/2008 T Aur 4 29/02/2012 N Duk 3 31/03/2008 N Duk 4 29/02/2012 H Hrv 3 31/03/2008 H Hrv 4 29/02/2012 H Jrv 3 31/03/2008 H Jrv 4 29/02/2012
  • 15. Ejemplos SELECT TEMA 4 J. P. Cid - SQL 575757 SELECT Id AS Marcador, Contacto /* Uso de Alias en Columnas */ FROM Entregados; Marcador Contacto 1 5450256 2 5552717 SELECT p.Modelo, e.Cod AS ID, e.Fecha /* Uso de Alias en Filas y Columnas */ FROM Pedidos p, Entregados e; Modelo ID Fecha H Civ 3 31/03/2008 H Civ 4 29/02/2012 T Arg 3 31/03/2008 T Arg 4 29/02/2012 T Aur 3 31/03/2008 T Aur 4 29/02/2012 N Duk 3 31/03/2008 N Duk 4 29/02/2012 H Hrv 3 31/03/2008 H Hrv 4 29/02/2012 H Jrv 3 31/03/2008 H Jrv 4 29/02/2012 SELECT DISTINCT Comercial /* Uso DISTINCT */ FROM Pedidos; Comercial Juan María Victoria SELECT DISTINCT Comercial, Reclamado /* Uso DISTINCT con dos columnas */ FROM Pedidos; Comercial Reclamado Juan N María N Victoria S María S Juan SELECT p.Modelo, e.Fecha /* Uso WHERE con Operador de Comparación igual */ FROM Pedidos p, Entregados e WHERE p.Cod = e.Cod; Modelo Fecha T Aur 31/03/2008 N Duk 29/02/2012 SELECT Modelo, Color /* Uso WHERE con Operador Lógico AND */ FROM Pedidos WHERE Reclamado = "N" AND Comercial = "María"; Modelo Color T Arg Azul
  • 16. SQL Ejemplos SELECT Bloque III - Programación 2017 58 SELECT Modelo, Color /* Ejercicio precedencia sin paréntesis */ /* Uso WHERE con Operador Lógico */ FROM Pedidos WHERE Reclamado = "N" AND Comercial = "María" OR Comercial = "Victoria"; Modelo Color T Arg Azul T Aur Negro SELECT Modelo, Color /* Ejercicio precedencia con paréntesis */ FROM Pedidos WHERE Reclamado = "N" AND (Comercial = "María" OR Comercial = "Victoria"); Modelo Color T Arg Azul SELECT Modelo, Color, Comercial /* Uso LIKE y metacaracter % */ FROM Pedidos WHERE Modelo LIKE "%A%"; Modelo Color Comercial T Arg Azul María T Aur Negro Victoria SELECT Modelo, Color, Comercial /* Uso LIKE y metacaracter _ */ FROM Pedidos WHERE Modelo LIKE "H _rv" Modelo Color Comercial H Hrv Rojo Juan H Jrv Azul Juan SELECT Modelo, Color /* Uso BETWEEN */ FROM Pedidos WHERE Cod BETWEEN 2 AND 5; Modelo Color T Arg Azul T Aur Negro N Duk Rojo H Hrv Rojo SELECT Modelo /* Uso IN */ FROM Pedidos WHERE Color IN ("Rojo", "Azul"); Modelo T Arg N Duk H Hrv H Jrv
  • 17. Ejemplos SELECT TEMA 4 J. P. Cid - SQL 595959 SELECT Modelo, Comercial /* Uso IS */ FROM Pedidos WHERE Reclamado IS NULL; Modelo Comercial H Jrv Juan SELECT Modelo, Color /* Uso IN */ /* Uso subconsulta */ FROM Pedidos WHERE Cod IN (SELECT Cod FROM Entregados); Modelo Color T Aur Negro N Duk Rojo SELECT Modelo, "En stock" AS Estado /* Uso de literales */ /* Uso de Alias */ /* Operador de relación igual que */ FROM Pedidos WHERE Reclamado = "N"; Modelo Estado H Civ En stock T Arg En stock H Hrv En stock SELECT Contacto, (Contacto + 99) AS Telefono /* Uso Operador Numérico*/ /* Uso Alias */ FROM Clientes; Contacto Telefono 5553494 5553593 5552717 5552816 5450256 5450355 SELECT Contacto, Fecha, CURRENT_DATE AS Actualizado /* Uso CURRENT_DATE */ /* Uso Alias */ FROM Entregados; Contacto Fecha Actualizado 5450256 31/03/2008 10/11/2017 5552717 29/02/2012 10/11/2017 SELECT Modelo, Color /* Uso SUBSTRING */ FROM Pedidos WHERE SUBSTRING (Modelo FROM 1 FOR 1) = "H"; Modelo Color H Civ Gris H Hrv Rojo H Jrv Azul
  • 18. SQL Ejemplos Operaciones de conjuntos Bloque III - Programación 2017 60 SELECT Modelo, Comercial, /* Uso de CASE */ CASE Reclamado When "N" then "Sí" When "S" then "No" END AS Almacenado FROM Pedidos; Modelo Comercial Almacenado H Civ Juan Sí T Arg María Sí T Aur Victoria No N Duk María No H Hrv Juan Sí H Jrv Juan 7.3. Operaciones de conjuntos SELECT Contacto FROM Clientes /* Uso UNION */ UNION SELECT Contacto FROM Entregados; Contacto 5553494 5552717 5450256 SELECT Contacto FROM Clientes /* Uso UNION ALL*/ UNION ALL SELECT Contacto FROM Entregados; Contacto 5553494 5552717 5450256 5450256 5552717 SELECT Contacto FROM Clientes /* Uso INTERSECT ALL*/ INTERSECT SELECT Contacto FROM Entregados; Contacto 5553494 5552717 5450256 SELECT Contacto FROM Clientes /* Uso EXCEPT ALL*/ EXCEPT SELECT Contacto FROM Entregados; Contacto 5553494 SELECT c.Nombre, c.Apellido, e.Fecha AS Día /* Uso INNER JOIN */ /* Uso Alias */ FROM Clientes c INNER JOIN Entregados e ON c.Contacto = e.Contacto; Nombre Apellido Día Francisco Jiménez 29/02/2012 Manuel Vizcaíno 31/03/2008
  • 19. Ejemplos Operaciones de conjuntos TEMA 4 J. P. Cid - SQL 616161 SELECT c.Nombre, c.Apellido, e.Fecha AS Día /* Uso LEFT OUTER JOIN */ /* Uso Alias */ FROM Clientes c LEFT OUTER JOIN Entregados e ON c.Contacto = e.Contacto; Nombre Apellido Día Rosina Pérez Francisco Jiménez 29/02/2012 Manuel Vizcaíno 31/03/2008 SELECT e.Fecha AS Día, p.Modelo /* Uso RIGHT OUTER JOIN */ /* Uso Alias */ FROM Entregados e RIGHT OUTER JOIN Pedidos p ON e.Cod=p.Cod; Día Modelo H Civ T Arg 31/03/2008 T Aur 29/02/2012 N Duk H Hrv H Jrv SELECT Cod, Nombre /* Uso CROSS JOIN */ FROM Entregados CROSS JOIN Clientes; Cod Nombre 3 Rosina 3 Francisco 3 Manuel 4 Rosina 4 Francisco 4 Manuel SELECT p1.Modelo, p1.Color, p1.Comercial /* Uso autocombinación */ /* Uso mixto de parámetro posicional en ORDER BY */ FROM Pedidos p1 INNER JOIN Pedidos p2 ON p1.Comercial = p2.Comercial AND p1.Reclamado = "N" ORDER BY 3, p1.Modelo DESC; Modelo Color Comercial H Hrv Rojo Juan H Civ Gris Juan T Arg Azul María SELECT Color, COUNT (Color) AS Existencias /* Uso COUNT */ /* Uso parámetro posicional en ORDER BY */ FROM Pedidos GROUP BY Color ORDER BY 1; Color Existencias Azul 2 Gris 1 Negro 1 Rojo 2
  • 20. SQL Ejemplos INSERT Bloque III - Programación 2017 62 7.4. SELECT complejas SELECT CASE SUBSTRING (Modelo FROM 1 TO 1) WHEN "H" THEN "Honda" WHEN "T" THEN "Toyota" WHEN "N" THEN "Nissan" END AS Fabricante, COUNT (SUBSTRING (Modelo FROM 1 TO 1)) AS Modelos FROM Pedidos GROUP BY SUBSTRING (Modelo FROM 1 TO 1) ORDER BY Fabricante; Fabricante Modelos Honda 3 Nissan 1 Toyota 2 SELECT CASE SUBSTRING (Modelo FROM 1 TO 1) WHEN "H" THEN "Honda" WHEN "T" THEN "Toyota" WHEN "N" THEN "Nissan" END AS Fabricante, COUNT (SUBSTRING (Modelo FROM 1 TO 1)) AS Modelos FROM Pedidos WHERE Reclamado = "N" GROUP BY SUBSTRING (Modelo FROM 1 TO 1) HAVING COUNT(SUBSTRING (Modelo FROM 1 TO 1))>1 ORDER BY Fabricante; Fabricante Modelos Honda 2 7.5. INSERT INSERT INTO Pedidos VALUES ( (SELECT MAX (Cod) FROM Pedidos)+1, "R Sx4", "Amarillo", "Victoria", NULL ); 1 fila actualizada SELECT * /* Se asume que se realizó la transacción automáticamente */ FROM Pedidos; Cod Modelo Color Comercial Reclamado 1 H Civ Gris Juan N 2 T Arg Azul María N 3 T Aur Negro Victoria S 4 N Duk Rojo María S 5 H Hrv Rojo Juan N 6 H Jrv Azul Juan 7 R Sx4 Amarillo Victoria INSERT INTO Clientes (Apellido, Nombre, Contacto, Población, Fecha) VALUES (Velasco, Luis, 5553595, Pinto, CURRENT_DATE); 1 fila actualizada SELECT * /* Se asume que se realizó la transacción automáticamente */ FROM Clientes; Contacto Nombre Apellido Población Fecha 5553494 Rosina Pérez Sarria 04/07/2009 5552717 Francisco Jiménez Rebollada 02/11/1997 5450256 Manuel Vizcaíno Adrada 15/08/2004 5553595 Luis Velasco Pinto 10/11/2017
  • 21. Ejemplos DROP TEMA 4 J. P. Cid - SQL 636363 7.6. UPDATE UPDATE ONLY Pedidos SET Reclamado = "N" WHERE Reclamado IS NULL; 2 filas actualizadas SELECT * /* Se asume que se realizó la transacción automáticamente */ FROM Pedidos; Cod Modelo Color Comercial Reclamado 1 H Civ Gris Juan N 2 T Arg Azul María N 3 T Aur Negro Victoria S 4 N Duk Rojo María S 5 H Hrv Rojo Juan N 6 H Jrv Azul Juan N 7 R Sx4 Amarillo Victoria N UPDATE ONLY Pedidos SET Color = "Amarillo", Comercial = "María" WHERE Cod = 6 ; 1 fila actualizada SELECT * /* Se asume que se realizó la transacción automáticamente */ FROM Pedidos; Cod Modelo Color Comercial Reclamado 1 H Civ Gris Juan N 2 T Arg Azul María N 3 T Aur Negro Victoria S 4 N Duk Rojo María S 5 H Hrv Rojo Juan N 6 H Jrv Amarillo María N 7 R Sx4 Amarillo Victoria N 7.7. DELETE DELETE ONLY FROM Pedidos WHERE Reclamado = "S"; 2 filas actualizadas SELECT * /* Se asume que se realizó la transacción automáticamente */ /* y que las restricciones lo permiten */ FROM Pedidos; Cod Modelo Color Comercial Reclamado 1 H Civ Gris Juan N 2 T Arg Azul María N 5 H Hrv Rojo Juan N 6 H Jrv Amarillo María N 7 R Sx4 Amarillo Victoria N 7.8. DROP DROP TABLE Pedidos; DROP TABLE Clientes; DROP TABLE Entregados; /* Hemos borrado todas las tablas */
  • 22. SQL Ejemplos ALTER Bloque III - Programación 2017 64 7.9. CREATE CREATE TABLE Pedidos ( /* Crea la tabla Pedidos vacía */ Cod INTEGER DEFAULT ((SELECT MAX (Cod) FROM Pedidos)+1), /* Impone un valor por defecto */ /* con una subconsulta añadiendo uno al siguiente código */ Modelo CHAR (5) NOT NULL CHECK (Modelo LIKE ([A-Z]||" "|| "[A-Z]"||"__")), /* Impone que modelo sea una cadena de 5 caracteres en el que sea una mayúscu- la, un espacio en blanco, una mayúscula y dos caracteres cualquiera. */ Color CHAR (30) DEFAULT NULL, Comercial CHAR (30) DEFAULT CURRENT_USER NOT NULL, /* Impone que tiene que haber una cadena de hasta 15 caracteres y, por defec- to, otorga el nombre del usuario que está operando*/ Reclamado CHAR (1) DEFAULT NULL, CONSTRAINT PK_Pedidos PRIMARY KEY (Cod), /* Crea la restricción PK_Pedidos, que fija Cod como clave primaria*/ CONSTRAING Reclamado_val CHECK (Reclamado = "S" OR Reclamado = "N" OR Reclamado = NULL) /* Crea la restricción Reclamado_val e impone que el valor sólo puede ser una de las tres opciones */ ); CREATE TABLE Clientes ( /* Crea la tabla Clientes vacía */ Contacto CHAR (7) NOT NULL, Nombre CHAR (30) NOT NULL, Apellido CHAR (30) NOT NULL, Población CHAR (30), Fecha DATE DEFAULT CURRENT_DATE NOT NULL, CONSTRAINT PK_Clientes PRIMARY KEY (Contacto, Nombre, Apellido) /* Establece la clave primaria, a la que llama PK_Clientes, usando las colum- nas Contacto, Nombre y Apellido) ); CREATE TABLE Entregados /* Crea la tabla Entregados */ Id INTEGER DEFAULT ((SELECT MAX (Id) FROM Entregados)+1), Contacto CHAR (7), Cod INTEGER, Ficha DATE DEFAULT CURRENT_DATE NOT NULL, /* Esta columna tiene una errata deliberada */ CONSTRAINT PK_Entregados PRIMARY KEY (Id), /* Establece la columna Id como clave primaria */ CONSTRAINT FK_Contacto FOREIGN KEY Contacto REFERENCES Contacto (Clientes) /* Impone que la columna Contacto sólo pueda tomar un valor de los existentes en la columna homónima de la tabla Clientes CONSTRAINT NN_Contacto NOT NULL (Cod) /* Impone que la columna Cod tenga un valor */ ); 7.10. ALTER ALTER TABLE Entregados /* Eliminaremos la columna con errata */ DROP COLUMN Ficha; ALTER TABLE Entregados /* Añadimos la columna sin errata */ ADD COLUMN Fecha DATE DEFAULT CURRENT_DATE NOT NULL;
  • 23. Ejemplos ALTER TEMA 4 J. P. Cid - SQL 656565 ALTER TABLE Entregados /* Eliminamos la restricción que afectaba a la columna Cod de Entregados */ DROP CONSTRAINT NN_Contacto; ALTER TABLE Entregados /* Añadimos la restricción de que los valores de la columna Cod de Entregados procedan de los valores existentes en la columna Cod de Pedidos */ ADD CONSTRAINT FK_Cod FOREIGN KEY Cod REFERENCES Cod (Pedidos);