SQL
MC Beatriz Beltrán Martínez
Benemérita Universidad Autónoma de
Puebla
Antecedentes
• IBM desarrolló la versión original (Laboratorio de
Investigación de San José).
• Originalmente se llamó Sequel, a principios de
1970.
• En 1986, ANSI e ISO publicaron una norma SQL.
– SQL-86
– SQL corporativo
– SQL-89
– SQL-92
– SQL:1999
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
150
Componentes
• Se tienen los siguientes componentes:
– Lenguaje de Definición de Datos (DDL):
Proporciona órdenes para la definición de
esquemas de relación, borrado de relaciones,
creación de índices y modificación de esquemas.
– Lenguaje Interactivo de Manipulación de
Datos (DML): Incluye un lenguaje de consultas
basado en el álgebra y cálculo relacional. Incluye
el borrado, insertado y modificación de tuplas.
– Definición de vista: Instrucciones básicas para
definir vistas.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
151
Componentes
– Control de transacciones: Se tienen órdenes
para la especificación del comienzo y final de
transacciones.
– SQL dinámico y SQL incorporado: Define
cómo se pueden incorporar las instrucciones
SQL en lenguajes de propósito general.
– Integridad: El DDL incluye órdenes para especificar
restricciones de integridad que deba satisfacer la DB.
– Autorización: Se tienen órdenes para especificar los
derechos de acceso para las relaciones y vistas.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
152
Consultas simples
• Comando para mostrar la versión de MySQL:
– Select version();
• Comando para mostrar fecha actual:
– Select current_date;
• Se puede tener en una sola línea varios comandos,
separados por coma (solo se incluye el comando
select en el primer comando):
– Select version(), current_date;
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
153
Consultas simples
• En SQL no se hace diferencia entre mayúsculas y
minúsculas.
• Comando para mostrar fecha y hora:
– Select now();
• Se permiten declaraciones en diferentes líneas, con
lo cual quedaría:
mysql> select
-> now()
-> ,
-> current_date;
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
154
Consultas simples
• Comando que muestra usuario actual:
– Select user();
• Para cancelar una declaración se tiene:
– \c
• Para mostrar las bases de datos existentes:
– Show databases;
• Para usar una base de datos:
– Use nombre_db
• En este comando no es necesario el punto y coma.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
155
Consultas simples
• Comando para crear una base de datos:
– Create database [if not exists] nombre_db;
• El crear la base de datos no implica que ya se
puede utilizar, para esto se hace uso del comando
use.
• Lo que se ha creado es una base de datos vacía.
• Comando para mostrar las tablas que existen en
una base de datos:
– Show tables;
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
156
Consultas simples
• Comando para crear una tabla:
– Create table [if not exists]
(nom_atrib tipo [, ...]);
nom_tabla
• Comando para verificar la declaración de la tabla:
– Describe nom_tabla;
• Para las fechas se guarda con el formato: yyyy-mmdd.
• Se puede guardar la información dentro de un
archivo de texto.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
157
Consultas simples
• El archivo de texto debe tener un registro por cada
línea.
• Cada valor de atributo se separa con un tabulador,
en el mismo orden en el que están definidos en la
tabla.
• Se pueden usar valores NULOS dentro del archivo
de texto haciendo uso del carácter \N.
• Comando para leer el archivo en la tabla:
– Load data local infile “nom_arch" into table
nom_tabla;
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
158
Consultas simples
• NOTA: El uso de archivos no esta disponible en
todas las versiones.
• Comando para agregar un solo registro:
– Insert into nom_tabla values (atrib [, ...]);
• Para valores nulos utilizar NULL.
• El orden de los atributos deben ser igual a como fue
definida en la tabla.
• Tanto las cadenas como las fechas se colocan
entre comillas.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
159
Consultas simples
• Para agregar un nuevo atributo dentro de una tabla:
– Alter table nom_tabla add nom_atrib tipo [first |
after nom_atrib];
• Si la tabla contiene información, el nuevo atributo se
llenará con NULL.
• Para cambiar alguno de estos valores nulos se usa:
– Update nom_tabla set nom_atrib = expresion [,
...] [condicion]
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
160
Consultas simples
• Si no se da una condición, el cambio al atributo es a
todas las tuplas.
• La condición permite que realice un cambio sobre
una tupla en particular.
• Alter permite cambiar la estructura de las
relaciones.
• Update permite cambiar los valores de tuplas en
cada atributo.
• Para eliminar un atributo:
– Alter table nom_tabla drop nom_atrib;
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
161
Consultas simples
• Para eliminar una base de datos:
– Drop database nom_bd;
• Para eliminar una tabla en particular:
– Drop table nom_tabla;
• Para renombrar una tabla:
– Rename table nom_ant to nom_new;
• Para eliminar filas de una tabla:
– Delete from nom_tabla where condicion;
• Si no se le da una condición borra toda la tabla.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
162
Estructura básica
• Una Base de Datos consiste de un conjunto de
relaciones a las que a cada una se les asigna un
nombre único.
• Se permite el uso de valores nulos, para indicar que
no se conoce el valor o que es desconocido.
• La estructura básica de una expresión consiste de
tres cláusulas: select, from y where.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
163
Estructura básica
• La cláusula select corresponde a la operación
proyección. Se usa para seleccionar atributos en
particular.
• La cláusula from corresponde a la operación
producto cartesiano, y lista las relaciones que
deben ser analizadas en la evaluación.
• La cláusula where corresponde al predicado
selección. Es un predicado que engloba a los
atributos de las relaciones que aparecen en la
cláusula from.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
164
Estructura básica
• Una consulta típica en SQL es:
Select A1, A2, ..., An
From r1, r2, ..., rm
Where P
– Cada Ai representa un atributo
– Cada ri una relación
– P es un predicado
• Su equivalente:
–  A1, A2, ..., An(P(r1  r2  ...  rm))
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
165
Estructura básica
• Si se omite la cláusula where, el predicado P es
cierto.
• Se pueden tener tuplas repetidas.
• SQL forma el producto cartesiano de las relaciones
incluidas en from, se lleva a cabo la selección
(where) y entonces se proyecta el resultado sobre
los atributos mostrados en select.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
166
Estructura básica
Select
• Para eliminar duplicados:
– Distinct
• Para especificar explícitamente que no se eliminen
las tuplas repetidas:
– All
• El símbolo “*” se puede utilizar para denotar todos
los atributos.
• Select puede contener expresiones aritméticas con
las operadores básicos operando sobre constantes
o atributos de tuplas.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
167
Estructura básica
Where
• Puede tener un predicado simple usando los
operadores de comparación:
– <, <=, >, >=, =, <>
• Se puede tener un predicado con conectores:
– Not, and, or
• Se incluye un operador de comparación, que
significa que un valor sea menor o igual que un
valor y mayor igual que otro valor o negándolo,
usando:
– Between valor1 and valor2;
– Not Between valor1 and valor2;
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
168
Estructura básica
From
• Se define el producto cartesiano.
• Para realizar una reunión natural, se define en
términos del producto cartesiano, una selección y
una proyección.
• Se hace uso de para evitar ambigüedad:
– Nombre_relación.Nombre_atributo
• Cuando no hay ambigüedad, se puede usar o no la
forma anterior.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
169
Estructura básica
• Supóngase que existe un error en un atributo en
particular de alguna tupla, se puede hacer de dos
formas:
– Editar el archivo, corrigiéndolo después
eliminando todas tuplas y finalmente cargando de
nueva cuenta la tabla con el archivo.
– Corregir el atributo erróneo, haciendo uso del
comando update.
• En el primero, se puede realizar siempre y cuando
no se hayan introducido nuevos valores mediante el
uso de insert into.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
170
Estructura básica
• Al hacer uso del comando update, se debe utilizar
con una restricción, de otra forma se cambiaran
todos los valores del atributo que se da en todas las
tuplas.
• Primera forma:
mysql> delete from nom_tabla;
mysql> load data local infile “nom_arch" into
table nom_tabla;
• Segunda forma:
mysql> update nom_tabla set atrib = valor where
condicion;
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
171
Renombrar
• Se tiene un mecanismo para renombrar:
– Nombre_antiguo as Nombre_nuevo
• La cláusulas as puede aparecer tanto en select
como en from.
• La cláusula as, es útil en la definición de variable de
tupla. Una variable de tupla se debe asociar con
una relación concreta.
• Las variables de tuplas se definen en la cláusula
from, mediante el uso de as.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
172
Cadenas
• Las cadenas se encierran entre comillas simples o
dobles.
• Si una comilla es parte de la cadena se usa con dos
caracteres de comilla:
– ‘El carácter ‘’ se puede ver en la cadena’
• La operación más utilizada sobre cadena es el
encaje de patrones, y se usa
– Where atrib like patroncadena.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
173
Cadenas
• Para la utilización de patrones se usan los
caracteres especiales:
– Tanto por ciento (%): Encaja con cualquier
subcadena.
– Subrayado (_): Encaja con cualquier carácter.
• El usar el subrayado n-veces encaja con una
cadena de n-caracteres.
• Se permite la especificación de un carácter de
escape.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
174
Cadenas
• El carácter de escape se utiliza antes del carácter
especial patrón para indicar que ese carácter va a
ser tratado como carácter normal.
• El carácter escape para la comparación like se
define utilizando la palabra clave escape.
• Se usa la barra invertida (\) como carácter de
escape.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
175
Cadenas
• Para su uso se tiene:
– like ‘ab\%cd%’ escape ’\’ : Encaja con todas las
cadenas que empiezan con ab%cd
– like ‘ab\\cd%’ escape ’\’ : Encaja con todas las
cadenas que empiezan con ab\cd
• Se permite también las discordancias, utilizando el
operador:
– Where atrib not like patroncadena.
• La concatenación se lleva a cabo con el uso de: “||”.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
176
Orden
• Se pueden tener distintos órdenes sobre el que se
presentan las tuplas de una relación, mediante el
uso de la cláusula:
– Order by atrib [asc | desc];
• De manera predeterminada se listan en forma
ascendente, lo cual se puede cambiar:
– Desc de forma descendente
– Asc de forma ascendente
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
177
Otras operaciones
• La operación unión del álgebra relacional se lleva a
cabo por medio de la cláusula:
– Sentencia union [all] sentencia;
• La operación intersección del álgebra relacional no
esta implementada, pero se puede realizar:
– Select tabla1.atrib from tabla1 join tabla2 where
tabla1.atrib = tabla2.atrib;
• La operación diferencia no esta implementada.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
178
Funciones de agregación
• Las funciones de agregación toman una colección
de valores como entrada y producen un único valor
como salida, entre las funciones que se tienen:
– Media:
Avg (nom_atrib)
– Mínimo:
Min (nom_atrib)
– Máximo:
Max (nom_atrib)
– Total:
Sum (nom_atrib)
– Cuenta:
Count (nom_atrib)
• El atributo al que se le aplica la función se puede
renombrar usando as.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
179
Funciones de agregación
• La entrada sum y avg deben ser numéricas.
• Los demás operadores puede operar sobre
colecciones de datos de tipo no numérico.
• Las funciones de agregación se pueden aplicar a
grupos de conjuntos al final de la sentencia,
haciendo uso de:
– Group by nom_atrib;
• Cuando se requieren establecer condiciones a
grupos de tuplas, se hace uso de:
– Having condicion;
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
180
Funciones de agregación
• En una misma consulta se puede tener la cláusula
where y having al mismo tiempo, donde primero se
aplica el predicado de la cláusula where.
• Las tuplas que satisfacen la cláusula where, se
colocan en grupos según group by, y finalmente se
aplica la cláusula having a cada grupo.
• Los grupos que no satisfacen el predicado de la
cláusula having son eliminados.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
181
Valores nulos
• Se permite el uso de valores nulos para indicar falta
de información.
• Se puede preguntar por aquellos valores sean
nulos, en la sentencia where:
– Is null
• Y para preguntar por la ausencia de un valor nulo
se usa:
– Is not null
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
182
Valores nulos
• En comparaciones se tiene:
– Se trata como desconocido, el resultado de
cualquier comparación que implique un valor
nulo.
• En comparaciones booleanas se trata:
– Cierto y desconocido
: desconocido.
– Falso y desconocido
: falso.
– Desconocido y/o desconocido : desconocido.
– Cierto o desconocido
: cierto.
– Falso o desconocido
: desconocido.
– No desconocido
: desconocido.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
183
Fechas
• Se puede calcular mediante una fecha distintos
datos.
– Select nom_atrib, [nom_atrib, ...] (year (curdate
()) – year (nom_atrib_date)) – ((right (curdate (),
5) < (right (nom_atrib_date, 5))) [as nombre]
from tabla;
• La función year(), devuelve la parte del año dentro
de una fecha.
• La función right() quita los primeros n caracteres de
más a la derecha.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
184
Fechas
• También puede obtenerse el mes dentro de una
fecha mediante la función:
– Month()
• Finalmente se puede obtener el día dentro de la
fecha, mediante:
– Dayofmonth()
• Incluso estas funciones pueden ser utilizadas dentro
sentencias de tipo de restricción (where).
• La función date_add (fecha, interval tiempo tipo)
agrega un intervalo de tiempo.
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
185
Tipos de Datos
Tipo de Datos
Longitud
BINARY
1 byte
Para consultas sobre tabla adjunta de productos de
bases de datos que definen un tipo de datos Binario.
BIT
1 byte
Valores Si/No ó True/False
BYTE
1 byte
Un valor entero entre 0 y 255.
COUNTER
4 bytes
Un número incrementado automáticamente (de tipo
Long)
CURRENCY
8 bytes
Un entero escalable entre 922.337.203.685.477,5808 y
922.337.203.685.477,5807.
DATETIME
8 bytes
Un valor de fecha u hora entre los años 100 y 9999.
4 bytes
Un valor en punto flotante de precisión simple con un
rango de -3.402823*1038 a -1.401298*10-45 para valores
negativos, 1.401298*10-45 a 3.402823*1038 para valores
positivos, y 0.
SINGLE
MC Beatriz Beltrán Martínez
Descripción
FCC - BUAP
Verano 2015
186
Tipos de Datos
Tipo de Datos
Longitud
Descripción
DOUBLE
8 bytes
Un valor en punto flotante de doble precisión con un rango
de -1.79769313486232*10308 a -4.94065645841247*10-324
para valores negativos, 4.94065645841247*10-324 a
1.79769313486232*10308 para valores positivos, y 0.
SHORT
2 bytes
Un entero corto entre -32,768 y 32,767.
LONG
4 bytes
Un entero largo entre -2,147,483,648 y 2,147,483,647.
LONGTEXT
1 byte por
De cero a un máximo de 1.2 gigabytes.
carácter
LONGBINARY
Según se
De cero 1 gigabyte. Utilizado para objetos OLE.
necesite
TEXT
1 byte por
De cero a 255 caracteres.
caracter
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
187
Ejemplo
sucursal
cuenta
Nombre-sucursal
Numero-cuenta
Ciudad-sucursal
Nombre-sucursal
Activos
Saldo
impositor
Nombre-cliente
Numero-cuenta
cliente
Nombre-cliente
prestamo
Calle-cliente
prestatario
Numero-prestamo
Nombre-cliente
Nombre-sucursal
Numero-prestamo
Ciudad-cliente
importe
MC Beatriz Beltrán Martínez
FCC - BUAP
Verano 2015
188
Descargar

Modelo Relacional