Sistemas Gestores De Bases De Datos

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Sistemas Gestores De Bases De Datos as PDF for free.

More details

  • Words: 26,304
  • Pages: 206
Profesor: Rafael Lozano Luján

INTRODUCCIÓN A LOS SISTEMAS DE INFORMACIÓN Y A LAS BASES DE DATOS . 7 Concepto de Información ................................................................................................. 7 Sistema de Información.................................................................................................... 7 Aplicación de las TIC a los SI......................................................................................... 10 De los sistemas tradicionales de ficheros a las bases de datos .................................... 11 Introducción a las Bases de Datos ................................................................................. 11 Ventajas e inconvenientes de las Bases de Datos frete a los ficheros clásicos............ 12 Características de las Bases de Datos .......................................................................... 13 Visiones de los datos en las bases de datos ................................................................. 15 Bases de datos y Sistemas de Gestión de bases de datos ........................................... 17 Principales funciones de un SGBD ................................................................................ 18 ! " ! # ! $ ! # ! $ ! % $ Componentes de un SGBD ............................................................................................ 19

REPRESENTACIÓN DE PROBLEMAS DEL MUNDO REAL. LOS MODELOS DE DATOS ........................................................................................................................ 22 Los problemas del mundo real ....................................................................................... 22 & ' ! ( # ! # ' ( ) # ' * Los Modelos de Datos.................................................................................................... 26 ' + & + & , ' -

EL MODELO ENTIDAD - INTERRELACIÓN ....................................................... 30 Introducción .................................................................................................................... 30 Estática del Modelo Entidad – Interrelación ................................................................... 30 ($ ! ($ (* Semántica de las interrelaciones.................................................................................... 34 % # (* # . / " ! (0 Generalización y Herencia ............................................................................................. 36 & 1 2 ( Interrelaciones Exclusivas .............................................................................................. 39 Representación de las Restricciones en el ME-R .......................................................... 40 Dinámica del Modelo Entidad – Interrelación................................................................. 40

EL MODELO RELACIONAL .............................................................................. 41 Estructura del Modelo Relacional................................................................................... 42 / ) ' *( " ! " ! ** % ! *0 % 3 *0 Restricciones .................................................................................................................. 46 4 * * Los valores nulos en el modelo relacional ..................................................................... 48 % # 3 * Normalización de Relaciones ......................................................................................... 49 # " 0$ 5 ! 0( Las 12 reglas de Codd para los sistemas relacionales .................................................. 58

TRADUCCIÓN DEL MODELO ENTIDAD - INTERRELACIÓN AL MODELO RELACIONAL .............................................................................................................. 60 Preparación de los esquemas conceptuales.................................................................. 60 ! ' 6 # ! ' # $ Transformación de los esquemas conceptuales ............................................................ 62 7 " ! # 7 " ! # ! ( 7 " ! # ! 4 7 " ! # ! 4 4 8 7 " # 9 7 " ! # ! " .3 Eliminación de las relaciones jerárquicas ...................................................................... 70 Álgebra Relacional ......................................................................................................... 78 : # # 3 : # 3 * : # 3 0 : # 3

SQL ................................................................................................................ 88 Lenguaje estructurado de consultas SQL ...................................................................... 88 ; < & 1 Tipos de datos (ORACLE).............................................................................................. 89 Tipos de datos (MySQL)................................................................................................. 91 Operadores SQL ............................................................................................................ 92 : # = : # ! : # ! -( & 3 >? @ && -( Consultas simples .......................................................................................................... 94 & & %7 -* % -0 % -0 ! A BC # ! " % D ; -8 7 # ! AE F G H F G F G E F H F H E C -8 7 > 7D ? 7 # 1 A?C 7 # # ! & I -7 3 A ? @ &&C -: ! % : J $ Consultas sumarias ...................................................................................................... 100 % A @+ C $ $ % # A) K C $ $ ! 3 . $ $ % 3 A% : @ ? 7C $ K ? @ && / " $ ! " # A 7 ? % 7C $ ( Consultas agrupadas.................................................................................................... 103 % '6 2 # % ;)K ? $ 0 Subconsultas ................................................................................................................ 106 7 # ! ' AE F G H F G F G E F H F H E C $ 7 # 1 A?C $ 7 . A L 7 C $$ 7 " A) ? J / ) & & C $$ ' $$$ ' ;)K ? $$

(

Consultas multitabla ..................................................................................................... 113 % ' ! " $$* + 6 # # 1 $$* % ' $$0 M . $$0 Actualizaciones de Datos ............................................................................................. 118 ), " ? 7 $$ # ! & 7 $ + " ! @ )7 $ Lenguaje de definición de datos: DDL ......................................................................... 125 % ! ' % 7 ' $ 0 % ! % . $ % ! 3 % K N $ 8 ' F / 3 $ + " ! " ! ' ) & 7 7) & $( Seguridad SQL ............................................................................................................. 131 ) # 3 )?7 $ ($ 3 ! # 3 K: I $( Funciones SQL en Oracle ............................................................................................ 133 = $ (( " = $ (( " 4 $ (( # : @? / 7 @?% # " 4 > $ (( 3 ! $ (* : " $ (* Funciones SQL en MySQL........................................................................................... 134 $ (* = $( " 4 / 4 $( # ! $ (8 + " $(

MYSQL ........................................................................................................ 139 Introducción .................................................................................................................. 139 Instalación de MySQL en Windows.............................................................................. 139 % # ' ! ! $* " 5 $ *$ Instalación de MySQL en Linux.................................................................................... 142 ! ' ! ' $* % # ' ! ! @ ? L O& . $ *( Creación y uso de BD en MySQL................................................................................. 144 Creación de tablas........................................................................................................ 144 7# ' + / < & $ *8 ), < & + / < & $0 # . ' + / < & &: ) ) 7) $ 0* Optimize table, replace, set, lock tables y unlock tables .............................................. 155 Visualización de las tablas de una base de datos: show, describe y explain .............. 157

SQL PARA MYSQL. LENGUAJE DE MANIPULACIÓN DE DATOS. .................... 158 Introducción .................................................................................................................. 158 La sentencia SELECT .................................................................................................. 158 % & %7 $ 0% ? 7: $ % : + $ $ % D ; $ % : @ J $ ( % ;)K ? $ ( % : J $ * % & + 7 $ 0 ' % ) $

*

Consultas con condiciones de búsqueda..................................................................... 166 7 # ! $ 8 7 >% 7D ? P )? $ 8 7 # 1 >% ? $ 7 # # >% & I $ 7 3 >% ? @ && $ % # : # ) ? F: / ? : 7 $ Consultas Agrupadas ................................................................................................... 169 ! $8 ! %: @?7 $ 8$ K ? @ && " $8 7 " # 7? % 7 $8 ) # " : @ J $8 Subconsultas en MySQL .............................................................................................. 175 7 # ! ' AE F G H F G F G E F G F H E C $ 80 7 # 1 % ? $ 80 7 . % L 7 $8 7 " )?J $8 ' $ 88 ' ;)K ? $8 Consultas multitabla en MySQL ................................................................................... 178 M ' $ 8M: ? ! " $ M: ? 6 # # 1 $ M: ? ' $ $ M: ? '6 2 $ M: ? / . $ M: ? L 7 ? : # $ ( M: ? L 7 ? : 52 / 4 $ * M: ? 6 # # 1 $ 0 M: ? $ 0 Actualizaciones de datos.............................................................................................. 186 ? 7 $ " & 7 $ ) 5 ! @ )7 $

ADMINISTRACIÓN DE MYSQL ...................................................................... 190 Administración de tablas .............................................................................................. 190 + " ! ' ) & 7 7) & $' : 7) & $' : ) 7) ) $ -( Vistas ............................................................................................................................ 193 Administración de cuentas de usuario ......................................................................... 193 )?7 $ -* K: I $ -0 % , 7 ) D : $Copias de seguridad..................................................................................................... 196 % # + / < & @ + A' Q # C $ -8 # ! ' $ -8

HERRAMIENTAS GRÁFICAS DE MYSQL ........................................................ 198 MySQL Administrator ................................................................................................... 198 ! + / < & $" ! 3 % 3 K ' ) ! % . 3 $ ; 4 $ 3 & $

0

=# Q #

$ $

% MySQL Query Browser................................................................................................. 202 ! + / < & < / N MySQL Control Center ................................................................................................. 204

! " #

# "

"

$

#

"

%

" & & # "

'

(

) #

"

( #

$ * ( $

#

#

'

$

! #

$ R

#

# #

#

,

7

+

!

( "

"

! /

8

*&.+ ( % / #

%

.

(

# 1

! !

' (

( 0.0 (

#

.

#

#

2

&

.

!$

Elementos de un SI # # (

"

&.

& #

( .

#

( #

(

# -

# (

&.

#

$

#

Estructura de un SI 1 (

&. ( !

! !

#

# "

#

7

$ R

!

"

! /

$ #

(

$ # !

$

o o 1

% #

o o "%

%

*

+ (

* +

#

& !

o "

# *

$

#

+

*

o

+

o o o # ( *

)+

3 $ o /

! % %

o o "

*

#

+

$

!

! (

#

#

* %

+

" %

& # !

# * #

+

(

# +

% )! +

* *

(

*456

) +

! # %

7

$ R

!

)! &

"

! /

-

#

% #

(

# "%

$

(

*

+

#

*

!+ " $ & #

#

'

!

& $

#

#

' "

!

#

# +

*

) , "

%

( " (

(

!

# 00

! &. &

(

(

!

'. " #

&.

( (

(

$ &

.

1

(

*&.1+ " &.1

" &.1 (

&.

7

7 7 &.

7

(

(

# ( %

7 !

7 %

7

$ R

!

7

"

! /

&.

$

&

(

&. %

! # # #

#

"

(

" -

#

#!

( ( -

! % #

& !

# # (

# &.

( )

(

8

#

1

#

)

#

&.

" !

% 9

!

1

# !

! 7 (:

1

! #

#

7

$ R

.

!

!

( #

"

! /

!

$$

! 7 1 *

#

!

+

"

7

#

( 1

;

!

& # %

"

$ $ ! $

% !

#

#

$ $ 5 2 )

-

;

! &.

#

(

&

%

#

5 # (

( 1 (

'

5

'

51

#

7

$ R

!

"

! /

$

'

5 "

" '

( 5

#

# (

# )

51

"

#

$

$

5 #

#

!

7 &3;

*

#

5

( ( $

% 5 # 5 # #

5 2

( # +

%

5 " #

-

) &3;

; $

! ,

5 ( %

"

!

#

% +

!

! - 5 !

'% #

5

!

;

(

# #

;

# %

7

$ R

!

"

! /

$(

% # &

5 2

( #

.

!

5 ( #

# % $

5

#

< %

= (

($

7

7

*

(

# 1 ! +

( ( -

(

#

!

" #

# %

.

*

!

5

#

# ( #

$ o &

$

o & *

7

7

o &

+ (

o &

7

$ R

!

"

! /

$*

"

% #

/

5 , %

( #

)

!

# $

#

5 2 ( !

* .

7

+

(

% #

(

"

1

#

(

!

! (

" %

#

(

"%

# ,

$

0

5 "

# 2

# #

#

"

# ! >

*

+ # !

"

#

,

5 / 2 & #

! % # # #

% ! (

7

$ R

!

"

! /

"

#

$0

,

%

5 / #

"

(

"

!

#

#

# #

"

# #

" % *#

%

+ "

(

) #

( (

# *#

+ " #

( !

!

(

! )

*#

+ "

#

(

$ ?

(

!

? !

# ?

#

%

# #

"

#

! & $

2 #

!

!

# )

" %

! ! #

"

#

#

# (

( 2

( #

! %

7

$ R

!

&

"

! /

!

#

$

&

# #

= %

!

# #

# 7

#

# #

(

2

;

!$

! " # $ $ ! " &

3

;

! ! !

%

% 7

(

7

#

&

1 3

;

*&3; + 2

&3; (

$ # %

*!

+

=

"

=

. !

# #

7

$ R

!

"

! /

$8

&3;

Función de definición o descripción ) % !

" &3; * %

!

!

(

#

* +

+

!

#

Función de manipulación 2

# ( # (

(

$

& ; #

( *

(

+

! $

.

#

; =

( * = +

(

Función de Control "

!

&3;

%

# !

(

* !

7

$ R

!

+

"

! /

(

$

-

(

&3;

1++ 25 -

1+.+ 25 "

!

&3; #

! " # "

$ o

!

o

! !

#

$

# #

!

$

! #

(

!

1

& " *

+

1+' 25 = $

( #

o

% 8

o

&3; = $ o -

5 # (

o :

5

& #

= #

"

% )

7

$ R

!

"

! /

$-

'

=

#

%

# " #

( $ =

o

>;>

o

=

( " = 5

# & ( = $

(

!

1 $ o /

#

o / o .

(

5 "

7

(

! -

( '

(

" #

# # ( "

o 3

(

$

# (

o 3

(

o 3

(

o 3

(

(

# #

o .

# #

= # 1+3/25 " # )

&3;

$

7

$ R

!

"

! /

! "

o !

o

#

! #

o

%

#

o

#

o = ! o " ( ( 5 $ o 2

5 #

o 2

5 1 (

# o 2

7

$ R

!

(

"

! /

5 1

(

&3;

$

-

( % "

( ( " %

1

( # " #

2 "

# *

+

#

& #

2

=

*= + = (

#

=

= 9

" $

" (

! #

7

R

#

!

'

+

&

+

"

%

"

#

"

( "

(

!

" # "

La abstracción (

#

1

# (

( # "

(

4

#

5 " #

$

# ( -

( # (

*

(

# (

+

( &

#

#

( /

5 " 2 (+ (

"

*

# (

(

"&@2:

-1/'"@ " (

Representación de los problemas del mundo real

7

R

#

!

'

+

&

+

(

" # 1

! # 2

# (

# ( !

# (

"

" (

#

1

(

-

# #

( (

1

"&@2:

-1/'"@ "

# %

" " #

!

Análisis de los problemas % #

2

1 '

!3

&

$

# (

&

#

# (

#

7

R

#

#

"

!

'

+

&

+

*

8

#

!

: % ! ; # !" # # &

#

!

" " # " # -

$ )

" % #

"

(

( (

"&@2:

# "

#

' ' # # # & "

# #

7

R

#

!

'

+

&

+

0

5 "

( !

*

+

# (

!

)

( #

#

" #

" 8

#

#

&

%

(

# #

&

% (

(

8 * #

6 2

# (

+

! &

%

( % #

# # : # # ( #

% # # $ (

"

# !

"

( .78 '/

"

2 !

7

R

#

!

'

+

&

+

=

:

=

( -

$

2 !

#

! 2

# $ 2 " ! # % 2 % 2 (

"

! !

& =

# $ 0

5 :

# 4

5 1

$

#

5'

! ! # %

( ( # (

'

5 '

% $

# *

7

&3;

+ *

+ & '

&

5 &

&3; #

7

R

#

!

'

+

&

+

&3;

!

8

&3;

*

/

A

+

" " #

!

#

8

Submodelos de un MD $ 5 . # = $ >

" *

*

+

+ !

*

+

#

$ " #

/

$

# "% (

+

5

#

#

1 #

2

$ ( 1

5 '

(

5 ?

(

# (

Las restricciones de Integridad en los MD "

%

%

7

)

R

#

!

'

;

+

&

+

(

!

! #

! ( ;

= &3;

Los modelos de datos en el diseño de bases de datos /

#

) &3;

#

;

) !

&3;

&3; -

( !

$

! 1 &3;

#

(

* +

"

# % !

5 -

7

R

#

!

!

'

+

&

+

-

!

"

"

# &3;

# ) "

"

" =

" !

B .

-

B .

*="5/+

#

-

! ="5/

#

="5/ #

C

+

!

$ 5 2 +

# ! * +

(

5% * = +

( " ="5/

! (

(

="5/ &3; #

&

)

$ *

+ #

7

(R

+

9

!

(

Entidad " "

(

1 !

12'>/D !

12'>/

"%

$

)

5

% %

+

5

% %

2 % %

"A"=- 1/

Interrelación 9 % #

% #

1 !

12'>/

.;/> /: 8

E

F

E

!

"

/

D

7

(R

+

)

9

!

($

"

(

@

12'>/

/:

2

.;/>

(

; *

$

5 +

4

5 : -

G *

8

4*

+

+

8 #$

9

5:

G

%

# "

D$D 8

% D$: *

+ -

:$=

:$= @

12'>/

/:

"

.;/>

%

/

5" %

%

.;/> 12'>/

#$

! 1 ! 12'>/ & ' (% 8 )* + % " , ( (&

.;/>

"

# "

% -

%

# "

% #

%

#

% %

%

) 12'>/ 8 % 12'>/ !

12'>/

7

(R

+

9

!

(

"

!

#

*

+ !

#

* !

" #

.

.;/>

.;/>

" #

! #

!

*

B1.-5+ -

%

* #

B1. 5+ *

# B1.15+

@ !

.;/>

@

D$: :.

,

@-

,

@

#

@

&> .>

-

7

(R

+

9

!

((

"A"=- 1/ .;/> & ' (- .

&> .> & '(

! :.

Restricciones %

!

*

+

#

! "

* ="5/

+

% 1

.

* +

" ! %

%

# (

*

+

Cardinalidades de un tipo de entidad %

! %

& *D

!

*H D+ *D D+ *H

+

1 ! *D

+ .;/> D G *H + 12'>/ H D G *D+ *H+ *

# # !

12'>/ .;/>

/: 8 .;/>

12'>/ %

* + * +

+ :$=

*H +

12'>/

*D +

/:

.;/>

@

# &

!

%

#

%

7

(R

+

9

!

(*

+

Dependencia en existencia y en identificación # 2 %

*D D+ $

+

0

5 &

% #

*

+

% &

%

1 !

#

& :& .":'" %

2":'1 &

)

E"F %

D$: *D D+

.":'"

"0

+

*D +

& :&

2":'1

5 % )

# 1 !

# .;/>

: "A"=- 1/ #

* *%

)

(

% ($ + + &

E. F @

D$:

*D D+

.;/>

.

*D +

:

:

" 1.-

7

(R

+

"A"=- 1/

9

!

@

I:

"A"=- 1/

@"

@"

(0

" ="5/

% ( "&@2: "

#

* +

*

+

2 $ /

'

="5/

%

*

;

(

+

9 # 5 -

# J %

"

!

%

2 " !

'

/

9

2 "

( (

$ 2

7

(R

+

9

!

(

% !

#

%

" 1 ( % 0

#

#

2

(

0

( 2

(

0

-

( 2

( (

(

# (

2

% %

#

( (

% (

2

(

9

="5/$ 1; 1

( 2

8

*,

1+ 1

%

% 1

#

#

( -

2

-

"

;

(

(

3*

%

#

" 3*

% #

7

(R

+

9

(

!

(8

"

1/2

132

-"/&>:1

":,"/=" 1

DD

DD

% "&@2:

"&@2:

HD

>=;/"

1&2

HD

HD

HD

=2A"/


;1 '"/.1:1

1+2

"=-/"&1

-"/&>:1

DD

DD

"&@2:

"&@2:

HD

HD

HD

HD

-L; . 1

-/.<1 1

'/1;1A1 >/

"&'2 .1:'"

!

-/

-

&

% -/

%

(

"

" -

)

" -

) %

9

-

Las cardinalidades en la jerarquía %

7

(R

+

#

9

!

(

1 ! $ " (

! %

D

D (

% D ( & !

H

& !

H

# (

D (

"

* !

-

&

#

!

#

! ! -

%

%

# #

# D$:

/:*

*H D+ @

#

@

#

-/><"" >/

*D +

1/'K 2 > D$:

*D +

/:

7

(R

+

9

!

*H D+

-/><"" >/

(-

" ="5/ &

$ "

#

& !

# #

"

# "

"

MDCN6O

#

%

!

% %

* +

* +

* + % %

( %

*

# " ) !

#

!

# %

! * +8

="5/

="5/ % %

)

)

& ="5/

# " *

+

" *DPCH+ *DPQC+

7

(R

1; " * "

"1/ *

+

9

!

; 1

/

+ & >& 1:. + ->>:":

*

$

" )

NH

! #

" !

*

+

# ! !

#

!

$ $

%

5 "

! $

5 1) 9 *# 0

+

5"

8

5 *

.

+

#5

!

! (

*

#

+

' # ! !

!

2 *

+

1 ! !

#

1-/1

%

'

# !

( )

7

*R

+

*$

)

; 1

D

1

G

1

000

000

000

D

000

000

000

G

000

000

000

" ( # 12'>/ # : # 8 # *

" 12'>/ .

+8

*:

* #

+8

# +8 *

*

+8

+ + '$;$ . ;

;

%%%%%%%%%%

$ " , .

G6

)

2-= 2-

=

:

/89 ) %

% A

:

/

.

,

:

/

.

.

-

& &

/

&

,

"

)

9 8 * =

24

&

5

/ .

"

" 8 #

!

"

7

*R

+

*

*

!

+ 4

!

#

(

! 1

! '

# '

(

,

/

1 3

:R

:R

:R,

:R/

Dominio y Atributo 2 <


# (

8


! ' $

! ( '

S 0

-

# DC N6 ! !

DH

#

8

!

%

"

#

2

#

*

+

!

8 #

1D 1G

1

#

"

" #

2 5

* & '

! #

#

7

*R

+

*(

1

% 8

!

& '

!

#

8

!

& '

!

#

1

% ' !

E

(

F

#

Definición formal de relación "

$

;

5

& T*1 $ +U

5

5 8 " 0

&

1

5

TD G T*1 $< +U

5# 18 1 ! #

U <

#

#

! / $ /* T1 $ U

%

+ " & ="5/

<

-

#

1$ 12'>/*: +

+

)

$

%

10

2= :

$

(

%

.

$

2=

12'>/ %

% A

:

/

.

,

:

/

.

.

-

& &

7

*R

+

&

,

"

)

=

2-

**

2 #

!

Clases de relación # # (

$

*

5 1

*

+ % ! #

o /

$

5 "% % ! $ +

* % o <

* 5 & %

# &

5

+

!

&

#

# o .

5&

#

#

( E

F *

#

+

& ( 9

E

F

5 1 !

(

8

( 8

Claves 2 ! #

!

#

% ! # # 5 "

7

*R

+

2 $

#

*0

5 &

#

# &

0

/G

# /D

#

# #

!

#

%

#

#

#

% # #

(

!

"

% *

+

#

Restricciones inherentes 8 %

"

$

: # "

#

"

# # #

Restricciones semánticas %

%

& # # )

-

$ &

5 #

# *

7

*R

+

# +

*

#

8 # #

# #

8

5 = *

# +

" #

#

5 # $

5 &

/G *

+

# +

/D * #

#

# %

/G /G

#

/D %

#

"

#

#

1

# *

+

( $

5 " # % %

*

# + #

"

#

# 5 " #

# +

#

* +

* #

%

5 " #

*

#

# +

#

#

%

5 " # # +

*

#

#

#

#

%

!

1

%

% '0

! # ( #

7

*R

+

8

# #

*8

#

(

"

( $ ,

5

( (

#

* +

/

51 # 8

+

* # #

!

' #

(

#

# ' #

1 ! #

#

#

( (

Concepto de valor nulo &

#

)

(

%

#

# #

(

#

$ *

1)

+ # )

% #

!

8

1 "

# %

(

$ 5 &

&.@:2 > #

7

*R

+

"&@:2 > #

#

#

#

#

#

*

5 & #

"

#

)

(

!

% ="5/

8 G

&

#

% ( 1

% #

E

F

# %

# " !

%

*

)

;

+

!

) (

" )

$ . / 1

J

* 1

+

; #

8

"

( #

" * :

!

!

+

@

'! + &

"

1) + #

*1 #

#

)*+'& ) /89 )

G

7

*R

+

;/&$ ;/ $+/+

& +> $3)

9?98

+$9 )$/

/@

Las reglas de transformación del esquema conceptual al relacional se verán en el siguiente capítulo

*-

"

:

G4V44

:

66N6V

&? &

:

64G46

3

:

PQCQ6

/

3

,

4GGV6

;

3

,

664NN

,

CNQ6V

:

4GDQN G4V6N

<

(

X

W # S

. =

1

5W

DPPH

1

5W

DPCN

1

5W

DPCC

1

5W

DPPH

-

DPCN

;

"

DPCV

;

"

DPCV

>>

1 =-

DPCP

>>

1 =-

DPCP

# 8 ) 1

!

1

!

1

!

"

# ($

# #

#

# <

(

*

+ ( 1

) ( 1

!

% !

% (

! #

8

!

* # +

#

+ *

#

# *

#

+ " )$ A ! # &

%

# "

# !

7

*R

+

)

( )

!

%

0

&

!

)

)

(

="5/ # %

!

! &

# 8 %

#

Dependencias funcionales !

( !

2

$ 1

7

6 #

/ 6

7

1 & 6

7

6

#

/

7

$ 6 ###8 7 &

(

!

-

$

.;/>*

@

'!

.

+

-

! @

555Y '!

"

!

"

! "

! !

& ! 2

% % "

"

# 8

#

($

( )*

8

7

*R

+

0$

%

(

% ($

%

(

) . * +

& '(

& '(

'!

@

, :

" @

,

:

@

@

#

'

"% #

!

(

# + &

6$

69 6: 6;< &

7

6 6

7 6 &

%

#

6 ==8 7

$ -/"&'1=>* , @

'

@

:

@ ,

@

'! @

5555Y ,

%

"

:

@

:

#+

@

: ! #

#

$ @

:

@

ZZZY ,

@

" )

-

7

*R

+

$

0

@

:

@

5555Y "

:

$ @

555555Y "

&

: @ 2 5+

* + &

/*0 [ \+

%

$ 05555Y[ [5555Y\ [55955Y0 & #

\ [

#

0

$

0 555 555Y \ -

$

.;/>&*

!

@

"

- !+

*

!+ $

@ "

555Y " 555Y - !

1

"

@

5559555Y - !

@

@

- ! @

#

"

555 555Y - !

Reglas de normalización !

( 0

& !

( ( $ #

7

*R

+

0(

:

# (

"

( %

#

(

#

#

#

( -

;

5 ; / # >

9 &%:< / -

! #

* +$+ *: + ; HHHHD

HD9HG9HG

HHHH4

HG9HG9HG

PPP

HHHH6

HV9HG9HG

666

&

$ ,

; * PCQ

:

;

*

-

(

=

-

#

G

(

(

3

&

-

)

DH

#

-

/

+

HHGV HHG6 HH4C DHHG DHHV GHHD 6HHG

G4

%

-

:

+ *

# -

!

?

# '

=

&

*

GHHHH VHHHH CHHHH DHH GH 6HH 6H

H HG H H4 H HD NH NHH 4H 46

#

/ !

8 *

,:D+

,:D #

# * +$+ *: + ; HHHHD HHHHD HHHHD HHHH4 HHHH4 HHHH4 HHHH6

7

*R

HD9HG9HG HD9HG9HG HD9HG9HG HG9HG9HG HG9HG9HG HV9HG9HG HV9HG9HG

+

; * PCQ PCQ PCQ PPP PPP PPP 666

,

:

;

*

= = =

( ( (

#

+ *

( ( ( (

-

3 3 3 &

G G G G4 G G DH

:

-

) HHGV HHG6 HH4C DHHG DHHV GHHD 6HHG

+ # '

=

/ &

*

GHHHH VHHHH CHHHH DHH GH 6HH 6H

H HG H H4 H HD NH NHH 4H 46

0*

.

;!

>

9 &%;<

!

! ? -

$

-/"&'1=>* @ ,

,

@ @

:

@

:

'

#+

"

@

:

@

#

% :

@

555Y :

:

@

555Y

:

@

555Y '

$

@

:

@

555Y ,

@

@

:

@

555Y ,

@

#

, '

@

# "

-

# $, :

#

@

# :

-

@

,:G #

# ,:G$

# 5 : %

. # *

"

@

! #

+

#

#

#

5 &

; 1

(

5 & (

-

( # -/"&'1=> !

,:G " -/"&'1=>* &> .>*:

@ @

<

:

@

( # $ ,

:

@

,

'

@

#+

+

!

:

@ #

&> .> "

# %

7

*R

+

( &> .>

! -/"&'1=>

# #

%

#

00

#

%

&> .>

9

;"

>

9 &%@<

!

! ? -

$

=1'/. 2 1*

@

+

" # #

@

#

&

$ @

555Y

@

555Y 555Y ,:G # # #

(

555 555Y #

"

#

# % $ 5 :

. ( ;

5 2

# (

( =

5 "%

-

% # $ =1'/. 2 1* 2;. 1 .>:*

7

*R

+

@

+ +

0

#

=1'/. 2 1

,:4

%

#

& #

#

2;. 1 .]:

# =1'/. 2 1

,:4 " #

%

2;. 1 .]:

=1'/. 2 1 # 2;. 1 .]:

#

3

:&

%

1 ;3&2

>

! #

9 &%

<

!

&%: ! ? >

#

=1'/. 2 1* &

+

#

# <

$ %

" I

2

6 ###8 7 7 ###8 6 [

6 ^555Y 7 " $ A###8

1

% $ 555Y 555Y 555Y 555Y

< # "

# #

# # #

7

*R

+

08

=1'/. 2 1 ,:;

!

# $

=1'/. 2 1*

+

1 2=:>*

+ (

*=1'/. 2 1+

$

*

#

+

#

* *

+ A###8 #

+ ! *

#

#

+ +

* %

"

*1 2=:>+ *=1'/. 2 1+ # %

+ &

#

#

# 1 2=:>

=1'/. 2 1

#

% " 1 2=:>

%

)

5 ' % !

#

# !

*1 2=:>+ *

#

/

#

-

!

5 ' #

"

9

5

&

# 5

#

%

5 *

+ ( (

8 6

.

5

% *

#

( +

B

/

#

5 '

#

(

( C

$

(

5' *

+

7

*R

+

0

D

$

E

$

%

5 "

5 #

( #

F

$

*

5

+

$

5

% # (

!

) #

5 &

&3; (

% #

7

*R

+

0-

%

&

"

#

< (

="5/

"

" # #

-

# #

)9 &/)

# **)9 &/)+

-/'" 1/ & *

+

! $ 1 # ! 1

"

% #

*

,:D+ =

Eliminación de atributos múltiples $ ,'#)+-'./B )

/ .

'

0R7

!

2

%

2

9 :B %< *

7

C

#

/

? '

. /

? .

D B

:? " &

;? &

)

#

* % J

+

"

.;/>

% # .;/>

-/'" 1/5D %

12'>/ " !

12'>/ .;/>

.;/>

_

*)9 &/):

:$: *D +

.;/>

"0

*D +

:/

12'>/

@

Eliminación de atributos compuestos "

$ ,'#)+-'.0B ) !

7

0R7

!

2

%

#

$

? ? " -"/&>:1 "

*

#

!

" /

#

!

?"

:

; #

# # (

D G

5

-"/&>:1

D -"/&>:1

G

*)9 &/):! # 5

# 5

1

# # " #

#

$ " !

Transformación de los tipos de entidad '#)+-'./1 ) /

7

! ?

0R7

*

!

2

%

#

*

-

.;/>

!

$ .;/>*

+

12'>/*

+

Transformación de tipos de interrelación uno a uno $ '#)+-'0./1 C *

!

2

B

&

$

:? ;?

#

& :?

# #

;?

#

%

&

#

% & / / # D$D

1/'. 2 >

@

*D D+

*D D+

/:

.

1'>& <":'1&

@ @ @# @ @#

"

!$

1/'. 2 >*/

@#

7

0R7

#

1'>&@<":'1&*) +

!

2

%

#

@ @

+ @#

@

(

1

@#

!

1/'. 2 >*/ @

$ #

@#

@

@

+

-

$

! D$D *D D+

>: 2 '>/

*D D+

&:/

12'>;2&

@

@ )

"

!$ +

>: 2 '>/* 12'>;2&*

@

!

)

+

'#)+-'0.01 )

#:!

B :? " "

#

;? &

# & # #

-

7

0R7

!

2

%

#

*

R@ D$D *D D+

"=- "1 >

*H D+

:'

=1?2.:1

@

" $ "=- "1 >*

+

=1?2.:1* R@

+

"

!

$ +

"=- "1 >* =1?2.:1* R@

+

"=-5=1?* G>

+

'#)+-'0.21

:B : )

:

! B :? "

#

;? &

%

# # #

R@ D$D *H D+

"=- "1 >

:'

*H D+

=1?2.:1

@

@

" $

7

0R7

!

2

%

#

0

"=- "1 >*

G>

+

=1?2.:1* R@

@

"

+

!

$ +

"=- "1 >* =1?2.:1* R@

+

"=-5=1?* G>

(

@

+

Transformación de los tipos de interrelación uno a muchos. "

! $

'#)+-'.2./B

:B %

2

' )

#: !

2 2

' ?

2 2

? 2

' ?

$ !

D$D *TH`DU +

/"<.&'1

*D D+

:' @

"

#

" .'>/.1

@

$ +

" .'>/.1 * /"<.&'1* !

:

+

'#)+-'.2.0B

:B % 2 )

#:!

? !

7

0R7

!

? $

2

%

#

2

'

!

2 ? $ @ @ @# D$: *H D+

,1 '2/1

*H +

:/

@

@

1 ;1/a:

@ @ @

"

# ,1 '2/1*

@

1 ;1/a:*

@

,1 '51 ;*

@

#!

$ @

+

@#

@

@

@

#!+

+

Transformación de tipos de interrelación muchos a muchos .

!

#

$ '#)+-'.3B )

%B % #:!

? ! ? $ ?

! :$= *D +

>: 2 '>/

*D +

&:/

12'>;2&

@

@ )

"

7

0R7

!

#

2

%

#

$

8

>: 2 '>/* 12'>;L&*

+ !

@

)+ >:512'*

(

%

+

Transformaciones de tipos de interrelaciones n-arias "

# */'" 1/5V+ # #

& # $

#

231/

*D +

@

!

:$=$*D +

>: 2 '>/

*D +

&:/:

12'>;2&

@

@ )

!

$

>: 2 '>/*

+

12'>;L&*

!

@

231/*

#

>:512'5 23*

!

"

0R7

+ /'" 1/5V

%

7

+

"

!

2

%

#

)+

% # #

>

#

%

Transformación de tipos de interrelación reflexivas %#

#

"

# -

$ "

% % %

! "

%

" " *

/'" 1/5V+

$

"

)

" *

) )

+

#

*

+

$

@

*D +

:$=

:

>;A"'>

*D +

@

@

1

7

0R7

$

>;A"'>*

+

>;A5>;A* @

@

!

2

%

#

+

-

@ @

& !*

+ $

&

) #

% "

*

!

!

+$ >

>;A"'>* @

+

! & # # ! " *

!

>;A"'>*

+$

+

>;A5>;A* @

>

+

" # # " #

$

( (

"

( $

%

#

#

%

#

#

> #

"

# "

7

0R7

!

2

%

#

8

#

! #

1

#

'

) $

,'#)+-'.2

B ! . ?

2 *

9 ?

< " (

1 #

#

# 0

2 #

7

0R7

#

!

2

%

$

#

8$

! 1 % " " ! 5 :

* + #

"

# )

"

!

"

!

+

@

/"31 .>*

0R7

$

5

&" 1:>*

7

$

#

"/;. . 1*

#

@

2

%

8 %

#

#

5

+ 5

+

8

&2;<": .>:"&*

_

#

>

(

+ 1;1&'" .=.":'>* /"31@1;1&*

+ @

#

+

A )3>. &/1

:

(

:

(

(

2

A )3>) 4/1

:

(

:

(

(

2

&

(

#

$ %,

E

+ ,

#

%

# # # !

1 ! #

1

(

E

1

A )3>&8 91 2

% ( " $

!

:

(

%

:

#

(

(

%

#

(

1 #

! &" 1:> !

%

&" 1:>

# /"31 .>

!

-

/"31 .> !

" !

,'#)+-'.3

B . !

. ? 2 9

*

< ?

7

0R7

!

2

%

#

8(

9

< ? "

# #

# 1 ! #

#

+

*

#

#

1

#

" " !

! $

"

# "/;. . 1*

$

5

2 '.<>*

@

&2;<": .>:"&*

+ #

5

_

#

5

+

>

(

+ 1;1&'" .=.":'>* 1;1&@ 2 '* A )3>&8 91 2

7

0R7

!

2

%

#

+ @

# :

+ (

:

(

(

8*

&

(

#

$ "

&2;<": .>:"& + !

#

%

# #

%

*

#

#

#

* + -

# # 2 '.<> #

2 '.<>

,'#)+-'.4?

*B

.

. ? B

:? &

%

#

! ;? &

# !

* /

!

2 . ! .

2

? " # % #

#

,

7

0R7

!

#

!

2

%

#

! $

80

"

# "/;. . 1*

$

5

2 '.<>*

+

@

&" 1:>*

#

>

/"31 .>*

+ 5

(

>

(

&2;<": .>:"&*

+ 5

_

+

#

>

(

+ 1;1&'" .=.":'>* 1;1&@ /"31*

@

A )3>&8 91 &

+ # :

+ (

:

(

(

(

2 #

$ & #

2 '.<> % #

#

7

0R7

!

2

%

#

8

# &" 1:>

# #

! #

.

(

1;1&@/"31

7

0R7

!

2

%

#

88

'

( )

" *

# + " #

(

#

$

. ; =

& >

*; + # *;

>*;

+

%

$

+Z;

'

# *

%

+

* % # # /

$

=

(

3 *

= #

( #

3 $

# #

&

/

/b

>

2 >

7

R

+

S

'

/

/b

1

8

( >D > *

> %

>

$

*>D* / + + + Z /b

*DPQG+ # N

N *DPQH+5 *DPQG+ 1 />.0 *DPQN+

5 > >

5

> 1'" *DPCN+ #

5

$ $ $ # 1

# #

#

$

# * + # #

# -

!

# 8

> #

$

2 ; "

!

1

#

;:,

*

7

R

#

1'" *DPP4++ 8

+

S

'

( %

8-

Operadores primitivos 8;/)$ . 8 ( &

$

/ *1+

%

1

$ / *1+ Z / * 1D $

D 1G$

G

1 $

+

c

/

!

$ c Z T + DZD

< Y9< ∈

Z ^
*σ+

/

%

*

+ % (

c 1

12'>/ 12'>/ :

&

:

A

:

,

"

& /

. /

)

2-

. .

-

"

σ

HI

.

)

/89 J1

-

:

=

2-<

)2

:

.

&

,

"

)

2-

/

.

"

)

2-<

,

$ &

θ

*Y ^ Z %

$ 1 θ 1

7

R

1 θ

+

S

'

Y Y _+

!

E[F *1: + EHF *>/+ E:>F *:>'+ " $

*

/

σ c * %

b

/+

$

bcZT ∈

c9 * +ZE

/

FU

b⇔ #

σ



5D

$

σ Dc+ D

G

E[F σ

D

G

-

*π+

8

π

#

*12'>/+

: : "

)

. =. 0⊂1

K

%

/=

%

0

0≠φ π

/

$

π%c b

/b *0+

% 0

b*/b+ Z T *0+ 9 0 ⊂ 1U

7

R

+

S

'

$

"

b

b^

b !

$

b ^

#

0

/

#

/

8 # ( * %

+ 1 #

3$;/)$ .

*

+

%

#

& /D *1D $

*1G + Z

*1D +

& D+

/G *1G $

G+

D

G

$ ∀ 1D ∃ 1G 9 /D

*1D +Z

*1G + d ∀ 1G ∃ 1D 9

/G

# * # +

# * >

#

+

$ &

(

# & /D

/G

& 8

& " .'>/ D$ " .'>/ *:

:

.

+

" .'>/D

12'>/ :

: A ,

&

: " .

&

. )

/ 2-

. =

+$9 ) : [

7

R

+

S

'

:

>

: :

"/ . 2 :[

(

&

. 8

-

=

182 D

/D % G *

G

(

D

/G

+ 1

$

12'>/

" .'>/

:

: ,

&

. / . 2=

:

,

" .

&

)

:

: -

. "/ .

:

[

: .

&

2 :[ =

12'>/ 2 " .'>/ :

: , ,

&

: " . : :

& [

,

. / 2"/ . 2 :[

)

$ &

. =

D $

G

/D

/G

/D 2 /G / */ #

+ cZT 9

%

/D

/G

$



D





G

U

* 5 + D

G

/D

%

/G

(

D

G 1 12'>/

" .'>/

12'>/ : , ,

& &

7

R

" .'>/ : : " ) .

+

. / 2-

S

: .

[ =

'

&

: : : .

. "/ . 2 :[ -

=

(

12'>/ 5 " .'>/ : , ,

&

: : "

,

. / 2-

)

.

$ &

/D

/G

$ /D 5 /G / */ #

+

/D

/G

% ∈

cZT 9

D





G

U

*

#

"

102

(

D

G

% *

D

#

!

%

G

%

+ 1

( &> .>

&> .> & D G

.;/> .;/>

" =

; = 3

/

+ < # -<

!

G6 6N

;& ; &? &

A

1

A

1

&

. &$ 0 $3) & D D D G G G

" " " = = =

; = = = 3 3 3

,

+ < # < # < # -< -< -<

! ! !

/ G6 G6 G6 6N 6N 6N

$ &

; &? & ;& ; &? &

D

/D %/G DI G

/

;&

A

1

A A

1 1

A

1

&

&

G

/D D I

/G G

/D I

G

$ 1D 2 1G

Operadores Derivados #

%

#

,

$ &

/

7

D

/D %/G DI G

R

+

S

'

G D

/G

$ 1D 2 1G

*

Operadores Derivados #

%

#

&

%

/D*1DD 1DG

1D

1D +

/G*1GD 1GG

1G G+

/D

/G

1G θ

1D θ 1G " E[F$ 1D D θ 1G D [ 1D G θ 1G G 9 F! <

$ Fθ

% , /G *1G+

$

θ

/D *1D+ $

F!

/D

/G

Sθ D D

I

I

/

G

D

$

G

1 2 1G %

c

^Z *

#

D

%

G

e+

"

( 1

12'>/ ;

&

7

.;/> A ,

&

R

$

; : " ) .

+

$ / 2-

S

'

/ .

;& =

; &?

A

1

A

1

&

0

&

/89 ) L $3) *12'>/ ;

Z .;/>

; : : .

A A &

+ $

/ / -

.

. .

;& &? & ;

=

1 1

*∩+ /D

/G %

(

1

$ 12'>/ ; &

; , : , " ) & .

$ / 2-

/89 ) ∩

. =

; : : .

$ "/ . 2 :[ -

;

;

$

. ,

-

$ &

/D

=

+$9 )

&

*

" .'>/ ; [ &

$ /D ∩ /G #

/G ∈

cZT 9

D

d



= /D

/G /

+

%

$

GU

Operadores relacionales con valores nulos )

!

"

#

# #

#

#

8

# #

(

< # &

0

"

# 2

9

< # !

7

R

+

S

'

( !

#

12'>/ ^&

"

)

2 -

Y

.;/>8

12'>/ .;/>

-

# ( %

#

! " %

(

9 (

<

* 12'>/ ;

.;/> A ,

&

9e+

&

; : " ) .

$ / 2-

/ .

;& ; &? &

=

A

1

A

1

&

/89 ) L $3) *12'>/ ; A A ,

& &

7

R

Z .;/>

; : : " ) .

+

+

$ / / 2-

S

'

. .

;& &? & =

1 1

;

8

*

+

&? (

: &?

#

(

&? &?

Historia &? E

$

DPQH

", F F *" + .;= ( ( &"?2" * ' G> ! &? *& ? + $ &"?2" " DPQP '

! #

+ &"?2"

H &?

H

, GH

)

&?

#!

*

+ "

*

DPPG

1:&.

( (

&?

!

" 1:&.5&?

.&> +

&? PG 1:&.

&?

! )

&?

SQL como lenguaje estructurado "

&? 4f

! *

-

g+ &?

! 2

!

!

#

"

&> &? & *

&? +

2 $ : &?

7

8R < &

%:

"

(

1 *H5:+ *D5:+ 1

&?

E

F

(

!

" >

#

#

h1

$

b #

$ DG4 #

$h 9

#

9

*

#

"

&

>

9

.

1/G* +

&? )

< " VHHH

:<1/

g+

#

!

<1/

b

1/G* +

!

% % D &

<

)

%

"

%

D

VHHH

D

VHHH

D

G3

D

GHHH

D

GHHH

D

V3

D

V3

)

!

VHHH

& #

>:3 1/* +

" G HHH D

:

G3

"

% )

!

)

1/* + "

! )

>;

%

)

G HHH D

"

! D

2 # 1/ " )

:

>;

%

V3

2 #

7

8R < &

-

)

:

:2=;"/*

%

V

:

+

* !

+ " D 4C 5CV DGQ

#

,

9

: 1/ " 1

3

, VQDG ;

1'" '.="&'1=-*

+

1)

#

A 4D PPPP 1

!

D

< ! 5

&" >: -

.:'"/<1 ["1/* + =>:'

'>

#

H

-

.:"/<1 1[* + =>:' ;

) * G+

P

! *

'>

P

#

H

G+

/1W* +

"

)

%

D

GHHH

D

G3

D

V3

D

V3

G HHH

>:3 /1W

G3 2

; >;

"

)

%

V3 (

;,. " -

.9>

% #

)

,

% %

/>W.

%

2/>W. M* +O (

* +

&? 1:&.5&? 9

8R < &

! " VHHH

)

>

%

(

> #

/;.$:.7 1/1 '"/* + 1/* + 1/1 '"/ <1/[.:3* + 1/ <1/[.:3* + :1'.>:1 1/1 '"/* + :1'.>:1 1/* + : 1/* + :1'.>:1 1/1 '"/ <1/[.:3* + :1'.>:1 1/ <1/[.:3* + : 1/ <1/[.:3* + :2="/. * + " .=1 * +

7

"

V3

$ 9 1/* + <1/ :

1/* + 1/* +

:<1/

1/G* +

:2=;"/*

+

-

.:'"3"/ .:' &=1 .:' , >1'* + >2; " -/" .&.>: /"1

:2;"/*4C+

:2=;"/

!

" = &?

#

#

h1

$

b #

$ DG4 #

$E

#

5

5

*

F

#

g+

#

(

1 &? # *

= &?

-

&

9

.

:

'.:[.:'M* +O &=1 .:'M* +O =" .2=.:'M* +O .:'M* +O .:'"3"/M* +O ;.3.:'M* +O

" " "

D

, >1'M*

" G66+

+O

>2; "M* +O /"1 M* +O " .=1 M* +O :2="/. M* +O 1/* + <1/

1/* +

'.:[; >; ; >; =" .2=; >; >:3; >; '.:['"0' '"0' =" .2='"0' >:3'"0' ,

1'" '.=" 1'"'.=" '.="&'1=-M* +O ["1/

7

8R < &

% !

,

) ) )

" " : : :

# < < < < < < , ==5 $

) # ; >; ; >; ; >; ) # '"0' '"0' '"0'

; >;

'"0'

11115

$

, 1111== , 1111== 1)

$ $

$ $ 1111

5DGC DGQ 54GQNC 4GQNQ 5C4CCNHC C4CCNHQ 5GDVQVC4NVC GDVQVC4NVQ 5GN4 GN4 B D MiD DQ6VPV4"54C i4 VHGCG4VN"54CO MiG GG6HQ4"54HC iD QPQNP4D"54HCO MiG GG6HQ4"54HC iD QPQNP4D"54HCO D G66

:2 :2 :2

H H H

:2

H

:2

H

:2

H

:2

H

:2

H

:2

H

H

:2

H

G66

H G66 H N6646 H GGV 5D H G4G 5D H G66 H N6646 H GGV 5D H G4G 5D DHHH5HD5HD PPP5DG5 4D 5C4C$6P$6P C4C$6P$6P DHHH5HD5HD HH$HH$HH PPPP5DG54D G4$6P$6P DPQHHDHDHHHHHH ) GH4Q DPHH GD66

:2 H :2 H :2 H :2 H :2 H :2 H :2 H :2 H :2 HHHH5HH5HH

:2 HHHH5HH5HH HH$HH$HH :2 :2

HHHH

-$

[ >

= &?

# [

( ! ( #

1

$

(

$

#

*

+$

(

#

$

Operadores aritméticos /

# .

I 5 e 9

> > > >

#

D D D D

IG BG eG 9G

D D D D D D D

ZG j Z G D ^Y G D dZ G YG ^G YZ G ^Z G .: *D G+ M'/2"O

Operadores lógicos /

#

.% Z j Z ^Y dZ Y ^ YZ ^Z .: */&+ ^ *

Y 1:[ ^ > +

*#

+

. . = = = = . Y &>=" ^

Y *

+

DH YZ M'/2"O

1:[

*D G 4 DH+

DH ^Z M'/2"O

1

*D G 4 DH+

Z j Z ^ ^Z Y YZ >/ ^

Y1

^ *

Y + Z

j Z

^Z Y YZ

;""'W"": %1:

"0.&'& * >

7

8R < &

^ +

> % " YZ %1: Y & ^

( # ^Z

^ 1:

DH ;"'W"": D 1: DHH

Y "0.&'&* &" " ' D ,/>= 21 +

-

.X" .& :2 .& :>':2 :>'

" & & :

:

1:

1:

>/

>/

" =&5 >& "%

.X"

h b .X" h kb D.& :2 D .& :>':2 :>' "0.&'&g :>' ;"'W"": :>'.: :>'Z DZD 1: G .& :2 DZD >/ G .& :2

#

e

l

$

k$

:

*

∞+ " = &?

H

e

@$ 2 "

$ '/2"

h

.X" h @

h

b .X" h

h

b .X" h

h

b .X" h

h

k k @b

kb *

h

b+

kb k

b .X" h

b*

k

h

b

h b+

b

Operador de concatenación /

* .%

>

+

.

mm

h >

b mm h

b MbA

bO

# #

$

DH mm GH Z hDHGHb "

1&'.:3 ( #

#

#

#

La ausencia de valor: NULL '

#

*

+ # :2

1'"g+ :2

7

:2 .& :>':2

8R < &

-

# :2 *:2=;"/ <1/

1 ! 2

1/G

:2 #

:2

(

.&

-(

"

= *

=

+ " )

=

&? ;

$ &" " ' .:&"/' -

" "'" 2- 1'"

#

#

$

9 M; 1DDD 1DDG 1DD4 1DDV 1DD6 1DDN 1DDQ 1DDC 1DDP

9

+

$ 6H DG6 GHH Q6 DHH DVH DG6 D6H GHH

D 4 6 6 D Q 4 G P

D69DG9GHH4 DQ9DG9GHH4 DQ9DG9GHH4 DC9DG9GHH4 DP9DG9GHH4 GH9DG9GHH4 GD9DG9GHH4 GD9DG9GHH4 GG9DG9GHH4

+ H H H D G D6 H 4 H

& M+

; A A A # 1 1 =

D G 4 6 Q P

/ 3 = 1 ;

( ( ! (& ( : ; & >

+ 9= D 1# - DH -( = DG 9, C 1# A 00... G -( = D

*

&* DVHHG G4HH4 VDHHG DDHHV GDHHV DCHHQ

A & # ( # 3

La sentencia SELECT &" " '

* 2

&" " '

*

%

+

+

$

SELECT ítems de selección FROM tablas WHERE condición GROUP BY agrupación HAVING condición agrupada ORDER BY ordenación; '

%

#

# .

&9$

&" " ' $

,/>= 1

! !

7

8R < &

-*

*E F+

! ( •

2

!

$

2 ,/>= !

&?

#

> ( •

2



2

% $ '1; 1

> 2=:1 #

%

&?

#

&?

#

% &? ) '$ " %

%

!

"

&? &

&" " '

#

#

& &?

( # #

(

&?

(

#

#! " 9

3 #

#

Consultas sencillas &? SELECT dni, nombre, dirección FROM Cliente

Columnas calculadas # #

&? # 9 %

%

&? #

# &? &? ( -

#

SELECT numero, importe, importe – (importe * dto) FROM Factura; / " #

7

8R < &

-0

-

$

SELECT numero, MONTH(fecha), YEAR(fecha) FROM Factura; ! )

Selección de todas las columnas (Select *) 1# &?

#

#

(

(

*e+

#

" -

SELECT * FROM Cliente; !

'

SELECT Cliente.* FROM Cliente; 1 )

!

! $

-

SELECT *, dni FROM Cliente; !

Filas duplicadas &

# &

# -

SELECT dni FROM Factura; 1 3 5 5 1 7 3 2 9 1

#

# +$.9$;&9

&" " '

& 1 !

SELECT DISTINCT dni FROM Factura; /

*

+

1 3

7

8R < &

-

5 7 2 9 &

(

.&'.: ' #

-

) SELECT DISTINCT dni, importe FROM Factura; " 1 3 5 5 1 7 3 2 9

$ 50 125 200 75 100 140 125 150 200 # #

'

1

% !

Selección de fila. Cláusula WHERE 3 W "/" -

(

#

" #

1:

>/ -

DHH n

SELECT * FROM Factura WHERE importe > 100; & %

# :2 W "/"

&? W "/" 1

%

Test de comparación (=, <>, <, <=, >, >=) " &

%

( &?

&? # % %

!

7

8R < &

-

-8

SELECT numero, dni FROM Factura WHERE importe > 100; /

DHH

n SELECT * FROM Factura WHERE dto = 0 OR importe < 200; H

GHH

> SELECT numero, importe – (importe * dto), fecha, MONTHNAME(fecha) FROM Factura WHERE importe – (importe * dto) < 150 AND MONTH(fecha) = 3; "

/

' D6H

' ' #

4

# (

Test de rango: BETWEEN &? "

#

#

.

%

#

&?

%

%

%

% -

SELECT numero, dni, importe, fecha FROM Factura WHERE fecha BETWEEN ‘01/01/2004’ AND ‘31/01/2004’; D GHHV GHHV

4D

GHHV !

$

SELECT numero, dni, importe, fecha FROM Factura WHERE fecha >= ‘01/01/2004’ AND fecha <= ‘31/01/2004’; -

#

#

%

;"'W"":

%

%

%

%

Test de pertenencia a conjunto (IN) > #

#

#

*.:+ "% -

SELECT * FROM Factura WHERE dto IN (0, 1, 2);

7

8R < &

-

H D &

!

G

# SELECT * FROM Factura WHERE dto = 0 OR dto = 1 OR dto = 2; '

# #

#

# :>' -

SELECT * FROM Factura WHERE dni NOT IN( 2, 3, 5 ); "

#

( !

G 4

6

Test de correspondencia con patrón. LIKE 1

# &" " ' &

#

.X" 1 ( % %

! -

SELECT * FROM Cliente WHERE nombre LIKE ‘J%’; # #

!

(

hAb

(

h&b

" SELECT * FROM Cliente WHERE poblacion LIKE ‘S%a’; # #

!

" %

%

h b !

' :>'

% .X" -

%

SELECT * FROM Cliente WHERE nombre NOT LIKE ‘PE%’; !

h-"b

Test de valor nulo (IS NULL) 1 #

% !

#

:2

&?

#

" SELECT * FROM Factura WHERE dto IS NULL; # #

:2

*.& :>':2

+

-

SELECT * FROM Cliente WHERE direccion IS NOT NULL;

7

8R < &

--

Ordenación de los resultados de una consulta. Cláusula ORDER BY 1 & &? >/ "/ ;[

&" " '

>/ "/ ;[ -

SELECT * FROM Cliente ORDER BY apellidos, nombre;

* *

+

+ #

# #

( #

#

2

(

>/ "/ ;[

% &" " '

* +

%

&?

!

&" " '

# -

"&

/.&

+ .&

1& 1&

-

SELECT * FROM Factura ORDER BY numero DESC, dni DESC, importe ASC

SELECT * FROM Factura ORDER BY 1, dni, 4; * ' *

V

D

+

+

&

( "

SELECT numero, fecha, importe – (importe * dto) ORDER BY 3;

2

( # g

7

8R < &

!

$

2

&? (

-

1<3*+

! (

1<3*+

#

, SELECT AVG(importe), AVG(dto) FROM Factura; # # ( %

#

,

'

SELECT AVG(importe – importe * dto) FROM Factura; $ &2=* # 1<3* # =10* # =.:* # >2:'*#

+ / / / / /

+ + + + me +

% !

' #

.&'.: '

Cálculo del total de una columna (SUM) &2=*+

# "

# -

#

SELECT SUM(importe) FROM Factura "

Cálculo del promedio de una columna (AVG) 1<3*+ 1 1<3*+

# &2=*+ #

[ #

#

#

Determinación de valores extremos =.:*+

=10*+

#

# 9

7

8R < &

" -

$ $

SELECT MIN(fecha) FROM Factura; SELECT MAX(cp) FROM Cliente; -

%

!

SELECT MAX(importe), MIN(importe) FROM Factura;

Cuenta de valores de datos (COUNT) >2:'*+ >2:'*+

# -

#

#

SELECT COUNT(dni) FROM Cliente; N

N

SELECT COUNT(importe) FROM Factura WHERE importe > 100; "

N DHH n >

, >2:'*+

#

N # " >2:'*+ "

!

!

SELECT COUNT(nfactura) FROM Factura WHERE importe > 100; %

F

E

E 1'>& >2:'*e+

!

)

E 8 F ( &? >2:'*e+ ?2" 2":'1 ,. 1& ": 231/ # (

" <1 >/"& (

SELECT COUNT(*) FROM Factura WHERE importe > 100; >2:'*+ #

#

#

Valores NULL y funciones de columna

#

o? #

7

8R < &

:2

l"

&2=*+ 1<3*+ =.:*+ =10*+ # # &? 1:&.9.&>

>2:'*+

#

:2

$

"

! #

%

#

:2

Eliminación de filas duplicadas (DISTINCT) /

# '

&?

.&'.: '

(

# -

#

#

.&'.: '

SELECT COUNT( DISTINCT dni ) FROM Factura;

,

# # # N " =.:*+ =10*+ ( ( >2:'*e+ 1

.&'.: '

#

&2=*+ 1<3*+ " >2:'*+

.&'.: '

# (

&

1 # E

( 3/>2- ;[

F

# &" " '

SELECT dni, SUM(importe) FROM Factura GROUP BY dni; "

# &" " ' 3/>2- ;[

#

&" " ' .&'.: '

&? D

$ &?

# #

G

-

&?

#

.=->/'"

#

" dni ---

7

8R < &

$ sum(importe) ------------

$ (

1 2 3 5 7 9

150 150 250 275 140 200 2

3/>2- ;[ 3/>2- ;[ # "

$

SELECT fecha, COUNT(*) FROM Factura GROUP BY fecha; SELECT dni, AVG( importe ) FROM Factura GROUP BY dni; SELECT dni, MIN( importe ) FROM Factura GROUP BY dni; SELECT dni, fecha, MAX( importe ) FROM Factura WHERE fecha > ‘15/12/2003’ GROUP BY dni, fecha; ! 3/>2- ;[ #

&? 3/>2- ;[

&? "

'

# ,/>= %

#

:

' ' #

; $

7

8R < &



2



2



2



2

#

( #

%

$ *

" & % &" " ' .&'.: ' 2

#

(

3/>2- ;[

:2 & l"

!

#

:2

* :2

1

W "/" * '/2"+ #

# :2 ( !

# :2

&?

:2 "

&? 1:&.9.&> 3/>2- ;[ & #

# :2

:2

:2

& &3;

Condiciones de búsqueda de grupos. Cláusula HAVING 1 (

W "/"

1<.:3

( 1<.:3 1<.:3

#

(

# (

" W "/" 1<.:3 -

SELECT dni, AVG(importe) FROM Factura GROUP BY dni HAVING SUM(importe) > 200; "

1<.:3 &" " '

GHH n ,

>

!$

SELECT dni, fecha, SUM(importe – importe * dto ) FROM Factura GROUP BY dni, fecha HAVING COUNT(*) >= 2; !

' (

> SELECT dni, MIN(importe) FROM Factura GROUP BY dni HAVING MIN(importe) > 50; "

! 6H -

! 1<.:3

(

% #

7

8R < &

"

$ 0

( 1<.:3

$ •

2



2



2



2

(

# #

%

"

1<.:3 & W "/"

! % " W "/"

#

1<.:3 •

$

W "/"

#

%

#



1<.:3 %

1<.:3 %

3/>2- ;[ 1<.:3

( &" " ' 3/>2- ;[ &? "

&

1<.:3 % "

1<.:3

3/>2- ;[

#

! W "/"

&? 2 1<.:3

( &?

!

Listar el dni, nombre, apellidos y dirección de los clientes que tienen facturas con importe superior a 100 . .

&" " '

!

$ SELECT dni, nombre, apellidos, direccion FROM Cliente WHERE dni = ???; # *lll+ " DHH n $ SELECT DISTINCT dni FROM Factura WHERE importe > 100;

7

8R < &

$

#

! DHH n " $

SELECT dni, nombre, apellidos, direccion FROM Cliente WHERE dni IN ( SELECT DISTINCT dni FROM Factura WHERE importe > 100 );

W "/" 3/>2- ;[ (



&" " ' 1<.:3 " &" " ' & &" " '

,/>=

2 " &" " '



>/ "/ ;[ ( #



2

2:.>: # &" " '

&" " '

• " 2

#

E

F

Listar el dni de cliente, número de factura, fecha e importe de las facturas cuyo importe supere el importe medio de las facturas del cliente. SELECT dni, numero, fecha, importe FROM Factura AS F1 WHERE importe > ( SELECT AVG(importe) FROM Factura AS F2 WHERE F2.dni = F1.dni ); " !

%

W "/" W "/"

&

#

&:? ' (

,G+ *&:?

+

,

*&;? !

!

*,D

+ " (

#

7

8R < &

$ 8

W "/" -

$ 9 )

M DD GG 44 VV

&

1 1 1 "%

& # ( ;

(

9 M+

)

;

D G 4 6 Q P

>)

A A A # 1 1 =

M; 1DDD 1DDG 1DD4 1DDV 1DD6 1DDN 1DDQ 1DDC 1DDP

) G 6 Q Q 6 6 G 4 P

4HHHHH 6Q6HHH CHHHHH QHHHHH

&

DD GG DD 44 GG 44

9 &

* $

D 4 6 6 D Q 4 G P

, 46HHHH 4HHHHH 46HHHH GQ6HHH GHHHHH 4HHHHH

6HH DG6H GHHH Q6H DHHH DVHH DG6H D6HH GHHH

D69DG9GHH4 DQ9DG9GHH4 DQ9DG9GHH4 DC9DG9GHH4 DP9DG9GHH4 GH9DG9GHH4 GD9DG9GHH4 GD9DG9GHH4 GG9DG9GHH4

4NQPDD 4PGQG6 VQVH6H GPPPDG DVG6PV 4H6NQ4

+ H H H D G D6 H 4 H

& Lista de las oficinas donde el objetivo de ventas de la oficina supera a la suma de las cuotas de los vendedores individuales SELECT ciudad FROM Oficinas WHERE objetivo > ( SELECT SUM(cuota) FROM Representante WHERE oficina_rep = oficina );

% W "/" /

# -

%

W "/" %

/

"

> &?

>

(

#

#

7

8R < &

$

# #

%

/

( >

(

( 2 W "/"

1<.:3 1 (

1

&?

/

Test de comparación de subconsulta (=, <>, <, <=, >, >=) " #

% '/2"

#

# "

#

%

#

( #

Listar los representantes cuyas cuotas son iguales o superiores al objetivo de la oficina de venta de Córdoba SELECT * FROM Representante WHERE cuota >= ( SELECT objetivo FROM Oficinas WHERE ciudad = 'Córdoba'); # " #

#

(

# #

# " *Z ^Y ^ ^Z Y YZ+ &

&? &

#

:2

#

# :2

Test de pertenencia a conjunto (IN) "

*.:+ #

'/2"

#

# #

# # # " %

(

# Lista los vendedores que trabajan en oficinas que superan su cuota SELECT * FROM Representante WHERE Oficina_rep IN (SELECT Oficina FROM Oficinas WHERE ventas > cuota );

7

8R < &

$ -

Lista los clientes que no tienen factura con importe superior a 100 . SELECT * FROM Cliente WHERE dni NOT IN ( SELECT DISTINCT dni FROM Factura WHERE importe > 100 ); " #

W "/"

# # %

.: % % !

" .:

#

Test de existencia (EXISTS) " %

% :

*"0.&'&+

8

(

-

Listas los clientes que tienen al menos una factura con importe superior a 100 . SELECT * FROM Cliente WHERE EXIST ( SELECT * FROM Factura WHERE Factura.dni = Cliente.dni AND importe > 100 ); &?

DHH n & + "0.&'&

"0.&'& ,1 &" "

#

* # '/2" & "0.&'&

#

:2 &

#

"

"0.&'&

(

:>' "0.&'& ,1 &"

'/2" >

#

"0.&'&

(

&

Test cuantificados (ANY y ALL) #

.:

#

#

&? 1:[

#

% *Y+

*^+ 1

# "

(

7

1

8R < &

1:[ ( &? *Z ^Y ^ ^Z Y YZ+ #

# -

&? #

$$

# #

# (& 1:[

'/2"

#

#

'/2"

Lista los Representantes que han hecho algún pedido cuyo importe supere el 10% de su cuota. SELECT * FROM Representante WHERE ( cuota * 0.1 ) > ANY (

SELECT importe FROM Pedidos WHERE rep = dni );

%

/ #

#

#

W "/" ( (

# ^ 1:[

#

#

& '/2"

%

#

1:[ #

1 ( &? *Z ^Y ^ ^Z Y YZ+ # &? (

#

(

# #

&

# #

#

#

# &>=" &? 1:&.9.&> &3; "

#

#

'/2"

'/2" # ,1 &" -

#

1

Listar las oficinas y sus objetivos donde todos los vendedores tienen ventas que superan el 50% del objetivo de la oficina SELECT oficina, ciudad, objetivo FROM Oficinas WHERE (0.5 * objetivo) < ALL ( SELECT ventas FROM Represenante WHERE oficina_Rep = oficina ) %

> #

p

p

#

#

#

#

W "/" # & #

^1

#

6Hk ( #

# %

# #

# '/2"

&

Subconsultas anidadas '

! #

7

8R < &

$$$

( (

-

Listar los pedidos cuyos representantes están asignados a oficinas de la región de Andalucía SELECT * FROM Pedidos WHERE rep IN ( SELECT dni FROM Representante WHERE oficina_rep IN ( SELECT oficina FROM Oficinas WHERE region = 'Andalucía' ) ); " 1

! #

, %

#

(

# #

%

"

( &? 1:&.9.&>

# # ! #

Subconsultas en la cláusula HAVING 1 W "/"

(

1<.:3 1<.:3 1<.:3 -

Listar los representantes cuyo tamaño de pedido medio es superior al tamaño de pedido medio global SELECT rep, AVG(importe) FROM Pedidos GROUP BY rep HAVING AVG(importe) > ( SELECT AVG(importe) FROM Pedidos ); ) 1<.:3 #

) &

8

!

,

&" " ' #

)

7

8R < &

$$

" -

g o

l" ,/>= < SELECT numero, Factura.dni, Cliente.dni, nombre, importe FROM Factura, Cliente; & 9 M; 1DDD 1DDG 1DD4 1DDV 1DD6

9

$ +

$ 6H DG6 GHH Q6 DHH

D G 6 6 D

+ D69DG9GHH4 DQ9DG9GHH4 DQ9DG9GHH4 DC9DG9GHH4 DP9DG9GHH4

H H H D G

& M+

; A A 1

D G 6

/ 3 =

( ( ! (& ( ;

+ 9= D 1# - DH 9, C

*

&* DVHHG G4HH4 DDHHV

A (

" ; / 1DDD 1DDD 1DDG / ! 1DDG 1DD4 1DD4 / " 1DDV 1DDV / 5 1DD6 1DD6 / 6

+ D D G ! G 6 6 6 6 6 6 D D

-

+

;

$ 6F 6H 6H DG6 !6 DG6 GHH GHH !FF Q6 Q6 C6 DHH DHH FF

N A 1 A N 1 A A / A A / A A /

G 6 D ! 6 D G 6 D G 6 D G 6

# ,1 '2/1

.":'" .":'" &

7

8R < &

?

Z

?

$$(

" &" " '

$

SELECT numero, Factura.dni, Cliente.dni, nombre, importe FROM Factura, Cliente WHERE Factura.dni = Cliente.dni; ,! " ; 1DDD 1DDG 1DD4 1DDV 1DD6

$

+

+

D G 6 6 D

;

D G 6 6 D

$

A A 1 1 A

6H DG6 GHH Q6 DHH

# W "/" +

% N $; *

# #

Consultas multitabla con criterios de selección de fila

& DHH n SELECT numero, Factura.dni, Cliente.dni, nombre, importe FROM Factura, Cliente WHERE Factura.dni = Cliente.dni AND importe > 100;

" & 9

*&

?

=

?

8 #

Múltiples columnas de emparejamiento & 9 M*

*

9 M/

/

"

M %

)

8

M %

)

8

! *

* *

1 +

+ +

# !

*

*

% -

-

$ Listar las líneas de albarán y las líneas de pedido para aquellas líneas donde unidades pedidas son superiores a 10.

7

8R < &

$$*

+

SELECT LineaAlbaran.*, LineaPedido.* FROM LineaAlbaran, LineaPedido WHERE LineaAlbaran.pedido = LineaPedido.pedido AND LineaAlbaran.nlineap = LineaPedido.nlinea AND LineaPedido.unidades > 10; &? 1

#

Consultas de tres o más tablas &?

( &

( $ 9 M*

*

9 M/ 9 M;

/

M %

)

8

M %

)

8

* *

+ +

*

*

/ &

>*

, Listar el número de albaran, fecha, forma de pago, línea de albarán, referencia del artículo en el albarán, unidades vendidas en el albarán y unidades pedidas. SELECT numero, fecha, forma_pago, LineaAlbaran.linea, LineaAlbaran.referencia, LineaAlbaran.unidades, LineaPedido.unidades FROM Albaran, LineaAlbaran, LineaPedido WHERE Albaran.numero = LineaAlbaran.albaran AND LineaAlbaran.pedido = LineaPedido.pedido AND LineaAlbaran.lineap = LineaPedido.linea; "

# #

#

%

%

%

1 1

-

(

!

(

!

Join externo "%

$

"

# #

#

:2

1

( (

(

:2

% :2

&

#

( $

9 M;

7

8R < &

+

$

+

$$0

1DDD 1DDG 1DD4 1DDV 1DD6

9

D : D : Q

6H DG6 GHH Q6 DHH

D69DG9GHH4 DQ9DG9GHH4 DQ9DG9GHH4 DC9DG9GHH4 DP9DG9GHH4

H H H D G

& M+

; A A 1

D G 6 &

/ 3 =

( #

#

*

&* DVHHG G4HH4 DDHHV

A (

* E1DDVF *WHERE Factura.dni = Cliente.dni),

E1DDGF :2

+ 9= D 1# - DH 9, C

( ( ! (& ( ;

+

# 1

E1DD6F

%

EQF

& % :2 -

(

*

%

+

A>.:

% % •

A

%

$

5 >2'"/ A>.: &

%

* +



A

%

(

5

",' A>.: & *

+ •

A

*

%

(

+

5 /.3' A>.: & *

+

*

<

"

+

%

!$ SELECT numero, Factura.dni, Cliente.dni, nombre FROM Factura OUTER JOIN Cliente ON Factura.dni = Cliente.dni; !$ ; 1DDD 1DD4

7

8R < &

+ D D

+ D D

; A A

$$

1DD6 1DDG 1DDV : :

Q : : : :

: : : G 6

: : : A 1

# &

, # :

#

: &

%

(

,

!$

SELECT numero, Factura.dni, Cliente.dni, nombre FROM Factura LEFT JOIN Cliente ON Factura.dni = Cliente.dni; !$ ; 1DDD 1DD4 1DD6 1DDG 1DDV

+

+

D D Q : :

;

D D : : :

A A : : :

"

% )

( %

!$ SELECT numero, Factura.dni, Cliente.dni, nombre FROM Factura RIGHT JOIN Cliente ON Factura.dni = Cliente.dni; !$ ; 1DDD 1DD4 : :

+

+

D D : :

D D G 6

; A A A 1

# *

+

, #

7

8R < &

$$8

-

&?

(

(

% ,/>=

% W "/"

.::"/ A>.: !

)

>: !

! $

SELECT numero, Factura.dni, Cliente.dni, nombre FROM Factura INNER JOIN Cliente ON Factura.dni = Cliente.dni;

&?

( ( &" " ' &?

&? &

% (

&3;

#

( "

&3;

( $ •

.:&"/'



" "'"



2- 1'"

)

#

%

Añadir filas. Sentencia INSERT )

)

" ) •

2



2

&?

#

2



&3; $

.:&"/' &

)

.:&"/' )

% #

)

%

&

.:&"/' .:'> <1 2"

#

(

)

(

# #

#

# #

*

<

# #

INSERT INTO tabla [( lista de columnas )] VALUES( lista de valores );

7

8R < &

$$

& #

&

(

.:&"/'

&?

#

) >

# #

" #

) # .:&"/'

# "

(

&?

.:&"/' #

5

<1 2"&

#

# # "

1:&.9.&>

:

%

%

J -

INSERT INTO Factura (numero, dni, importe, fecha ) VALUES( ‘A111’, 1, 155, ‘22/12/2003’ ); .:'> # # :2

+ &

( % !

:2

*

:2

# #

"

.:&"/'

%

INSERT INTO Factura (numero, dni, importe, fecha, dto ) VALUES( ‘A111’, 1, 155, ‘22/12/2003’, NULL ); .:&"/' ) .:&"/' % ! #

" # "

# %

INSERT INTO tabla [( lista de columnas )] SELECT . . . # % ;IIJ

&

#

) ) GHHV

!

$ INSERT INTO Facturas2004 SELECT * FROM Facturas WHERE YEAR(fecha) = 2004; "

&? 1:&.9.&>

# .:&"/'

7

8R < &

$

$$-



>/ "/ ;[ : #



2:.>:

#

&" " ' &" " '

& •

.:&"/' ,/>= "

!

1 .:&"/' * +

) %

! #

! (

#

-

.:&"/'

)

&

;=& &

.:&"/' ! # -

6H HHH # ("

! -

#

( # "

;=&

5 #

&?

1:&.9.&>

&?

# !

Supresión de datos. Sentencia DELETE ) " "'" ,/>= W "/" #

"

# &

&" " ' % $

# (

DELETE [FROM] tabla [WHERE condición]; -

$

DELETE FROM Cliente WHERE dni = 1; W "/" &?

7

8R < &

W "/"

$

% &" " '

W "/"

!

W "/"

" "'"

W "/"

&" " '

/

W "/" &" " ' ! W "/"

" "'"

& D

-

!

$

DELETE FROM Pedidos WHERE cli = 1; "

W "/"

#

&?

&? W "/"

'/2" ,1 &"

:2

> Eliminar todos los pedidos anteriores al 20/8/2004 DELETE FROM Pedidos WHERE fecha < '20/8/2004'; & $

W "/"

-

DELETE FROM Pedidos; 1

" "'"

# -

-

! % # .:&"/' -

( />- '1; " *

+ )

" "'" ( &?

# &" " '

( #

W "/"

( (

W "/"

" "'" " "'" 1# K . & -

" ?

!

#

" "'"

(

$

DELETE FROM Pedidos WHERE Rep = ( SELECT dni

7

8R < &

$ $

FROM Representante WHERE nombre = 'José' ); K .

W "/"

# " "'" !

" "'"

(

$ Borrar los pedidos de la oficina de Córdoba DELETE FROM Pedidos WHERE rep IN ( SELECT dni FROM Representante WHERE oficina_rep = ( SELECT oficina FROM Oficinas WHERE ciudad = 'Córdoba' ) ); W "/" &" " ' ' " "'" 1 " "'"

W "/" % ,/>= &" " '

!

,/>=

! %

$

Borrar los clientes que no han hecho pedido desde el 10 de septiembre. DELETE FROM Clientes WHERE NOT EXISTS ( SELECT * FROM Pedidos WHERE dni = cli AND fecha > '10/9/2004' ); " "'" % " "'"

Modificación de datos. Sentencia UPDATE ) 2- 1'" #

& %

$

UPDATE tabla SET campo = valor, campo = valor, . . . [WHERE condición]; ( (

7

8R < &

$

#

W "/" &"' #

#

#

(

! D

' ;;L:;L;II@

UPDATE Factura SET importe = 1000, dto = 1.5 WHERE dni = 1 AND fecha = ‘22/12/2003’;

" "'"

W "/" &" " '

%

( ! W "/"

2- 1'" &" " '

% " "'" 1

" "'"

#

2- 1'"

(

# ( $ Aumentar en un 5% el descuento de los pedidos del representante con dni 2 UPDATE Pedidos SET dto = dto + 0.5 WHERE rep = 2; "

W "/"

#

-

# 2- 1'"

,1 &"

&? ( '/2"

-

:2 &"'

2- 1'" ( #

#

!

&? %

# (

8

! 1:&.9.&>

%

: J

% #

%

&? % (

# : &

% #

(

%

# ( W "/"

-

7

2- 1'"

8R < &

$ (

UPDATE Representante SET cuota = 400000, ventas = cuota WHERE cuota < 400000; 1 46H HHH n #

( #

A 4NQ PDD n 46H HHH n ! &"' 8

W "/"

!

( VHH HHH n

2- 1'"

W "/"

# "

&

(

UPDATE Representante SET cuota = cuota + 50000; 1

" "'" 2- 1'"

;

W "/" (

1

W "/" (

#

" "'" 2- 1'"

(

!# 2- 1'"

(

$

Actualiza la tabla Representante añadiendo 50000 a su cuota, para los representantes que han hecho pedidos en el mes de septiembre UPDATE Representante SET cuota = cuota + 50000 WHERE dni IN ( SELECT rep FROM Pedidos WHERE MONTH(fecha) = 9 ); Aumentar en 10000 la cuota de los representantes si el total de los pedidos de cada uno de ellos supera su cuota. UPDATE Representante SET cuota = cuota + 10000 WHERE cuota > ( SELECT SUM(importe) FROM Pedidos WHERE rep = dni ); Aumentar un 10% la cuota de los representantes que tengan más de tres pedidos en los seis primeros meses del año UPDATE Representante SET objetivo = objetivo + objetivo * 0.1 WHERE 3 < ( SELECT COUNT(*) FROM Pedidos WHERE rep = dni ); Actualiza la tabla Representantes añadiendo a sus ventas los importes de los pedidos UPDATE Representantes SET ventas = ( SELECT SUM(importe)

7

8R < &

$ *

FROM Pedidos WHERE rep = dni ); &" " '

W "/"

2- 1'"

# 2- 1'" % 8

%

5

/ 2- 1'" " "'" ,/>=

! $ #

" *

(

+ % W "/"

2- 1'"

# "

*

+

"

%

&?

!

#

Creación de tablas. Sentencia Create Table %

$

CREATE TABLE nombre_tabla( definición de columna1, definición de columna2, … definición de columnaN [definición de constraint1,] [definición de constraint2,] … [definición de constraintM] ); $ nombre_columna tipo_datos [NOT NULL|NULL] [DEFAULT valor predeterminado] [PRIMARY KEY] [CHECK expresión lógica] … # #

:>' :2 #

# ( # #

7

8R < &

",12 ' #

-/.=1/[ X"[ " X 2 #

$ 0

$ [PRIMARY KEY (columnas clave primaria)] [INDEX nombre índice (columnas índice)] [UNIQUE [INDEX] nombre índice (columnas índice)] [CONSTRAINT nombre FOREIGN KEY [nombre índice] (columnas índice) [referencia] $ REFERENCES nombre tabla [ (columnas índice) ] [ON DELETE {CASCADE | SET NULL | ... } ] -/.=1/[ X"[

# #

.: "0

!

2:.?2" #

# #

,>/".3: X"[ # ( * " "'"+ (

%

%

(

1:&.5&?

!

%

# % >: " "'"

"% *2- 1'"+ " >/1 "

>: 2- 1'" != &?

/"1'" '1; " &3;

#

! !

,1 '2/1 >

!

$ CREATE TABLE FACTURA( numero VARCHAR2(10) NOT NULL PRIMARY KEY, dni INTEGER, importe NUMBER(9,2), fecha DATE, dto NUMBER(5,2), CONSTRAINT FK_CLIENTE(dni) REFERENCES Cliente(dni) ON DELETE CASCADE; #

#

:>' :2

( #

#

% #

#

+

1 .":'" * >: " "'"

1& 1 " #

%

,1 '2/1

.":'"

Creación de índices. Sentencia Create Index !

%

$

CREATE [UNIQUE] INDEX nombre_índice ON tabla( columnas_indexadas ) 2:.?2"

% %

#

-

7

8R < &

$

#

"

! -

,1 '2/1

"

&" " '

(

!

$

SELECT * FROM Factura WHERE dni = 1 AND numero = ‘A111’; "

,1 '2/1

#

*

/

+ &

!

$

CREATE INDEX ind_factura_cliente ON FACTURA( dni ) :

2:.?2"

!

Creación de vistas. Sentencia Create View 2

#

*

H+ &?

&" " ' "

#

&

$

SELECT Factura.dni, nombre, SUM( importe ) FROM Factura, Cliente WHERE Factura.dni = Cliente.dni GROUP BY Factura.dni, nombre ; &

# *

#

+

# CREATE VIEW TOTAL_FACTURA_CLIENTE AS SELECT Factura.dni, nombre, SUM( importe ) FROM Factura, Cliente WHERE Factura.dni = Cliente.dni; [

#

$

SELECT * FROM TOTAL_FACTURA_CLIENTE; %

#

$

CREATE VIEW nombre_vista [(lista_columnas)] AS Subconsulta; # #

-

#

%

/"1'" <."W #

7

8R < &

&

$ 8

& ! & /"1'" <."W

&

#

# ' 0

-

#

CREATE VIEW Cli_Ord AS SELECT * FROM Cliente ORDER BY nombre; &

# -

# #

CREATE VIEW Cli_Fac AS SELECT dni, nombre (nif, razon_social) FROM Cliente WHERE dni IN ( SELECT DISTINCT dni FROM Factura ); &

&" " '

#

!

SELECT nif, razon_social FROM Cli_Fac; &" " ' -

#

3/>2- ;[ #

CREATE VIEW Cli_Fac AS (dni, nombre, total) SELECT dni, nombre, SUM(importe) FROM Cliente INNER JOIN Factura ON Cliente.dni = Factura.dni GROUP BY dni, nombre; #

2 # .:&"/' 2- 1'" # #

&" " '

( " "'"

(

-

# #

# (

"

# !

(, .:&"/'

#

INSERT INTO Cli_Ord VALUES( 10, ‘Ernesto’, ‘Martínez Segura’, ‘c/ Mayor, 111’, ‘Madrid’, 28010);

7

8R < &

$

&

#

(& #

# (

-

#

(

# # .:&"/' # *

:2

# +

# 1

&" " '

#

W "/"

# &" " ' #

#

#

-

CREATE VIEW Cli_Cor AS SELECT * FROM Cliente WHERE población = ‘Córdoba’; & #

M

.:&"/' N #

#

&" " ' # &" " ' W.'

" X >-'.>:

#

#

# # !

!

CREATE VIEW Cli_Cor AS SELECT * FROM Cliente WHERE población = ‘Córdoba’ WITH CHECK OPTION; &

(

#

&?

#

(

Borrado de tablas, índices y vistas -

(

/>- '1; "

%

(

/>- .: "0 &

%

DROP TABLE nombre_tabla;

: ( -

!

DROP INDEX nombre_indice; " ! %

#

/>- <."W &

$

DROP VIEW nombre_vista;

7

8R < &

$ -

/

#

&" " ' #

:

Modificación de una definición de tabla. Sentencia ALTER TABLE (

( 1 '"/ '1; " 1 '"/ '1; " •

1)



#

• •

$

# "

#

#

%

&3;

! %

ALTER TABLE tabla | ADD [COLUMN] declaración_columna | ADD INDEX nombre_índice (columnas índice) | ADD PRIMARY KEY (columnas_índice) | ADD UNIQUE nombre_índice (columnas_índice) | DROP [COLUMN] nombre_columna | DROP INDEX nombre_índice (lista_columnas) | DROP PRIMARY KEY | MODIFY [COLUMN] declaración_columna | RENAME [AS] nombre _tabla_nueva | ADD [CONSTRAINT [nombre_restricción]] PRIMARY KEY (columnas_índice) | ADD [CONSTRAINT [nombre_restricción]] UNIQUE (columnas_indice) | ADD [CONSTRAINT [nombre_restricción]] FOREIGN KEY (columnas_indice) [referencia] "

1 '"/ '1; "

)

% '1; "

1 '"/

#

/"1'" '1; " #

) & #

%

:2

)

-

ALTER TABLE Cliente ADD COLUMN persona_contacto VARCHAR(50); &

:>' :2 #

7

8R < &

$(

&3;

)

#

#

# &

)

!

ALTER TABLE Cliente ADD INDEX (nombre); -

&

ALTER TABLE Factura DROP COLUMN importe; & ! )

#

& !

ALTER TABLE Factura ADD CONSTRAINT fk_factura FOREIGN KEY (dni) REFERENCES Cliente(dni) ON DELETE RESTRICT ON UPDATE CASCADE; & ALTER TABLE Cliente RENAME AS Cli;

" $ D

# (

&3;

( " &3; G &? #

!

( 4

# 2 &" " '

.:&"/' " "'"

2- 1'"

2 # -

( 3/1:'

# 2 # ( /"<>X"

#

Asignar privilegios. Sentencia GRANT 3/1:'

(

# !

&

%

$

GRANT privilegio [(lista_col)] [, privilegio [(lista_col)]]… ON tabla TO usuario [, usuario]…

7

8R < &

$ ($

[WITH GRANT OPTION] % # # .:&"/' 2- 1'"

3/1:' 1:&.9.&> &?

" "'"

$ &" " ' #

&3;

2- 1'"

# !

!

&" " '

GRANT SELECT, UPDATE ON Cliente TO rafa; & &

#

GRANT DELETE ON Facturas TO maria, rafa &

(

W.' 3/1:' >-'.>: # #

# (

-

.:&"/' # (

GRANT INSERT ON Cliente TO rafa WITH GRANT OPTION; -

2- 1'"

(

#

#

(

!

! #

( &

2- 1'"

-

# !

GRANT UPDATE (importe) ON Facturas TO rafa;

Revocación de privilegios. Sentencia REVOKE # /"<>X" &

3/1:' %

$

REVOKE privilegio [, privilegio ]… ON tabla FROM usuario [, usuario]… -

#

(

REVOKE SELECT, UPDATE ON Cliente FROM rafa; " W.' 3/1:'>-'.>:

# ! -

# # #

REVOKE INSERT ON Cliente FROM rafa;

7

8R < &

$(

&? = *&" " ' .:&"/'

" "'"

2- 1'"+

Funciones de tratamiento numérico + / / / / / / / '

1;&* + ". * + , >>/* + => * + ->W"/* + />2: * M O + &.3:* + '/2: * M O +

#

#

9 &

D

#

5D

#

H H

H

&

H

Funciones de tratamiento alfanumérico /*

+ /

+

>: 1'* D

# (

*1& .. 2:. > " " #

G+ mm / / "

.:.' 1-* + >W"/* + -1 * + /-1 * + '/.=* DM GO +

G

D

+

(

&

G /'/.=* DM

GO +

"

G

D

&

G /"- 1 "* D 4+ &2;&'/* 2--"/* + ":3' * +

G

/

D

+ / /

G

*

(

4

+

Funciones de tratamiento de fechas 1

@=>:' &*

+

1&'@ 1[* + =>:' &@;"'W"":* D />2: * + '/2: *

+

+ & / G+ / / *e+ ' *e+

*

#

# +

!

Formatos para ROUND y TRUNC para fechas: h=>:' b h=>:b h==b h 1[b h [b h b

7

8R < &

+ -

$ ((

h["1/b h[[[[b h[b

-

)

Funciones de conversión + 1/'>/>W. * />W. '> 1/* '>@

1/* eM

+ 7

# #

+

O+

/>W. />W.

#

e

e

& (

# '>@ 1'"* DM

GO +

#

D #

'>@:2=;"/*

+

G

#

#

Otras funciones 2=-*

+ /

+

3/"1'"&'* % D % G % :+ "1&'* % D % G % :+ :< * % D % G +

/ / /

2&"/"<:*

/

+

% % % G % D

% D

# # h.& ;1b$ / # h 1:3213"b$ . h'"/=.:1 b$ : ( h&"&&.>:. b$ : " > "* % @ # @G @G @ +

@D @:

@D @: "

:2

$ h'/2"b ;1 #

# #

# switch

" 9 II case of $ DECODE( COLOR, ‘R’, ‘Rojo’, ‘V’, ‘Verde’, ‘A’, ‘Azul’, ‘Color desconocido’ )

= &?

$

Funciones de cadena + 1& ..* 1/* + 1/*

7

8R < &

+

g+

#

#

# #

# # O

1& ..

( 1& .. 1& ..

$ (*

;.:* + >1 "& "* % D %G g+ >: 1'* D G g+ " '* D G g+ ,." * D G g+ >:<* D G+ ,>/=1'* +

# # %

# #

#

#

;

# #

:

#

;?

, ? %

"0* + > '* + .:&"/'*

& +

1&"* >W"/* 2 1&"* 2--"/* ",'* /.3 '* > 1'"*

+ + + + +

# # ( +

+

( &

":3 '* -1 *

'/.=*

+

# D+ 1)

#

#

#

+

:

(

(

#

( =. *

+

(

->&.'.>:* +

( "

/"-"1'* /"- 1 "* 4+ /"<"/&"* /-1 *

/'/.=* &>2: "0*

+ D

G + D+

$, / /

)9

# 1)

#

#

#

+ +

#

< #

( # :

#

#

#

&>2: "0

#

* &-1 "* +

+

#

#

#

#

#

#

# &2;&'/.:3* &2;'/.:3*

7

8R < &

+ +

#

$ (0

Funciones numéricas + < 1 1 1 a

1;&* + 1&.:* + 1 >&* + 1'1:* + 1'1:G* + ". .:3* + >&* + >'* + "3/""&* + "0-* + , >>/* + >3* + >3DH* + -.*+ ->W"/* + ->W* /1 .1:&* + /1: *+ /1: * + />2: * + />2: * +

*

+ *

+ * +

*

"

+

) *

+ *

: =

+

#

%

π

< +

# # #

# #

HH

/ /

D HH

D

% * +

&.3:* + &.:* + &?/'* + '1:* + '/2: 1'"*

< D & / ! ( ' # #

+

#

5D

#

& &

Funciones de fecha y hora + 1[:1="*

+

#

1[>,=>:' *

+

# ' # #

! D

#

4D

#

!

' 1[>,["1/*

+

1[>,W""X*

+

# ) #

#

D

4NN

D

Q

H

G4

#

!

' #

#

!

' >2/*

+

#

# '

=.:2'"*

+

#

#

H

6P

H

6P

' &" >: *

+

#

# '

=>:' *

+

#

#

D

DG

' =>:' :1="*

7

8R < &

+

#

#

'

$(

?21/'"/*

+

W""X*

+

#

#

#

#

D

V

H *

6G

'

H *

6G

'

(

+ W""X*

+

#

# ZH

W""X 1[*

+

#

(

(

#

ZD+ + N * ' PPPP

H * !

["1/*

+

'>@ 1[&* :>W*+

# # ) # # ) H

+

DHHH

+

' !

&[& 1'"*+ 1111==

2/ 1'"*+ 2//":'@ 1'"*+ 2/'.="*+ 2//":'@'.="*+ 1'"@,>/=1'* +

11115

+

1'"@1 * .:'"/<1 1 1'"* .:'"/<1 1'"@&2;* .:'"/<1 &2; 1'"* .:'"/<1 "0'/1 '* + -"/.> @1 * -"/.> @ .,,* G+ &" @'>@'.="* '.="@'>@&" *

#

#

#

' k& k k k k k. kS k k' k k kW k k k k k7 k k2 k k= k k k k k[ kk # # # * ! ) H+ # # * ! ) H+ ' 1) ' # $ &" >: =.:2'" >2/ 1[ =>:' ["1/ =.:2'"@&" >: >2/@=.:2'" >2/@&" >: 1[@ >2/ 1[@=.:2'" 1[@&" >: ["1/@=>:' / ' #

,/>=@ 1[&* + '>@ 1[*

==5 #

+ +

+ + ,/>=

' ' #

+

1)

#

+

# #

# #

#

#

D

+

'.="@,>/=1'* +

# #

'

' 1'"@,>/=1'

Funciones de comparación + 3/"1'"&'* % D %G g+ "1&'* % D % G g + .,* % D %G % 4+

7

8R < &

#

#

# #

# #

#

2;

2:

#

2@

2:

$ (8

.,:2

* %D

.:'"/<1 * .&:2 * % + &'/ =-* G+

% G+ D

#

G g+

#

2;

2:

^ : 5D :2 # # D 2 # # D :2

D

:2 ^

:2

2: ;

!

#

H : Z

;

H :2

Miscelánea de funciones ;":

=1/X*

+ "# H

%+

2

#

#

1

! 1'1;1&"*+ ": > "* )+ " > "* )+ ": /.-'* + 3"'@ > X*

5

# +

/"1 "1&"@ > X*

" /

) # (

# %

+

#

1&@.:&"/'@. *+

#

12'>@.: /"=":' #

1&'@.:&"/'@. * % +

>1 @,. "* = 6*

2 #

(

2- 1'"

+

#

= 6 /&1 -1&&W>/ *

#

#

+

2&"/*+ &"&&.>:@2&"/*+ &[&'"=@2&"/*+ <"/&.>:*+

4G

% #

= &?

8R < &

#

+ !

7

2

12'>@.: /"=":' #

#

#

#

= &?

$(

,

+

= &? - -

-

'=

#

(

( . #

W "

.

#

&

= &?

# )

#

W

7 = &?

2:.09 .:20 1 - -

'=

) = &?

W W

1

) W

= &? 7 # =0

7

" = &?

#

&

( # = &?

#

&?

&

&? 1 %

#

# #

$ -

#

= &? $

D

W

7 = &?

5

#

W

G 4

$

= &? 7

7 :'9GHHH90-

#

( "

%

V

%2

6

"

N

"

)!

* !

# +

*

(

+ %2

B P !

7

R+ / < &

$ (-

2 B PH

# ( H B P !

B PH

P

( 1

# !? ' .7 /

O

0 %

H P !?

#

$

Figura 1. Ventana de usuario para WinMySQLAdmin

# ) "

!?

# # (

> ; )

1

# #

# = &?

#

Comprobación de la instalación ' H? 2

!

B P !

P

1 = &?

$ 1

!

# W = &? 1

# &

#

&

#

"

# W = &? 1

#

!? & D

7

R+ / < &

# #

) &

7

$

5=

$*

G

W : 5 W = &? 1

# #

&

#

%

# &

'H

$

Figura 2. Ventana WinMySQLAdmin

( #

#

# #

%

!?

#

! %

# #

g

! )

-

!?

'

Interfaz en línea de comandos 1

%

32.

&?

#

= &?

*

=&5 >&+ (

=&5 >& B

(

! B P !

# P

R+ / < &

P '

&

7

%

#

$ *$

(

!

!

8

&? #

Figura 3. Interfaz en línea de comandos SQL

# ) "

%

#

) 2

# (

= &? ) #

"

(

" #

)

) Q

H

Q

1R

-S 2T

:

1

) %

) (

-

$

!

0 P

P )

& # # #

Instalación de una distribución binaria -

2:.09

% %

2 ! G$#

# #3 ! #

! + ,%? @QR? (

! G$# ?

#3

# + ,%? @QR? "

" # #

? 0

"

7

R+ / < &

$*

rpm –i nombre_paquete &

# (

# L

L #

L !

#

'

L

L

/-= ?

" $ D

1 L

# 1 !

L

G

= &? !

!

4

!

#

V

!

#

?

? 0S

(

?

L

0 AL (

!

? 0

6 N

!

L

L L !

#

2 #

1 %

? 0-

#

!

-

5 L

L

L

!

#

(

! Q

!

C 1 " L ! P

(

(

##

# = !

1

" ?

# ?"

'H #

DH !

# 'H #

"

DD

!

# !

"

'

DG . L !

(

##

D4 #

L !

DV H

M

&

(

# ?

# = !

#

!

= &? T # L

L

?

) 5N

?L

L !

U

= &?

Comprobación de la instalación en UNIX/Linux & L !

(

(

&

( #

7

R+ / < &

= &?

$ *(

2

( #

L !

L !

#

# '

H #

L !

# # L ( ! # # L ! 'H # 'H ! #

L !

U

T

U

# #

(

&

2

= &?

# (

= &? # *

+ 1 -

(

&?

/"1'" '1; "

%

$

CREATE DATABASE nombre_BD; < !

&

1 = &?

-

,

CREATE DATABASE Almacen; & ,F 1

& # # ( -

# 2&"

&

USE Almacen;

2 * # = &?

( +

*

+

&? /"1'" '1; "

$

CREATE [TEMPORARY] TABLE [IF NO EXISTS] nombre_tabla ( definición de columna 1, definición de columna 2, … definición de columna N ) [opciones de tabla] [[IGNORE | REPLACE] sentencia de selección]

7

R+ / < &

$ **

% $ nombre_columna tipo_de_datos [NOT NULL | NULL] [DEFAULT valor predeterminado] [AUTO_INCREMENT] [PRIMARY KEY] [referencia] | PRIMARY KEY (columnas índice) | KEY [nombre índice] (columnas índice) | INDEX [nombre índice] (columnas índice) | UNIQUE [INDEX] [nombre índice] (columnas índice) | [CONSTRAINT nombre] FOREIGN KEY [nombre índice] (columnas índice) [referencia] | CHECK (expresión)

% $ REFERENCES nombre_tabla [(columnas indice)] [ON DELETE {RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT}] [ON UPDATE {RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT}] [MATCH FULL | MATCH PARTIAL] /"1'" '1; " % $ TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM } | AUTO_INCREMENT = número | AVG_ROW_LENGTH = número | CHECKSUM = {0 | 1} | COMMENT = « cadena » | MAX_ROWS = # | MIN_ROWS = # | PACK_KEYS = {0 | 1 | DEFAULT} | PASSWORD = “contraseña” | DELAY_KEY_WRITE = {0 | 1} | ROW_FORMAT= { default | dynamic | fixed | compressed } | RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS = número RAID_CHUNKSIZE = número | UNION = (table_name,[table_name...]) | INSERT_METHOD= {NO | FIRST | LAST } | DATA DIRECTORY=”path absoluto al directorio” | INDEX DIRECTORY=”path absoluto al directorio” $ [IGNORE | REPLACE] SELECT ... (Una sentencia SELECT) &

'"=->/1/[ % %

%

.,:>' "0.&'& : " #

#

:>':2 :2 # ",12 '

7

R+ / < &

(

#

# (

$ *0

12'>@.: /"=":' #

&

(

-/.=1/[ X"[ #

"%

#

&

# !

"

$ -/.=1/[ X"[ ! X"[

.: "0 2:.?2"

&

(

!

!

,>/".3: X"[

# #

%

= #

%

" X ( '[-" Z

-

12'>@.: /"=":'Z

= .&1=

/

) % 1<3@/>W@ ":3' Z #

#

V3 /

=10@/>W& Z

) /

%

%

&

)

# " X&2=

D &

&

-1 X@X"[& )

D

)

" 1[@X"[@W/.'"

& &" " ' :

%

7

R+ / < &

!

( 1/ <1/

! "

= .&1=

) &

1/

-1&&W>/

D

(

#

( (

# #

#

&" " ' & /"- 1 " #

.3:>/" #

$*

Tipos de tablas en MySQL = &? %

$ •



' $./' 5 " 2 ( ! :

(

%

%

# %

#

' )4 5 "

= .&1= &" " ' #



:

" "'" #

2- 1'"

%

$./' 5 "

= .&1= (





A /* 5 = " # ! $

!

#

#

= &? !

+3 5 "

= &? # # C=



3+3 13 U %

+

3

% DH = (

% )

%

25 ' =

# #

# ( !

-

"

= &?

.

/"1'" '1; " ;

( $

(

(

= .&1= & )7- Z )7-

+3

=+

" (

< #

7

R+ / < &

%

$ *8

PEDIDO npedido

CLIENTE

L_PEDIDO

cliente

nif

npedido

fecha

razón_social

nlinea

forma_envio

dirección

referencia

forma_pago

población

unidades

observaciones

provincia

precio

total_pedido

telefono

dto

"- " ". & . &"

ventas

und_pend und_serv

nif nombre

ALBARÁN

dirección

nalbaran

FAMILIA

teléfono

cliente

ventas

familia

PED-REP

descripción

forma_pago

npedido

ARTICULO

total_albarán

representante

L_ALBARÁN

FORMA_PAGO

nalbaran

forma_pago

nlinea

descripción

referencia

recibos

unidades

cadencia

precio

dias_1

fecha forma_envio

referencia descripción precio_venta precio_compra und_comprada und_vendidas existencias familia

dto npedido nlinea

EFECTOS ALBFAC

FACTURA

nalbaran

nfactura

nfactura

fecha cliente

nfactura nefecto fecha fecha_vto entidad sucursal dc cc

Figura 4. Modelo Relacional de la base de datos Almacen

7

R+ / < &

$*

CREATE TABLE Cliente ( nif VARCHAR(10) BINARY NOT NULL PRIMARY KEY, razon_social VARCHAR(40) NOT NULL, direccion VARCHAR(40) BINARY, poblacion VARCHAR(20) BINARY, provincia VARCHAR(10) BINARY, telefono INTEGER(9), ventas DECIMAL(7,2) DEFAULT 0 )TYPE = InnoDB; # <1/ 1/ ;.:1/[ " = &? ;.:1/[ (

" 1& .. 1

+

#

#

%

! CREATE TABLE Representante ( dni VARCHAR(10) BINARY PRIMARY KEY, nombre VARCHAR(40) BINARY NOT NULL, direccion VARCHAR(40) BINARY, telefono INTEGER(9), ventas DECIMAL(7,2) ) TYPE = InnoDB; CREATE TABLE Forma_Pago ( forma_pago INTEGER(2) NOT NULL PRIMARY KEY, descripcion VARCHAR(40) BINARY NOT NULL, recibos INTEGER(3) NOT NULL DEFAULT 1, cadencia INTEGER(3) DEFAULT 0, dias_1 INTEGER(3) DEFAULT 0 )TYPE = InnoDB; "

(

# % !

",12 ' # !

!

CREATE TABLE Familia ( familia VARCHAR(5) BINARY PRIMARY KEY, descripcion VARCHAR(50) BINARY ) TYPE = InnoDB; 1

#

*

"

#

% CREATE TABLE Articulo ( referencia VARCHAR(15) BINARY PRIMARY KEY, descripcion VARCHAR(50) BINARY NOT NULL, precio_venta DECIMAL(6,2) NOT NULL, precio_compra DECIMAL(6,2), und_compradas DECIMAL(5,2), und_vendidas DECIMAL(5,2), existencias DECIMAL(5,2), familia VARCHAR(5) BINARY, INDEX art_fam(familia), CHECK (precio_venta > precio_compra), CONSTRAINT fk_familia FOREIGN KEY ( familia ) REFERENCES Familia(familia) ON DELETE RESTRICT ON UPDATE CASCADE

7

R+ / < &

$ *-

)TYPE = InnoDB; #

# (

9

% " % ! ( >:&'/1.:' # ,>/".3: X"[

%

<

-

( #

% #

%

= &? !

/","/": "&

.: "0

"

!

#

% * " "'"+

>: " "'"

( % $



/"&'/. '5 >

. # #



1& 1 " 5 . # # &



&"' :2

&"'

%

!

5 . #



#

#

# :2

#

%

#

#

%

",12 '5 . #



:> 1 '.>: 5 .

" !

/"&'/. '

1& 1 "

>: 2- 1'" (

*2- 1'"+ -

>: " "'" "

!

CREATE TABLE Pedido ( npedido INTEGER (5) NOT NULL PRIMARY KEY, cliente VARCHAR(10) BINARY NOT NULL, fecha TIMESTAMP, forma_envio VARCHAR(25) BINARY, forma_pago INTEGER(2) NOT NULL, observaciones TEXT, total_pedido DECIMAL(7,2) DEFAULT 0, INDEX ped_cli (cliente), INDEX ped_fp(forma_pago), CONSTRAINT fk_cli FOREIGN KEY (cliente) REFERENCES Cliente(nif) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_fp FOREIGN KEY(forma_pago) REFERENCES Forma_Pago(forma_pago) ON DELETE RESTRICT ON UPDATE CASCADE

7

R+ / < &

$0

) TYPE = InnoDB; CREATE TABLE LineaPedido ( npedido INTEGER(5) NOT NULL, nlinea INTEGER(4) NOT NULL, referencia VARCHAR(15) BINARY NOT NULL, unidades DECIMAL(4,2) NOT NULL, precio DECIMAL(4,2) NOT NULL, dto DECIMAL(2,2), und_pend DECIMAL(4,2), und_serv DECIMAL(4,2) , PRIMARY KEY (npedido, nlinea), INDEX ped_lpe( npedido ), INDEX ped_art( referencia), CHECK ( precio > 0 ), CHECK ( dto BETWEEN 0 AND 1 ), CONSTRAINT fk_ped FOREIGN KEY (npedido) REFERENCES Pedido(npedido) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_art FOREIGN KEY (referencia) REFERENCES Articulo(referencia) ON DELETE RESTRICT ON UPDATE CASCADE ) TYPE = InnoDB; CREATE TABLE Ped_Rep ( npedido INTEGER(5) PRIMARY KEY, dni VARCHAR(10) BINARY NOT NULL, INDEX ped( npedido ), INDEX rep_rep( dni ), CONSTRAINT fk_pere FOREIGN KEY (npedido) REFERENCES Pedido(npedido) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_rep FOREIGN KEY (dni) REFERENCES Representante(dni) ON DELETE CASCADE ON UPDATE CASCADE ) TYPE = InnoDB; CREATE TABLE Albaran ( nalbaran INTEGER(5) NOT NULL PRIMARY KEY, cliente VARCHAR(10) BINARY NOT NULL, fecha DATE NOT NULL, forma_envio VARCHAR(25) BINARY, forma_pago INTEGER(2), total_albaran DECIMAL(7,2), INDEX alb_cli (cliente), INDEX alb_fp (forma_pago), CONSTRAINT fk_clialb FOREIGN KEY (cliente) REFERENCES Cliente (nif) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT fk_fpalb FOREIGN KEY (forma_pago) REFERENCES Forma_pago (forma_pago) ON DELETE SET NULL ON UPDATE CASCADE ) TYPE = InnoDB; CREATE TABLE LineaAlbaran ( nalbaran INTEGER(5) NOT NULL, nlinea INTEGER(4) NOT NULL, referencia VARCHAR(15) BINARY NOT NULL, unidades DECIMAL(4,2) NOT NULL, precio DECIMAL(4,2) NOT NULL, dto DECIMAL(2,2), npedido INTEGER(5), nlineap INTEGER(4), INDEX lin_alb(nalbaran), INDEX alb_art(referencia), INDEX lin_ped(npedido, nlineap), PRIMARY KEY (nalbaran, nlinea), CONSTRAINT fk_alb FOREIGN KEY (nalbaran) REFERENCES Albaran(nalbaran) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT fk_artalb FOREIGN KEY (referencia) REFERENCES Articulo(referencia) ON DELETE RESTRICT ON UPDATE CASCADE,

7

R+ / < &

$ 0$

CONSTRAINT fk_albped FOREIGN KEY (npedido, nlineap) REFERENCES LineaPedido (npedido, nlinea) ON DELETE SET NULL ON UPDATE CASCADE, CHECK ( precio > 0 ), CHECK ( dto BETWEEN 0 AND 1 ) ) TYPE = InnoDB; CREATE TABLE Factura ( nfactura INTEGER(5) NOT NULL PRIMARY KEY, fecha DATE NOT NULL, cliente VARCHAR(10) BINARY NOT NULL, INDEX faccli (cliente), CONSTRAINT fk_clifac FOREIGN KEY (cliente) REFERENCES Cliente(nif) ON DELETE RESTRICT ON UPDATE CASCADE ) Type = InnoDB; CREATE TABLE AlbFac ( nalbaran INTEGER(5) NOT NULL PRIMARY KEY, nfactura INTEGER(5) NOT NULL, INDEX alb (nalbaran), INDEX fac (nfactura), CONSTRAINT fk_albfac FOREIGN KEY (nalbaran) REFERENCES Albaran (nalbaran) ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT fk_fac FOREIGN KEY (nfactura) REFERENCES Factura (nfactura) ON DELETE RESTRICT ON UPDATE CASCADE ) Type = InnoDB; CREATE TABLE Efectos ( nfactura INTEGER(5) NOT NULL, nefecto INTEGER(3) NOT NULL, fecha DATE NOT NULL, fecha_vto DATE NOT NULL, entidad INTEGER(4), sucursal INTEGER(4), dc INTEGER(2), cc INTEGER(10), INDEX FacEfe (nfactura), PRIMARY KEY (nfactura, nefecto), CONSTRAINT fk_fact FOREIGN KEY (nfactura) REFERENCES Factura(nfactura) ON DELETE CASCADE ON UPDATE RESTRICT, CHECK( fecha_vto >= fecha ) ) Type = InnoDB;

Añadir registros con SQL directamente en el entorno de MySQL .:&"/' &

%

$

INSERT [LOW_PRIORITY | DELAYED] [IGNORE][INTO] tabla [(lista_columnas)] VALUES (valores_de_datos); >W@-/.>/.'[ " 1[" .3:>/"

# #

#

# # INSERT INTO Cliente VALUES (‘30000001ª’, ‘Supermercado María’, ‘San Jacinto, 3’, ‘Córdoba’, ‘Córdoba’, 957000000, null ); INSERT INTO Cliente

7

R+ / < &

$0

VALUES (‘30000002ª’, ‘Comestibles Javier’, ‘San Juan, 2’, ‘Córdoba’, ‘Córdoba’, 957000001, null ); INSERT INTO Familia VALUES (‘CONF’, ‘Confiteria’); INSERT INTO Articulo VALUES (‘CONF0001’, ‘Magdalenas la Bella Easo’, 1.5, 0.60, 300, 15, 500, ‘CONF’); INSERT INTO Articulo VALUES (‘CONF0002’, ‘Magdalenas con chocolate’, 2.5, 1.60, 300, 15, 500, ‘CONF’); INSERT INTO Articulo VALUES (‘CONF0003’, ‘Palmeritas con crema’, 1.25, 0.40, 300, 15, 500, ‘CONF’); INSERT INTO Pedido ( cliente, fecha, forma_envio, forma_pago ) VALUES ( ‘30000001ª’, ‘1-ENE-04’, ‘Agencia SEUR’, 1 ); INSERT INTO LineaPedido VALUES (last_insert_id(), 1, ‘CONF0001’, 40, 1.15, 0.2, 40, 0 ); INSERT INTO LineaPedido VALUES (last_insert_id(), 2, ‘CONF0002’, 10, 2.5, 0.2, 10, 0 ); INSERT INTO LineaPedido VALUES (last_insert_id(), 3, ‘CONF0003’, 25, 1.25, 0.2, 25, 0 ); INSERT INTO LineaPedido VALUES (last_insert_id(), 4, ‘CONF0004’, 21, 1.75, 0.2, 21, 0 ); INSERT INTO LineaPedido VALUES (last_insert_id(), 5, ‘CONF0005’, 5, 2.75, 0.2, 5, 0 ); # # = &? 2 .:&"/'

%

-

&? %

? (

-

!

2

# !

U

=&5 >&

U

"

A (

$

?

!

) )

"

&?

#

?

(

!

7

R+ / < &

$ 0(

Incorporar datos externos a tablas MySQL con LOAD DATA "%

# (

#

( #

&? #

% .:&"/' &

>1

1'1 "

%

$

LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE ‘nombre archivo’ [IGNORE | REPLACE] INTO TABLE nombre_tabla opciones de importación [IGNORE n LINES] [(lista_columnas)] >W@-/.>/.'[ > 1

# #

! (

.3:>/"

#!

#

# /"- 1 "

#

% %$

[FIELDS [TERMINATED BY ‘cadena’] [OPTIONALLY] ENCLOSE BY ‘carácter’] [ESCAPED BY ‘carácter’]] [LINES TERMINATED BY ‘cadena’] &

,."

&

'"/=.:1'" ;[ * + ": >&"

# >-'.>:1

[+ "& 1-" + ,." &

.:"& '"/=.:1'" ! &

;[ * #

;[ * .:"& ;[ ,."

&

.:"&

# $

FIELDS TERMINATED BY ‘\t’ ENCLOSED BY “ ESCAPED BY ‘\\’ LINES TERMINATED BY ‘\n’ %

!

#

!

P

"

( &

.

`H

1& .. H

`

/

` `

7

R+ / < &

!

$

#

/

$ 0*

`

"

`

'

`b `F ``

;

% .3:>/"

#

.:"&

!

# &

(

!

#

& !

!

#

#

<

# $

-

?2

! $ ‘30000001ª’,’2005-01-01’,’Agencia SEUR’,’1’,’0.00’ # (

' ( 12'>@.: /"=":' & % !

? = &? # #

( ! #

:2

-

! &? $

LOAD DATA INFILE ‘albaran.txt’ INTO TABLE albaran FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSE BY ‘\” LINES TERMINATED BY ‘\r\n’ (cliente, fecha, forma_envio, forma_pago, total_albaran); -

$

LOAD DATA INFILE ‘lineaalbaran.txt’ INTO TABLE lineaalbaran FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘\” LINES TERMINATED BY ‘\r\n’

%

%

%

"%

&

&

= &?

>-'.=.\" '1; "

(

(

( )

&

%

$

7

R+ / < &

$ 00

OPTIMIZE TABLE nombre_tabla /"- 1 "

.:&"/' ! 2:.?2"

#

# #

# *

#

.3:>/"

! + &

%

$ REPLACE [LOW_PRIORITY | DELAYED] [INTO] nombre_tabla [(listas_columnas)] VALUES (valores_de_datos); (

(

"

( ( &

(

#

( #

#

#

:2

*

+ ' # (

:2

#

(

"

#

#

&

1 /"- 1 "

.:&"/' >W@-/.>/.'[ * # + + &"'

( " 1["

*

(

&

%

$ SET opciones; #

1 )

SET PASSWORD FOR usuario = PASSWORD(“contraseña”) "

%

# #

&" " '

SET SQL_BIG_TABLES = n > X '1; " * &

%

> X '1; "&+ $

LOCK TABLES tabla1 [AS alias] {READ | [LOW_PRIORITY] WRITE}, tabla2 … /"1 !

W/.'" >W@-/.>/.'[

&

7

R+ / < &

%

2: > X '1; " $

*

2: > X '1; "&+

$0

UNLOCK TABLES tabla1, tabla2, …

# & >W

# !

#



%$1

!

#

,/>=

( * +

#

k

.X" @+

SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW SHOW

# %

*

$

COLUMNS FROM nombre_tbla [FROM nombre_bd] [LIKE patrón] DATABASES [LIKE patrón] GRANTS FOR nombre_usuario INDEX FROM nombre_tabla [FROM nombre_bd] PROCESSLIST STATUS TABLE STATUS [FROM nombre_bd] [LIKE patrón] TABLES [FROM nombre_bd] [LIKE patrón] VARIABLES [LIKE patrón]

"

#

& >W

# #

3/1:' #

# #

#

! #

# *

+ * #

+

#

# "& /.;"

> 2=:& &

%

& >W $

{DESCRIBE | DES} nombre_tabla {nombre_columna | patrón} "0- 1.:

#

& >W

> 2=:& ,/>= &

%

EXPLAIN nombre_tabla 1 SHOW SHOW SHOW SHOW SHOW

7

R+ / < &

#

!

TABLES; COLUMNS FROM Cliente; COLUMNS FROM Albaran; INDEX FROM LineaAlbaran; DATABASES;

$ 08

$

/

+

+

)

&? *

!$ # ? 9

0

G

+ "

G

+ ! !$

= &?

( *

<

&" " ' &

! &?

"%

!

=

= 9

% 2- 1'"

$

&? <

! " "'"

.:&"/'

/>-

> 9

!

&? $

9 (


< !

/"1'" 1 '"/

/>-

( ! 3/1:' /"<>X" " ( !

"

!

! !

"

!

! &" " ' ;

V

#

% $

%

SELECT [DISTINCT | ALL | Otras opciones ] lista_selección [INTO OUTFILE ‘nombre_ fichero’ opciones exportación] [FROM tabla origen [,tabla_ origen] ... ] [WHERE condición de búsqueda] [LIMIT m, n] [GROUP BY expresión_ de agrupamiento] [HAVING condición de_ búsqueda] [ORDER BY expresión_order_by [ASC|des]] &" " '

*

<

(

,/>= W "/"

%

3/>2- ;[ 1<.:3

7

-R < & #

+ / < & &

>/ "/ ;[ 1

1

+

#

!

$0

# # + .&'.: '

W "/" * # #

.&'.: '

# # (

.&'.: '/>W &" " ' #

( # &" " '

%

&

(

Cláusula SELECT &" " '

#

# # 1

"

*# + %

.&'.: '

#

# # .&'.: ' .3@-/.>/.'[ .:&"/'

( &'/1.3 '@A>.: ,/>= > &? @&=1 @/"&2 ' &" " ' # "

:2 &" " ' 2- 1'" >

( &? @;.3@/"&2 ' %

*

+

&" " ' # %

%

% ) '

(

( ) '( 0 1

e

5

# *

+

#

( ,/>=

%

?

%

?

#

1& (

? (

% >/ "/ ;[ 3/>2- ;[ W "/"

( ( 1

7

-R < & #

% 1<.:38

%

+ / < & &

1

+

#

!

$ 0-

Listar todos las columnas de la tabla Cliente SELECT * FROM Cliente; SELECT Cliente.* FROM Cliente; Listar el dni de todos los clientes que han hecho pedido SELECT DISTINCT cliente FROM Pedido; Listar el número de pedido, fecha y total SELECT npedido, fecha, total_pedido FROM Pedido; Listar la referencia, descripción y precio venta de los artículos SELECT referencia, descripción, precio_venta FROM Articulo; Listar el número de factura y fecha de todas las facturas SELECT nfactura, fecha FROM Factura;

Cláusula INTO .:'> >2',. " # '

&" " ' "

#

?

%

*

$ %

#

+ #

>1

1'1 # 2 >1 "

!

"

1'1 #

%

!

#

.:'> >2',. " -

$

Listar la razón social, dirección, población y provincia de los clientes y almacenarlo en un fichero, llamado Clientes.txt. SELECT razon_social, direccion, poblacion, provincia INTO OUTFILE ‘Clientes.txt’ FROM Cliente; Igual que antes, pero los campos separados por comas y sus valores encerrados entre comillas dobles. SELECT razon_social, direccion, poblacion, provincia INTO OUTFILE ‘Clientes.txt’ FIELDS TERMINATED BY ‘,’ OPTIONALLY ENCLOSED BY ‘\”’ FROM Cliente;

7

-R < & #

+ / < & &

1

+

#

!

$

Cláusula FROM "

# ,/>= #

% %

%

*

+

e &

%

$ MFROM lista tablas] # &" " '

#

#

( * # ( + " .::"/ A>.: &'/1.3 'A>.: ",'A>.: " ,/>= ' 1 % ! $

A>.:

/>&& A>.:

A>.: (

nombre_ tabla [CROSS] JOIN nombre_ tabla nombre_ tabla INNER JOIN nombre_ tabla nombre_ tabla STRAIGHT_JOIN nombre tabla nombre tabla LEFT [OUTER]JOIN nombre tabla ON expresión_ condicional nombre tabla LEFT [OUTER]JOIN nombre tabla USIGN (lista_ columnas) nombre tabla NATURAL LEFT [OUTER]JOIN nombre_tabla nombre tabla [CROSS] JOIN nombre tabla ",' A>.: (

# #

#

#

:2 >: 2 %

< ? % W "/"

",' >2'"/ A>.: ",'A>.: 2&.:3 9 (

#

",' A>.:

2&.3: 9

:1'2/1

",' A>.:

#

<

/>&& A>.: # # !

#

,/>=

#

W "/" .::"/ A>.:

#

# "

&'/1.3 'A>.:

"

(

#

(

#

&?

",' /.3 '

,2

(

7

-R < & #

+ / < & &

",'

1

+

#

!

$ $

M>2'"/O

( #

#

(

:2

/.3 'M>2'"/O #

# :2

,2

M>2'"/O

( ( # "

:2

&

#

!

%

%

Cláusula WHERE " # #

# &

%

$

[WHERE | <nombre_columna {*= | *= } nombre_columna>] "

/

# :

! " % &

(

!

&?

&

# 0

W "/" #

% .=.'

1<.:3 1

VW= S= WX

% (

H H

"

%

Listar todos los clientes de la provincia de Córdoba SELECT * FROM Cliente WHERE provincia = ‘Córdoba’; Listar todos los albaranes de fecha 2 de enero del 2005 SELECT * FROM Albaran WHERE fecha = “2005-01-02”; Listar todos los pedidos cuyo número sea superior a 5 y la forma de pago inferior a 3 SELECT * FROM Pedido WHERE npedido > 5 AND forma_pago < 3; Listar todos los artículos pedidos (sin duplicados) con precio superior a 1 o tengan un descuento del 10% SELECT DISTINCT referencia FROM lineapedido WHERE precio > 1 OR dto = 0.1;

7

-R < & #

+ / < & &

1

+

#

!

$

Listar todos la referencia, unidades precio, descuento e importe de venta de los artículos vendidos con importe superior a 5 o no tengan descuento. SELECT referencia, unidades, precio, dto, unidades * (precio - precio * dto) AS importe FROM lineaalbaran WHERE unidades * (precio - precio * dto) > 5 OR dto = 0;

Cláusula GROUP BY "

#

( 3/>2- ;[

( >2:' =10

&" " '

# % 3/>2- ;[

%

%

%

&

3/>2- ;[ % $

[GROUP BY expresión de agrupamiento] %

%

(

%

: (

&

>/ "/ ;[ 3/>2- ;[ >/ "/ ;[ 1 #

# &

3/>2- ;[ $

Listar la referencia y el total de unidades vendidas por artículo SELECT referencia, SUM(unidades) FROM lineaalbaran GROUP BY referencia; Listar la referencia y el precio medio por artículo pedido. SELECT referencia, AVG(precio) FROM lineapedido GROUP BY referencia; Listar el precio máximo y el mínimo de un artículo por pedido SELECT npedido, MAX(precio), MIN(precio) FROM lineapedido GROUP BY npedido;

Cláusula HAVING " (

3/>2- ;[ W "/" &

1<.:3

%

( 3/>2- ;[ $

[HAVING condición búsqueda]

7

-R < & #

+ / < & &

1

+

#

!

$ (

"

/

1<.:3

%

W "/"

1<.:3

1<.:3

(

% %

W "/" W "/" !

1<.:3 (

Listar el número de pedido, importe total del pedido que superen 700 . SELECT npedido, SUM( unidades * AS importe FROM lineapedido GROUP BY npedido HAVING importe > 700;

(precio - precio * dto) )

Listar el número de albaran, media de las unidades vendidas por albarán que sean inferior a 30 unidades. SELECT nalbaran, AVG(unidades) AS Unidad_Media FROM lineaalbaran GROUP BY nalbaran HAVING Unidad_Media < 30; Listar la referencia de artículo, unidades mínimas pedidas de cada uno, si son superiores a 10; SELECT referencia, MIN(unidades) AS Unidad_Minima FROM lineapedido GROUP BY referencia HAVING Unidad_Minima > 10; Listar la referencia de artículo, precio máximo vendido de cada uno, si es igual a 1.5 SELECT referencia, MAX(precio) AS Precio_Maximo FROM lineaalbaran GROUP BY referencia HAVING Precio_Maximo = 1.5;

Cláusula ORDER BY >/ "/ ;[ #

#

#

! '>- &

# %

$

ORDER BY { expresion order by [ASC|DESC] }[ , ...n] "

2

(

!

& *

%

7

+ #

-R < & #

+ / < & &

1

+

&?

#

!

#

$ *

%

'

# >/ "/ ;[ >/ "/ ;[ &

&" " '

&" " '

.&'.: '

2:.>: 1

&" " '

2:.>:

"

1&

# *

"

+

"&

#

# #

#

:2

#

#

:

!

>/ "/ ;[ Listar los clientes ordenados por razón social SELECT * FROM Cliente ORDER BY 2; Listar las líneas de albaran ordenadas por número de albarán y precio SELECT * FROM lineaalbaran ORDER BY nalbaran, precio; Listar las líneas de pedido ordenadas descendentemente por número de pedido y ascendentemente por precio. SELECT * FROM lineapedido ORDER BY npedido DESC, precio; Listar los pedidos ordenados por fecha descendentemente SELECT * FROM Pedido ORDER BY fecha DESC;

Cláusula LIMIT &

.=.' %

( $

[LIMIT n] [LIMIT m, n] % # # # H

% (

#

? -

.=.'

D

Listar los primeros 10 clientes SELECT * FROM Cliente LIMIT 10; Listar los 5 pedidos con importe más alto.

7

-R < & #

+ / < & &

1

+

#

!

$ 0

SELECT npedido, SUM( unidades * (precio - precio * dto) ) AS Importe FROM lineapedido GROUP BY npedido ORDER BY Importe DESC LIMIT 5 Listar los 20 artículos más baratos SELECT * FROM Articulo ORDER BY precio_venta LIMIT 20; Listar los pedidos del décimo al trigésimo SELECT * FROM Pedido ORDER BY npedido LIMIT 10,20;

Renombrar columnas. Cláusula AS &?

( 1&

# 1& "

+

&

1& 1 !

SELECT npedido, SUM( unidades * (precio - precio * dto) ) “Importe” FROM lineapedido GROUP BY npedido ORDER BY 2 DESC LIMIT 5 1

(

' &?

(

* * %

/

# #

% % *

#

+ + #

%

+

7

-R < & #

+ / < & &

1

+

#

!

$

* *

%

+ +

#

' W "/"

/ &" " '

Test de comparación = % &? &? *Z ^Y ^ ^Z Y YZ+ -

&?

# (

Listar todas las facturas con fecha posterior al 1/1/2004 SELECT * FROM Factura WHERE fecha > "2004/1/1"; Listar la referencia, descripción y precio de venta de los artículos cuyo precio de venta es inferior a los 2 . SELECT referencia, descripcion, precio_venta FROM Articulo WHERE precio_venta < 2; Listar los articulos que no sean de la familia ‘CONF’ SELECT * FROM Articulo WHERE familia <> ‘CONF’; Listar los datos del cliente con nif 30000001A SELECT * FROM Cliente WHERE nif = ‘30000001A'

Test de rango: Cláusula BETWEEN … AND " -

#

#

Listar la referencia, unidades, precio y dto de los artículos pedidos que tienen las unidades entre 5 y 10 SELECT referencia, unidades, precio, dto FROM LineaPedido WHERE unidades BETWEEN 5 AND 10; Listar la referencia y descripción de los articulos con precio de venta entre 0.5 y 3 SELECT referencia, descripción FROM Articulo WHERE precio_venta BETWEEN 0.5 AND 3; Listar los articulos cuya descripción comienza por la palabra Bolsa SELECT * FROM Articulo

7

-R < & #

+ / < & &

1

+

#

!

$ 8

WHERE descripcion BETWEEN ‘Bolsa’ AND ‘Bolsaz’;

Test de pertenencia a conjunto: Cláusula IN " #

# -

Listar el número de pedido, referencia y unidades de los articulos que se han pedido con unidades 5, 10 o 15 SELECT npedido, referencia, unidades FROM LineaPedido WHERE unidades IN (5, 10, 15); Listar la referencia, descripcion y precio de venta de los articulos que pertenecen a la familia ‘CONF’ y ‘PESC’ SELECT referencia, descripcion, precio FROM Articulo WHERE familia IN (‘CONF’,’PESC’); Listar el número y fecha de los albaranes con forma de pago 1, 2 o 3 SELECT nalbaran, fecha FROM Albaran WHERE forma_pago IN (1,2,3); Listar los efectos de las facturas 1 y 5 SELECT * FROM Efectos WHERE nfactura IN (1,5);

Test de correspondencia con patro: Cláusula LIKE %

%

# Y

" 6

"

-

Listar la referencia, descripcion y precio_compra de los artículos cuya descripción comience por ‘Zu’ SELECT referencia, descripcion, precio_compra FROM Articulo WHERE descripcion LIKE ‘Zu%’;

.X" !

k

!

6 % !

#

"

!

(

!

k

Listar el nif, razón social y direccion de los clientes que sean en cuya razón social aparece la letra ‘m’ en sexto lugar y la letra ‘a’ en décimo lugar

7

-R < & #

+ / < & &

"

k

1

+

#

!

$

SELECT nif, razon_social, direccion FROM Cliente WHERE razon_social LIKE ‘_____m___a%’;

Test de valor nulo: Cláusula IS NULL &

#

:2

%

Listar los efectos que tienen la cuenta corriente nula SELECT * FROM Efectos WHERE cc IS NULL; Listar la referencia, unidades, precio de venta y dto de los artículos que se han vendido y proceden de un pedido. SELECT referencia, unidades, precio, dto FROM LineaAlbaran WHERE npedido IS NOT NULL;

Condiciones compuestas. Operadores AND, OR y NOT #

= #

1:

( >/

:>' 2 ( &?

Listar la referencia, descripción, precio de venta y precio de compra de los artículos que no sean de la familia ‘BEBI’ y su precio de venta está entre 1 y 2 SELECT referencia, descripcion, precio_venta, precio_compra FROM Articulo WHERE familia <> ‘BEBI’ AND precio_venta BETWEEN 1 AND 2; Listar los clientes cuya razón social tenga ‘Supermercado’ o sean de la población Córdoba SELECT * FROM Cliente WHERE razon_social LIKE ‘%upermercado%’ OR población = ‘Córdoba’; Listar el número, cliente, fecha y forma de pago de los albaranes hechos el 4/1/2005 y la forma de pago no sea 4 SELECT nalbaran, cliente, fecha, forma_pago FROM Albaran WHERE fecha = “2005/1/4” AND NOT ( forma_pago = 5 );

&?

(

# 3/>2- ;[

&" " '

7

-R < & #

1<.:3 !

+ / < & &

1

+

#

!

$ -

" !

Funciones de agregado en la lista de selección *&2= 1<3 &' +

>2:'

>2:'*e+ =10 =.:

#

2

#

W "/"

# # #

#

.&'.: '

>2:'

# *

#

1 =.:

+ &2= 1<3

&2= 1<3 &' ( &'

=10

Listar las unidades máximas y mínimas de los artículos pedidos en aquellos pedidos cuyo número está entre 1 al 10 SELECT MAX(unidades) AS Maximo, MIN(unidades) As Minimo FROM LineaPedido WHERE npedido BETWEEN 1 AND 10; Listar el último cliente alfabético por la razón social SELECT MAX(razon_social) FROM Cliente; Listar el importe medio de los artículos vendidos en los albaranes que no preceden de un pedido. SELECT AVG( unidades * ( precio – precio * dto ) ) AS ImpMed FROM LineaAlbaran WHERE npedido IS NULL; Listar el precio de venta del artículo más caro de aquellos que se hayan vendido más de 100 unidades SELECT MAX(precio_venta) FROM Articulo WHERE und_vendidas > 100; Listar el pedido con total más pequeño de aquellos pedidos posteriores al 1 de enero del 2005 SELECT MIN( total_pedido) FROM Pedido WHERE fecha > “2005-01-01”; "

#

#

# &2=

1<3

#

#

#

?

7

-R < & #

+ / < & &

1

+

#

!

$8

W "/" & &" " ' W "/"

&

&" " '

W "/" * #

3/>2- ;[+

#

W "/" " W "/" 2

Función COUNT >2:'* + #

#

# &

%

$ COUNT ( { [ ALL | DISTINCT expresión ] | * } ) "

1

#

" #

*

%

# >2:' "

.&'.: ' + :2

% e

# # (

>2:'*e+ >2:'*e+ (

.&'.: '

2 >2:'*e+

&?

>2:'* .&'.: '

>2:'*e+ :2

#

< #

( +

#

# 1<3* .&'.: ' + &2=* .&'.: '

&' * .&'.: '

+ +

# >2:'*1 #

2 #

#

:2

"

#

#

%

"

#

1 #

2

#

< # #

2 :2

2 :2 #

>2:'* .&'.: ' #

Listar el número de representantes que hay SELECT COUNT(*) FROM Representante; Listar el número de clientes que han hecho pedido SELECT COUNT( DISTINCT cliente ) FROM Pedido; Listar el número de clientes que son supermercado SELECT COUNT(*) FROM Clientes WHERE razon_social LIKE ‘%upermercado%’;

7

-R < & #

+ / < & &

1

+

#

!

$ 8$

Valores NULL en las funciones de agregado -

#

:2 #

:2

#

#

1

# =.: =10 &

&2= 1<3 &' # # # # # #

#

#

:2 :2

#

>2:'

Tratamiento de filas duplicadas con DISTINCT # .&'.: ' .&'.: ' #

&2= 1<3 &' #

.&'.: '

!

>2:' &

% %

.&'.: '

# (

& &

.&'.: '

# (

< Listar cuantas formas de envio se han utilizado en los albaranes SELECT COUNT( forma_envio ) FROM Albaran; Listar cuantas formas de envio diferentes se han utilizado en los albaranes. SELECT COUNT( DISTINCT forma_envio ) FROM Albaran;

Agrupar filas con GROUP BY 3/>2- ;[

# 3/>2- ;[ #

#

#

&" " ' Listar el número de pedido y su importe total SELECT npedido, SUM( unidades * (precio – precio * dto ) ) FROM LineaPedido GROUP BY npedido; Listar la media de las unidades de los artículos vendidos que proceden de Pedidos SELECT referencia, AVG(unidades) FROM LineaAlbaran WHERE npedido IS NOT NULL GROUP BY referencia;

7

-R < & #

+ / < & &

1

+

#

!

$8

Listar la media de total de pedido por cliente de los pedidos con fecha del 1 al 4 de enero del 2005. SELECT cliente, AVG(total_pedido) FROM Pedido WHERE fecha BETWEEN “2005-01-01” AND “2005-01-04” GROUP BY cliente; 1

#

3/>2- ;[ 3/>2- ;[ #

8 #

!

&" " ' %

#

#

3/>2- ;[

#

# q

# &?

(

V -

Listar los unidades totales vendidas agrupadas por pedido y articulo SELECT npedido, referencia, SUM( unidades ) FROM LineaPedido GROUP BY npedido, referencia; &

( >/ "/ ;[

3/>2- ;[

3/>2- ;[ •

2



>

$

%

: # 1

#

#

3/>2- ;[



: 3/>2- ;[

1<.:3

-

% 3/>2- ;[

" # 1& -

OA ) 4) 8* 3W

W "/"

7

-R < & #

+ / < & &

1

+

#

!

$ 8(

&

;8

# #

& #

:2

#

.

/ 3/>2- ;[ & 1

&" " '

3/>2-

;[ A/,$;4

4) 8*

3W

W "/" W "/"

&" " ' = ( 1<.:3

%

1<.:3

W "/"

1<.:3 1<.:3 Listar el dni del cliente y el importe total de sus pedidos si superan 15000 SELECT cliente, SUM(total_pedido) FROM Pedido GROUP BY cliente HAVING SUM(total_pedido) > 15000;

W "/" 3/>2- ;[

1<.:3



$

W "/"

( ,/>=



3/>2- ;[ W "/"



1<.:3

"

W "/" "

1<.:3

# ( 1<.:3 1:

>/

( #

:>' -

Listar las formas de pago, su importe medio y su importe total en los albaranes para cada una de ellas, si el importe medio supera los 150 y el importe total es inferior a 500 SELECT forma_pago, AVG(total_albaran), SUM(total_albaran) FROM Albaran GROUP BY forma_pago HAVING AVG(total_albaran) > 150 AND SUM(total_albaran) < 500; '

7

-R < & #

1<.:3

+ / < & &

1

+

#

!

$ 8*

Listar la referencia del artículo y unidades totales vendidas para cada uno, siempre que tengan más de 5 líneas de albarán. SELECT referencia, SUM(unidades) FROM LineaAlbaran GROUP BY referencia HAVING COUNT(*) > 5;

#

VD

= &?

#

"

= &? #

'

! W "/"

1<.:3 <

#

(

Test de comparación de subconsulta (=, <>, <, <=, <, >=) &

#

%

&?

"

#

#

( !

<

#

#

#

Listar la referencia, descripción y precio de venta de los artículos cuyo precio de venta es igual o superior al precio medio de venta de los artículos pedidos con más de 4 unidades. SELECT referencia, descripcion, precio_venta FROM Articulo WHERE precio_venta > (SELECT AVG(precio) FROM LineaPedido WHERE unidades > 4 ); Listar la referencia, unidades y precio de venta de los artículos pedidos cuyas unidades sean superiores o iguales a las unidades mínimas vendidas de ese mismo artículo SELECT referencia, unidades, precio_venta FROM LineaPedido WHERE unidades >= (SELECT MIN(unidades) FROM LineaAlbaran LA WHERE LA.referencia = LP.referencia );

Test de pertenencia a conjunto. Cláusula IN " #

#

&

#

#

#

# '/2" -

Listar el nif, razón social y teléfono de los clientes que han hecho pedido en el mes de enero del 2004 SELECT nif, razon_social, telefono FROM Cliente WHERE nif IN ( SELECT cliente FROM Pedido

7

-R < & #

+ / < & &

1

+

#

!

$ 80

WHERE fecha BETWEEN “2005/1/1” AND “2005/1/31”); Listar la forma de pago y su descripción de aquellas formas de pago que no se han utilizado en los albaranes. SELECT forma_pago, descripcion FROM Forma_Pago WHERE forma_pago NOT IN (SELECT DISTINCT forma_pago FROM Albaran);

Test de existencia. Cláusula EXISTS "

%

"

Listar los clientes que tienen al menos un albaran con forma de pago 3. SELECT * FROM Cliente WHERE EXISTS ( SELECT * FROM Albaran WHERE cliente = nif AND forma_pago = 3 ); Listar el nif y nombre del representante que haya hecho pedidos SELECT nif, nombre, apellidos FROM Representante WHERE EXIST( SELECT * FROM Ped-Rep WHERE representante = nif ); Listar listar los clientes que tienen por lo menos 3 pedidos. SELECT * FROM Cliente WHERE EXISTS( SELECT COUNT(*) AS Pedidos FROM Pedido WHERE cliente = nif HAVING Pedidos > 3 );

Test cuantificado ANY "

%

1:[ #

-

Lista la referencia y la descripción de los artículos cuyo precio de venta sea diferente a alguno de los precios a los que se ha vendido ese artículo SELECT referencia, descripcion FROM Articulo AS A WHERE precio_venta <> ANY (SELECT DISTINCT precio_venta FROM LineaAlbaran AS LA

7

-R < & #

+ / < & &

1

+

#

!

$8

WHERE LA.referencia = A.referencia); Listar las facturas cuya fecha sea inferior a alguna de las fechas de vencimiento de sus efectos. SELECT * FROM Facturas AS F WHERE fecha < ANY (SELECT fecha_vto FROM Efectos AS E WHERE E.nfactura = F.nfactura); -

#

% 1:[

Z

.: "0.&'& 1 &" " '

#

Listar los clientes que han hecho pedido el día 3/1/2005 SELECT * FROM Cliente WHERE nif IN ( SELECT DISTINCT cliente FROM Pedido WHERE DATE(fecha) = “2005-01-03”); SELECT * FROM Cliente WHERE EXISTS ( SELECT * FROM Pedido WHERE cliente = nif AND DATE(fecha) = “2005-01-03”); SELECT * FROM Cliente WHERE nif = ANY (

SELECT DISTINCT cliente FROM Pedido WHERE DATE(fecha) = “2005-01-03”);

Subconsultas anidadas = &? : #

#

%

! !

1

Listar el nif y el nombre de los representantes que tienen pedidos hechos el 3 de enero del 2005. SELECT dni, nombre FROM Representante WHERE dni IN (SELECT dni FROM Ped-Rep WHERE npedido IN (SELECT npedido FROM Pedido WHERE Date(fecha) = “200501-03”) ); #

&" " '

#

7

-R < & #

+ / < & &

1

+

#

!

-

$ 88

Listar los clientes que han pedido más de 5 unidades de artículos y la forma de pago es ‘Giro 30 días’ SELECT nif, razon_social FROM Cliente WHERE nif IN (SELECT cliente FROM Pedido WHERE npedido IN (SELECT npedido FROM LineaPedido WHERE unidades > 5 ) AND forma_pago = (SELECT forma_pago FROM Forma_Pago WHERE descripcion = ‘Giro 30 días’) );

Subconsultas en cláusula HAVING 1

% 1<.:3 /

Listar la referencia y el precio medio de aquellos artículos vendidos cuyo precio medio supere el precio medio de todos los artículos pedidos. SELECT referencia, AVG(precio) AS precio_medio FROM LineaAlbaran GROUP BY referencia HAVING precio_medio > (SELECT AVG (precio) FROM LineaPedido ); Listar el número de albarán e importe total del albarán para aquellos albaranes que superen a alguno de los importes totales de los pedidos. SELECT nalbaran, SUM( unidades * ( precio – precio * dto ) ) AS Importe FROM LineaAlbaran GROUP BY nalbaran HAVING Importe > ANY ( SELECT SUM( unidades * ( precio – precio * dto) ) FROM LineaPedido GROUP BY npedido );

A>.:& !

2

* $

( &? &

#

+

" 2

!

#

%

#

7

-R < & #

+ / < & &

1

+

#

!

$8

"

*Z ^Y

+

#

Listar el número de pedido, fecha, cliente, razón social y total pedido SELECT npedido, fecha, nif, razon_social, total_pedido FROM Pedido, Cliente WHERE nif = cliente; "

,/>=+ 0

* /

'

(

Z

# -

-

? #

1

#

&" " ' &

Joins de dos tablas 2

A>.: % " A>.:

*

+ -

Listar el número de albarán, fecha, referencia de artículo, unidades, precio y dto. SELECT A.nalbaran, A.fecha, LA.referencia, LA.unidades, LA.precio, LA.dto FROM Albaran A, LineaAlbaran LA WHERE A.nalbaran = LA.nalbaran; Listar la referencia de artículo, descrición, unidades y precio de los artículos pedidos SELECT A.referencia, A.descripcion, LP.unidades, LP.precio FROM Articulo A, LineaPedido LP WHERE A.referencia = LP.referencia; Listar el número de factura, fecha de factura, número de efecto, fecha de vencimiento de todos los efectos SELECT F.nfactura, F.fecha, E.nefecto, E.fecha_vto FROM Factura F, Efectos E WHERE F.nfactura = E.nfactura;

7

-R < & #

+ / < & &

1

+

#

!

$ 8-

A>.: &" " ' ,/>=

(

!

#

" "

1

-

! * *

+

-

+

9 * *

"

*

+

*

+

+

+ 9

"

#

9

#

# #

" #

#

JOINS con criterios de selección de filas A>.: # Listar la referencia, descripcion, unidades, precio y descuento de los artículos vendidos que no tienen pedido SELECT A.referencia, A.descripcion, LA.unidades, LA.precio, LA.dto FROM Articulo A, LineaAlbaran LA WHERE A.referencia = LA.referencia AND LA.npedido IS NULL; Listar el número de pedido, fecha, cliente, razón social de aquellos pedidos con forma de pago 2, 3 o 5 SELECT P.npedido, P.fecha, P.cliente, C.razon_social FROM Pedido P, Cliente C WHERE P.cliente = C.nif AND P.forma_pago IN( 2, 3, 5 ); Listar el número de factura, fecha de factura, número de efecto y fecha de vencimiento de aquellos efectos que tengan el vencimiento a más de 30 días con respecto a la fecha de factura SELECT F.nfactura, F.fecha, E.nefecto, E.fecha_vto FROM Factura F, Efectos E WHERE F.nfactura = E.nfactura AND DATEDIFF(E.fecha_vto, F.fecha) > 30;

JOINS con múltiples columnas de emparejamiento # 9

7

-R < & #

#

#

+ / < & &

1

+

#

!

$

A>.: $ $ # (

#

-

* $

-

+

A

Listar la referencia, unidades vendidas, precio de venta, unidades pedidas, precio de venta pedido de las líneas de albarán que proceden de un pedido SELECT LA.referencia, LA.unidades, LA.precio, LP.unidades, LP.precio FROM LineaAlbaran LA, LineaPedido LP WHERE LA.npedido = LP.npedido AND LA.nlineap = LP.nlinea;

JOINS de tres o más tablas 2

A>.: % " A>.:

n

$

*

+

-

D HHH (

!

Listar el número de pedido, fecha, cliente, razón social, referencia, unidades, precio y dto de los pedidos con total superor a 1000 SELECT P.npedido, P.fecha, P.cliente, C.razon_social, LP.referencia, LP.unidades, LP.precio, LP.dto FROM Pedido P, Cliente C, LineaPedido LP WHERE P.cliente = C.nif AND P.npedido = LP.npedido AND P.total_pedido > 1000; # ( #

-

$

! -

-

(

Listar el número de pedido, fecha y nombre del representante que tomó el pedido SELECT P.npedido, P.fecha, R.nombre FROM Pedido P, Ped_Rep PR, Representante R WHERE P.npedido = PR.npedido AND PR.dni = R.dni; 1

# ! 49D9GHH6 !

+ #

*A>.:

Listar el número de pedido, fecha, nombre del cliente que hizo el pedido y nombre del representante para los pedidos con fecha 3/1/2005

7

-R < & #

+ / < & &

1

+

#

!

$ $

SELECT P.npedido, P.fecha, C.razon_social, R.nombre FROM Pedido P, Cliente C, Representante R, Ped_Rep PR WHERE P.cliente = Cliente.nif AND P.npedido = PR.npedido AND PR.dni = R.dni AND P.fecha = “2005-01-03”; ! &? 9 # (

#

A>.:&

%

Listar el número de pedido, cliente, fecha de pedido, número de albaran, cliente del albarán y fecha de albarán para aquellos pedidos hechos el mismo día que los albaranes SELECT P.npedido, P.cliente, P.fecha, A.nalbaran, A.cliente, A.fecha FROM Pedido P, Albaran A WHERE P.fecha = A.fecha;

JOINS con condiciones de búsqueda sin igualdad &

A>.: %

*

*

+ A>.:

+ !

(

A>.:&

8 A>.:

*Z ^Y " A>.:

#

+

A>.:

" !

!

JOINS internos y externos "

A>.: A>.: .:'"/:> A>.: #

-

Listar los artículos con su referencia, descripción, familia y descripción de la familia SELECT A.referencia, A.descripcion, A.familia, F.descripcion FROM Articulo A, Familia F WHERE A.familia = F.familia; "

,/>= *

7

-R < & #

+ / < & &

1

+

#

!

&

$

W "/" &

" A

.

%

"

Listar los artículos con su referencia, descripción, familia y descripción de la familia SELECT A.referencia, A.descripcion, A.familia, F.descripcion FROM Articulo A INNER JOIN Familia ON A.familia = F.familia; #

%

# 2&.:3 !

(

!

Listar los artículos con su referencia, descripción, familia y descripción de la familia SELECT A.referencia, A.descripcion, A.familia, F.descripcion FROM Articulo A INNER JOIN Familia USING( familia ); &

#

%

# 2&.:3

.:'"/:> !

!

*

+

A>.:

# *

#

:2

+ "

#

A>.:

%

1 #

:2

& ( "0'"/:>

A>.: A>.:

A>.: -

%

%

JOIN EXTERNO completo 2

A>.: "0'"/:> A>.:+

A>.: .:'"/:> $



" A>.: .:'"/:> * A>.:+



) ( #



# :2

) (

7

-R < & #

+ / < & &

#

1

+

#

!

$ (

#

" A>.: W "/"

:2

A

"%

( % >: A>.: & A "%

,/>= #

= &?

%

>2'"/

JOIN EXTERNO izquierdo y derecho "

# A>.: "0'"/:> A>.: "0'"/:> .\?2."/ > $



" A>.: .:'"/:> * A>.:+



)

(

#

#

" ",' A>.: W "/" 2&.:3

,/>=

:2

A>.: "0'"/:> .\?2."/ > ( % >: A>.: '

%

Listar el número de pedido, fecha, forma de pago y la descripcion de la forma de pago de todos pedidos, aunque no tengan la forma de pago NULL SELECT P.npedido, P.fecha, P.forma_pago, FP.descripcion FROM Pedido LEFT JOIN FormaPago FP ON P.forma_pago = FP.forma_pago; " ( (

2&.:3 #

#

"

>: !

Listar el número de pedido, fecha, forma de pago y la descripcion de la forma de pago de todos pedidos, aunque no tengan la forma de pago NULL SELECT P.npedido, P.fecha, P.forma_pago, FP.descripcion FROM Pedido LEFT JOIN FormaPago FP USING(forma_pago); &

A>.: "0'"/:> $



" A>.: .:'"/:> * A>.:+



-

"/"

>

) #

7

-R < & #

( #

+ / < & &

1

+

#

!

:2

$ *

Listar el número de pedido, fecha, forma de pago y la descripcion de la forma de pago de todas las formas de pago, aunque no tengan pedidos SELECT P.npedido, P.fecha, P.forma_pago, FP.descripcion FROM Pedido RIGHT JOIN FormaPago FP ON P.forma_pago = FP.forma_pago; :

#

#

A>.: ,/>=

&" " '

JOIN con múltiples columnas de emparejamiento "

#

%

1:

>/

9

(

# (

(

Listar el número de albaran, número de línea, referencia, unidades de la línea del albarán, unidades de la línea del pedido y su diferencia de todos artículos vendidos SELECT LA.nalbaran, LA.nlinea, LA.referencia, LA.unidades, LP.unidades FROM LineaAlbaran LA INNER JOIN LineaPedido LP ON LA.npedido = LP.npedido AND LA.nlineap = LP.nlinea;

JOIN anidados ( A

A

<

Listar el número de albarán, fecha, cliente, razón social del cliente, número de línea, referencia, descripción del artículo, unidades y precio de los albaranes hechos en la fecha 4/1/2004 SELECT A.nalbaran, A.fecha, LA.nlinea, LA.referencia, AR.descripcion, LA.unidades, LA.precio FROM Albaran A INNER JOIN LineaAlbaran LA INNER JOIN Articulo AR ON LA.referencia = AR.referencia ON A.nalbaran = LA.nalbaran; #

>:

#

.::"/ A>.: "

( .::"/ A>.: "

$ (

#

$

>:

# A>.: " .::"/ A>.:

A>.: 2&.:3 2&.:3

Listar el número de albarán, fecha, cliente, razón social del cliente, número de línea, referencia, descripción del

7

-R < & #

+ / < & &

1

+

#

!

$ 0

artículo, unidades y precio de los albaranes hechos en la fecha 4/1/2004 SELECT A.nalbaran, A.fecha, LA.nlinea, LA.referencia, AR.descripcion, LA.unidades, LA.precio FROM Albaran A INNER JOIN LineaAlbaran LA USING(nalbaran) INNER JOIN Articulo AR USING(referencia) "

A

A

%

#

# %

A :

'

A (

#

A

A

%

(

Introducir datos. Sentencia INSERT %

.:&"/'

#

!

INSERT [LOW_PRIORITY | DELAYED | IGNORE] [INTO] tabla [(lista_columnas)] (valores_de_datos) (

(

"

( ( &

(

( #

:2

*

#

+

' #

:2

# (

(

"

# #

#

$ •

2

(

.:&"/'



2

(

.:&"/'

&" " '

#

&"' #



2

(

#

<1 2"&

! %

7

-R < & #

&

$

+ / < & &

1

+

#

!

$

INSERT [LOW_PRIORITY | DELAYED | IGNORE] [INTO] tabla [(lista_columnas)] SELECT … &" " '

#

< Crear una tabla, llamada Clientes con las columnas nif, razón social y teléfono CREATE TABLE Clientes ( nif VARCHAR(10) BINARY NOT NULL PRIMARY KEY, razon_social VARCHAR(40) BINARY NOT NULL, telefono INTEGER(9), ); Insertar en la tabla anterior los clientes de la tabla Cliente que tengan teléfono INSERT INTO Clientes SELECT nif, razon_social, telefono FROM Cliente WHERE telefono IS NOT NULL; ! &"' %

!

#

&

$

INSERT [LOW_PRIORITY | DELAYED | IGNORE] [INTO] tabla SET columna = exp | DEFAULT, columna = exp | DEFAULT, … # #

&

#

:2

# #

2 ",12 '

% !

= &?

#

-

Introducir en la tabla Albarán un albarán con fecha actual, cliente con nif 30000002A, forma de envío es ‘Transporte propio’, forma de pago 4 INSERT INTO Albaran SET cliente = ‘30000002A', fecha = Current_Date(), forma_envio = ‘Trasporte propio’, forma_pago = 4; # #

&

<1 2"& % $

INSERT [LOW_PRIORITY | DELAYED | IGNORE] [INTO] tabla [(lista_columnas)] VALUES (valores_de_datos) #

" (

-

Introducir en la tabla Cliente un cliente con nif ‘30000100A', razón social ‘Supermercado Mandarín’ y teléfono 957774477 INSERT INTO Cliente (nif, razon_social, telefono) VALUES (‘30000100A',’Supermercado Mandarín’, 957774477;

7

-R < & #

+ / < & &

1

+

#

!

$ 8

>W@-/.>/.'[

.:&"/'

" 1["

# #

# & #

.3:>/" &

#

# #

(

#

Eliminar filas de datos. Sentencia DELETE " "'"

#

&

%

$

DELETE [LOW_PRIORITY] [IGNORE] FROM tabla [WHERE condición] [ORDER BY ...] [LIMIT n] "

#

&

W "/" &

W "/" '/2: 1'" '1; "+

* .=.'

>W@-/.>/.'[

% &

>/ "/ ;[

" .=.'

Borrar todos los clientes que no han hecho pedido durante el més de enero DELETE FROM Cliente WHERE NOT EXISTS( SELECT * FROM Pedido WHERE nif = cliente );

Actualización de datos. Sentencia UPDATE 2- 1'"

# #

2

# 2- 1'"

# &

%

# (

$

UPDATE [LOW_PRIORITY | IGNORE] tabla SET columna = expresión [, columna = expresión] … [WHERE condicion] [ORDER BY exp] [LIMIT n]

2

7

&"' ( " #

-R < & #

+ / < & &

#

#

= %

1

+

#

!

$

#

# %

% 2- 1'"

W "/"

>W@-/.>/.'[

(

.3:>/"

(

#

# #

( .=.'

%

( >/ "/ ;[

%

(

&

.=.' Actualizar las formas de pago de todos los albaranes a ‘Giro 90 días’ cuando el valor de estas sean NULL. UPDATE Albaran SET forma_pago = ( SELECT forma_pago FROM Forma_pago WHERE descripcion = ‘Giro 90 dias’ ) WHERE forma_pago IS NULL; Actualizar el total albarán de todos los albaranes a la suma de los importes de sus correspondientes líneas de albarán UPDATE Albaran A SET total_albaran = ( SELECT SUM( unidades * ( precio – precio * dto) FROM LineaAlbaran LA WHERE A.nalbaran = LA.nalbaran );

7

-R < & #

+ / < & &

1

+

#

!

$ -

1

+ &? 9

G

!$ ! = 9

<

= &? * $

( + < ?

( ! 1 '"/

!

#

/>-

/"1'" '1; " * + 1 '"/ '1; "

( !

#

/>- '1; "

Modificación de tablas con ALTER TABLE 8 •

1

1 ! #



1



1 *



$

:2 -/.=1/[ X"[ 2:.?2"

+

,>/".3: X"[ " X

!

",12 '

/ (

%

.

%

1 '"/ '1; "

!

$

ALTER TABLE tabla [CHANGE nombre_columna nombre_columna_nuevo nuevo _tipo_datos [ ( precisión [ , escala ] ) ] [NULL | NOT NULL]] | ADD [COLUMN] declaración_columna [FIRST | AFTER nombre columna] | ADD INDEX nombre_índice (columnas índice) | ADD PRIMARY KEY (columnas_índice) | ADD UNIQUE nombre_índice (columnas_índice) | CHANGE [COLUMN] nombre_columna declaración_columna | ALTER [COLUMN] nombre_columna [SET DEFAULT valor | DROP DEFAULT] | DROP [COLUMN] nombre_columna | DROP INDEX nombre_índice (lista_columnas) | DROP PRIMARY KEY

7

$ R)

!

+ / < &

$-

| MODIFY [COLUMN] declaración_columna | RENAME [AS] nombre _tabla_nueva | ADD [CONSTRAINT [nombre_restricción]] PRIMARY KEY [tipo_índice] (columnas_índice) | ADD [CONSTRAINT [nombre_restricción]] UNIQUE [nombre_índice] [tipo_indice] (columnas_indice) | ADD [CONSTRAINT [nombre_restricción]] FOREIGN KEY [nombre_indice] (columnas_indice) [referencia] "

# % !

&

1:3"

#

(

#

9

!

X"[O /","/": "& " X 1,'"/

" X 2:.?2" ,./&'

?

"

#

(

:2 #

+ " M,>/".3:

-/.=1/[ X"[ 2:.?2" % #

m :>':2

:2 1 ! < />-

* *-/.=1/[ X"[

*-/.=1/[ X"[

2:.?2"+

=> .,[ M > 2=:O M > 2=:O

" /":1="

%

2:.?2"+ !

1:3" /":1="

1 '"/ '1; "

#

1:3"

=> .,[

1 ) ! 1:3" /":1="

=> .,[ 1:3"

( -

1

6 Cambiar la definición de la columna ventas en la tabla Cliente. A partir de ahora se llamará total_vendido, será de tipo decimal(9,2) y eliminar su valor por defecto ALTER TABLE Cliente CHANGE COLUMN ventas total_vendido DECIMAL(9,2); ALTER TABLE Cliente ALTER COLUMN total_vendido DROP DEFAULT;

7

$ R)

!

+ / < &

$ -$

Añadir a la tabla Efectos una columna llamada importe con tipo de datos decimal(7,2). Por defecto tendrá el valor 0 y no admitirá valores nulos ALTER TABLE Efectos ADD COLUMN importe DECIMAL(7,2) NOT NULL DEFAULT 0; Añadir un índice a la tabla Cliente por la columna razon_social ALTER TABLE Cliente ADD INDEX Razon_Social (razon_social); Añadir a la tabla Cliente una columna llamada cp, que almacenará el codigo postal y ponerla después de la columna provincia ALTER TABLE Cliente ADD COLUMN cp INTEGER(5) AFTER poblacion Cambiar la tabla Clientes y eliminar la columna telefono ALTER TABLE Clientes DROP COLUMN telefono; Cambiar el nombre de la tabla Efectos a Recibo ALTER TABLE Efectos RENAME Recibo; Borrar el índice Razon_Social de la tabla Cliente ALTER TABLE Cliente DROP INDEX Razon_Social;

Borrado de tablas con DROP TABLE />- '1; " "

%

#

L * ;1+ 1

!

# %

/>- '1; "

$

DROP TABLE [IF EXISTS] tablal [, tabla2]...; :

(

/>- '1; " ,>/".3: X"[

,>/".3: X"[ # & # (

7

$ R)

#

!

+ / < &

#

# # # #

$-

'

( & (

&

/>- '1; " * " "'" < />- '1; "

% .,"0.&'&

%

= &? />- '1; "

% Borrar la tabla Clientes DROP TABLE IF EXISTS Clientes;

Borrado de bases de datos con DROP DATABASE "

= &? />-

1'1;1&"

%

$

DROP DATABASE [IF EXISTS] nombre_BD; &

% .,"0.&'&

= &? />- 1'1;1&"

% [ *

% .,"0.&'&+

#

#

! "

#

# = &?

#

# = &?

&? #

#

6H

!

" = &? #

"%

&?

= &?

# /"<>X"

# 3/1:' #

/"<>X"

3/1:'

# $

# #

+ (

*

*

# ( #

+ *

*

#

# #

# + 3/1:'

'

+

/"<>X"

3/1:' # +

7

$ R)

!

+ / < &

*

# &

$ -(

# (

(

Sentencia GRANT 3/1:' & %

= &?

# $

GRANT tipo_priv [(lista_col)] [, tipo_priv [(lista_col)]… ON {*.* | * | nombre_bd.* | nombre_bd.nombre_tabla | nombre_tabla } TO usuario IDENTIFIED BY ‘contraseña’ [, usuario IDENTIFIED BY ‘contraseña’] … [WITH GRANT OPTION] "

(

#

(

*

+

#

#

* 1 '"/

1

/"1'"

1

" "'"

1

/>-

1

.: "0

1

.:&"/'

1

&" " '

1

2- 1'"

1

!

! # # ( #

#

* ,. "

1

-/> "&&

1

# # #

/" >1

1

# '

& 2' >W:

1

#

1 *1 -/.<. "3"&+

1

2&13"

- #

E

>:

#

# *

F +

#

# !

! #

;

7

#

.

$ R)

!

+ / < &

$ -*

ee

- #

*

e

- #

*

@;

e

@;

@

@

; b ;

+

- #

#

- #

#

$

- #

#

$

(

+

>:

#

! ( '>

# ' (

. ":'.,." %

Z

(' )

;[ &

' !@

k

(

.X" # *‘nombre_usuario’@’nombre_host’+

Crear el usuario rafa, que puede acceder a todas las tablas en la base de datos almacen de cualquier host con la contraseña secreto. GRANT ALL ON almacen.* to rafa IDENTIFIED BY “secreto”; Crear un usuario de nombre maria con privilegios de sólo lectura para las tablas en la base de datos almacen pudiendo conectarse en el host localhost GRANT SELECT ON almacen.* TO maria@localhost; Crear el usuario pepe GRANT USAGE ON *.* TO pepe;

Sentencia REVOKE &

/"<>X" $

%

(

#

#

REVOKE tipo_priv [(lista_col)] [, tipo_priv [(lista_col)]]… ON { *.* | * | nombre_bd.* | nombre_bd.nombre_tabla | nombre_tabla } FROM usuario [, usuario]

7

$ R)

!

+ / < &

$ -0

3/1:' /"<>X" = &? />- 2&"/

-

Revocar todos los privilegios para el usuario rafa en el host local REVOKE ALL ON *.* FROM rafa@localhost; Revocar los derechos de inserción, borrado y actualización a todos los usuarios del host local en la tabla Cliente de la base de datos Almacen REVOKE INSERT, DELETE, UPDATE ON Almacen.Cliente FROM ‘%’@localhost; Revocar el derecho de actualización a la columna referencia de la tabla Artículo en la base de datos Almacen para el usuario pepe en cualquier host REVOKE UPDATE (referencia) ON Almacen.Articulo FROM pepe@’%’; -

#

#

(

$ SHOW GRANTS FOR usuario;

Contraseñas mediante SET PASSWORD [

#

3/1:'

)

&"' )

-1&&W>/ &

%

$

SET PASSWORD [FOR usuario] = PASSWORD(“contraseña”); &

,>/

)

" = &?

-

% />-

)

"

# 1'1;1&" "

/>- '1; "

= &? #

!

(

# #

! ! #

= &?

#

( 1

7

$ R)

!

+ / < &

#

%

$-

Copia de seguridad con MySQLDUMP (backups) ! % #

# %

&

%

mysqldump [opciones] nombre_BD [nombre_tabla]…

%

#

S mysqldump nombre_BD > fichero_backup :

( />- '1; " & %

UU > X '1; "

#

mysqldump –-opt nombre_BD > fichero_backup ) ( ! mysqldump –u root –p almacen > almacen.bak "

#

#

%

&? .:&"/'

Recuperación de una base de datos -

( !

#

!

S %

mysql nombre_BD < fichero_backup &

( #

!

( " = &?

1

# #

# (

7

$ R)

!

+ / < &

$ -8

2 "

) 7

%

+

= &? *777

+

%

$ •

= &? 1

5 # #



= &? ?

;

7

5 "



= &?

( &?

5 " *

&? +

*

%

+ = &? #

# <

#

Instalación del administrador de MySQL = &?

( $ ' .7 /

" #

9

# #

&

! O # •

32.



, #

#

( ' .7 /

!

= &? $ 7

G

$$ R;

(

$

D

7

= &? VH

(

-

4

( ( (

= &? %

# "

#

"

+ / < &

= &?

( ? 2

$-

V & 2

# ( 1

%

#

= &?

-

$

Figura 5. Cuadro de conexión al servidor

# D

%

%

5 -

$ %

(

% %

# G

2

4

-

5 : 7

&

5

)

%

#

%

&

#

# ( V

5

.#

6

-

5 -

# 44HN

# ) #

)

#

7

$$ R;

"

1

+ / < &

( # (

(

$ --

Figura 6. MySQL Administrator

Información del Servidor "

%

#

#

"

#

#

Control del servicio " # B PH

)

#

# #

H P !? !

#

'

#

Variables de inicio "

#

# #

# " = .&1= .

Administración de usuarios ! #

(

7

$$ R;

"

+ / < &

8 (

) /

"

;

) -

H

"

-

%

%

)

1

H #

( )

'

#

-

#

Conexiones del servidor "

#

% % W = &? 1 % "

# > ;

( -

#

&

2

% %

[

'

Health "

(

#

#

!

%

!

#

1

!

%

# '

!

&?

Server Logs "

#

#

#

# #

#

"% % + '

* #

&? #

*

3 # %

#

%

#

+

"

Estado de las réplicas &

%

#

" ( "

Backups "

( S

-

( (

-

( #

#

7

$$ R;

"

+ / < &

$

3 &? .:&"/'

-

!

Restore " -

# (

#

#

&?

Catálogo " & ' #

#

%

!

-

$ Instalación de MySQL Query Browser " &?

&

( &?

#

"

#

#

#

-

$

D

7

G 4

# "

#

= &?

( ? 2

V & 2

# (

1

% = &? 1 #

" #

&

"

%

&? !

( -

&? #

7

$$ R;

#

"

+ / < &

# &

&?

&

#

&?

& G

!)

&

%H

#

" %

&

S &" " ' %

A #

&" " ' & )

Figura 7. MySQL Query Browser

E #

1 F

%2

#

'

# "

! % &? 1

%

"

!

= &? &

( (

7

$$ R;

"

+ / < &

(

#

S

#

' ! ' '

( (

" 1 ( %

&?

-

$

D

7

G 4

# "

#

= &?

( ? 2

V & 2

# ( # ( %

1

Figura 8. Pantalla de creación de una conexión al servidor

7

$$ R;

"

+ / < &

*

"

& % = &?

.%

( )

5

# & #

# (

-

%

)

# 1 %

# ( &

( % # (

1

= &?

(

Figura 9. Pantalla principal de MySQL Control Center

"

(

# (

#

= &?

!

% " #

"

&? & &?

7

$$ R;

"

+ / < &

0

& 1

# (

)

= & ?

7

$$ R;

"

+ / < &

#

#

Related Documents