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 2
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 3
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 4
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 5
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 6
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 7
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 8
Consultas simples• Comando para crear una tabla:
– Create table [if not exists] nom_tabla (nom_atrib tipo [, ...]);
• Comando para verificar la declaración de la tabla:– Describe nom_tabla;
• Para las fechas se guarda con el formato: yyyy-mm-dd.
• Se puede guardar la información dentro de un archivo de texto.
MC Beatriz Beltrán Martínez FCC - BUAP Verano 2015 9
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 10
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 11
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 12
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 13
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 14
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 15
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 16
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 17
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 18
Estructura básicaSelect• 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 19
Estructura básicaWhere• 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 20
Estructura básicaFrom• 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 21
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 22
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 23
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 24
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 25
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 26
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 27
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 28
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 29
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 30
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 31
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 32
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 33
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 34
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 35
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 36
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 37
Tipos de Datos
MC Beatriz Beltrán Martínez FCC - BUAP Verano 2015 38
Tipo de Datos Longitud Descripción
BINARY 1 bytePara 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 bytesUn número incrementado automáticamente (de tipo Long)
CURRENCY 8 bytesUn 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.
SINGLE 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.
Tipos de Datos
MC Beatriz Beltrán Martínez FCC - BUAP Verano 2015 39
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.
LONGTEXT1 byte por carácter
De cero a un máximo de 1.2 gigabytes.
LONGBINARYSegún se necesite
De cero 1 gigabyte. Utilizado para objetos OLE.
TEXT1 byte por caracter
De cero a 255 caracteres.
Ejemplo
MC Beatriz Beltrán Martínez FCC - BUAP Verano 2015 40
Nombre-sucursal
Ciudad-sucursal
Activos
Numero-cuenta
Nombre-sucursal
Saldo
Nombre-cliente
Numero-cuenta
Nombre-cliente
Calle-cliente
Ciudad-clienteNombre-cliente
Numero-prestamo
Numero-prestamo
Nombre-sucursal
importe
sucursal cuentaimpositor
cliente
prestatarioprestamo