1056593010.Sentencias MySQL

Anuncio
Base de Datos – LSI y PI
Lic. Paola Daniela Budán – Lic. Federico Rosenzvaig
Motores de Bases de Datos
 MySQL (Oracle)
 SQL Server (Microsoft)
 PostgreSQL
 Oracle (Oracle)
 DB2 (IBM)
 Informix (IBM)
Instalación
 Descargar el motor de http://www.mysql.com
 Ir a Downloads y seleccionar MySQL Community Server
 Elegir la plataforma y el entorno adecuado y descargar
 Descargar el MySQL WorkBench (GUI Tool) de la
misma url
 Ir a Download y seleccionar la plataforma y el entorno
adecuado y descargar.
 Elegir el servidor más cercano, descargar e instalar.
Administración del Servidor
 Crear Backup
 Restaurar Base de Datos
Lenguaje SQL
 SQL (Structure Query Language)
Lenguaje estructurado de Consulta
 DML (Data Manipulation Language)
Lenguaje de Manipulación de Datos
 DDL (Data Definition Language)
Lenguaje de Definición de Datos
 DCL (Data Control Language)
Lenguaje de Control de Datos
Instrucciones SQL
 DDL: Create; Alter; Drop
 DML: Insert; Update; Delete; Select;
 DCL: Grant; Revoke
Crear una Base de Datos
CREATE DATABASE <nombre_base_datos>;
Ejemplo:
CREATE DATABASE inmobiliaria;
Borrar una Base de Datos
DROP DATABASE <nombre_base_datos>;
Ejemplo:
DROP DATABASE inmobiliaria;
Comandos Varios (1)
USE <nombre_base_datos>;
Permite seleccionar la base de datos con la que se va a
trabajar. Ejemplo: USE inmobiliaria;
SHOW DATABASES;
Muestra las bases de datos existentes;
SHOW TABLES;
Muestra las tablas de la base de datos seleccionada.
Comandos Varios (2)
DESCRIBE <nombre_tabla>;
Muestra la estructura de la tabla, o sea el nombre y el
tipo de dato de cada uno de los campos.
SHOW CREATE TABLE <nombre_tabla>;
Muestra la sentencia create table utilizada para la tabla.
Creación de Tablas
CREATE TABLE [nombreTabla]
( <nombreColumna_1> <tipoDato>,
<nombreColumna_2> <tipoDato>,
…,
<nombreColumna_n> <tipoDato> );
Ejemplo:
CREATE TABLE barrio
( IdBarrio int, DescBarrio varchar(40) );
Tipo de Datos (1)
MYSQL
INT o INTEGER
BIGINT
Números enteros
DECIMAL(P , [S] )
NUMERIC(P , [S] )
Número con una precisión de P dígitos. Cuando se especifica S decimales se
toman de los P dígitos.
FLOAT
DOUBLE
Número de punto flotante
CHAR(n)
Se puede especificar la cantidad de caracteres que se desean almacenar. Si se
almacenan menos del los permitidos, el RDBMs le agrega espacios para
completarlos.
VARCHAR(n)
Igual que CHAR excepto que la longitud es variable. Solo utiliza memoria
para la cantidad de caracteres almacenados.
Tipo de Datos (2)
MYSQL
DATETIME
DATE
Permite almacenar una fecha como año, mes, día, hora, min, seg.
Ej: ‘2011-05-21 02:46:35’
TIME
Permite almacenar una hora como hora, minuto y segundo
TIMESTAMP
Igual que DATETIME, solo que permite especifiacar un valor default
Create Table
CREATE TABLE <nombre tabla> (
< nombre columna> <tipo> [<default value>] [<column constraints>],
:::
< nombre columna> <tipo> [<default value>] [<column constraints>],
<restricciones de tabla>,
:::
<restricciones de tabla>
);
Default
 Esta clausula permite asignar un valor por omisión cuando se
inserta una fila y la columna no tiene un valor especificado.
DEFAULT <valor de expresión>
Valor de expresión es una expresión simple de literales, funciones y
valore. Este valor debe poder ser evaluado a un tipo de dato que
concuerde o pueda ser convertido implícitamente al tipo de dato de
la columna.
Ejemplos:
direccion VARCHAR(30) DEFAULT ‘-’
inventario INT DEFAULT 0
Constraint
Hay dos tipos de especificación de restricciones:
Restricciones de columna: declaradas y aplicadas a
una columna en particular.
Restricciones de tabla: declaradas separadamente y
puede ser aplicada a una o más columnas.
Null y UNIQUE
NOT NULL: indica que no puede contener valores nulo
la columna. Si no se especifica asume que acepta valores
nulos.
UNIQUE: no permite valores repetidos por columna.
Null y UNIQUE
CREATE TABLE propietarios (
propId INT NOT NULL,
propNombre VARCHAR(30) UNIQUE,
propApellido VARCHAR(30)
);
CREATE TABLE propietarios (
propId INT NOT NULL,
propNombre VARCHAR(30),
propApellido VARCHAR(30),
UNIQUE (propNombre,propApellido)
);
Primary Key
Define la clave primaria de una tabla.
CREATE TABLE propiedad (
proId INT PRIMARY KEY,
prodimension FLOAT(5,2)
);
CREATE TABLE propiedad_propietario (
proId INT,
propId INT,
PRIMARY KEY (proId, propId)
);
Integridad Referencial
CREATE TABLE <nombre_tabla> (
< nombre columna> <tipo> [<default value>] [<column
constraints>],
[CONSTRAINT [identificador]] FOREIGN KEY (nomcol, …
,nomcol) REFERNCES <nombre_tabla> (nomcol, … ,nomcol)
ON DELETE [CASCADE | SET NULL | NO ACTION]
ON UPDATE [CASCADE | SET NULL | NO ACTION]
);
Integridad Referencial
CREATE TABLE propiedad_propietario (
proId INT,
propId INT,
PRIMARY KEY (proId, propId),
FOREIGN KEY (proId) REFERENCES propiedad (proId),
FOREIGN KEY (propId) REFERENCES propietario (propId),
);
Alter Table
¿Como funciona ALTER TABLE?
ALTER TABLE funciona creando una copia temporal de la
tabla original. La alteración se realiza en la copia, luego la
tabla original se borra y se renombra la nueva. Mientras se
ejecuta ALTER TABLE la tabla original es legible por otros
clientes. Las actualizaciones y escrituras en la tabla se
esperan hasta que la nueva tabla esté lista, luego se redirigen
automáticamente a la nueva tabla sin ninguna actualización
fallida.
Alter Table
Permite modifica la estructura de una tabla existente en la Base de datos.
ALTER TABLE <nombre_tabla> <acción>
<nombre_tabla>: Nombre de la tabla a la que se desea modificar su estructura.
<acción>: tipo de modificación que se aplicará a la tabla. Puedens ser algunas de
las siguientes acciones:
ADD [COLUMN] <nombre_col> <definicion_de_columna>
ALTER [COLUMN] <nombre_col>
DROP [COLUMN] <nombre_col>
ADD [CONSTRAINT] <restriccion_de_tabla>
DROP CONSTRAINT <nombre_restriccion> [CASCADE | RESTRICT]
Alter Table
ADD [COLUMN] <definición_de_columna>
Agrega una nueva columna a la Tabla.
<definición_de_columna>: puede ser una definición similar a la que se
utiliza con CREATE TABLE que contiene <nombre_columna-1> <tipo>
[<valor por defecto>] [<restricciones de columna>]
Ejemplo: ALTER TABLE propietario ADD COLUMN FechaNacimiento
DATE DEFAULT ‘1963-06-25’ NOT NULL;
.
Alter Table
ALTER [COLUMN] <nombre_columna> [SET DEFAULT <valor
expresión> | DROP DEFAULT]
Cambia o elimina el valor especificado por defecto de la columna.
Ejemplo: ALTER TABLE propietario ALTER COLUMN
FechaNacimiento DROP DEFAULT;
ALTER TABLE propietario ALTER COLUMN FechaNacimiento SET
DEFAULT ‘2001-01-01’;
Alter Table
DROP [COLUMN] <nombre_columna> [CASCADE | RESTRICT]
Elimina la columna <nombre_columna> de la tabla.
Si hay alguna dependencia externa en esta columna, la eliminación será
rechazada.
Si se especifica CASCADE, el DBMS intenterá eliminar primero todas las
dependencias externas que posea la columna antes de eliminarla.
EL valor por defecto es RESTRICT, si se especifica este valor no se
eliminará la columna si esta posee referencias externas.
Ejemplo: ALTER TABLE propiedad DROP COLUMN FechaNacimiento;
ALTER TABLE barrio DROP COLUMN barrioId CASCADE;
Alter Table
ADD [CONSTRAINT] <restriccion_de_tabla>
Permite agregar una nueva restricción a la tabla, se aplican las mismas
restricciones que se utilizan con CREATE TABLE.
Ejemplo: ALTER TABLE barrio ADD CONSTRAINT indiceunico UNIQUE
(nombreBarrio);
Alter Table
DROP CONSTRAINT <nombre_restriccion> [CASCADE | RESTRICT]
Elimina una restricción que ha sido creada con el nombre <nombre_restriccion>
Si hay entidades externas que dependen de esta restricción, la eliminación podría
invalidar la entidad. Si se especifica RESTRICT y la entidad podría ser invalidad, el
DBMS no quitará la restricción. Este es el comportamiento predeterminado.
Si se especifica CASCADE, el DBMS intentará eliminar todas las restricciones de
las entidades que potencialmente este violando antes de eliminar la restricción
Ejemplo; ALTER TABLE barrio DROP CONSTRAINT indiceunico;
Alter Table
ALTER TABLE tbl_name
ADD [CONSTRAINT [symbol]]
PRIMARY KEY [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
UNIQUE [index_name] [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
| CHANGE [COLUMN] old_col_name column_definition
[FIRST|AFTER col_name]
| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
| DROP FOREIGN KEY fk_symbol
Alter Table
CHANGE [COLUMN] <nombre_columna>
<nueva_definicion_de_columna>
Permite cambiar el nombre y el tipo a una columna.
Ejemplo: ALTER TABLE barrio CHANGE direccion
domicilio VARCHAR(40) NOT NULL
Alter Table
Puede renombrar una columna usando CHANGE <viejo_nom_col>
<nuevo_nom_col> <definicion_columna>.
Para ello, especifique el nombre de columna viejo y nuevo y el tipo de la columna
actual. Por ejemplo para renombrar una columna INTEGER de ‘a’ a ‘b’ puede
hacer:
ALTER TABLE producto CHANGE a b INTEGER;
Si quiere cambiar el tipo de una columna pero no el nombre, la sintaxis CHANGE
necesita un nombre viejo y nuevo de columna, incluso si son iguales. Por ejemplo:
ALTER TABLE producto CHANGE b b BIGINT NOT NULL;
Puede usar MODIFY para cambiar el tipo de una columna sin renombrarla:
ALTER TABLE producto MODIFY b BIGINT NOT NULL;
Borrar una tabla
Cuando se borra una tabla se borran los datos y la
estructura de la tabla de la base de datos. Esta es una
operación que no se puede deshacer. Se puede borrar
una o varias tablas.
DROP TABLE <nombre_tabla> [, <nombre_tabla>];
DML - Insert
INSERT INTO <nom_tabla> (<col1>,…,<coln>)
VALUES (<exp1>,…,<expn>) [, (<exp1>,…,<expn>)];
INSERT INTO tipoPropiedad (tipoproId, tipoproDesc)
VALUES (1,’casa’),(2,’departamento’);
DML - Insert
Agrega filas a partir de una consulta. Los tipos de los
atributos de ambas listas de atributos deben ser compatibles.
INSERT INTO <nom_tabla> (<col1>,…,<coln>) (sentencia
SELECT);
INSERT INTO alumno (aluDoc, aluNom, aluDir) (SELECT
doc, nom, dir FROM ingresante WHERE comision = 3)
DML - DELETE
DELETE FROM <nombre_tabla>
[WHERE <condicion>];
Si no se especifica la cláusula WHERE, se eliminan todos
los registros de la tabla.
DELETE FROM propiedad WHERE tipoproId = 2;
DELETE FROM barrio;
DML - UPDATE
UPDATE <nombre_tabla>
SET <atributo1> = <valor1>, …,
<atributo1> = <valor1>
WHERE <condición>;
Si no se especifica la cláusula WHERE, la modificación
de los datos afecta a toda la tabla.
DML - UPDATE
UPDATE mascotas SET masNom = ‘Tom’ ,
mascolor = ‘marron’ WHERE masId = 2;
Ejemplo: Aumentar un 5% el precio de los productos del
rubro 45;
UPDATE productos
SET proPrecio = proPrecio * 1,05 WHERE proRubro = 45;
DML - SELECT
SELECT <select_exp> [, <select_exp>]
FROM <nombre_tabla>
WHERE <condición>
ORDER BY <nomCol> [ASC | DESC]
,…, <nomCol> [ASC | DESC];
DML - SELECT
Ejemplo
SELECT masId, masNom, razaId FROM mascotas
WHERE razaId = 3 ORDER BY masNom DESC;
SQL – ALIAS de Columna de Tabla
 SQL permite que se definan alias de columna y de tabla
Precedencia de Operadores (MySQL)
Lista de menor a mayor precedencia.
Consultas combinadas - JOIN
La información en la Base de Datos se encuentra repartida en
varias tablas.
Las consultas combinadas permiten resolver este problema
accediendo a varias tablas para obtener la información
necesaria.
Las consultas combinadas pueden ser de dos tipos:
 Combinación interna (INNER JOIN)
 Combinación externa (OUTER JOIN)
Consultas combinadas - JOIN
 El formato modificado de la cláusula FROM de la sentencia SELECT es
la siguiente:
 Formato general:
 FROM <tabla1> <operador_join> JOIN <tabla2> ON
<condicion_join>
 <operador_join> = {INNER | LEFT [OUTER] | RIGHT [OUTER] }
 Formato detallado:
 FROM <tabla1> {INNER | LEFT [OUTER] | RIGHT [OUTER] } JOIN
<tabla2> ON <tabla1.columna1> = <tabla2.columna2>
Consultas combinadas - JOIN
 Combinación interna:
INNER JOIN: se muestran solo los registros en los cuales coinciden los campos de la unión
(deben existir en las dos tablas)
 Combinación externa:
LEFT OUTER JOIN: se muestran todos los registros de la tabla de la izquierda (tabla1); si
hay valores coincidentes en los campos de la unión de la segunda tabla se muestran, caso
contrario se dejan en blanco. La tabla a la izquierda de la palabra JOIN se denomina tabla
preservada y la de la derecha no preservada.
RIGHT OUTER JOIN: se muestran todos los registros de la tabla de la derecha (tabla2); si
hay valores coincidentes en los campos de la unión de la primera tabla se muestran, caso
contrario se dejan en blanco. La tabla a la derecha de la palabra JOIN se denomina tabla
preservada y la de la izquierda no preservada.
Ejemplo de Combinación Interna
SELECT Cli_Nombre, Cli_Apellido, Veh_Patente,
Veh_Descripcion
FROM Cliente c JOIN Vehiculo_Cliente vc ON c.Cli_Id =
vc.Cli_Id
JOIN Vehiculo v ON v.Veh_Id = vc.Veh_Id;
Ejemplo de Combinación Externa
SELECT * FROM Cliente c
LEFT JOIN vehiculo_cliente vc ON c.Cli_Id = vc.Cli_Id;
SELECT Cho_CUIL, Cho_Nombre, Cho_Apellido,
Veh_Patente, Veh_Descripcion
FROM Chofer RIGHT JOIN Vehiculo v ON
Chofer.Veh_Id = v.Veh_Id;
SQL - VISTAS
Una vista es una consulta (tabla virtual), que refleja el contenido de una o más
tablas. Es una tabla derivada de otras tablas (básicas o virtuales).
Las tablas consultadas en una vista se denominan tablas base .
Una vista se caracteriza porque:
 Se considera que forma parte del esquema externo.
 Una vista es una tabla virtual (no tiene una correspondencia a nivel físico)
 Se puede consultar como cualquier tabla básica.
 Las actualizaciones se transfieren a la/s tabla/s original/es (con ciertas
limitaciones).
Ventajas de las Vistas
 Centrar el interés en los datos de los usuarios.
 Centrarse sólo en los datos importantes o adecuados
 Limitar el acceso a los datos confidenciales
 Enmascarar la complejidad de la base de datos.
 Ocultar el diseño de la base de datos compleja
 Simplificar las consultas complejas, incluyendo las consultas
distribuidas a datos heterogéneos
 Simplificar la administración de los permisos de usuario.
 Mejorar el rendimiento
 Organizar los datos para exportarse a otras aplicaciones.
Aplicaciones de las Vistas
USOS:
 Para la especificación de tablas con información que se accede con frecuencia
pero no posee existencia física:
 Información derivada de la relación entre varias tablas.
 Información derivada de la formación de grupos de tuplas (p.ej. para la
obtención de estadísticas).
 En general: información derivada de consultas complejas a la que se accede con
frecuencia.
 Como mecanismo de seguridad: creación de vistas con, únicamente, los
atributos de las tablas a los cuales se desea permitir acceder a determinados
usuarios.
 Para la creación de esquemas externos
Create View
Una vista es una consulta (tabla virtual), que refleja el contenido de una o más tablas.
CREATE VIEW <nombre_vista> [(<columnas>)]
AS <sentencia _SELECT>
Los nombres de las columnas de la vista seran los devueltos por la sentecia Select.
[(<columnas>)]: se utiliza si se desea dar un nombre de columna distinto al devuelto por la sentencia
Select.
Ejemplo:
CREATE VIEW vistaCliente (‘Nombre del Cliente’, ‘Direccion del Cliente’)
AS SELECT Nombre, Direccion FROM
Cliente WHERE estado Like ‘Activo’;
Alter View
Modificar una vista existente.
ALTER VIEW <nombre_vista> [(<columnas>)]
AS <sentencia _SELECT>
Conserva los permisos asignados.
Hace que la instrucción SELECT y las opciones reemplacen la definición existente.
La sintaxis es similar a CREATE VIEW.
Ejemplo:
ALTER VIEW vistaCliente AS SELECT Nombre, Direccion , Mail FROM
Cliente WHERE estado Like ‘Inactivo’;
Drop View
Eliminar una vista existente.
DROP VIEW <nombre_vista> ;
Permita eliminar una vista.
Ejemplo:
DROP VIEW vistaAlumnos;
Descargar