SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
Unidad IV: El Lenguaje de Base de Datos SQL
Objetivo de la Unidad:
Al finalizar esta unidad de aprendizaje los alumnos comprenden e interpreta el lenguaje SQL en el
SGBD MYSQL
Desarrollo
La necesidad de una base de datos SQL para aplicaciones Web, llevaron a Michael “Monty” Widenius
y David Axmark, con la ayuda de Allan Larsson a desarrollar una base de datos comercial inspirada en
proyectos de código abierto (open source), MySQL comenzó a desarrollarse en 1994.
MySQL nace del intento de conectar el gestor mSQL a unas tablas usando rutinas de bajo nivel. Tras
unas primeras pruebas, vieron que mSQL no era lo suficientemente flexible para lo que necesitaban,
por lo que tuvieron que desarrollar nuevas funciones.
Esto resultó en una interfaz SQL totalmente compatible a mSQL. MySQL AB fue fundada en 1995
por 2 expertos en código abierto (open source), Michael “Monty” Widenius y David Axmark, con la
ayuda de Allan Larsson. El logo del MySQL (Delfín) fue escogido por los fundadores de MySQL AB,
el nombre del delfín “Sakila” fue seleccionado de una lista de sugerencias de usuarios, basados en un
concurso.
Características principales de MySQL
La siguiente es una lista que describe las principales características de MySQL separadas por categorías:
Internas y de portabilidad
 Escrito en C y C++.
 Está disponible en diferentes plataformas: Linux, Solaris, FreeBSB, Mac OS X, HP-UX, AIX, Windows,
etc.
 Disponibilidad de APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby y Tcl.
 Aprovecha la potencia de sistemas multiprocesador, gracias a su implementación multihilo.
 Tablas Hash en memoria, son usadas como tablas temporales.
 El código de MySQL ha sido probado (Tested) con las principales herramientas del mercado.
Introducción
MySQL, es un Sistema de Administración de Base de Datos de código abierto, es licenciado bajo la
GPL (General Public License) de la GNU. Fue creada por la empresa sueca MySQL AB, que mantiene
el copyright (derechos de autor) del código fuente del servidor SQL, así como de la marca.
MySQL es el sistema administrador de base de datos más usado en el mundo del software libre,
debido a su gran rapidez, confiabilidad y facilidad de uso. Esto principalmente se debe, a que existen
infinidad de librerías y otras herramientas que permiten su uso a través de gran cantidad de lenguajes
de programación, además de su fácil instalación y configuración.
MySQL es parte de LAMP (Linux, Apache, MySQL, PHP / Perl / Python), fuente de rápido
crecimiento de software de código abierto para negocios. Muchas compañías están usando LAMP
como alternativa del costoso software propietario.
Objetivo de la guía
Dar a conocer el sistema gestor de base de datos MYSQL
Requerimientos.
Se debe contar con: Un (1) computador teniendo como mínimo el Sistema Operativo Libre
( Canaima/Ubuntu), SGBD MYSQL (phpmyadmin)
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
 El servidor está disponible como un programa separado para ser usado en un ambiente cliente/servidor.
Tipos de Columna
 Algunos de los tipos soportados son: Entero (INTEGER) con signo/sin-signo de 1, 2, 3,
 4, y 8 bytes de longitud, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE,
 TIME, DATETIME, TIMESTAMP, YEAR y tipos espaciales OpenGIS (Geographic Information Systems).
Seguridad
 Maneja un sistema de privilegios muy seguro, la verificación se hace basado en host.
Escalabilidad y Límites
 Maneja base de datos grandes. Su uso se extiende a más de 50 millones de registros. Se tiene conocimiento
de algunos usuarios que usan el servidor
 MySQL con más de 60,000 tablas y cerca de 5.000.000.000 de filas.
 Se permiten hasta 64 índices por tabla. Cada índice puede consistir de 1 a 16 columnas.
Conectividad
 Los clientes pueden conectarse al servidor MySQL usando TCP/IP sobre cualquier plataforma.
 El conector/ODBC (MyODBC) provee soporte a programas cliente que usen ODBC (Open Database
Connectivity).
 La interfase conector/J provee soporte para programas cliente java que usan JDBC.
Motor de Almacenamiento de MySQL
El motor de almacenamiento (storage engine) es el software que se encarga del manejo de los datos; es decir,
cómo se organizan y qué relaciones tienen, cómo se almacenan y de qué forma son accedidos, cómo se gestiona
el acceso de distintos usuarios y los bloqueos pertinentes, sus medidas de seguridad y la integridad.
MySQL soporta varios motores de almacenamiento que actúan como manejadores de tablas. Los motores de
almacenamiento de MySQL incluyen el manejo de tablas transaccionales y tablas no-transaccionales.
Motor de Almacenamiento MyISAM
MyISAM es el motor de almacenamiento por defecto en MySQL desde la serie 3.23.
Cada tabla MyISAM es almacenada en el disco en tres archivos. Los nombres de los archivos comienzan con el
nombre de la tabla y tienen una extensión que indica el tipo de archivo, un archivo .frm almacena la definición
de la tabla. Un archivo .myd almacena la data y el archivo .myi indica la información sobre los índices.
Para especificar explícitamente una tabla MyISAM, se indica a través de ENGINE o TYPE para indicar el tipo
de tabla:
CREATE TABLE t (i INT) ENGINE = MYISAM;
CREATE TABLE t (i INT) TYPE = MYISAM;
MyISAM es el motor de almacenamiento por defecto en MySQL, a menos que haya sido cambiado no es
necesario especificar ENGINE o TYPE para especificar una tabla MyISAM.
Motor de Almacenamiento InnoDB
InnoDB provee a MySQL un motor de almacenamiento con soporte a transacciones (propiedades ACID) con
capacidades para commit y rollback.
Algunas de las características más importantes de las tablas InnoDB son:
• InnoDB permite el bloqueo a nivel de registros, además ofrece un mecanismo de no bloqueo en caso de
sentencias SELECT. Estas características incrementan la posibilidad de manejo de usuarios concurrentes y
mejoran el desempeño del servidor.
• InnoDB soporta la definición de claves foráneas (FOREIGN KEY).
• Es posible que en una sentencia SELECT puedan mezclarse diferentes tipos de tablas.
• InnoDB ha sido diseñado para máximo rendimiento cuando se procesan grandes volúmenes de datos.
• Integrada completamente con el servidor MySQL, InnoDB mantiene su propio buffer pool para mantener
datos e índices en memoria principal. InnoDB almacena la información de las tablas e índices en espacios de
tablas (tablespace), los cuales consisten de un conjunto de archivos (a diferencia de ISAM y MyISAM donde
cada tabla es almacenada en un archivo distinto).
• No existe un límite de tamaño predefinido para las tablas InnoDB.
. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
• InnoDB es usado en numerosos lugares a nivel de ambientes de producción, principalmente en sitios que
requieren alto desempeño.
• Para especificar explícitamente que se quiere trabajar con el motor InnoDB, se indica a través de las opciones
ENGINE o TYPE:
CREATE TABLE t3 (i INT) ENGINE = InnoDB;
CREATE TABLE t3 (i INT) TYPE = InnoDB;
• Es más seguro. Si ocurren problemas de hardware o MySQL falla, es posible recuperar la información ya sea
por una recuperación automática o desde un archivo log de transacciones de respaldo.
• Es posible combinar muchas sentencias y aceptar todas al mismo tiempo con la sentencia COMMIT (si el
autocommit está desactivado).
• Para ignorar los cambios realizados se ejecuta la sentencia ROLLBACK (si el autocommit está desactivado).
• Si una actualización falla todos los cambios son revertidos (en un ambiente no transaccional todos los cambios
hechos son permanentes).
• Los motores transaccionales proporcionan un mejor desempeño sobre tablas que tienen muchas
actualizaciones concurrentes.
Seguridad en MySQL
Para los administradores de base de datos la seguridad de la información es uno de los puntos más importantes.
Un nivel de seguridad aceptable puede lograrse bloqueando el acceso al servidor y a la base de datos a usuarios
no autorizados. Cuando se habla de seguridad de información, también se deben tomar medidas con los usuarios
que tienen autorización de acceder a la base de datos,. El mecanismo más usado es restringir el acceso a la
información, ya que ellos pueden causar daño a la información de manera accidental o maliciosa. Estos usuarios
podrían ejecutar sentencias SQL delete o update.
El sistema de seguridad en MySQL es referido como el Sistema de Privilegios de Acceso. Permite la
autenticación de los usuarios del servidor de MySQL y la verificación de las actividades de todos los usuarios
sobre el servidor y las bases de datos.
La seguridad en MySQL es aplicada en dos niveles: Nivel de servidor y Nivel de Base de Datos. Cuando un
usuario trata de acceder a una base de datos, primero se verifica si el usuario tiene privilegio para acceder al
servidor de base de datos, después el servidor verifica si el usuario tiene privilegios para conectarse a una base
de datos. La verificación de conexión al servidor y la verificación de conexión a la base de datos son dos
procesos que MySQL siempre lleva a cabo.
MySQL realiza la verificación de privilegios del servidor y la base de datos usando unas tablas del sistema
llamadas tablas de concesión. Estas tablas contienen toda la información necesaria para aplicar las políticas de
seguridad convenientes. Todos los host (otros computadores) y usuarios que se conectan al servidor MySQL
deben estar representados en las tablas de concesión.
Ejecución de Sentencias SQL con MySQL
Tipos de Datos en MySQL
Cada columna de una tabla debe ser de un tipo de dato, este tipo de dato va relacionado con el tipo definido en
el diseño de la base de datos y se debe ajustar a un óptimo uso del espacio de almacenamiento. A continuación
se describe los tipos de datos soportados por MySQL.
Los tipos de datos soportados por MySQL se pueden agrupar en tres grandes grupos:
 Tipo de dato Numérico.
 Tipo de dato Fecha.
 Tipo de dato Cadena.
Tipo de Datos Numéricos
tinyint: Es un entero de un byte con o sin signo, con signo el rango va desde -128 a 127, sin signo el rango de
valores es de 0 a 255.
tinyint(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser representados,
la máxima longitud son 3 dígitos.
TINYINT[(P)] [UNSIGNED]
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
smallint: Es un entero de dos bytes con o sin signo, con signo el rango de valores va desde -32768 a 32767, sin
signo el rango de valores es de 0 a 65535. smallint(p) especifica la cantidad de dígitos permitidos, donde p es
igual al número de dígitos a ser representados, la máxima longitud son 5 dígitos.
SMALLINT[(P)] [UNSIGNED]
mediumint: Es un entero de tres bytes con o sin signo, con signo el rango de valores va desde -8.388.608 a
8.388.607, sin signo el rango va desde 0 a16777215.
mediumint(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser
representados, la máxima longitud son 8 dígitos.
MEDIUMINT[(P)] [UNSIGNED]
integer, int: Es un entero de cuatro bytes con o sin signo, con signo el rango de valores va desde -2147483648 a
2147483647, sin signo el rango va desde 0 a 429.4967.295.
int(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser representados, la
máxima longitud son 10 dígitos.
INT[(P)] [UNSIGNED]
bigint: Es un entero de ocho bytes con o sin signo, con signo el rango de valores va desde -
9.223.372.036.854.775.808 a 9.223.372.036.854.775.807, sin signo el rango va desde 0 a
18.446.744.073.709.551.615.
bigint(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser representados,
la máxima longitud son 20 dígitos.
BIGINT[(P)] [UNSIGNED]
float: Maneja números con punto flotante de precisión simple, el rango de valores para una columna van desde -
3.402823466e+38 a -1.175494351e-38 para valores negativos, 0 y desde 1.175494351e-38 a 3.402823466e+38
para valores positivos.
float(p,m) donde m es el número de dígitos en la mantisa o la porción decimal y p es la precisión o la cantidad
de dígitos para todo el número.
FLOAT[(P,M)] [UNSIGNED]
xreal, double: Número en coma flotante de precisión doble. Los valores permitidos van desde -
1.7976931348623157e+308 a -2.2250738585072014e-308 para valores negativos, 0 y desde
2.2250738585072014e-308 a 1.7976931348623157e+308 para valores positivos.
double(p,m) donde m es el número de dígitos en la mantisa o la porción decimal y p es la precisión o la cantidad
de dígitos para todo el número.
DOUBLE[(P,M)] [UNSIGNED].
decimal (m,d), dec(m,d), numeric(m,d): Un valor decimal es un número decimal empaquetado con una coma
decimal implícita, el número se almacena como una cadena. decimal (m,d) donde m es la cantidad de dígitos
para todo el número y d es el número máximo de dígitos en la mantisa o la porción decimal.
DECIMAL[(M[,D])] [UNSIGNED]
Tipos de Datos Fecha
MySQL permite definir columnas de tablas que puedan almacenar fechas, sobre estos tipos de datos no hay
verificación estricta si una fecha es válida o no, simplemente el servidor MySQL comprueba que el mes está
comprendido entre 0 y 12, y que el día está comprendido entre 0 y 31.
date: Tipo fecha, el rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999, el formato de
almacenamiento es de año-mes-día AAAA-MM-DD.
datetime: Combinación de fecha y hora, el rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0
minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos, el formato de
almacenamiento es de año-mes-día horas:minutos:segundos AAAA-MM-DD HH:MM:SS.
timestamp: Combinación de fecha y hora, el rango va desde el 1 de enero de 1970 al año 2037. El formato de
almacenamiento depende del tamaño del campo:
. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
time: Es una representación genérica de valores de tiempo expresado en horas, minutos y segundos, el rango de
horas va desde -838 horas, 59 minutos y 59 segundos a 838 horas, 59 minutos y 59 segundos. El formato de
almacenamiento es de 'hh:mm:ss'.
year: Tipo de dato usado para representar un año calendario, el rango de valores permitidos va desde el año
1901 al año 2155, el campo puede tener tamaño dos o tamaño 4, dependiendo de si se quiere almacenar el año
con dos o cuatro dígitos.
Tipos de cadena
El tipo de dato cadena encapsula a todos los tipos de datos usados para almacenar caracteres, cadenas, datos
alfanuméricos y valores NULL, adicionalmente todos los tipos cadena pueden almacenar cadenas vacías („‟),
cuando se inserta un valor en un tipo de datos cadena y éste excede al máximo permitido por el tipo el dato es
truncado.
char(n): Almacena una cadena de longitud fija, la cadena podrá contener desde 0 a 255 caracteres.
varchar(n): Almacena una cadena de longitud variable, la cadena podrá contener desde 0 a 255 caracteres.
text(n): Es un tipo de datos cadena usado para almacenar datos alfanuméricos, las consultas hechas sobre las
columnas text no son sensibles a mayúsculas y minúsculas, rango de valores para el n de 0 a 65535 caracteres.
blob(n): Es un tipo cadena usado para almacenar datos binarios, como por ejemplo archivos de imagen, video,
etc. El tipo de datos blob si es sensible a minúsculas y mayúsculas, el tamaño máximo para un blob es de 65535
bytes.
Sentencias DDL
CREATE TABLE: Esta sentencia es utilizada para crear una tabla y definir las columnas que contiene.
Cuando no se especifica el motor de almacenamiento, por defecto el manejador usa el MyISAM.
Es importante tener en cuenta que cuando una columna se define como clave primaria es obligatorio que antes
se haya especificado la restricción NOT NULL sobre la columna.
MySQL es sensible a minúsculas y mayúsculas con los nombres de las tablas, es importante mantener un
estándar en el nombramiento de estos objetos de base de datos.
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
CREATE TABLE cliente(
id_cliente INT NOT
NULL,
nombre VARCHAR(20),
PRIMARY KEY
(id_cliente)
) TYPE = INNODB;
Se define la tabla cliente la cual tiene dos columnas (id_cliente y nombre), siendo la columna
id_cliente la clave primaria, además se indica el motor de almacenamiento es INNODB (Soporte a
transacciones).
CREATE TABLE PRUEBA(
ID INT AUTO_INCREMENT
PRIMARY KEY,
PREGUNTA VARCHAR(20),
RESPUESTA VARCHAR(20)
)
AUTO_INCREMENT = 10;
AUTO_INCREMENT puede ser agregada como opción a una columna, si al insertar una fila se omite
el valor de la columna auto_incrementada o si se inserta un valor nulo para esa columna, su valor se
calcula automáticamente, tomando el valor más alto de esa columna y sumándole una unidad. Esto
permite crear, de una forma sencilla, una columna con un valor único para cada fila de la tabla., por
defecto esta inicializado en uno, aunque puede ser configurado, en el ejemplo anterior el valor inicial
para el auto_incremento es 10.
Índices
Para definir índices sobre una columna o sobre varias se usan indistintamente las opciones KEY o INDEX.
Índices Únicos
Para definir índices únicos sobre una columna o sobre varias se usa la opción UNIQUE.
La diferencia entre un índice único y uno normal es que en los únicos no se permite la inserción de filas con
valores repetidos. La excepción es el valor NULL, que sí se puede repetir.
Claves Foráneas
Para que una columna sea una clave foránea, esta necesita ser definida como tal al momento de crear la tabla. Se
pueden definir claves foráneas en cualquier tipo de tabla de MySQL, pero únicamente tienen sentido cuando se
usan tablas del tipo InnoDB, en los otros motores de almacenamiento no se verifica si una clave foránea existe
realmente en la tabla referenciada, y que no se eliminan filas de una tabla con una definición de clave foránea.
Para hacer esto hay que usar tablas InnoDB.
Ejemplo:
CREATE TABLE cliente (
id_cliente INT NOT NULL,
. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
nombre VARCHAR(30),
PRIMARY KEY (id_cliente)
) TYPE = INNODB;
CREATE TABLE factura (
id_factura INT NOT NULL,
id_cliente INT NOT NULL,
monto DOUBLE,
PRIMARY KEY(id_factura),
FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente) ON DELETE CASCADE
) TYPE = INNODB;
Es obligatorio que la columna que contiene una definición de clave foránea esté indexada. Pero esto no debe ser
motivo de preocupación, ya que si no se realiza de forma explícita, MySQL lo hará de forma implícita.
Sintaxis completa para la definición de clave foránea es:
[CONSTRAINT nombre_restricción] FOREIGN KEY
(nombre_columna, ...
REFERENCES nombre_tabla (nombre_columna,
...)
[ON DELETE CASCADE ]
ALTER TABLE. La sintaxis es:
ALTER TABLE nombre_tabla ADD [CONSTRAINT
nombre_restricción] FOREIGN KEY(nombre_columna, ...)
REFERENCES otra_tabla(nombre_columna, ...)
[acciones_ON_DELETE];
ALTER TABLE: En muchas oportunidades es posible que se requiera cambiar la estructura de las tablas, estos
cambios suceden por muchas razones: Cambios en las reglas del negocio, actualizaciones de las aplicaciones,
etc. Con ALTER TABLE se puede dar respuestas a esas necesidades.
Sintaxis:
ALTER TABLE nombre_de_tabla
[ADD COLUMN (Definición_de_columna,..,..)]
[ADD INDEX [nombre_indice] (nombre_columna,..,..)]
[ADD PRIMARY KEY (nombre_columna,..,..)]
[ADD UNIQUE [nombre_indice] (nombre_columna,..,..)]
ADD [CONSTRAINT nombre_restricción] FOREIGN
KEY(nombre_columna, ...)
REFERENCES otra_tabla(nombre_columna, ...)
[acciones_ON_DELETE]
[DROP COLUMN nombre_columna]
[DROP PRIMARY KEY]
[DROP INDEX nombre_indice]
Sentencias DML
INSERT: Sentencia usada para insertar datos en una tabla:
Sintaxis:
INSERT INTO
nombre_tabla[(nombre_columna1,nombre_columna2,..,..)]
VALUES(valor1,valor2,..);
Es posible usar INSERT con SELECT para insertar muchas filas en una sola sentencia.
INSERT INTO nombre_tabla1 (col1,col2,...) SELECT
col1,col2,.. FROM nombre_tabla2;
Ejemplos:
INSERT INTO cliente values (1,'Juancho',54121);
INSERT INTO cliente values (2,
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
'Luis',45687.25),(3,'Pedro',5487.54),(4,'Pedro',54877.59),
(5,'Pedro',54875.25),(6,'Pablo',125478.25),(7,'Nelson',126
57.36),(8,'Nelson',54875.25) ,(9,'Jesus',5647.25)
,(10,'Jesus',5487) ,(11,'Miguel',45877)
,(12,'Miguelina',45877) ,(13,'Pedrito',458377);
INSERT INTO factura values(1,1,5878787.26);
UPDATE: La sentencia UPDATE es usada para actualizar valores de columnas de una tabla. La cláusula SET
indica cual o cuales columna(s) va(n) a ser modificada(s) y los nuevos valores. La cláusula WHERE es usada
para especificar las filas que van a ser afectadas. La cláusula LIMIT indica la cantidad máxima de filas
(registros) que van a ser actualizadas.
Sintaxis:
UPDATE nombre_tabla
SET nombrecol1=valor, [nombrecol2=valor, ...]
[WHERE Condición]
[LIMIT #];
Ejemplo:
UPDATE cliente
SET nombre='Luis'
Where id_cliente=1;
DELETE: La sentencia DELETE es usada para eliminar registros de una tabla.
Sentencias DQL
SELECT: La sentencia SELECT se usa para recuperar filas seleccionadas de una o más tablas.
Sintaxis:
SELECT [ALL | DISTINCT | DISTINCTROW]
nombrecolumna1,nombrecolumna2,....
FROM tabla1[,tabla2...]
WHERE condiciones
[GROUP BY (nombre_col)]
[HAVING condiciones]
[ORDER BY nombre_col]
[ASC | DESC]
. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
[LIMIT contador]
Ejemplo:
SELECT * FROM cliente;
DISTINCT y DISTINCTROW: Son usadas para restringir la aparición de filas repetidas.
Ejemplo.
SELECT [DISTINCT | DISTINCTROW] nombre FROM cliente;
WHERE: La mejor utilidad de una base de datos es la posibilidad de hacer consultas en función de ciertas
condiciones. Generalmente, será de interés saber qué filas se ajustan a determinados parámetros. Esto se realiza
con la cláusula WHERE del SELECT.
Ejemplo:
SELECT * FROM cliente WHERE nombre='Luis';
ALIAS: El alias se usa como un nombre de columna en expresiones para la salida de la consulta, también es
posible definir alias a las tablas de la cláusula FROM.
Por ejemplo:
SELECT CONCAT(nombre,', ',salario) AS Nombre_Salario
FROM cliente ORDER BY Nombre_Salario;
El AS es opcional cuando se define un alias sobre una expresión o columna. El ejemplo anterior se puede
escribir como:
SELECT CONCAT(nombre,', ',salario) Nombre_Salario
FROM cliente ORDER BY Nombre_Salario;
Para definir alias a una referencia de una tabla se usará la siguiente sintaxis:
SELECT t1.col1, t2.col2 FROM tabla1 AS t1, tabla2 AS t2
WHERE t1.col1 = t2.col2;
GROUP BY: Es posible agrupar filas en la salida de una sentencia SELECT usando la cláusula GROUP BY.
Ejemplo:
SELECT id_cliente, nombre FROM cliente GROUP BY nombre;
La principal utilidad de la cláusula GROUP BY es que permite usar funciones de resumen o reunión (funciones
agregadas), tales como: COUNT(), MAX(), MIN(), SUM(), AVG(), etc.
Ejemplo:
SELECT COUNT(nombre) FROM cliente GROUP BY nombre;
HAVING: La cláusula HAVING permite hacer selecciones sobre datos agrupados.
Observe un ejemplo:
SELECT nombre, count(nombre) FROM cliente GROUP BY nombre HAVING
COUNT(nombre) >= 2;
La salida para esta consulta es el nombre del cliente y la cantidad de veces que aparece ese nombre, con la
condición de que sólo se mostrarán los nombres que estén repetidos más de dos veces.
ORDER BY: Es usada para dar ordenamiento a los datos recuperados en una sentencia
SELECT.
Las columnas seleccionadas pueden ser referenciadas usando nombres de columna, alias de columna o
posiciones de columna. Las posiciones de columna son enteros que empiezan en 1.
Para ordenar en orden inverso se añade la palabra clave DESC (descendente). Por defecto el orden es
ascendente, pero puede ser especificado explícitamente por la palabra clave ASC. El uso de posiciones de
columna no se aconseja, ya que esa sintaxis ha sido eliminada de SQL estándar.
Ejemplo:
SELECT * FROM cliente ORDER BY id_cliente, nombre;
LIMIT: La cláusula LIMIT permite limitar el número de filas recuperadas por la sentencia SELECT:
Ejemplo:
SELECT * FROM cliente LIMIT 3;
La salida de la anterior consulta sólo muestra tres registros.
Operador IN: El operador IN se usa para realizar comparaciones con una lista de valores.
SELECT * FROM cliente WHERE nombre = 'Jesus' OR nombre= 'Pedro' OR nombre='Nelson';
Esta sentencia puede ser reescrita como:
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
SELECT * FROM cliente WHERE nombre IN ('Jesus','Pedro','Nelson');
Operador BETWEEN: El operador BETWEEN se usa para comprobar si cierto valor está dentro de un rango
dado. Por ejemplo, asuma que se está interesado en encontrar a todos los clientes que gana salarios dentro un
rango de [$1,000 a $50,000] (ambos inclusive). ¿Cómo se escribe esta consulta?
SELECT id_cliente,nombre FROM cliente WHERE salario >= 1000 AND salario <= 50000;
La consulta anterior se puede escribir también usando el operador BETWEEN.
SELECT id_cliente,nombre FROM cliente WHERE salario BETWEEN 1000 AND 50000;
Operador IS: Los operadores IS NULL e IS NOT NULL son utilizados para verificar si una expresión
determinada es o no nula.
SELECT * FROM cliente WHERE nombre IS NOT NULL;
Operador LIKE: Se usa para hacer comparaciones entre cadenas y patrones. El resultado es verdadero (1) si la
cadena se ajusta al patrón, y falso (0) en caso contrario.
Los patrones son cadenas de caracteres en las que se pueden encontrar en cualquier posición los caracteres
especiales '%' y '_'.
„%‟ Es usado para hacer coincidir cualquier número de caracteres, incluso ninguno. „_‟ Es usado para hacer
coincidir con un único carácter.
SELECT * FROM cliente WHERE nombre LIKE 'Miguel%';
Consultas Multitablas
Los datos están distribuidos en diferentes tablas debido a la normalización. La normalización se realiza para
evitar la redundancia y para integrar los datos almacenados en distintas tablas. Cuando el usuario quiere obtener
información completa consultando más de una tabla, debe JOIN (UNIR) los datos de las distintas tablas.
. Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
PRODUCTO CARTESIANO (CARTESIAN JOIN): El producto cartesiano de dos tablas son todas las
combinaciones de todas las filas de las dos tablas. Usando una sentencia SELECT se hace proyectando todos los
atributos de ambas tablas. Los nombres de las tablas se indican en la cláusula FROM separados con comas:
SELECT * FROM personal, division;
INNER JOIN: Las composiciones internas (INNER JOIN) se definen a partir de un producto cartesiano,
eliminado las filas que no cumplen la condición de composición.
Estas composiciones se denominan internas porque en la salida no aparece ninguna fila que no esté presente en
el producto cartesiano, es decir, la composición se hace en el interior del producto cartesiano de las tablas.
Ejemplo:
SELECT * FROM personal,division WHERE
personal.no_division=division.no_division;
Reescribiendo la sentencia anterior con JOIN:
SELECT <columnas> FROM tabla1 [INNER] JOIN tabla2 ON
<condiciones> | USING (Lista_columnas);
La coma que separa las tablas que se usan en una consulta y JOIN son equivalentes, y la palabra INNER es
opcional.
La condición en la cláusula ON puede ser cualquier expresión válida para una cláusula WHERE, de hecho, en la
mayoría de los casos, son equivalentes.
La cláusula USING permite usar una lista de atributos que deben ser iguales en las dos tablas a componer.
Si se desea elegir determinadas columnas de ambas tablas en lugar de seleccionar todas, se puede hacer esto
indicando en la sentencia SELECT el nombre(s) de las(s) columna(s) que se quiere mostrar.
Ejemplo:
SELECT division.no_division,nombre_division,ubicacion,
no_personal,nombre_personal,cargo,salario FROM personal INNER JOIN division ON
(personal.no_division=division.no_division);
En el ejemplo anterior la columna no_división existe en las dos tablas, por lo tanto, se debe colocar el nombre
de la tabla de donde se va a extraer la información. Para ello, existe una sintaxis alternativa que permite obtener
el mismo resultado sin tener que especificar las columnas en la condición.
Universidad Politécnica Territorial Andrés Eloy Blanco
Programa Nacional de Formación en Informática
Ing. Lissette Torrealba
SELECT * FROM personal NATURAL JOIN division;
Sub-consultas
Una sub-consulta es una sentencia SELECT dentro de otra sentencia MySQL da soporte para cualquier forma
de sub-consulta basado en el estándar SQL.
SELECT * FROM tabla1 WHERE col1 =(2:SELECT col1 FROM tabla2);
1 Consulta Padre. 2 Consulta Hija.
Existen dos tipos de sub-consultas: correlacionadas y no-correlacionadas, cuando la subconsulta hija hace
referencia a una o más columnas de la subconsulta padre se dice que es una subconsulta correlacionada, si no
existe referencia de las columnas entonces se dice que es no-correlacionada.
Ejemplo sub-consulta no-correlacionada:
SELECT * FROM personal WHERE no_division = (SELECT no_division FROM division WHERE
nombre_division='HARDWARE');
En el ejemplo anterior si la consulta interna retorna más de un valor resultaría en un error, en estos casos cuando
el resultado de la sub-consulta interna es un conjunto de datos utilizamos operador IN.
Ejemplo de sub-consulta correlacionada:
SELECT division.nombre_division FROM división WHERE EXISTS (SELECT no_division
FROM personal WHERE personal.no_division = division.no_division);
Autoevaluación
1.- MySQL mantiene las tablas temporales en memoria principal como__________.
a) Tablas MyISAM.
b) Tablas InnoDB.
c) Tablas Hash.
d) Ninguna de las anteriores
2.- MySQL fue escrito en ___________.
a) Java y ASM.
b) Pascal y Clipper
c) C y C++
d) Cobol y Fortran.
3.- MySQL puede manejar muchas tareas y requerimientos al mismo tiempo
a) Verdadero
b) Falso
4.- Para definir clave foránea, hay que usar el motor de almacenamiento MyISAM
a) Verdadero
b) Falso
5.- Cuando no se especifica el motor de almacenamiento, por defecto el manejador usa el InnoDB.
a) Verdadero
b) Falso
Referencias Bibliográficas
IBM Capacitación (2008) Base de Datos I

Más contenido relacionado

La actualidad más candente

La actualidad más candente (18)

Crear y Eliminar Bases de datos en MySQL Workbench
Crear y Eliminar  Bases de datos en MySQL WorkbenchCrear y Eliminar  Bases de datos en MySQL Workbench
Crear y Eliminar Bases de datos en MySQL Workbench
 
Fundamentos microsoft sql server (T-Sql) (Parte I) – conceptos básicos sql e...
Fundamentos microsoft sql server (T-Sql)  (Parte I) – conceptos básicos sql e...Fundamentos microsoft sql server (T-Sql)  (Parte I) – conceptos básicos sql e...
Fundamentos microsoft sql server (T-Sql) (Parte I) – conceptos básicos sql e...
 
Introduccion ddl
Introduccion ddlIntroduccion ddl
Introduccion ddl
 
Implementacion de bases de datos en mysql
Implementacion de bases de datos en mysqlImplementacion de bases de datos en mysql
Implementacion de bases de datos en mysql
 
Tipos de datos en MySQL Workbench
Tipos de datos en  MySQL  WorkbenchTipos de datos en  MySQL  Workbench
Tipos de datos en MySQL Workbench
 
Sql server(1)
Sql server(1)Sql server(1)
Sql server(1)
 
Presentación1
Presentación1Presentación1
Presentación1
 
Ssis2008 r2 castellano
Ssis2008 r2 castellanoSsis2008 r2 castellano
Ssis2008 r2 castellano
 
SQLite
SQLiteSQLite
SQLite
 
Yupa cesar bdii_t7
Yupa cesar bdii_t7Yupa cesar bdii_t7
Yupa cesar bdii_t7
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
54563910 curso-de-mysql
54563910 curso-de-mysql54563910 curso-de-mysql
54563910 curso-de-mysql
 
Base de datos en sql
Base de datos en sqlBase de datos en sql
Base de datos en sql
 
F:\basesdatos teo2 sistemas_db
F:\basesdatos teo2 sistemas_dbF:\basesdatos teo2 sistemas_db
F:\basesdatos teo2 sistemas_db
 
SQLITE-CONCEPTO
SQLITE-CONCEPTOSQLITE-CONCEPTO
SQLITE-CONCEPTO
 
Datos
DatosDatos
Datos
 
Sql presentacion
Sql presentacionSql presentacion
Sql presentacion
 
MySQL
MySQLMySQL
MySQL
 

Similar a Guía de MySql - Lissette Torrealba

Los gestores de base de datos
Los gestores de base de datosLos gestores de base de datos
Los gestores de base de datosEduardo Agila
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datosOtoniel Hernandez
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datosomar5544
 
Sgbd roberto escriche marcelo hualoto
Sgbd roberto escriche marcelo hualotoSgbd roberto escriche marcelo hualoto
Sgbd roberto escriche marcelo hualotoKenny24
 
Tres gestores de bases de datos
Tres gestores de bases de datosTres gestores de bases de datos
Tres gestores de bases de datossatakin_armando7
 
Los gestores de base de datos
Los gestores de base de datosLos gestores de base de datos
Los gestores de base de datosBetyllo Ocegueda
 
Bd eq.3 comparacion entre microsoft sql y my sql actividad extra
Bd eq.3 comparacion entre microsoft sql y my sql actividad extraBd eq.3 comparacion entre microsoft sql y my sql actividad extra
Bd eq.3 comparacion entre microsoft sql y my sql actividad extraKARY
 

Similar a Guía de MySql - Lissette Torrealba (20)

Expo mysql
Expo mysqlExpo mysql
Expo mysql
 
My sql clase_1
My sql clase_1My sql clase_1
My sql clase_1
 
My SQL
My SQLMy SQL
My SQL
 
Mysql
MysqlMysql
Mysql
 
Los gestores de base de datos
Los gestores de base de datosLos gestores de base de datos
Los gestores de base de datos
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datos
 
Otoniel hernandez datashow - los gestores de base de datos
Otoniel hernandez   datashow - los gestores de base de datosOtoniel hernandez   datashow - los gestores de base de datos
Otoniel hernandez datashow - los gestores de base de datos
 
Sgbd roberto escriche marcelo hualoto
Sgbd roberto escriche marcelo hualotoSgbd roberto escriche marcelo hualoto
Sgbd roberto escriche marcelo hualoto
 
Historiade mysql
Historiade mysqlHistoriade mysql
Historiade mysql
 
Tres gestores de bases de datos
Tres gestores de bases de datosTres gestores de bases de datos
Tres gestores de bases de datos
 
MySQL - Guillermo Jiménez
MySQL - Guillermo JiménezMySQL - Guillermo Jiménez
MySQL - Guillermo Jiménez
 
Sistemas de g base de datos
Sistemas de g base de datosSistemas de g base de datos
Sistemas de g base de datos
 
Sistemas de Gestion de Base de Datos
Sistemas de Gestion de Base de DatosSistemas de Gestion de Base de Datos
Sistemas de Gestion de Base de Datos
 
Gbd2
Gbd2Gbd2
Gbd2
 
My sql server
My sql serverMy sql server
My sql server
 
Los gestores de base de datos
Los gestores de base de datosLos gestores de base de datos
Los gestores de base de datos
 
Tema LOS SGBD O DBMS.pptx
Tema LOS SGBD O DBMS.pptxTema LOS SGBD O DBMS.pptx
Tema LOS SGBD O DBMS.pptx
 
Bd eq.3 comparacion entre microsoft sql y my sql actividad extra
Bd eq.3 comparacion entre microsoft sql y my sql actividad extraBd eq.3 comparacion entre microsoft sql y my sql actividad extra
Bd eq.3 comparacion entre microsoft sql y my sql actividad extra
 
My sql
My sqlMy sql
My sql
 
trabajo numero 3
trabajo numero 3trabajo numero 3
trabajo numero 3
 

Más de José Ricardo Tillero Giménez

Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRP
Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRPGuía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRP
Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRPJosé Ricardo Tillero Giménez
 

Más de José Ricardo Tillero Giménez (20)

PLAN DE EVALUACIÓN REDES AVANZADAS II-2021
PLAN DE EVALUACIÓN REDES AVANZADAS II-2021PLAN DE EVALUACIÓN REDES AVANZADAS II-2021
PLAN DE EVALUACIÓN REDES AVANZADAS II-2021
 
Guía Ejercicios SQL
Guía Ejercicios SQLGuía Ejercicios SQL
Guía Ejercicios SQL
 
Guía 3 Ejercicios de Normalización de Base de Datos
Guía 3 Ejercicios de Normalización de Base de DatosGuía 3 Ejercicios de Normalización de Base de Datos
Guía 3 Ejercicios de Normalización de Base de Datos
 
Guía 1 Ejercicios MR
Guía 1 Ejercicios MRGuía 1 Ejercicios MR
Guía 1 Ejercicios MR
 
Guía 2 Ejercicios de Normalización de Base de Datos
Guía 2 Ejercicios de Normalización de Base de DatosGuía 2 Ejercicios de Normalización de Base de Datos
Guía 2 Ejercicios de Normalización de Base de Datos
 
Guía 3 Ejercicios MER Extendido
Guía 3 Ejercicios MER ExtendidoGuía 3 Ejercicios MER Extendido
Guía 3 Ejercicios MER Extendido
 
Guía 2 Ejercicios MER
Guía 2 Ejercicios MERGuía 2 Ejercicios MER
Guía 2 Ejercicios MER
 
Guía 1 Ejercicios MER
Guía 1 Ejercicios MERGuía 1 Ejercicios MER
Guía 1 Ejercicios MER
 
Plan de evaluación BD2021
Plan de evaluación BD2021Plan de evaluación BD2021
Plan de evaluación BD2021
 
Perfil Docente y Asesoría
Perfil Docente y AsesoríaPerfil Docente y Asesoría
Perfil Docente y Asesoría
 
Planificación BD2021
Planificación BD2021Planificación BD2021
Planificación BD2021
 
UNIDAD 1. El mundo de las Bases de Datos y los SMBD
UNIDAD 1. El mundo de las Bases de Datos y los SMBDUNIDAD 1. El mundo de las Bases de Datos y los SMBD
UNIDAD 1. El mundo de las Bases de Datos y los SMBD
 
NOTAS FINALES DE REDES AVANZADAS IIN4301
NOTAS FINALES DE REDES AVANZADAS IIN4301NOTAS FINALES DE REDES AVANZADAS IIN4301
NOTAS FINALES DE REDES AVANZADAS IIN4301
 
NOTAS FINALES ELECTIVA II IN2102
NOTAS FINALES ELECTIVA II IN2102NOTAS FINALES ELECTIVA II IN2102
NOTAS FINALES ELECTIVA II IN2102
 
NOTAS FINALES ELECTIVA II IN2101
NOTAS FINALES ELECTIVA II IN2101NOTAS FINALES ELECTIVA II IN2101
NOTAS FINALES ELECTIVA II IN2101
 
Notas definitivas per base de datos
Notas definitivas per base de datosNotas definitivas per base de datos
Notas definitivas per base de datos
 
Clase 6 VLAN
Clase 6 VLANClase 6 VLAN
Clase 6 VLAN
 
Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRP
Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRPGuía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRP
Guía de Redistribución de protocolos de ruteo RIP, PSPF y EIGRP
 
Guía CISCO de redistribución de protocolos de ruteo
Guía CISCO de redistribución de protocolos de ruteoGuía CISCO de redistribución de protocolos de ruteo
Guía CISCO de redistribución de protocolos de ruteo
 
Manual Basico de jQuery
Manual Basico de jQueryManual Basico de jQuery
Manual Basico de jQuery
 

Último

BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfCESARMALAGA4
 
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Baker Publishing Company
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxc3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxMartín Ramírez
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfAlfredoRamirez953210
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfDannyTola1
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIAAbelardoVelaAlbrecht1
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 

Último (20)

BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...Análisis de la Implementación de los Servicios Locales de Educación Pública p...
Análisis de la Implementación de los Servicios Locales de Educación Pública p...
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptxc3.hu3.p1.p3.El ser humano como ser histórico.pptx
c3.hu3.p1.p3.El ser humano como ser histórico.pptx
 
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdfEstrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
Estrategias de enseñanza - aprendizaje. Seminario de Tecnologia..pptx.pdf
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Unidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDIUnidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDI
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdf
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 

Guía de MySql - Lissette Torrealba

  • 1. . Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba Unidad IV: El Lenguaje de Base de Datos SQL Objetivo de la Unidad: Al finalizar esta unidad de aprendizaje los alumnos comprenden e interpreta el lenguaje SQL en el SGBD MYSQL Desarrollo La necesidad de una base de datos SQL para aplicaciones Web, llevaron a Michael “Monty” Widenius y David Axmark, con la ayuda de Allan Larsson a desarrollar una base de datos comercial inspirada en proyectos de código abierto (open source), MySQL comenzó a desarrollarse en 1994. MySQL nace del intento de conectar el gestor mSQL a unas tablas usando rutinas de bajo nivel. Tras unas primeras pruebas, vieron que mSQL no era lo suficientemente flexible para lo que necesitaban, por lo que tuvieron que desarrollar nuevas funciones. Esto resultó en una interfaz SQL totalmente compatible a mSQL. MySQL AB fue fundada en 1995 por 2 expertos en código abierto (open source), Michael “Monty” Widenius y David Axmark, con la ayuda de Allan Larsson. El logo del MySQL (Delfín) fue escogido por los fundadores de MySQL AB, el nombre del delfín “Sakila” fue seleccionado de una lista de sugerencias de usuarios, basados en un concurso. Características principales de MySQL La siguiente es una lista que describe las principales características de MySQL separadas por categorías: Internas y de portabilidad  Escrito en C y C++.  Está disponible en diferentes plataformas: Linux, Solaris, FreeBSB, Mac OS X, HP-UX, AIX, Windows, etc.  Disponibilidad de APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby y Tcl.  Aprovecha la potencia de sistemas multiprocesador, gracias a su implementación multihilo.  Tablas Hash en memoria, son usadas como tablas temporales.  El código de MySQL ha sido probado (Tested) con las principales herramientas del mercado. Introducción MySQL, es un Sistema de Administración de Base de Datos de código abierto, es licenciado bajo la GPL (General Public License) de la GNU. Fue creada por la empresa sueca MySQL AB, que mantiene el copyright (derechos de autor) del código fuente del servidor SQL, así como de la marca. MySQL es el sistema administrador de base de datos más usado en el mundo del software libre, debido a su gran rapidez, confiabilidad y facilidad de uso. Esto principalmente se debe, a que existen infinidad de librerías y otras herramientas que permiten su uso a través de gran cantidad de lenguajes de programación, además de su fácil instalación y configuración. MySQL es parte de LAMP (Linux, Apache, MySQL, PHP / Perl / Python), fuente de rápido crecimiento de software de código abierto para negocios. Muchas compañías están usando LAMP como alternativa del costoso software propietario. Objetivo de la guía Dar a conocer el sistema gestor de base de datos MYSQL Requerimientos. Se debe contar con: Un (1) computador teniendo como mínimo el Sistema Operativo Libre ( Canaima/Ubuntu), SGBD MYSQL (phpmyadmin)
  • 2. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba  El servidor está disponible como un programa separado para ser usado en un ambiente cliente/servidor. Tipos de Columna  Algunos de los tipos soportados son: Entero (INTEGER) con signo/sin-signo de 1, 2, 3,  4, y 8 bytes de longitud, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE,  TIME, DATETIME, TIMESTAMP, YEAR y tipos espaciales OpenGIS (Geographic Information Systems). Seguridad  Maneja un sistema de privilegios muy seguro, la verificación se hace basado en host. Escalabilidad y Límites  Maneja base de datos grandes. Su uso se extiende a más de 50 millones de registros. Se tiene conocimiento de algunos usuarios que usan el servidor  MySQL con más de 60,000 tablas y cerca de 5.000.000.000 de filas.  Se permiten hasta 64 índices por tabla. Cada índice puede consistir de 1 a 16 columnas. Conectividad  Los clientes pueden conectarse al servidor MySQL usando TCP/IP sobre cualquier plataforma.  El conector/ODBC (MyODBC) provee soporte a programas cliente que usen ODBC (Open Database Connectivity).  La interfase conector/J provee soporte para programas cliente java que usan JDBC. Motor de Almacenamiento de MySQL El motor de almacenamiento (storage engine) es el software que se encarga del manejo de los datos; es decir, cómo se organizan y qué relaciones tienen, cómo se almacenan y de qué forma son accedidos, cómo se gestiona el acceso de distintos usuarios y los bloqueos pertinentes, sus medidas de seguridad y la integridad. MySQL soporta varios motores de almacenamiento que actúan como manejadores de tablas. Los motores de almacenamiento de MySQL incluyen el manejo de tablas transaccionales y tablas no-transaccionales. Motor de Almacenamiento MyISAM MyISAM es el motor de almacenamiento por defecto en MySQL desde la serie 3.23. Cada tabla MyISAM es almacenada en el disco en tres archivos. Los nombres de los archivos comienzan con el nombre de la tabla y tienen una extensión que indica el tipo de archivo, un archivo .frm almacena la definición de la tabla. Un archivo .myd almacena la data y el archivo .myi indica la información sobre los índices. Para especificar explícitamente una tabla MyISAM, se indica a través de ENGINE o TYPE para indicar el tipo de tabla: CREATE TABLE t (i INT) ENGINE = MYISAM; CREATE TABLE t (i INT) TYPE = MYISAM; MyISAM es el motor de almacenamiento por defecto en MySQL, a menos que haya sido cambiado no es necesario especificar ENGINE o TYPE para especificar una tabla MyISAM. Motor de Almacenamiento InnoDB InnoDB provee a MySQL un motor de almacenamiento con soporte a transacciones (propiedades ACID) con capacidades para commit y rollback. Algunas de las características más importantes de las tablas InnoDB son: • InnoDB permite el bloqueo a nivel de registros, además ofrece un mecanismo de no bloqueo en caso de sentencias SELECT. Estas características incrementan la posibilidad de manejo de usuarios concurrentes y mejoran el desempeño del servidor. • InnoDB soporta la definición de claves foráneas (FOREIGN KEY). • Es posible que en una sentencia SELECT puedan mezclarse diferentes tipos de tablas. • InnoDB ha sido diseñado para máximo rendimiento cuando se procesan grandes volúmenes de datos. • Integrada completamente con el servidor MySQL, InnoDB mantiene su propio buffer pool para mantener datos e índices en memoria principal. InnoDB almacena la información de las tablas e índices en espacios de tablas (tablespace), los cuales consisten de un conjunto de archivos (a diferencia de ISAM y MyISAM donde cada tabla es almacenada en un archivo distinto). • No existe un límite de tamaño predefinido para las tablas InnoDB.
  • 3. . Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba • InnoDB es usado en numerosos lugares a nivel de ambientes de producción, principalmente en sitios que requieren alto desempeño. • Para especificar explícitamente que se quiere trabajar con el motor InnoDB, se indica a través de las opciones ENGINE o TYPE: CREATE TABLE t3 (i INT) ENGINE = InnoDB; CREATE TABLE t3 (i INT) TYPE = InnoDB; • Es más seguro. Si ocurren problemas de hardware o MySQL falla, es posible recuperar la información ya sea por una recuperación automática o desde un archivo log de transacciones de respaldo. • Es posible combinar muchas sentencias y aceptar todas al mismo tiempo con la sentencia COMMIT (si el autocommit está desactivado). • Para ignorar los cambios realizados se ejecuta la sentencia ROLLBACK (si el autocommit está desactivado). • Si una actualización falla todos los cambios son revertidos (en un ambiente no transaccional todos los cambios hechos son permanentes). • Los motores transaccionales proporcionan un mejor desempeño sobre tablas que tienen muchas actualizaciones concurrentes. Seguridad en MySQL Para los administradores de base de datos la seguridad de la información es uno de los puntos más importantes. Un nivel de seguridad aceptable puede lograrse bloqueando el acceso al servidor y a la base de datos a usuarios no autorizados. Cuando se habla de seguridad de información, también se deben tomar medidas con los usuarios que tienen autorización de acceder a la base de datos,. El mecanismo más usado es restringir el acceso a la información, ya que ellos pueden causar daño a la información de manera accidental o maliciosa. Estos usuarios podrían ejecutar sentencias SQL delete o update. El sistema de seguridad en MySQL es referido como el Sistema de Privilegios de Acceso. Permite la autenticación de los usuarios del servidor de MySQL y la verificación de las actividades de todos los usuarios sobre el servidor y las bases de datos. La seguridad en MySQL es aplicada en dos niveles: Nivel de servidor y Nivel de Base de Datos. Cuando un usuario trata de acceder a una base de datos, primero se verifica si el usuario tiene privilegio para acceder al servidor de base de datos, después el servidor verifica si el usuario tiene privilegios para conectarse a una base de datos. La verificación de conexión al servidor y la verificación de conexión a la base de datos son dos procesos que MySQL siempre lleva a cabo. MySQL realiza la verificación de privilegios del servidor y la base de datos usando unas tablas del sistema llamadas tablas de concesión. Estas tablas contienen toda la información necesaria para aplicar las políticas de seguridad convenientes. Todos los host (otros computadores) y usuarios que se conectan al servidor MySQL deben estar representados en las tablas de concesión. Ejecución de Sentencias SQL con MySQL Tipos de Datos en MySQL Cada columna de una tabla debe ser de un tipo de dato, este tipo de dato va relacionado con el tipo definido en el diseño de la base de datos y se debe ajustar a un óptimo uso del espacio de almacenamiento. A continuación se describe los tipos de datos soportados por MySQL. Los tipos de datos soportados por MySQL se pueden agrupar en tres grandes grupos:  Tipo de dato Numérico.  Tipo de dato Fecha.  Tipo de dato Cadena. Tipo de Datos Numéricos tinyint: Es un entero de un byte con o sin signo, con signo el rango va desde -128 a 127, sin signo el rango de valores es de 0 a 255. tinyint(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser representados, la máxima longitud son 3 dígitos. TINYINT[(P)] [UNSIGNED]
  • 4. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba smallint: Es un entero de dos bytes con o sin signo, con signo el rango de valores va desde -32768 a 32767, sin signo el rango de valores es de 0 a 65535. smallint(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser representados, la máxima longitud son 5 dígitos. SMALLINT[(P)] [UNSIGNED] mediumint: Es un entero de tres bytes con o sin signo, con signo el rango de valores va desde -8.388.608 a 8.388.607, sin signo el rango va desde 0 a16777215. mediumint(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser representados, la máxima longitud son 8 dígitos. MEDIUMINT[(P)] [UNSIGNED] integer, int: Es un entero de cuatro bytes con o sin signo, con signo el rango de valores va desde -2147483648 a 2147483647, sin signo el rango va desde 0 a 429.4967.295. int(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser representados, la máxima longitud son 10 dígitos. INT[(P)] [UNSIGNED] bigint: Es un entero de ocho bytes con o sin signo, con signo el rango de valores va desde - 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807, sin signo el rango va desde 0 a 18.446.744.073.709.551.615. bigint(p) especifica la cantidad de dígitos permitidos, donde p es igual al número de dígitos a ser representados, la máxima longitud son 20 dígitos. BIGINT[(P)] [UNSIGNED] float: Maneja números con punto flotante de precisión simple, el rango de valores para una columna van desde - 3.402823466e+38 a -1.175494351e-38 para valores negativos, 0 y desde 1.175494351e-38 a 3.402823466e+38 para valores positivos. float(p,m) donde m es el número de dígitos en la mantisa o la porción decimal y p es la precisión o la cantidad de dígitos para todo el número. FLOAT[(P,M)] [UNSIGNED] xreal, double: Número en coma flotante de precisión doble. Los valores permitidos van desde - 1.7976931348623157e+308 a -2.2250738585072014e-308 para valores negativos, 0 y desde 2.2250738585072014e-308 a 1.7976931348623157e+308 para valores positivos. double(p,m) donde m es el número de dígitos en la mantisa o la porción decimal y p es la precisión o la cantidad de dígitos para todo el número. DOUBLE[(P,M)] [UNSIGNED]. decimal (m,d), dec(m,d), numeric(m,d): Un valor decimal es un número decimal empaquetado con una coma decimal implícita, el número se almacena como una cadena. decimal (m,d) donde m es la cantidad de dígitos para todo el número y d es el número máximo de dígitos en la mantisa o la porción decimal. DECIMAL[(M[,D])] [UNSIGNED] Tipos de Datos Fecha MySQL permite definir columnas de tablas que puedan almacenar fechas, sobre estos tipos de datos no hay verificación estricta si una fecha es válida o no, simplemente el servidor MySQL comprueba que el mes está comprendido entre 0 y 12, y que el día está comprendido entre 0 y 31. date: Tipo fecha, el rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999, el formato de almacenamiento es de año-mes-día AAAA-MM-DD. datetime: Combinación de fecha y hora, el rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos, el formato de almacenamiento es de año-mes-día horas:minutos:segundos AAAA-MM-DD HH:MM:SS. timestamp: Combinación de fecha y hora, el rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:
  • 5. . Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba time: Es una representación genérica de valores de tiempo expresado en horas, minutos y segundos, el rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de 'hh:mm:ss'. year: Tipo de dato usado para representar un año calendario, el rango de valores permitidos va desde el año 1901 al año 2155, el campo puede tener tamaño dos o tamaño 4, dependiendo de si se quiere almacenar el año con dos o cuatro dígitos. Tipos de cadena El tipo de dato cadena encapsula a todos los tipos de datos usados para almacenar caracteres, cadenas, datos alfanuméricos y valores NULL, adicionalmente todos los tipos cadena pueden almacenar cadenas vacías („‟), cuando se inserta un valor en un tipo de datos cadena y éste excede al máximo permitido por el tipo el dato es truncado. char(n): Almacena una cadena de longitud fija, la cadena podrá contener desde 0 a 255 caracteres. varchar(n): Almacena una cadena de longitud variable, la cadena podrá contener desde 0 a 255 caracteres. text(n): Es un tipo de datos cadena usado para almacenar datos alfanuméricos, las consultas hechas sobre las columnas text no son sensibles a mayúsculas y minúsculas, rango de valores para el n de 0 a 65535 caracteres. blob(n): Es un tipo cadena usado para almacenar datos binarios, como por ejemplo archivos de imagen, video, etc. El tipo de datos blob si es sensible a minúsculas y mayúsculas, el tamaño máximo para un blob es de 65535 bytes. Sentencias DDL CREATE TABLE: Esta sentencia es utilizada para crear una tabla y definir las columnas que contiene. Cuando no se especifica el motor de almacenamiento, por defecto el manejador usa el MyISAM. Es importante tener en cuenta que cuando una columna se define como clave primaria es obligatorio que antes se haya especificado la restricción NOT NULL sobre la columna. MySQL es sensible a minúsculas y mayúsculas con los nombres de las tablas, es importante mantener un estándar en el nombramiento de estos objetos de base de datos.
  • 6. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba CREATE TABLE cliente( id_cliente INT NOT NULL, nombre VARCHAR(20), PRIMARY KEY (id_cliente) ) TYPE = INNODB; Se define la tabla cliente la cual tiene dos columnas (id_cliente y nombre), siendo la columna id_cliente la clave primaria, además se indica el motor de almacenamiento es INNODB (Soporte a transacciones). CREATE TABLE PRUEBA( ID INT AUTO_INCREMENT PRIMARY KEY, PREGUNTA VARCHAR(20), RESPUESTA VARCHAR(20) ) AUTO_INCREMENT = 10; AUTO_INCREMENT puede ser agregada como opción a una columna, si al insertar una fila se omite el valor de la columna auto_incrementada o si se inserta un valor nulo para esa columna, su valor se calcula automáticamente, tomando el valor más alto de esa columna y sumándole una unidad. Esto permite crear, de una forma sencilla, una columna con un valor único para cada fila de la tabla., por defecto esta inicializado en uno, aunque puede ser configurado, en el ejemplo anterior el valor inicial para el auto_incremento es 10. Índices Para definir índices sobre una columna o sobre varias se usan indistintamente las opciones KEY o INDEX. Índices Únicos Para definir índices únicos sobre una columna o sobre varias se usa la opción UNIQUE. La diferencia entre un índice único y uno normal es que en los únicos no se permite la inserción de filas con valores repetidos. La excepción es el valor NULL, que sí se puede repetir. Claves Foráneas Para que una columna sea una clave foránea, esta necesita ser definida como tal al momento de crear la tabla. Se pueden definir claves foráneas en cualquier tipo de tabla de MySQL, pero únicamente tienen sentido cuando se usan tablas del tipo InnoDB, en los otros motores de almacenamiento no se verifica si una clave foránea existe realmente en la tabla referenciada, y que no se eliminan filas de una tabla con una definición de clave foránea. Para hacer esto hay que usar tablas InnoDB. Ejemplo: CREATE TABLE cliente ( id_cliente INT NOT NULL,
  • 7. . Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba nombre VARCHAR(30), PRIMARY KEY (id_cliente) ) TYPE = INNODB; CREATE TABLE factura ( id_factura INT NOT NULL, id_cliente INT NOT NULL, monto DOUBLE, PRIMARY KEY(id_factura), FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente) ON DELETE CASCADE ) TYPE = INNODB; Es obligatorio que la columna que contiene una definición de clave foránea esté indexada. Pero esto no debe ser motivo de preocupación, ya que si no se realiza de forma explícita, MySQL lo hará de forma implícita. Sintaxis completa para la definición de clave foránea es: [CONSTRAINT nombre_restricción] FOREIGN KEY (nombre_columna, ... REFERENCES nombre_tabla (nombre_columna, ...) [ON DELETE CASCADE ] ALTER TABLE. La sintaxis es: ALTER TABLE nombre_tabla ADD [CONSTRAINT nombre_restricción] FOREIGN KEY(nombre_columna, ...) REFERENCES otra_tabla(nombre_columna, ...) [acciones_ON_DELETE]; ALTER TABLE: En muchas oportunidades es posible que se requiera cambiar la estructura de las tablas, estos cambios suceden por muchas razones: Cambios en las reglas del negocio, actualizaciones de las aplicaciones, etc. Con ALTER TABLE se puede dar respuestas a esas necesidades. Sintaxis: ALTER TABLE nombre_de_tabla [ADD COLUMN (Definición_de_columna,..,..)] [ADD INDEX [nombre_indice] (nombre_columna,..,..)] [ADD PRIMARY KEY (nombre_columna,..,..)] [ADD UNIQUE [nombre_indice] (nombre_columna,..,..)] ADD [CONSTRAINT nombre_restricción] FOREIGN KEY(nombre_columna, ...) REFERENCES otra_tabla(nombre_columna, ...) [acciones_ON_DELETE] [DROP COLUMN nombre_columna] [DROP PRIMARY KEY] [DROP INDEX nombre_indice] Sentencias DML INSERT: Sentencia usada para insertar datos en una tabla: Sintaxis: INSERT INTO nombre_tabla[(nombre_columna1,nombre_columna2,..,..)] VALUES(valor1,valor2,..); Es posible usar INSERT con SELECT para insertar muchas filas en una sola sentencia. INSERT INTO nombre_tabla1 (col1,col2,...) SELECT col1,col2,.. FROM nombre_tabla2; Ejemplos: INSERT INTO cliente values (1,'Juancho',54121); INSERT INTO cliente values (2,
  • 8. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba 'Luis',45687.25),(3,'Pedro',5487.54),(4,'Pedro',54877.59), (5,'Pedro',54875.25),(6,'Pablo',125478.25),(7,'Nelson',126 57.36),(8,'Nelson',54875.25) ,(9,'Jesus',5647.25) ,(10,'Jesus',5487) ,(11,'Miguel',45877) ,(12,'Miguelina',45877) ,(13,'Pedrito',458377); INSERT INTO factura values(1,1,5878787.26); UPDATE: La sentencia UPDATE es usada para actualizar valores de columnas de una tabla. La cláusula SET indica cual o cuales columna(s) va(n) a ser modificada(s) y los nuevos valores. La cláusula WHERE es usada para especificar las filas que van a ser afectadas. La cláusula LIMIT indica la cantidad máxima de filas (registros) que van a ser actualizadas. Sintaxis: UPDATE nombre_tabla SET nombrecol1=valor, [nombrecol2=valor, ...] [WHERE Condición] [LIMIT #]; Ejemplo: UPDATE cliente SET nombre='Luis' Where id_cliente=1; DELETE: La sentencia DELETE es usada para eliminar registros de una tabla. Sentencias DQL SELECT: La sentencia SELECT se usa para recuperar filas seleccionadas de una o más tablas. Sintaxis: SELECT [ALL | DISTINCT | DISTINCTROW] nombrecolumna1,nombrecolumna2,.... FROM tabla1[,tabla2...] WHERE condiciones [GROUP BY (nombre_col)] [HAVING condiciones] [ORDER BY nombre_col] [ASC | DESC]
  • 9. . Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba [LIMIT contador] Ejemplo: SELECT * FROM cliente; DISTINCT y DISTINCTROW: Son usadas para restringir la aparición de filas repetidas. Ejemplo. SELECT [DISTINCT | DISTINCTROW] nombre FROM cliente; WHERE: La mejor utilidad de una base de datos es la posibilidad de hacer consultas en función de ciertas condiciones. Generalmente, será de interés saber qué filas se ajustan a determinados parámetros. Esto se realiza con la cláusula WHERE del SELECT. Ejemplo: SELECT * FROM cliente WHERE nombre='Luis'; ALIAS: El alias se usa como un nombre de columna en expresiones para la salida de la consulta, también es posible definir alias a las tablas de la cláusula FROM. Por ejemplo: SELECT CONCAT(nombre,', ',salario) AS Nombre_Salario FROM cliente ORDER BY Nombre_Salario; El AS es opcional cuando se define un alias sobre una expresión o columna. El ejemplo anterior se puede escribir como: SELECT CONCAT(nombre,', ',salario) Nombre_Salario FROM cliente ORDER BY Nombre_Salario; Para definir alias a una referencia de una tabla se usará la siguiente sintaxis: SELECT t1.col1, t2.col2 FROM tabla1 AS t1, tabla2 AS t2 WHERE t1.col1 = t2.col2; GROUP BY: Es posible agrupar filas en la salida de una sentencia SELECT usando la cláusula GROUP BY. Ejemplo: SELECT id_cliente, nombre FROM cliente GROUP BY nombre; La principal utilidad de la cláusula GROUP BY es que permite usar funciones de resumen o reunión (funciones agregadas), tales como: COUNT(), MAX(), MIN(), SUM(), AVG(), etc. Ejemplo: SELECT COUNT(nombre) FROM cliente GROUP BY nombre; HAVING: La cláusula HAVING permite hacer selecciones sobre datos agrupados. Observe un ejemplo: SELECT nombre, count(nombre) FROM cliente GROUP BY nombre HAVING COUNT(nombre) >= 2; La salida para esta consulta es el nombre del cliente y la cantidad de veces que aparece ese nombre, con la condición de que sólo se mostrarán los nombres que estén repetidos más de dos veces. ORDER BY: Es usada para dar ordenamiento a los datos recuperados en una sentencia SELECT. Las columnas seleccionadas pueden ser referenciadas usando nombres de columna, alias de columna o posiciones de columna. Las posiciones de columna son enteros que empiezan en 1. Para ordenar en orden inverso se añade la palabra clave DESC (descendente). Por defecto el orden es ascendente, pero puede ser especificado explícitamente por la palabra clave ASC. El uso de posiciones de columna no se aconseja, ya que esa sintaxis ha sido eliminada de SQL estándar. Ejemplo: SELECT * FROM cliente ORDER BY id_cliente, nombre; LIMIT: La cláusula LIMIT permite limitar el número de filas recuperadas por la sentencia SELECT: Ejemplo: SELECT * FROM cliente LIMIT 3; La salida de la anterior consulta sólo muestra tres registros. Operador IN: El operador IN se usa para realizar comparaciones con una lista de valores. SELECT * FROM cliente WHERE nombre = 'Jesus' OR nombre= 'Pedro' OR nombre='Nelson'; Esta sentencia puede ser reescrita como:
  • 10. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba SELECT * FROM cliente WHERE nombre IN ('Jesus','Pedro','Nelson'); Operador BETWEEN: El operador BETWEEN se usa para comprobar si cierto valor está dentro de un rango dado. Por ejemplo, asuma que se está interesado en encontrar a todos los clientes que gana salarios dentro un rango de [$1,000 a $50,000] (ambos inclusive). ¿Cómo se escribe esta consulta? SELECT id_cliente,nombre FROM cliente WHERE salario >= 1000 AND salario <= 50000; La consulta anterior se puede escribir también usando el operador BETWEEN. SELECT id_cliente,nombre FROM cliente WHERE salario BETWEEN 1000 AND 50000; Operador IS: Los operadores IS NULL e IS NOT NULL son utilizados para verificar si una expresión determinada es o no nula. SELECT * FROM cliente WHERE nombre IS NOT NULL; Operador LIKE: Se usa para hacer comparaciones entre cadenas y patrones. El resultado es verdadero (1) si la cadena se ajusta al patrón, y falso (0) en caso contrario. Los patrones son cadenas de caracteres en las que se pueden encontrar en cualquier posición los caracteres especiales '%' y '_'. „%‟ Es usado para hacer coincidir cualquier número de caracteres, incluso ninguno. „_‟ Es usado para hacer coincidir con un único carácter. SELECT * FROM cliente WHERE nombre LIKE 'Miguel%'; Consultas Multitablas Los datos están distribuidos en diferentes tablas debido a la normalización. La normalización se realiza para evitar la redundancia y para integrar los datos almacenados en distintas tablas. Cuando el usuario quiere obtener información completa consultando más de una tabla, debe JOIN (UNIR) los datos de las distintas tablas.
  • 11. . Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba PRODUCTO CARTESIANO (CARTESIAN JOIN): El producto cartesiano de dos tablas son todas las combinaciones de todas las filas de las dos tablas. Usando una sentencia SELECT se hace proyectando todos los atributos de ambas tablas. Los nombres de las tablas se indican en la cláusula FROM separados con comas: SELECT * FROM personal, division; INNER JOIN: Las composiciones internas (INNER JOIN) se definen a partir de un producto cartesiano, eliminado las filas que no cumplen la condición de composición. Estas composiciones se denominan internas porque en la salida no aparece ninguna fila que no esté presente en el producto cartesiano, es decir, la composición se hace en el interior del producto cartesiano de las tablas. Ejemplo: SELECT * FROM personal,division WHERE personal.no_division=division.no_division; Reescribiendo la sentencia anterior con JOIN: SELECT <columnas> FROM tabla1 [INNER] JOIN tabla2 ON <condiciones> | USING (Lista_columnas); La coma que separa las tablas que se usan en una consulta y JOIN son equivalentes, y la palabra INNER es opcional. La condición en la cláusula ON puede ser cualquier expresión válida para una cláusula WHERE, de hecho, en la mayoría de los casos, son equivalentes. La cláusula USING permite usar una lista de atributos que deben ser iguales en las dos tablas a componer. Si se desea elegir determinadas columnas de ambas tablas en lugar de seleccionar todas, se puede hacer esto indicando en la sentencia SELECT el nombre(s) de las(s) columna(s) que se quiere mostrar. Ejemplo: SELECT division.no_division,nombre_division,ubicacion, no_personal,nombre_personal,cargo,salario FROM personal INNER JOIN division ON (personal.no_division=division.no_division); En el ejemplo anterior la columna no_división existe en las dos tablas, por lo tanto, se debe colocar el nombre de la tabla de donde se va a extraer la información. Para ello, existe una sintaxis alternativa que permite obtener el mismo resultado sin tener que especificar las columnas en la condición.
  • 12. Universidad Politécnica Territorial Andrés Eloy Blanco Programa Nacional de Formación en Informática Ing. Lissette Torrealba SELECT * FROM personal NATURAL JOIN division; Sub-consultas Una sub-consulta es una sentencia SELECT dentro de otra sentencia MySQL da soporte para cualquier forma de sub-consulta basado en el estándar SQL. SELECT * FROM tabla1 WHERE col1 =(2:SELECT col1 FROM tabla2); 1 Consulta Padre. 2 Consulta Hija. Existen dos tipos de sub-consultas: correlacionadas y no-correlacionadas, cuando la subconsulta hija hace referencia a una o más columnas de la subconsulta padre se dice que es una subconsulta correlacionada, si no existe referencia de las columnas entonces se dice que es no-correlacionada. Ejemplo sub-consulta no-correlacionada: SELECT * FROM personal WHERE no_division = (SELECT no_division FROM division WHERE nombre_division='HARDWARE'); En el ejemplo anterior si la consulta interna retorna más de un valor resultaría en un error, en estos casos cuando el resultado de la sub-consulta interna es un conjunto de datos utilizamos operador IN. Ejemplo de sub-consulta correlacionada: SELECT division.nombre_division FROM división WHERE EXISTS (SELECT no_division FROM personal WHERE personal.no_division = division.no_division); Autoevaluación 1.- MySQL mantiene las tablas temporales en memoria principal como__________. a) Tablas MyISAM. b) Tablas InnoDB. c) Tablas Hash. d) Ninguna de las anteriores 2.- MySQL fue escrito en ___________. a) Java y ASM. b) Pascal y Clipper c) C y C++ d) Cobol y Fortran. 3.- MySQL puede manejar muchas tareas y requerimientos al mismo tiempo a) Verdadero b) Falso 4.- Para definir clave foránea, hay que usar el motor de almacenamiento MyISAM a) Verdadero b) Falso 5.- Cuando no se especifica el motor de almacenamiento, por defecto el manejador usa el InnoDB. a) Verdadero b) Falso Referencias Bibliográficas IBM Capacitación (2008) Base de Datos I