Está en la página 1de 66

MySQL 5.

0
Sistemas informticos II
Dra. Marta E. Zorrilla
Departamento de Matemtica Aplicada y
Ciencias de la Computacin

Universidad de Cantabria
Curso 2005/06

Tabla de contenidos
Introduccin a MySQL
Crear BDs. Bases de datos del sistema
Usuarios y privilegios
Tipos de datos
Lenguaje de definicin
Lenguaje de manipulacin

Marta Zorrilla

Introduccin
MySQL es un gestor de BDs relacionales
Es Open Source como PostgreSQL, pero este
ltimo es un gestor relacional de objetos.
Ambos utilizan el lenguaje estndar SQL
Ambos son portables (Windows, Mac, Unix,
Linux)
MySQL dispone tambin de licencia comercial

Marta Zorrilla

PostgreSQL vs MySQL
PostgreSQL es un sistema de
BD de mayor nivel, cercano a
Oracle, Sybase o Interbase
Consume bastantes recursos y
carga ms el sistema
Soporta transacciones y desde
la v.7.0 integridad referencial
Soporta un subconjunto de
SQL92 mayor que MySQL

Marta Zorrilla

Su principal objetivo de diseo fue


la velocidad
Consume pocos recursos tanto de
cpu como de memoria
No considera integridad
referencial, la debe gestionar el
programador (InnoDB)
Soporta desencadenadores y
procedimientos/funciones
almacenados y vistas a partir v.
5.0
Soporta UNION y subqueries a
partir de v. 4.1

Primeros pasos en MySQL


Dispone de varias utilidades para su
administracin, una de ellas es el monitor,
mysql.exe que se ejecuta desde DOS.
mysql>
mysql> create database guestbook;
mysql> use guestbook;
mysql> create table guestbook
(name varchar(40) null,
location varchar(40) null);

Marta Zorrilla

Conexin a MySQL
El usuario administrador es root
Inicialmente, al instalarse MySQL el root no tiene
password. Para asignrsele:
# ./mysqladmin u root password new_passwd

Comprobar que la clave se ha asignado


correctamente
# mysql u root p
Enter password: ****
show databases;

Marta Zorrilla

Crear y borrar bases de datos


Conexin al gestor

mysql u username p passwd

Creacin de la base de datos

mysql> create database nombreBD;

Borrado de la base de datos

mysql> drop database nombreBD;


Detrs de cada instruccin poner ;

Marta Zorrilla

Base de datos del sistema


Mysql (para MyISAM):
user: contiene informacin sobre los usuarios, desde
que mquinas pueden acceder al servidor MySQL, su
clave y sus diferentes permisos
host: informa sobre que mquinas pueden acceder al
sistema, as como a las bases de datos que tienen
acesso y sus diferentes permisos
db, tables_priv, columns_priv: proveen el control
individual de las bases de datos, tablas y columnas.
func: funciones externas en lenguajes soportardos,
como C (extensiones del sistema)

Marta Zorrilla

Usuarios y privilegios
Se recomienda no utilizar el usuario root para trabajar
con la base de datos. Es mejor crear un usuario, al
menos, por aplicacin Web con los privilegios mnimos
necesarios.
Los niveles de privilegios son:

global, base de datos, tabla y columna


Se establecen con GRANT y se quitan con REVOKE
Tambin se utilizan para crear y eliminar usuarios
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON
compras.* TO marta@localhost IDENTIFIED BY marta";
Si no existe el usuario lo crea, lo mismo sucede cuando a un usuario
le quitan todos los privilegios, que se borra.

Marta Zorrilla

Usuarios y privilegios (II)


GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...]
ON {tbl_name | * | *.* | db_name.*}
TO user_name [IDENTIFIED BY "password"]
[, user_name [IDENTIFIED BY "password"] ...]
[WITH GRANT OPTION]
REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...]
ON {tbl_name | * | *.* | db_name.*}
FROM user_name [, user_name ...]
priv_type: tipo de privilegios que se le concede
tbl_name, db_name.*: nombre tabla, todas las tablas de la bd db_name
*.* indica todas las bases de datos
user_name: usuario de la forma usuario@host
With grant option: indica que el usuario puede ceder sus privilegios
Marta Zorrilla

10

Usuarios y privilegios (III).


Privilegios para usuarios

Marta Zorrilla

11

Usuarios y privilegios (IV).

Marta Zorrilla

12

Tipos de dato enteros


Tipo

Rango

Bytes Descripcin

TINYINT

-127 128
o 0..255

Enteros muy
pequeos

BIT
BOOL

01

1 bit

Entero 0 1

SMALLINT

-32768 .. 32767 o
0 .. 65535

Enteros
pequeos

MEDIUMINT

-8388608 .. 8388607
0 .. 16777215

Entero

INT o INTEGER

-2147483648 .. 2147483647 4
0 .. 4294967295.

Entero habitual

BIGINT

-9223372036854775808 ..
8
9223372036854775807
0 ..18446744073709551615

Entero grande

Marta Zorrilla

13

Tipos de dato reales


Tipo

Rango

Bytes Descripcin

FLOAT (m)

3.402823466E+38 ..
1.175494351E-38

Coma flotante
precisin
nica

DOUBLE(m,d)

1.7976931348623157E+308 ..
2.2250738585072014E-308

Coma flotante
precisin
nica

DOUBLE
1.7976931348623157E+308 ..
PRECISION (m,d) 2.2250738585072014E-308

Sinnimo de
DOUBLE

REAL (m,d)

Sinnimo de
DOUBLE

m+2

Flotante
almacenado
como char

1.7976931348623157E+308 ..
2.2250738585072014E-308

DECIMAL (m,d) o Por defecto (10,0)


NUMERIC (m,d)
Marta Zorrilla

14

Tipos de dato cadenas


Tipo

Rango

Descripcin

CHAR (m)

1 a 255

Cadena de caracteres

VARCHAR(m)

1 a 255

Char variable

TINYBLOB
TINYTEXT

255

Binario/text pequeo

65.535

Campo BLOB / TEXT normal

Hasta 16.777.215

Campo Binario/ TEXT medio

BLOB
TEXT
MEDIUMBLOB
MEDIUMTEXT
LONGBLOB
LONGTEXT
Marta Zorrilla

Hasta 4.294.967.295 Campo Binario/ TEXT grande


15

Tipos de dato fecha


Tipo

Rango

Descripcin

DATE

1000-01-01 A
9999-12-31

FECHA YYYY-MM-DD

TIME

-838:59:59 A
838:59:59

HORA EN HH:MM:SS

DATETIME

1000-01-01 00:00:00 YYYY-MM-DD HH:MM:SS


A
9999-12-31 23:59:59

TIMESTAMP [(m)]

1970-01-01 00:00:00 til para reportar


transacciones

YEAR [(2|4)]

1901-2155

Marta Zorrilla

Ao con 2 4 dgitos
16

Tipos de dato enum y set


Tipo

Mximo
Descripcin
valores en lista

ENUM

65.535

Las columnas slo pueden tomar un valor


de la lista
respuesta enum (si,no) default no

SET

64

Las columnas pueden tomar un conjunto


de valores especificados. Atenta contra
1FN

Marta Zorrilla

17

Instrucciones de definicin
Las IDD comprenden todas las operaciones necesarias
para implantar y mantener un esquema relacional.
Con ellas, se describen los datos y su agrupamiento
formando tablas, as como las restricciones que deben
cumplir.
Las IDD permiten crear, modificar y eliminar tablas, as
como todos los componentes que las definen: campos,
ndices, claves, etc. y las restricciones que sean precisas.
Principales instrucciones:
CREATE | ALTER | DROP DATABASE
CREATE | ALTER | DROP TABLE
CREATE | DROP INDEX
Marta Zorrilla

18

Tipos de tabla en MySQL


Tablas no transaccionales

MyISAM. Por defecto. Rpida y estable. Manejador de tablas


binario portable que sustituye a ISAM
Heap. Tablas hash residentes en memoria. Uso como tablas
temporales.
MRG_MyISAM. Coleccin de tablas MyISAM gestionadas como si
fuera una (todas con la misma estructura).

Tablas transaccionales

Berkeley_db. Bloqueos por pginas


InnoDB. Bloqueos por filas (ACID compliant) y soporte de FK
(desde MySQL version 3.23.44)

Marta Zorrilla

19

Crear una tabla en MySQL


CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)] table_options] [select_statement]

create_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT]
[PRIMARY KEY] [reference_definition]
or PRIMARY KEY (index_col_name,...)
or KEY [index_name] (index_col_name,...)
or INDEX [index_name] (index_col_name,...)
or UNIQUE [INDEX] [index_name] (index_col_name,...)
or FULLTEXT [INDEX] [index_name] (index_col_name,...)
or [CONSTRAINT symbol] FOREIGN KEY index_name
(index_col_name,...) [reference_definition]
or CHECK (expr)
Marta Zorrilla

20

Crear una tabla en MySQL (II)


index_col_name:
col_name [(length)]
reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
table_options:
ENGINE = {BDB | HEAP | ISAM | InnoDB | MERGE | MYISAM }

Marta Zorrilla

21

ndices en MySQL
CREATE [UNIQUE|FULLTEXT] INDEX index_name
ON tbl_name (col_name [(length)],... )

FULLTEXT pueden indexar columnas VARCHAR y TEXT


Length: indica los caracteres que se indexan de la columna

Marta Zorrilla

22

Modificacin de tablas
ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]
alter_spec:
ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
or ADD [COLUMN] (create_definition, create_definition,...)
or ADD INDEX [index_name] (index_name,...)
or ADD PRIMARY KEY (index_col_name,...)
or ADD UNIQUE [index_name] (index_col_name,...)
or ADD FULLTEXT [index_name] (index_col_name,...)
or ADD [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
[reference_definition]
or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
or CHANGE [COLUMN] old_col_name create_definition
or MODIFY [COLUMN] create_definition
or DROP [COLUMN] col_name
or DROP PRIMARY KEY
or DROP INDEX index_name
or RENAME [TO] new_tbl_name
or ORDER BY col
or table_options
Marta Zorrilla

23

Borrar db/tablas/ndices
DROP [DATABASE | TABLE | INDEX] name

Marta Zorrilla

24

CREATE TABLE Lineas (

TABLETABLE
Lineas (
IDD
III
IDD CREATE
III :: CREATE
CREATE
TABLE
Escribir las instrucciones SQL necesarias para construir
numped
NOT
NULL,
Ejemplos
numpedINTEGER
INTEGERUNSIGNED
UNSIGNEDla
NOT
Ejemplos
baseNULL,
de datos cuyo esquema de relaciones es:
numlin
numlinSMALLINT
SMALLINTUNSIGNED
UNSIGNEDNOT
NOTNULL,
NULL,
codigart
codigartCHAR(6)
CHAR(6)NOT
NOTNULL,
NULL,
unilin
FLOAT
NOT
unilin
FLOAT
NOTNULL,
NULL,
CREATE
TABLE
Pedidos
CREATE TABLE Pedidos( (
preunilin
REAL
NOT
preunilin
REALUNSIGNED
NOTNULL,
NULL,NOT NULL,
numped
INTEGER
CREATE
TABLE
Proveedores
( ( NULL,
numped
INTEGER
UNSIGNED
NOT
CREATE TABLE Proveedores
desculin
FLOAT
NOT
NULL,
desculin
FLOAT
NOT
NULL,
codigpro
CHAR(4)
NOT
NULL,
codigpro
CHAR(4)
NOT
codigpro
CHAR(4)
NOT
NULL,
codigpro CHAR(4) NOTNULL,
NULL,
PRIMARY
KEY
(numped,
numlin),
PRIMARY
KEY
(numped,
numlin),
fechaped
DATE
NOT
NULL,
cifpro
CHAR(12)
NOT
NULL,
fechaped
DATE
NOT
NULL,
cifpro CHAR(12) NOT NULL,
INDEX
Lineas_FKIndex1(numped),
INDEX
Lineas_FKIndex1(numped),
ivaped
FLOAT
NULL,
nombrpro
CHAR(30)
NOT
ivaped
FLOATNOT
NOT
NULL,
nombrpro
CHAR(30)
NOTNULL,
NULL,
INDEX
Lineas_FKIndex2(codigart),
INDEX
Lineas_FKIndex2(codigart),
fentrped
DATE
NOT
direcpro
NOT
fentrped
DATE
NOTNULL,
NULL,
direcproCHAR(30)
CHAR(30)
NOTNULL,
NULL,
FOREIGN
KEY
(numped)
FOREIGN
KEY
(numped)
PRIMARY
KEY
(numped),
cpostpro
CHAR(5)
NOT
PRIMARY
KEY
(numped),
cpostpro
CHAR(5)
NOTNULL,
NULL,
REFERENCES
Pedidos
(numped)
CREATE
TABLE
Articulos
((
REFERENCES
Pedidos
(numped)
CREATE
TABLE
Articulos
INDEX
Pedidos_FKIndex1(codigpro),
faxpro
CHAR(15)
NULL,
INDEXfaxpro
Pedidos_FKIndex1(codigpro),
CHAR(15) NULL,
ON
DELETE
NO
ACTION
codigart
CHAR(6)
ON
DELETE
NO
ACTIONNOT
codigart
CHAR(6)
NOTNULL,
NULL,
FOREIGN
KEY
(codigpro)
emailpro
CHAR(25)
NULL,
FOREIGN
KEY
(codigpro)
emailpro CHAR(25) NULL,
ON
NO
ACTION,
descrart
CHAR(40)
NOT
ONUPDATE
UPDATE
NO
ACTION,
descrart
CHAR(40)
NOTNULL,
NULL,
REFERENCES
Proveedores
(codigpro)
procepro
(No
UE)
REFERENCES
Proveedores
proceproENUM
ENUM
(NoUE,
UE,(codigpro)
UE)DEFAULT
DEFAULTUE,
UE,
FOREIGN
KEY
(codigart)
preunart
REAL
NOT
NULL,
FOREIGN
KEY
(codigart)
preunart
REAL NOT NULL,
ON
DELETE
NO
ACTION
KEY(codigpro),
ONPRIMARY
DELETE
NO
ACTION
PRIMARY KEY(codigpro),
REFERENCES
Articulos
(codigart)
stockart
FLOAT
NULL,
REFERENCES
Articulos
(codigart)
stockart
FLOATNOT
NOT
NULL,
ON
UPDATE
NO
ACTION
UNIQUE
INDEX
Proveedores_cif
ON UNIQUE
UPDATEINDEX
NO ACTION
Proveedores_cif(cifpro)
(cifpro)
ON
DELETE
NO
ACTION
PRIMARY
KEY
(codigart)
ON
DELETE
NO
ACTION
PRIMARY
KEY
(codigart)
) )ENGINE=InnoDB;
) )ENGINE=InnoDB;
ENGINE=InnoDB;
ENGINE=InnoDB;
ON
NO
) )ENGINE=InnoDB;
ONUPDATE
UPDATE
NOACTION
ACTION
ENGINE=InnoDB;
Zorrilla
)Marta
)ENGINE=InnoDB;
ENGINE=InnoDB;

25

Comandos en MySQL
mysql> show tables;
lista tablas de BD
mysql> show columns;
show fields
mysql> show databases;
mysql> describe tbl_name; describe tabla
mysql> source fichero.sql;
- ejecuta instrucciones

Marta Zorrilla

26

Instrucciones de manipulacin
Las IMD permiten actuar sobre los propios datos.
Las operaciones bsicas de manipulacin de datos son:
insertar, modificar, borrar y consultar.
Las tres primeras permiten alterar el contenido de la base
de datos.
La ltima consiste en localizar datos para su observacin.
Principales instrucciones:
INSERT
UPDATE
DELETE
SELECT

Marta Zorrilla

27

IMD
IMD II :: INSERT
INSERT

Permite aadir una o ms filas en una tabla. La sintaxis para insertar


una sola fila es:

INSERT
INSERT INTO
INTOdestino
destino [(campo1[,
[(campo1[,campo2[,
campo2[,...]])]
...]])]
VALUES
VALUES(valor1[,
(valor1[,valor2[,
valor2[,...]])
...]])
La sintaxis para insertar varias filas es:
INSERT
INSERTINTO
INTOdestino
destino[(campo1[,
[(campo1[,campo2[,
campo2[,...]])]
...]])]
Instruccin_SELECT
Instruccin_SELECT

destino: es el nombre de la tabla o consulta (de seleccin) donde se van a aadir filas.
campo1, campo2: son los nombres de los campos donde se van a aadir los datos.
valor1, valor2: son los valores que tomarn los campos en la nueva fila que se van a insertar. Cada valor
se asigna al campo que corresponde a la posicin del valor en la lista, as, valor1 se asigna al campo1,
valor2 al campo2, y as sucesivamente. Por su frecuencia, cabe mencionar que los valores que se asignen a
campos de texto deben escribirse entre comillas simples ("texto").
Instruccin_SELECT: es la instruccin SELECT cuya ejecucin proporcionar las filas a insertar.

Marta Zorrilla

28

IMD
IMD II
II :: UPDATE
UPDATE
Permite modificar informacin existente en una o varias filas de una tabla.
Su sintaxis es:
UPDATE
UPDATEtabla
tablaSET
SETcampo1=nuevovalor1
campo1=nuevovalor1[,[,campo2=nuevovalor2
campo2=nuevovalor2[,[,...]]
...]]
[WHERE
[WHEREcondicin]
condicin]
tabla: es el nombre de la tabla en la que se desea modificar datos.

campo1, campo2: son los nombres de los campos que van a modificar su valor.
nuevovalor1, nuevovalor2: son expresiones que determinan los valores que van a tomar los
campos de las filas que se van a actualizar.
condicin: es una expresin lgica que determina qu filas se actualizarn. Slo se
actualizarn las filas que satisfagan la expresin. Si no se incluye clusula WHERE (no hay
condicin) se modificarn todas las filas de la tabla.

Marta Zorrilla

29

IMD
IMD III
III :: DELETE
DELETE
Permite eliminar una o varias filas de una tabla. Su sintaxis es:

DELETE
DELETEFROM
FROMtabla
tabla [WHERE
[WHEREcondicin]
condicin]

tabla: es el nombre de la tabla cuyas filas se van a eliminar.

condicin: es una expresin lgica que determina qu filas se


borrarn. Slo se borrarn las filas que satisfagan la expresin. Si no
se incluye clusula WHERE (no hay condicin) se borrarn todas las
filas de la tabla.

Marta Zorrilla

30

IMD
IMD IV
IV :: INSERT,
INSERT, UPDATE,
UPDATE, DELETE
DELETE
Ejemplos
Ejemplos

Insertar una nueva fila en la tabla Proveedores.


INSERT
INSERT INTO
INTO Proveedores
Proveedores (codigpro,
(codigpro, cifpro,
cifpro, nombrpro,
nombrpro, direcpro,
direcpro, cpostpro,
cpostpro, localpro,
localpro, telefpro,
telefpro, faxpro,
faxpro,
procepro)
procepro)
VALUES
VALUES ("P005",
("P005", "A39144325",
"A39144325", "Angulo
"Angulo Lastra,
Lastra, Antonio",
Antonio", "Hernn
"Hernn Corts,18",
Corts,18", "39002",
"39002", "Santander",
"Santander",
(34)
942
202
022",
(34)
942
202
022",
"UE")
(34) 942 202 022", (34) 942 202 022", "UE")

Incorporar el e-mail del proveedor Luis Gil Laso, con valor mailto:gil@unican.es.
UPDATE
UPDATEProveedores
Proveedores SET
SETemailpro="mailto:gil@unican.es"
emailpro="mailto:gil@unican.es"
WHERE
codigpro=P004
WHERE codigpro=P004

Borrar todos los proveedores de Santander.


DELETE
DELETEFROM
FROMProveedores
Proveedores
WHERE
localpro="Santander"
WHERE localpro="Santander"

Marta Zorrilla

31

IMD
IMD V
V :: SELECT
SELECT
Est dedicada a obtener informacin de la base de datos. El resultado de su
ejecucin, si existe, siempre tiene estructura de una tabla y los campos de sus filas
responden a la lista de seleccin. Tiene enormes posibilidades, lo que hace que su
sintaxis presente muchas variantes.
SELECT
SELECT[ [predicado
predicado] ] Lista_de_seleccin
Lista_de_seleccin
[INTO
[INTOOUTFILE
OUTFILE'nombre_fichero'
'nombre_fichero'opciones_exportacion
opciones_exportacion
| |INTO
INTODUMPFILE
DUMPFILEnombre_fichero]]
nombre_fichero]]
FROM
FROM[nombre_bd].lista_de_tablas
[nombre_bd].lista_de_tablas
[WHERE
[WHEREcondicin
condicin] ]
[GROUP
[GROUPBY
BYlista_campos_group_by]
lista_campos_group_by]
[HAVING
[HAVINGcondicin_group_by]
condicin_group_by]
[ORDER
[ORDERBY
BYcolum1
colum1{ {[ASC]
[ASC]| |DESC
DESC} }[,[,colum2
colum2{ {[ASC]
[ASC]| |DESC
DESC},},....
....] ]] ]
[LIMIT
[LIMIT[offset,]
[offset,]nro_filas]
nro_filas]

Marta Zorrilla

32

IMD
IMD VI
VI :: SELECT
SELECT
predicado: puede tomar uno de los siguientes valores: ALL, DISTINCT o DISTINCTROW. Si no especifica
ninguno, el valor predeterminado es ALL.
Lista_de_seleccin: es el conjunto de los elementos que sern aportados como respuesta. stos, pueden ser
expresiones y funciones separados por comas, aunque generalmente responden a una de las siguientes alternativas:
{ * | tabla.* | [tabla.]campo1 [AS alias1] [, [tabla.]campo2 [AS alias2] , ...] }
o * especifica que se seleccionan todos los campos de la tabla o tablas a las que se accede.
o tabla: es el nombre de la tabla que contiene los campos de la que se van a seleccionar los registros.
o campo1, campo2: son los nombres de los campos que contienen los datos que desea recuperar.
o alias1, alias2: Los nombres que se van a utilizar como encabezados de columnas en vez de los nombres de
columnas originales en tabla.
nombre_fichero: es el nombre del fichero que se crear en el servidor y donde se escribirn las filas de datos.
lista_de_tablas: representa el nombre de la tabla o las tablas que contienen los datos a los que se desea acceder.
base_datos_externa: es la ruta de acceso a la base de datos que contiene las tablas de la lista_de_tablas que no
estn en la base de datos activa.
condicin: es una expresin lgica con los criterios de seleccin de registros.
lista_campos_group_by: son los nombres de los campos que se van a utilizar para agrupar los registros.
condicin_group_by: son las condiciones que se imponen sobre el criterio de agrupamiento.
colum1, colum2: son nombres de elementos de la lista de seleccin o la posicin que ocupan en ella. ASC quiere
decir ordenacin ascendente (es la opcin por defecto) y DESC significa ordenacin descendente.
Limit permite especificar el nmero de filas a devolver comenzando en offset y hasta el nro_filas.
Marta Zorrilla

33

IMD
IMD VII
VII :: SELECT
SELECT
Con Operadores
Con Pred. BETWEEN... AND...
Con Pred. IN (lista_de_valores)
Con Pred. LIKE cadena_caracteres
Con Pred. NULL

Bsquedas
Bsquedas
Sencillas
Sencillas
Condiciones
Condiciones de
de
Comparacin
Comparacin
Bsquedas
Bsquedas
Cualificadas
Cualificadas

Condiciones
Condiciones de
de
Combinacin
Combinacin
Condiciones
Condiciones de
de
Subsentencia
Subsentencia

Simple
Mltiple
Autocombinacin
Combinacin
Externa
De Comparacin
Con Predicado IN
Con Predicado EXISTS

Marta Zorrilla

34

IMD
IMD VIII
VIII :: SELECT
SELECT

Funciones
Funciones de
de Grupo
Grupo
Funciones
Funciones de
de Fecha
Fecha

Agrupamiento
Agrupamiento de
de Datos
Datos

Condicin
Condicin de
de Agrupamiento
Agrupamiento

Ordenacin
Ordenacin del
del Resultado
Resultado
Guardar
Guardar Resultado
Resultado
en
en fichero
fichero
Unin
Unin de
de Sentencias
Sentencias

Marta Zorrilla

35

IMD
IMD IX
IX :: SELECT
SELECT
Bsquedas
Bsquedas Sencillas
Sencillas (Ejemplos)
(Ejemplos)

Obtener el contenido de la tabla Articulos.


SELECT
SELECT ** FROM
FROMArticulos
Articulos

Listar el nombre y el telfono de todos los Proveedores.


SELECT
SELECTnombrpro,
nombrpro,telefpro
telefpro FROM
FROMProveedores
Proveedores

Marta Zorrilla

36

IMD
IMD X
X :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Comparacin
Comparacin 11
(Ejemplos)
(Ejemplos)

Las condiciones de comparacin son expresiones lgicas que permiten comparar una
columna o expresin con otra columna, expresin o lista de columnas. Pueden adoptar
una de las formas siguientes:
exp
expoperador_de_comparacin
operador_de_comparacinexp
exp
exp
exp[NOT]
[NOT]BETWEEN
BETWEENexp
expAND
ANDexp
exp
exp
exp[NOT]
[NOT]IN
IN(lista
(listade
devalores)
valores)
campo
campo[NOT]
[NOT]LIKE
LIKE "cadena_de_caracteres"
"cadena_de_caracteres"
campo
campoIS
IS[NOT]
[NOT]NULL
NULL
Encontrar los artculos cuyo precio unitario sea superior a 180 y su stock sea
inferior o igual a 100.
SELECT
SELECT** FROM
FROMArticulos
Articulos
WHERE
WHEREpreunart
preunart>>180
180AND
ANDstockart
stockart<=
<=100
100

Marta Zorrilla

37

IMD
IMD XI:
XI: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Comparacin
Comparacin 22
(Ejemplos)
(Ejemplos)

Listar los artculos cuyo precio unitario est comprendido entre 180 y 300 .
SELECT
SELECT** FROM
FROMArticulos
Articulos
WHERE
WHEREpreunart
preunartBETWEEN
BETWEEN180
180AND
AND300
300

Hallar todos los proveedores de las ciudades de Santander, Madrid y Barcelona.


SELECT
SELECTcodigpro,
codigpro,nombrpro,
nombrpro,direcpro,
direcpro,cpostpro,
cpostpro,localpro
localproFROM
FROMProveedores
Proveedores
WHERE
WHERElocalpro
localproIN
IN("Santander",
("Santander","Madrid",
"Madrid","Barcelona")
"Barcelona")

Marta Zorrilla

38

IMD
IMD XII
XII :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Comparacin
Comparacin 33
(Ejemplos)
(Ejemplos)

Encontrar todos los proveedores cuyo primer apellido comience por la letra A.
SELECT
SELECTcodigpro,
codigpro,nombrpro,
nombrpro,direcpro,
direcpro,cpostpro,
cpostpro,localpro
localproFROM
FROMProveedores
Proveedores
WHERE
WHEREnombrpro
nombrproLIKE
LIKEA%
A%

Hallar todos los proveedores de los que no se tenga informacin sobre su correo
electrnico.
SELECT
SELECTcodigpro,
codigpro,nombrpro,
nombrpro,direcpro,
direcpro,cpostpro,
cpostpro,localpro,
localpro,telefpro
telefpro
FROM
FROMProveedores
Proveedores
WHERE
WHEREemailpro
emailproIS
ISNULL
NULL

Marta Zorrilla

39

IMD
IMD XIII
XIII :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Combinacin
Combinacin
Combinacin
Simple
(Ejemplo)
Combinacin Simple (Ejemplo)

Las bsquedas cualificadas son las que afectan a datos de ms de una tabla.
Una
Una Combinacin
Combinacin Simple
Simple es
es aquella
aquella en
en lala que
que lala condicin
condicin de
de lala clusula
clusula
FROM
FROM (o
(o WHERE)
WHERE) contiene
contiene una
una comparacin
comparacin de
de igualdad
igualdad entre
entre campos
campos
pertenecientes
pertenecientesaados
dostablas
tablasdistintas.
distintas.

Listar todos los proveedores a los que se ha efectuado algn pedido entre el 20/1/2002 y
el 15/9/2002.
SELECT
SELECTDISTINCT
DISTINCTProveedores.codigpro,
Proveedores.codigpro,nombrpro,
nombrpro,direcpro,
direcpro,localpro
localpro
FROM
FROMProveedores
ProveedoresINNER
INNERJOIN
JOINPedidos
Pedidos
ON
ONProveedores.codigpro
Proveedores.codigpro==Pedidos.codigpro
Pedidos.codigpro
WHERE
WHEREfechaped
fechapedBETWEEN
BETWEEN2002/01/20"
2002/01/20"AND
AND"2002/09/15"
"2002/09/15"

Marta Zorrilla

40

IMD
IMD XIV
XIV :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Combinacin
Combinacin
Combinacin
Simple
(Ejemplo.
Continuacin)
Combinacin Simple (Ejemplo. Continuacin)

SELECT
SELECT DISTINCT
DISTINCTProveedores.codigpro,
Proveedores.codigpro,nombrpro,
nombrpro,direcpro,
direcpro,localpro
localpro
FROM
FROMProveedores
Proveedores INNER
INNERJOIN
JOIN Pedidos
Pedidos
ON
ONProveedores.codigpro
Proveedores.codigpro==Pedidos.codigpro
Pedidos.codigpro
WHERE
WHEREfechaped
fechapedBETWEEN
BETWEEN20/01/2002
20/01/2002AND
AND15/09/2002
15/09/2002
Proveedores

Informacin
de proceso

Marta Zorrilla

codigpro cifpro
P001
P001
P001
P001
codigpro
P002
P001
P002
P001
P002
codigpro
P002
P002
P003
P003
P001
P003
P001
P003
P002
P003
P004
P004
P004
P004

nombrpro

A39184215 Bau Pi, Pablo


Proveedores
A39184215
Bau Pi, Pablo
A39184215 Bau Pi, Pablo
A39184215 Bau
Pi, Pablo
cifpro
nombrpro
A48162311
Zar Luna, Ana
Proveedores
A39184215 Zar
BauLuna,
Pi, Pablo
A48162311
Ana
A39184215
Bau
Pi,
Pablo
A48162311 Zar Luna, Ana
cifpro
nombrpro
A48162311 Zar
Zar
Luna, Ana
Ana
A48162311
Luna,
B28373212
Gras
Len,
Luz
B28373212
Len,
Luz
A39184215 Gras
Bau Pi,
Pablo
B28373212
Len,
Luz
A39184215 Gras
Bau Pi,
Pablo
B28373212
Gras
Len,
Luz
A48162311 Zar Luna, Ana
B28373212 Gras Len, Luz
B85392314 Gil Laso, Luis
B85392314 Gil Laso, Luis
B85392314 Gil Laso, Luis
B85392314 Gil Laso, Luis

Pedidos
...

numped

...
...
...
... .. .
...
.. .. ..
.. .. ..
........ .
.. .. ..
...
...
...
...
...
...
...

1
2
3
4
numped
1
12
43
numped
24
3
11
42
23
4
1
2
3
4

fechaped

codigpro

...

22/05/2002
P001
Pedidos
10/06/2002
P002
15/10/2002
P003
13/08/2002
P001
fechaped
codigpro
22/05/2002
P001
Pedidos
22/05/2002
10/06/2002 P001
P002
13/08/2002
P001
15/10/2002
P003
fechaped
10/06/2002
P002
13/08/2002 codigpro
P001
15/10/2002
P003
22/05/2002 P001
P001
22/05/2002
10/06/2002 P001
P002
13/08/2002
15/10/2002
P003
10/06/2002
P002
13/08/2002
P001
22/05/2002
P001
10/06/2002
P002
15/10/2002
P003
13/08/2002
P001

...
...
...
. .. .. .
...
......
......
........ .
.........
. .. .. .
. .. .. .
...
...
...
...
...

41

IMD
IMD XV
XV :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Combinacin
Combinacin
Combinacin
Mltiple
(Ejemplo)
Combinacin Mltiple (Ejemplo)

Una
UnaCombinacin
CombinacinMltiple
Mltiplees
esaquella
aquella
combinacin
combinacin que
que relaciona
relaciona varios
varios
campos
camposde
dems
msde
dedos
dostablas.
tablas.

Encontrar todos los artculos que han sido pedidos entre el 15/5/2002 y el 30/5/2002.
SELECT
SELECTDISTINCT
DISTINCTArticulos.codigart,
Articulos.codigart,descrart
descrart
FROM
FROMPedidos
PedidosINNER
INNERJOIN
JOIN
(Lineas
(Lineas INNER
INNERJOIN
JOINArticulos
ArticulosON
ONLineas.codigart
Lineas.codigart==Articulos.codigart)
Articulos.codigart)
ON
ONPedidos.numped
Pedidos.numped==Lineas.numped
Lineas.numped
WHERE
WHEREfechaped
fechapedBETWEEN
BETWEEN2002/05/15
2002/05/15AND
AND2002/05/30
2002/05/30

Marta Zorrilla

42

IMD
IMD XVI
XVI :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Combinacin
Combinacin
Autocombinacin
(Ejemplo)
Autocombinacin (Ejemplo)

Una
UnaAutocombinacin
Autocombinacines
esuna
unacombinacin
combinacinde
deuna
unatabla
tablacon
conella
ellamisma.
misma.

Localizar todos los pedidos que tienen varias lneas del mismo artculo.
SELECT
SELECTx.numped,
x.numped,x.numlin,
x.numlin,x.codigart
x.codigart
FROM
FROMLineas
Lineasx,x,Lineas
Lineasyy
WHERE
WHEREx.numped
x.numped ==y.numped
y.numped AND
AND x.numlin
x.numlin<>
<>y.numlin
y.numlin
AND
ANDx.codigart
x.codigart==y.codigart
y.codigart

Marta Zorrilla

43

IMD
IMD XVI
XVI :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Combinacin
Combinacin
Autocombinacin
(Ejemplo)
Autocombinacin (Ejemplo)

Localizar todos los pedidos que tienen varias lneas del mismo artculo.
SELECT
SELECT x.numped,
x.numped,x.numlin,
x.numlin,x.codigart
x.codigart
FROM
FROMLineas
Lineasx,x,Lineas
Lineasyy
WHERE
WHERE x.numped
x.numped ==y.numped
y.numped AND
AND x.numlin
x.numlin<>
<>y.numlin
y.numlin
AND
AND x.codigart
x.codigart==y.codigart
y.codigart
Informacin
de proceso

Marta Zorrilla

Acceso X

Acceso Y

Acceso X
Acceso X

Acceso Y
Acceso Y

44

IMD
IMD XVII
XVII :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Combinacin
Combinacin
Combinacin
Externa
(Ejemplo)
Combinacin Externa (Ejemplo)

Una
Una Combinacin
Combinacin Externa
Externa es
es aquella
aquella que
que da
da preferencia
preferencia aa una
una tabla
tabla
con
con respecto
respecto aa otra.
otra. As,
As, las
las filas
filas de
de lala tabla
tabla dominante
dominante sern
sern
seleccionadas
seleccionadasaunque
aunquelalacondicin
condicinde
deenlace
enlaceno
nose
sehaya
hayaverificado.
verificado.
Listar todos los proveedores indicando, en su caso, los que han recibido algn pedido.
SELECT
SELECTProveedores.codigpro,
Proveedores.codigpro,nombrpro,
nombrpro,Pedidos.numped
Pedidos.numped
FROM
FROMProveedores
ProveedoresLEFT
LEFTJOIN
JOINPedidos
Pedidos

Preferencia a la
tabla de la izquierda

ON
ON Proveedores.codigpro
Proveedores.codigpro==Pedidos.codigpro
Pedidos.codigpro

SELECT
SELECTProveedores.codigpro,
Proveedores.codigpro,nombrpro,
nombrpro,Pedidos.numped
Pedidos.numped
FROM
FROMPedidos
PedidosRIGHT
RIGHTJOIN
JOINProveedores
Proveedores
ON
ON Proveedores.codigpro
Proveedores.codigpro==Pedidos.codigpro
Pedidos.codigpro

Marta Zorrilla

Preferencia a la
tabla de la derecha

45

IMD
IMD XVIII
XVIII :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Subsentencias
Subsentencias
(Ejemplo
de
comparacin)
(Ejemplo de comparacin)
La
Lainstruccin
instruccinSELECT
SELECTpermite
permitecontrastar
contrastaruna
unaexpresin
expresinooun
uncampo
campocon
conelelresultado
resultado
de
otra
instruccin
(subsentencia)
SELECT.
A
este
contraste
se
le
llama
condicin
de otra instruccin (subsentencia) SELECT. A este contraste se le llama condicinde
de
subsentencia
subsentenciayylas
lasdos
dosinstrucciones
instruccionesse
sellaman
llamaninstrucciones
instruccionesimbricadas.
imbricadas.AAsu
suvez,
vez,lala
subsentencia
subsentenciapuede
puedeincluir
incluiren
ensu
sucondicin
condicinaaotra
otrasubsentencia
subsentenciayyas
assucesivamente.
sucesivamente.
Las
condiciones
de
subsentencia
pueden
adoptar
una
de
las
formas
siguientes:
Las condiciones de subsentencia pueden adoptar una de las formas siguientes:

exp
exp operador_de_comparacin
operador_de_comparacin{ALL
{ALL| |[ANY
[ANY| |SOME]
SOME]}} (instruccin
(instruccinSELECT)
SELECT)
exp
exp [NOT]
[NOT]IN
IN (instruccin
(instruccinSELECT)
SELECT)
campo
campo [NOT]
[NOT]EXISTS
EXISTS (instruccin
(instruccinSELECT)
SELECT)
Encontrar los artculos cuyo stock es mayor que toda cantidad pedida del mismo artculo.
SELECT
SELECTarticulos.codigart,
articulos.codigart,descrart,
descrart,stockart
stockartFROM
FROMArticulos
Articulos
WHERE
WHEREstockart
stockart>>ALL
ALL(SELECT
(SELECTunilin
unilin FROM
FROMLineas
Lineas
WHERE
WHEREArticulos.codigart
Articulos.codigart==Lineas.codigart)
Lineas.codigart)

Marta Zorrilla

46

IMD
IMD XIX
XIX :: SELECT
SELECT
Bsquedas
Bsquedas Cualificadas.
Cualificadas. Cond.
Cond. de
de Subsentencias
Subsentencias..
(Ejemplos
(Ejemplos con
con predicados
predicados IN
IN yy EXIST)
EXIST)

Listar los artculos que no han sido pedidos


entre el 24 de Septiembre y el 21 de
Noviembre de 2002.

SELECT
SELECTDISTINCT
DISTINCTArticulos.codigart,
Articulos.codigart,descrart
descrart FROM
FROMArticulos
Articulos
WHERE
WHEREArticulos.codigart
Articulos.codigartNOT
NOTIN
IN(SELECT
(SELECTLineas.codigart
Lineas.codigartFROM
FROMLineas,
Lineas,Pedidos
Pedidos
WHERE
WHEREPedidos.numped
Pedidos.numped==Lineas.numped
Lineas.numped
AND
ANDPedidos.fechaped
Pedidos.fechaped
BETWEEN
BETWEEN24/09/2002
24/09/2002AND
AND21/11/02)
21/11/02)
Encontrar los proveedores de Madrid a los que se les ha realizado algn pedido entre el
24/09/2002 y el 21/11/2002 .
SELECT
SELECTDISTINCT
DISTINCTProveedores.codigpro,
Proveedores.codigpro,nombrpro
nombrproFROM
FROMProveedores
Proveedores
WHERE
WHERE EXISTS
EXISTS ((SELECT
SELECT** FROM
FROMPedidos
Pedidos
WHERE
WHEREProveedores.codigpro
Proveedores.codigpro==Pedidos.codigpro
Pedidos.codigproAND
AND
fechaped
fechapedBETWEEN
BETWEEN2002/09/24
2002/09/24AND
AND2002/11/21)
2002/11/21)
AND
ANDlocalpro
localpro=="Madrid
"Madrid
Marta Zorrilla

47

IMD
IMD XX
XX :: SELECT
SELECT
Funciones
Funciones de
de grupo
grupo (Ejemplo)
(Ejemplo)

Con
Con las
las filas
filas de
de lala informacin
informacin de
de
proceso
proceso correspondiente
correspondiente aa una
una
instruccin
instruccin SELECT
SELECT se
se pueden
pueden
establecer
establecergrupos.
grupos.
En
En cada
cada uno
uno de
de estos
estos grupos,
grupos,
mediante
mediantelas
lasfunciones
funcionesde
degrupo,
grupo,se
se
pueden
puedenefectuar
efectuarciertos
ciertosclculos.
clculos.
Encontrar cuntos artculos hay
registrados, el mximo y el mnimo
precio unitario, el precio unitario
medio y la valoracin del almacn.

COUNT(*)
COUNT(*)

N
N de
de filas
filas que
que componen
componen
elelgrupo.
grupo.

COUNT(campo)
COUNT(campo)

N
N de
de filas
filas con
con valor
valor
asignado
al
campo
(nulos
asignado al campo (nulos
no
nocuentan).
cuentan).

SUM(exp)
SUM(exp)

Suma
Suma de
de valores
valores obtenidos
obtenidos
con
la
expresin
en
con la expresin en cada
cada
fila.
fila.

AVG(exp)
AVG(exp)
MAX(exp)
MAX(exp)

Media.
Media.
Mximo.
Mximo.

MIN(exp)
MIN(exp)
STDEV(exp)
STDEV(exp)

Mnimo.
Mnimo.
Desviacin
Desviacintpica.
tpica.

VAR(exp)
VAR(exp)

Varianza.
Varianza.

SELECT
SELECT COUNT(codigart)
COUNT(codigart)AS
ASCantidad,
Cantidad, MAX(preunart)
MAX(preunart)AS
ASMax,
Max,
MIN(preunart)
MIN(preunart)AS
ASMin,
Min, AVG(preunart)
AVG(preunart)AS
ASPrecio_medio,
Precio_medio,
SUM(preunart*stockart)
SUM(preunart*stockart)AS
ASValoracin
Valoracin
FROM
FROMArticulos
Articulos
Marta Zorrilla

48

IMD
IMD XXI
XXI :: SELECT
SELECT
Funciones
Funciones de
de fecha
fecha (Ejemplo)
(Ejemplo)

Los
Los datos
datos de
de tipo
tipo fecha
fecha son
son
almacenados
almacenadoscomo
comouna
unaunidad
unidadde
de
informacin.
informacin. Cuando
Cuando se
se necesita
necesita
trabajar
trabajar con
con componentes
componentes de
de una
una
fecha,
fecha,es
espreciso
precisoutilizar
utilizarfunciones
funciones
de
defecha.
fecha.

DAYOFMONTH(fecha)
DAYOFMONTH(fecha) Devuelve
Devuelveelelda
dade
demes
mes
de
defecha.
fecha.
MONTH
Devuelve
MONTH(fecha)
(fecha)
Devuelveelelmes
mesde
defecha.
fecha.
YEAR
Devuelve
YEAR(fecha)
(fecha)
Devuelveelelao
aode
defecha.
fecha.
WEEKDAY(fecha)
WEEKDAY(fecha) Devuelve
Devuelve elel da
da de
de lala
semana
semana correspondiente
correspondiente
aa fecha
(el
lunes,
fecha (el 00
lunes,
elel11 martes,
...).
martes, ...).

Listar da, mes y ao de cada pedido, as como el da de la semana al que


corresponden sus fechas.
SELECT
SELECTnumped,
numped,fechaped,
fechaped,
DAYOFMOUNTH(fechaped)
DAYOFMOUNTH(fechaped) as
as dia_mes,
dia_mes, MONTH(fechaped)
MONTH(fechaped) as
as mes,
mes,
YEAR(fechaped)
as
ao,
WEEKDAY(fechaped)
as
dia_sem
YEAR(fechaped) as ao, WEEKDAY(fechaped) as dia_sem
FROM
FROMPedidos
Pedidos

Marta Zorrilla

49

IMD
IMD XXII
XXII :: SELECT
SELECT
Agrupamiento
Agrupamiento de
de datos
datos (Ejemplo)
(Ejemplo)

La
La clusula
clusula GROUP
GROUP permite
permite formar
formar grupos
grupos con
con las
las filas
filas de
de datos
datos que
que
tengan
tenganvalores
valoresiguales
igualespara
paradeterminados
determinadoscampos.
campos.
La
La respuesta
respuesta tiene
tiene tantas
tantas filas
filas como
como grupos
grupos haya
haya establecido
establecido lala
instruccin.
instruccin.

Obtener el importe de cada pedido sin aplicar el IVA.


SELECT
SELECTnumped,
numped,SUM((preunilin
SUM((preunilin**unilin)
unilin)**(1-desculin/100))
(1-desculin/100))as
asImporte
Importe
FROM
FROMLineas
Lineas
GROUP
GROUPBY
BYnumped
numped

Marta Zorrilla

50

IMD
IMD XXIII
XXIII :: SELECT
SELECT
Agrupamiento
Agrupamiento de
de Datos.
Datos. Cond.
Cond. de
de agrupamiento
agrupamiento
(Ejemplo)
(Ejemplo)

Listar el importe, sin aplicar el IVA, de los pedidos que tienen ms de una lnea.
SELECT
SELECTnumped,
numped,SUM((preunilin
SUM((preunilin**unilin)
unilin)**(1-desculin/100))
(1-desculin/100))as
asImporte
Importe
FROM
FROMLineas
Lineas
GROUP
GROUPBY
BYnumped
numped
HAVING
HAVINGCOUNT(
COUNT(**))>>11

Marta Zorrilla

51

IMD
IMD XXIV
XXIV :: SELECT
SELECT
Ordenacin
Ordenacin del
del Resultado
Resultado (Ejemplo)
(Ejemplo)

[ORDER
[ORDERBY
BYcolum1
colum1{{[ASC]
[ASC]| |DESC
DESC}}[,[,colum2
colum2{{[ASC]
[ASC]| |DESC
DESC},},....
....] ]] ]
colum1,
colum1,colum2,
colum2,...:
...: son
sonnombres
nombres de
de elementos
elementos (campos,
(campos, expresiones
expresiones
oofunciones)
funciones)de
delalalista
listade
deseleccin
seleccinoolalaposicin
posicinque
queocupan
ocupanen
enella.
ella.
ASC:
ASC:quiere
quieredecir
decirordenacin
ordenacinascendente
ascendente(opcin
(opcinpor
pordefecto)
defecto)yyDESC
DESC
descendente.
descendente.
Listar los valores de los campos que componen el ndice de unicidad de la tabla
Lineas (numped, numlin), por orden decreciente de n de pedido y de n de lnea.
SELECT
SELECTnumped,
numped,numlin
numlin
FROM
FROMLineas
Lineas
ORDER
ORDERBY
BY11DESC,
DESC,22DESC
DESC

Marta Zorrilla

52

IMD
IMD XXV
XXV :: SELECT
SELECT
Guardar
Guardar Resultado
Resultado en
en un
un fichero
fichero (Ejemplo)
(Ejemplo)

INTO
INTOOUTFILE
OUTFILEfichero
ficheroopciones
opciones
Crea un fichero con nombre result.text con los datos del todos los proveedores. El
Select no permite guardar su resultado en tabla temporal.
SELECT
SELECT**
INTO
INTOOUTFILE
OUTFILEc:/tmp/result.text'
c:/tmp/result.text'
FIELDS
FIELDSTERMINATED
TERMINATEDBY
BY','','OPTIONALLY
OPTIONALLYENCLOSED
ENCLOSEDBY
BY'"''"'
LINES
LINESTERMINATED
TERMINATEDBY
BY'\n'
'\n'
FROM
FROMProveedores
Proveedores
Cargar el fichero en la tabla.
LOAD
LOADDATA
DATAINFILE
INFILE"c:/temp/proveedores.txt"
"c:/temp/proveedores.txt"
INTO
INTOTABLE
TABLEproveedores
proveedores
FIELDS
FIELDSTERMINATED
TERMINATEDBY
BY','','OPTIONALLY
OPTIONALLYENCLOSED
ENCLOSEDBY
BY'"'
'"'
Marta Zorrilla

53

IMD
IMD XXVI
XXVI :: SELECT
SELECT
Unin
Unin de
de Sentencias
Sentencias (Ejemplo)
(Ejemplo)

Permite
Permitecombinar
combinarlos
losresultados
resultadosde
dedos
dosooms
msconsultas.
consultas.Para
Paraello
ellose
se
requiere
requiereeleloperador
operadorUNION.
UNION.

Listar todos los proveedores de las tablas Proveedores y Proveedores_Anulados


ordenados por su cdigo.
SELECT
SELECTcodigpro,
codigpro,nombrpro,
nombrpro,localpro
localpro
FROM
FROMProveedores
Proveedores
UNION
UNION
SELECT
SELECTcodigp,
codigp,nombrp,
nombrp,localp
localp
FROM
FROMProveedores_Anulados
Proveedores_Anulados
ORDER
ORDERBY
BY11

Marta Zorrilla

54

Nuevas caractersticas en v. 5.0.x


Procedimientos y funciones almacenados.
MySQL follows the SQL:2003 syntax for stored procedures

Triggers
Cursors: de solo lectura y no scrolling
Vistas actualizables
Transacciones distribuidas

Marta Zorrilla

55

Procedimientos en MySQL
CREATE PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
type:

[ IN | OUT | INOUT ] param_name type

Any valid MySQL data type

characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body:
Marta Zorrilla

Valid SQL procedure statement


56

Ejemplo procedimiento
delimiter
delimiter//
//
CREATE
IN codigo
CREATEPROCEDURE
PROCEDUREprecio
precio((IN
codigochar(6),
char(6),OUT
OUTprecio
precio
decimal(8,2))
decimal(8,2))
BEGIN
BEGIN
SELECT
=codigo;
SELECTpreunart
preunartINTO
INTOprecio
precioFROM
FROMarticulos
articuloswhere
wherecodigart
codigart=codigo;
END;
END;
//
//
delimiter
delimiter;;
CALL
("0001",@valor);
CALLprecio
precio("0001",@valor);
SELECT
SELECT@valor;
@valor;
Marta Zorrilla

57

Ejemplo procedimiento
CREATE
_pedido(IN codigo
CREATEPROCEDURE
PROCEDUREcalcula
calcula_pedido(IN
codigochar(6),
char(6),OUT
OUTtotal
total
decimal(8,2),
decimal(8,2),OUT
OUTiva
ivadecimal(3,1))
decimal(3,1))
BEGIN
BEGIN
SELECT
preunlin*unilin)*(1-desculin/100)) into
SELECT SUM((
SUM((preunlin*unilin)*(1-desculin/100))
intototal
total
from
fromlineas
lineas
WHERE
=codigo
WHEREnumped
numped=codigo
group
;
groupby
bynumped
numped;
SELECT
SELECTivaped
ivapedinto
intoiva
ivafrom
frompedidos
pedidos
WHERE
=codigo;
WHEREnumped
numped=codigo;
END
END
////
call
_pedido (1,@total,@
iva);
callcalcula
calcula_pedido
(1,@total,@iva);
select
@total
iva/100));
select
@total++(@total
(@total**(@
(@iva/100));
Marta
Zorrilla

58

Funciones en MySQL
CREATE FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
func_parameter:
type:

param_name type

Any valid MySQL data type

characteristic: idem procedures


routine_body:

Marta Zorrilla

Valid SQL procedure statement

59

Ejemplo funcin
drop
dropfunction
functionififexists
existsshowdate
showdate
////
create
() returns
(20)
createfunction
functionshowdate
showdate()
returnsvarchar
varchar(20)
begin
begin
declare
declarel_date
l_datedate;
date;
set
setl_date
l_date==CURDATE();
CURDATE();
return
returnl_date;
l_date;
end
end
////
select
()
selectshowdate
showdate()
Marta Zorrilla

60

Vistas en MySQL
CREATE|ALTER [OR REPLACE] VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

WITH CHECK OPTION : verifica que cumple la condicin SELECT al


insertar o modificar, en la vista exclusivamente (local) o tambin las
vistas de las que depende (cascada)
Permite vistas actualizables
Tiene ciertas restricciones

Marta Zorrilla

61

Ejemplo vista
CREATE
CREATEVIEW
VIEWpedidos_totales
pedidos_totalesAS
AS
SELECT
SELECTnumped,
numped,SUM((preunlin*unilin)*(1-desculin/100))
SUM((preunlin*unilin)*(1-desculin/100))
from
fromlineas
lineas
group
groupby
bynumped;
numped;
----su
suuso
uso
SELECT
SELECT**FROM
FROMpedidos_totales
pedidos_totales

Marta Zorrilla

62

Triggers en MySQL
CREATE [DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event ON tbl_name
FOR EACH ROW trigger_stmt
Trigger_time: se activa BEFORE o AFTER de la instruccin que lo activ
Trigger_event : evento que activa el trigger: INSERT, UPDATE o
DELETE
OLD.col_name y NEW.col_name se refieren a los valores antes y
despus de la accin.
Permite actuar sobre otras tablas y sobre valores de la tabla afectada
pero no controlar reglas de negocio. Permite llamar a proc. almacenados
Marta Zorrilla

63

Ejemplo trigger
----CONTROL
CONTROLDE
DELOG.
LOG.SiSise
semodifica
modificaelelprecio
preciode
deun
unartculo
artculoapunto
apunto
cundo
cundoyyquin
quinloloha
hahecho
hechoen
enlalatabla
tablaauditoria_art.
auditoria_art.
CREATE
CREATETRIGGER
TRIGGERtrigger_auditoria_art
trigger_auditoria_artAFTER
AFTERUPDATE
UPDATEON
ONarticulos
articulos
FOR
FOREACH
EACHROW
ROW
BEGIN
BEGIN
INSERT
INSERTINTO
INTOauditoria_art
auditoria_art(codart,
(codart,precio_anterior,
precio_anterior,precio_actual,
precio_actual,
usuario,
usuario,fecha_modificacion)
fecha_modificacion)
VALUES
VALUES(OLD.codart,
(OLD.codart,OLD.preunart,
OLD.preunart,NEW.preunart,CURRENT_USER(),
NEW.preunart,CURRENT_USER(),
NOW()
NOW()););
END;
END;

Marta Zorrilla

64

----ACTUALIZACION
ACTUALIZACIONSOBRE
SOBRELA
LAPROPIA
PROPIATABLA
TABLA

Ejemplo trigger

mysql>
mysql>DELIMITER
DELIMITER////
mysql>
mysql>CREATE
CREATETABLE
TABLEventas
ventas(id
(idINT
INTNOT
NOTNULL
NULLAUTO_INCREMENT,
AUTO_INCREMENT,
->
->item
itemVARCHAR(10),
VARCHAR(10),
->
->valor
valorDECIMAL(9,2),
DECIMAL(9,2),
->
->comision
comisionDECIMAL(7,2),
DECIMAL(7,2),
->
->PRIMARY
PRIMARYKEY(id))
KEY(id))////
mysql>
mysql>CREATE
CREATEPROCEDURE
PROCEDUREcomision(valor
comision(valorDECIMAL(9,2))
DECIMAL(9,2))
->
->BEGIN
BEGIN
->
->SET
SET@comm
@comm:=
:=valor
valor//10;
10;
->
->END;
END;
->
->////
mysql>
mysql>CREATE
CREATETRIGGER
TRIGGERventas_comm
ventas_commBEFORE
BEFOREINSERT
INSERTON
ONventas
ventas
->
->FOR
FOREACH
EACHROW
ROW
->
->BEGIN
BEGIN
->
->CALL
CALLcomision(NEW.valor);
comision(NEW.valor);
->
->SET
SETNEW.comision
NEW.comision==@comm;
@comm;
->
->END;
END;
->
->////
Marta Zorrilla
mysql>
DELIMITER
DELIMITER;;
mysql>

65

Bibliografa
BASES DE DATOS:
BASES DE DATOS:
-Mora, E.; Zorrilla, M.; Daz de Entresotos, J. (2003). Iniciacin a las bases
-Mora, E.; Zorrilla, M.; Daz de Entresotos, J. (2003). Iniciacin a las bases
de datos con Access 2002. Daz de Santos. Madrid.
de datos con Access 2002. Daz de Santos. Madrid.
- Halpin, T. (2001). Information Modeling and Relational Databases. From
- Halpin, T. (2001). Information Modeling and Relational Databases. From
Conceptual Analysis to Logical Design. Morgan Haufmann Publishers.
Conceptual Analysis to Logical Design. Morgan Haufmann Publishers.
- Miguel, A. de; Piattini, M ; Marcos, E. (1999). Diseo de Bases de Datos
- Miguel, A. de; Piattini, M ; Marcos, E. (1999). Diseo de Bases de Datos
Relacionales. ra-ma.
Relacionales. ra-ma.
- Miguel, A. de; Piattini, M. (1999). Fundamentos y modelos de bases de
- Miguel, A. de; Piattini, M. (1999). Fundamentos y modelos de bases de
datos. ra-ma.
datos. ra-ma.
-Silberschatz, A.; Korth, H. F.; Sudarshan, S. (2002). Fundamentos de bases
-Silberschatz, A.; Korth, H. F.; Sudarshan, S. (2002). Fundamentos de bases
de datos. Mc. Graw Hill. Madrid.
de datos. Mc. Graw Hill. Madrid.
MySQL y PHP
MySQL y PHP
- http://dev.mysql.com/
- http://dev.mysql.com/
- Cobo, A. Gmez, P.; Prez, D.; Rocha, R. PHP y MySQL. Tecnologas para
- Cobo, A. Gmez, P.; Prez, D.; Rocha, R. PHP y MySQL. Tecnologas para
el desarrollo de Aplicaciones Web.
el desarrollo de Aplicaciones Web.
66

También podría gustarte