Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL Ii
SQL Ii
Una sentencia INSERT de una fila que aade una nica nueva fila de datos a una
tabla. Su uso es habitual en aplicaciones diarias, por ejemplo, en programas de
entrada de datos.
Una sentencia INSERT multifila, que extrae filas de datos de otra parte de la
base y las aade a una tabla.
Una utilidad de carga masiva, que aade datos a una tabla desde un fichero
externo a la base de datos. Se utiliza habitualmente para cargar inicialmente la
base de datos o para incorporar datos transferidos desde otro sistema informtico
o recolectados desde muchas localizaciones.
nombre de columna
VALUES
constante
NULL
Enrique Jordan
36
111
Director de ventas
Alicante (nmero de oficina 13)
25 de Julio de 2000.
An no asignada.
0
TITULO
VP Ventas
Dir. Ventas
Dir. Ventas
Rep. Ventas
Dir. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Dir. Ventas
CONTRATO
14/06/1998
19/05/1997
12/02/1998
12/10/1999
12/10/1999
10/12/1996
20/10/1996
13/01/2000
01/03/1997
14/11/1998
25/07/2000
EMPRESA
EVBE S.A.
Exclusivas del Este S.L.
Pino S.L.
Hnos. Martinez S.A.
Distribuciones Sur S.A.
AFS S.A.
Exclusivas Soriano S.A.
Lopez Asociados S.L.
Hernandez & hijos S.L.
Componentes Fernandez S.A.
Domingo S.L.
Zapater Importaciones S.A.
Hnos. Ramon S.L.
JPF S.L.
Distribuciones Montiel S.L.
Construcciones Leon S.A.
Martinez & Garcia S.L.
Exclusivas Norte S.A.
Importaciones Martin S.L.
Roda & Castedo S.L.
MALB S.A.
Corporacion Oeste S.A.
REP_CLIE
103
101
105
102
110
101
106
108
103
102
107
109
106
105
102
102
109
108
104
103
101
111
LIMITE_CREDITO
50.000
65.000
50.000
40.000
35.000
20.000
65.000
50.000
45.000
20.000
40.000
55.000
35.000
30.000
50.000
65.000
25.000
60.000
20.000
25.000
45.000
15.000
FECHA_PEDIDO
17/12/1999
11/01/2000
03/01/2000
10/02/2000
12/10/1999
30/01/2000
02/02/2000
17/12/1999
14/01/2000
23/02/2000
08/01/2000
27/12/1999
20/01/2000
24/02/2000
CLIE
2117
2111
2101
2118
2102
2107
2112
2103
2118
2108
2124
2103
2114
2124
REP
106
105
106
108
101
110
108
105
108
109
107
105
108
107
3
FAB
REI
ACI
FEA
QSA
ACI
ACI
REI
ACI
BIC
FEA
BIC
ACI
QSA
FEA
PRODUCTO
2A44L
41003
114
XK47
41004
4100Z
2A44R
41004
41003
112
41003
41004
XK47
114
CANT
7
35
6
4
34
9
10
28
1
10
1
6
20
10
IMPORTE
31.500
3.745
1.458
1.420
3.978
22.500
45.000
3.276
652
1.480
652
702
7.100
2.430
12/10/1999
22/02/2000
08/01/2000
02/03/2000
29/01/2000
04/11/1999
12/10/1999
15/02/2000
10/02/2000
04/01/2000
27/02/2000
25/01/2000
10/02/2000
31/12/1999
18/02/2000
02/02/2000
22/10/2000
102
105
108
107
110
108
103
101
102
102
102
109
108
105
103
101
111
ACI
ACI
IMM
IMM
REI
ACI
REI
ACI
IMM
REI
QSA
IMM
QSA
ACI
ACI
REI
ACI
4100Z
41002
773C
775C
2A45C
41002
2A44G
4100X
779C
2A45C
XK47
779C
XK47
4100Y
4100X
2A44R
41004
6
54
3
22
8
10
6
6
2
24
6
3
2
11
24
5
20
15.000
4.104
2.825
31.350
632
760
2.100
150
3.750
1.896
2.130
5.625
776
27.500
600
22.500
2.340
nombre de columna
IMPORTE
31.500
3.978
3.276
702
15.000
760
2.100
27.500
FECHA_PEDIDO
17/12/1999
11/01/2000
03/01/2000
10/02/2000
12/10/1999
30/01/2000
02/02/2000
17/12/1999
14/01/2000
23/02/2000
08/01/2000
27/12/1999
20/01/2000
24/02/2000
12/10/1999
22/02/2000
08/01/2000
02/03/2000
29/01/2000
04/11/1999
12/10/1999
15/02/2000
CLIE
2117
2111
2101
2118
2102
2107
2112
2103
2118
2108
2124
2103
2114
2124
2114
2103
2112
2109
2107
2118
2111
2108
REP
106
105
106
108
101
110
108
105
108
109
107
105
108
107
102
105
108
107
110
108
103
101
6
FAB
REI
ACI
FEA
QSA
ACI
ACI
REI
ACI
BIC
FEA
BIC
ACI
QSA
FEA
ACI
ACI
IMM
IMM
REI
ACI
REI
ACI
PRODUCTO
2A44L
41003
114
XK47
41004
4100Z
2A44R
41004
41003
112
41003
41004
XK47
114
4100Z
41002
773C
775C
2A45C
41002
2A44G
4100X
CANT
7
35
6
4
34
9
10
28
1
10
1
6
20
10
6
54
3
22
8
10
6
6
IMPORTE
31.500
3.745
1.458
1.420
3.978
22.500
45.000
3.276
652
1.480
652
702
7.100
2.430
15.000
4.104
2.825
31.350
632
760
2.100
150
10/02/2000
04/01/2000
27/02/2000
25/01/2000
10/02/2000
31/12/1999
18/02/2000
02/02/2000
102
102
102
109
108
105
103
101
IMM
REI
QSA
IMM
QSA
ACI
ACI
REI
779C
2A45C
XK47
779C
XK47
4100Y
4100X
2A44R
2
24
6
3
2
11
24
5
3.750
1.896
2.130
5.625
776
27.500
600
22.500
Tabla 4.3.1.1: La tabla PEDIDOS despus de eliminar los pedidos del cliente 2126.
Si ahora Enrique Jordan, el nuevo vendedor, decide abandonar la empresa con
los clientes que posee, las sentencias DELETE que eliminan sus clientes y su fila de la
tabla REPVENTAS son:
DELETE FROM clientes WHERE rep_clie=111
DELETE FROM repventas WHERE nombre=Enrique Jordan
EMPRESA
EVBE S.A.
Exclusivas del Este S.L.
Pino S.L.
Hnos. Martinez S.A.
Distribuciones Sur S.A.
AFS S.A.
Exclusivas Soriano S.A.
Lopez Asociados S.L.
Hernandez & hijos S.L.
Componentes Fernandez S.A.
Domingo S.L.
Zapater Importaciones S.A.
Hnos. Ramon S.L.
JPF S.L.
Distribuciones Montiel S.L.
Construcciones Leon S.A.
Martinez & Garcia S.L.
Exclusivas Norte S.A.
Importaciones Martin S.L.
Roda & Castedo S.L.
MALB S.A.
REP_CLIE
103
101
105
102
110
101
106
108
103
102
107
109
106
105
102
102
109
108
104
103
101
LIMITE_CREDITO
50.000
65.000
50.000
40.000
35.000
20.000
65.000
50.000
45.000
20.000
40.000
55.000
35.000
30.000
50.000
65.000
25.000
60.000
20.000
25.000
45.000
Tabla 4.3.1.2: La tabla CLIENTES despus de eliminar los clientes del representante
nmero 111.
NUM_EMPL
NOMBRE
EDAD OFICINA_REP
106
Jose Maldonado
52
11
104
Carlos Martinez
33
12
105
Belen Aguirre
37
13
109
Maria Garcia
31
11
108
Lorenzo Fernandez
62
21
102
Soledad Martinez
48
21
101
Daniel Gutierrez
45
12
110
Antonio Valle
41
NULL
103
Pedro Cruz
29
12
107
Natalia Martin
49
22
DIRECTOR CUOTA VENTAS
Ciencias y Tcnicas Estadsticas
TITULO
VP Ventas
Dir. Ventas
Dir. Ventas
Rep. Ventas
Dir. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
CONTRATO
14/06/1998
19/05/1997
12/02/1998
12/10/1999
12/10/1999
10/12/1996
20/10/1996
13/01/2000
01/03/1997
14/11/1998
25.000
17.500
30.000
27.500
30.000
30.000
27.500
NULL
25.000
27.500
32.958
0
39.327
7.105
58.533
22.776
26.628
23.123
2.700
34.432
FECHA_PEDIDO
17/12/1999
11/01/2000
03/01/2000
10/02/2000
30/01/2000
02/02/2000
17/12/1999
14/01/2000
23/02/2000
08/01/2000
27/12/1999
20/01/2000
24/02/2000
22/02/2000
08/01/2000
02/03/2000
29/01/2000
15/02/2000
10/02/2000
04/01/2000
27/02/2000
25/01/2000
10/02/2000
31/12/1999
18/02/2000
02/02/2000
CLIE
2117
2111
2101
2118
2107
2112
2103
2118
2108
2124
2103
2114
2124
2103
2112
2109
2107
2108
2120
2106
2106
2108
2118
2103
2111
2113
REP
106
105
106
108
110
108
105
108
109
107
105
108
107
105
108
107
110
101
102
102
102
109
108
105
103
101
FAB
REI
ACI
FEA
QSA
ACI
REI
ACI
BIC
FEA
BIC
ACI
QSA
FEA
ACI
IMM
IMM
REI
ACI
IMM
REI
QSA
IMM
QSA
ACI
ACI
REI
PRODUCTO
2A44L
41003
114
XK47
4100Z
2A44R
41004
41003
112
41003
41004
XK47
114
41002
773C
775C
2A45C
4100X
779C
2A45C
XK47
779C
XK47
4100Y
4100X
2A44R
CANT
7
35
6
4
9
10
28
1
10
1
6
20
10
54
3
22
8
6
2
24
6
3
2
11
24
5
IMPORTE
31.500
3.745
1.458
1.420
22.500
45.000
3.276
652
1.480
652
702
7.100
2.430
4.104
2.825
31.350
632
150
3.750
1.896
2.130
5.625
776
27.500
600
22.500
Tabla 4.3.1.4: La tabla PEDIDOS despus de eliminar los pedidos remitidos antes del
15 de Noviembre de 1999.
4.3.2 Supresin de todas las filas.
La clusula WHERE de la sentencia DELETE es opcional, pero casi siempre
est presente. Si se omite la clusula WHERE de una sentencia DELETE, se suprimen
todas las filas de la tabla destino, como en el ejemplo siguiente:
DELETE FROM pedidos
Ciencias y Tcnicas Estadsticas
Aunque esta sentencia DELETE produce una tabla vaca, no borra la tabla
PEDIDOS de la base de datos. La definicin de la tabla PEDIDOS y sus columnas
siguen estando almacenadas en la base de datos. La tabla an existe, y nuevas filas
pueden ser insertadas en la tabla PEDIDOS con la sentencia INSERT.
4.3.3 DELETE con subconsulta.
Las sentencias DELETE con condiciones de bsqueda simples, como las de los
ejemplos anteriores, seleccionan las filas a suprimir basndose nicamente en los
propios contenidos de las filas. A veces, la seleccin de las filas debe efectuarse en base
a datos contenidos en otras tablas. Por ejemplo, supongamos que se desea suprimir
todos los pedidos aceptados por Soledad Martinez. Sin saber su nmero de empleado
no se pueden determinar los pedidos a eliminar consultando nicamente la tabla
PEDIDOS. Podra pensar en hallar todos los pedidos utilizando una consulta de dos
tablas como la siguiente:
SELECT num_pedido,importe FROM pedidos,repventas WHERE rep=num_empl AND
nombre=Soledad Martinez
NUM_PEDIDO
112979
113048
112993
113065
IMPORTE
15.000
3.750
1.896
2.130
FECHA_PEDIDO
17/12/1999
11/01/2000
03/01/2000
10/02/2000
12/10/1999
30/01/2000
02/02/2000
17/12/1999
14/01/2000
23/02/2000
08/01/2000
27/12/1999
20/01/2000
24/02/2000
22/02/2000
08/01/2000
02/03/2000
29/01/2000
04/11/1999
12/10/1999
CLIE
2117
2111
2101
2118
2102
2107
2112
2103
2118
2108
2124
2103
2114
2124
2103
2112
2109
2107
2118
2111
REP
106
105
106
108
101
110
108
105
108
109
107
105
108
107
105
108
107
110
108
103
9
FAB
REI
ACI
FEA
QSA
ACI
ACI
REI
ACI
BIC
FEA
BIC
ACI
QSA
FEA
ACI
IMM
IMM
REI
ACI
REI
PRODUCTO
2A44L
41003
114
XK47
41004
4100Z
2A44R
41004
41003
112
41003
41004
XK47
114
41002
773C
775C
2A45C
41002
2A44G
CANT
7
35
6
4
34
9
10
28
1
10
1
6
20
10
54
3
22
8
10
6
IMPORTE
31.500
3.745
1.458
1.420
3.978
22.500
45.000
3.276
652
1.480
652
702
7.100
2.430
4.104
2.825
31.350
632
760
2.100
15/02/2000
25/01/2000
10/02/2000
31/12/1999
18/02/2000
02/02/2000
22/10/1999
101
109
108
105
103
101
111
ACI
IMM
QSA
ACI
ACI
REI
ACI
4100X
779C
XK47
4100Y
4100X
2A44R
41004
6
3
2
11
24
5
20
150
5.625
776
27.500
600
22.500
2.340
Tabla 4.3.3.2: La tabla PEDIDOS despus de eliminar los pedidos aceptados por
Soledad Martinez.
Permitira borrar las cuatro filas de pedidos aceptados por Soledad Martinez.
Otros ejemplos de sentencias DELETE que utilizan condiciones de bsqueda
subconsulta son:
DELETE FROM clientes WHERE rep_clie IN (SELECT num_empl FROM repventas
WHERE ventas<(0.8*cuota))
La cual suprime los clientes atendidos por vendedores cuyas ventas son
inferiores al 80% de su cuota.
DELETE FROM repventas WHERE (0.02*cuota) >(SELECT SUM(importe) FROM
pedidos WHERE rep=num_empl)
Que suprime los vendedores cuyo total de pedidos actual es menor que el 2% de
sus cuotas.
DELETE FROM clientes WHERE NOT EXISTS (SELECT * FROM pedidos WHERE
clie=num_clie AND fecha_pedido>=10/11/1999)
10
EMPRESA
EVBE S.A.
Exclusivas del Este S.L.
Pino S.L.
Hnos. Martinez S.A.
Distribuciones Sur S.A.
AFS S.A.
Exclusivas Soriano S.A.
Lopez Asociados S.L.
Hernandez & hijos S.L.
Componentes Fernandez S.A.
Domingo S.L.
Zapater Importaciones S.A.
Hnos. Ramon S.L.
JPF S.L.
Distribuciones Montiel S.L.
Construcciones Leon S.A.
Martinez & Garcia S.L.
Exclusivas Norte S.A.
Importaciones Martin S.L.
Roda & Castedo S.L.
MALB S.A.
REP_CLIE
103
101
109
102
110
101
106
108
103
102
107
109
106
105
102
102
109
108
104
103
101
LIMITE_CREDITO
50.000
65.000
60.000
40.000
35.000
20.000
65.000
50.000
45.000
20.000
40.000
55.000
35.000
30.000
50.000
65.000
25.000
60.000
20.000
25.000
45.000
Tabla 4.4.1.1: La tabla CLIENTES despus de modificar los datos de la empresa Pino
S.L..
En el ejemplo anterior, la clusula WHERE identifica una sola fila de la tabla
CLIENTES y la clusula SET asigna nuevos valores a dos de las columnas de esta fila.
Sin embargo, al igual que la sentencia DELETE, la sentencia UPDATE puede actualizar
varias filas de una vez, tal y como sucede en el ejemplo siguiente:
UPDATE repventas SET oficina_rep=11,cuota=0.9*cuota WHERE oficina_rep=12
NUM_EMPL
106
104
105
109
NOMBRE
Jose Maldonado
Carlos Martinez
Belen Aguirre
Maria Garcia
EDAD OFICINA_REP
52
11
33
11
37
13
31
11
11
TITULO
VP Ventas
Dir. Ventas
Dir. Ventas
Rep. Ventas
CONTRATO
14/06/1998
19/05/1997
12/02/1998
12/10/1999
21
21
11
NULL
11
22
Dir. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
12/10/1999
10/12/1996
20/10/1996
13/01/2000
01/03/1997
14/11/1998
EMPRESA
EVBE S.A.
Exclusivas del Este S.L.
Pino S.L.
Hnos. Martinez S.A.
Distribuciones Sur S.A.
AFS S.A.
Exclusivas Soriano S.A.
Lopez Asociados S.L.
Hernandez & hijos S.L.
Componentes Fernandez S.A.
Domingo S.L.
Zapater Importaciones S.A.
Hnos. Ramon S.L.
JPF S.L.
Distribuciones Montiel S.L.
Construcciones Leon S.A.
Martinez & Garcia S.L.
Exclusivas Norte S.A.
Importaciones Martin S.L.
Roda & Castedo S.L.
MALB S.A.
REP_CLIE
103
101
102
102
110
101
102
108
103
102
102
109
102
102
102
102
109
108
104
103
101
LIMITE_CREDITO
50.000
65.000
50.000
40.000
35.000
20.000
65.000
50.000
45.000
20.000
40.000
55.000
35.000
30.000
50.000
65.000
25.000
60.000
20.000
25.000
45.000
Tabla 4.4.1.3: La tabla CLIENTES despus de asignar los clientes atendidos por los
empleados 105, 106 107 al empleado nmero 102.
UPDATE repventas SET cuota=30000 WHERE cuota IS NULL
NUM_EMPL
106
104
105
109
NOMBRE
Jose Maldonado
Carlos Martinez
Belen Aguirre
Maria Garcia
EDAD OFICINA_REP
52
11
33
12
37
13
31
11
12
TITULO
VP Ventas
Dir. Ventas
Dir. Ventas
Rep. Ventas
CONTRATO
14/06/1998
19/05/1997
12/02/1998
12/10/1999
21
21
12
NULL
12
22
Dir. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
12/10/1999
10/12/1996
20/10/1996
13/01/2000
01/03/1997
14/11/1998
Tabla 4.4.1.4: La tabla REPVENTAS despus de asignar una cuota de 30.000 a los
vendedores que no tenan asignada una cuota.
La expresin en cada asignacin puede ser cualquier expresin SQL que genere
un valor de tipo de dato apropiado para la columna destino. La expresin debe ser
calculable basada en los valores de la fila actualmente en actualizacin en la tabla
destino. No pueden incluirse funciones de columna ni subconsultas.
Si una expresin en la lista de asignacin referencia a una de las consultas de la
tabla destino, el valor utilizado para calcular la expresin es el valor de esa columna en
la fila actual antes de que se aplique ninguna actualizacin. Lo mismo es aplicable a las
referencias de columna que se producen en la clusula WHERE. Por ejemplo:
UPDATE oficinas SET objetivo=40000,ventas=objetivo WHERE objetivo<40000
OFICINA
22
11
12
13
21
CIUDAD
Toledo
Valencia
Barcelona
Alicante
Madrid
REGION
Centro
Este
Este
Este
Centro
DIR OBJETIVO
108
40.000
106
52.500
104
70.000
105
40.000
108
60.000
VENTAS
27.500
40.063
29.328
30.000
81.309
NOMBRE
Jose Maldonado
EDAD OFICINA_REP
TITULO
52
11 VP Ventas
13
CONTRATO
14/06/1998
12
13
11
21
21
12
NULL
12
22
Dir. Ventas
Dir. Ventas
Rep. Ventas
Dir. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
Rep. Ventas
19/05/1997
12/02/1998
12/10/1999
12/10/1999
10/12/1996
20/10/1996
13/01/2000
01/03/1997
14/11/1998
EMPRESA
EVBE S.A.
Exclusivas del Este S.L.
Pino S.L.
Hnos. Martinez S.A.
Distribuciones Sur S.A.
AFS S.A.
Exclusivas Soriano S.A.
Lopez Asociados S.L.
Hernandez & hijos S.L.
Componentes Fernandez S.A.
Domingo S.L.
Zapater Importaciones S.A.
Hnos. Ramon S.L.
JPF S.L.
Distribuciones Montiel S.L.
Construcciones Leon S.A.
Martinez & Garcia S.L.
Exclusivas Norte S.A.
Importaciones Martin S.L.
Roda & Castedo S.L.
MALB S.A.
14
REP_CLIE
103
101
105
102
110
101
106
108
103
102
107
109
106
105
102
102
109
108
104
103
101
LIMITE_CREDITO
50.000
65.000
55.000
40.000
35.000
20.000
65.000
55.000
45.000
20.000
40.000
55.000
40.000
30.000
50.000
65.000
25.000
60.000
20.000
30.000
45.000
EMPRESA
EVBE S.A.
Exclusivas del Este S.L.
Pino S.L.
Hnos. Martinez S.A.
Distribuciones Sur S.A.
AFS S.A.
Exclusivas Soriano S.A.
Lopez Asociados S.L.
Hernandez & hijos S.L.
Componentes Fernandez S.A.
Domingo S.L.
Zapater Importaciones S.A.
Hnos. Ramon S.L.
JPF S.L.
Distribuciones Montiel S.L.
Construcciones Leon S.A.
Martinez & Garcia S.L.
Exclusivas Norte S.A.
Importaciones Martin S.L.
Roda & Castedo S.L.
MALB S.A.
REP_CLIE
105
101
105
105
110
101
106
108
105
105
107
105
106
105
105
105
105
108
105
105
101
LIMITE_CREDITO
50.000
65.000
50.000
40.000
35.000
20.000
65.000
50.000
45.000
20.000
40.000
55.000
35.000
30.000
50.000
65.000
25.000
60.000
20.000
25.000
45.000
Tabla 4.4.3.2: La tabla CLIENTES despus de asignar todos los clientes atendidos por
vendedores cuyas ventas son menores al 80% de sus cuotas al vendedor nmero 105.
4.5 Control de las transacciones.
En SQL se entiende como transaccin a una secuencia de una o ms sentencias
SQL que juntas forman una unidad de trabajo. Las sentencias SQL que forman la
transaccin suelen estar estrechamente relacionadas y efectuar acciones
interdependientes. Cada sentencia de una transaccin efecta una parte de una tarea,
pero todas ellas son necesarias para completar la tarea. La agrupacin de las sentencias
en una sola transaccin indica al DBMS que la secuencia de sentencias entera debe ser
ejecutada atmicamente; todas las sentencias deben completarse para que la base de
datos est en un estado consistente. Algunos ejemplos de transacciones son:
15
En cada uno de estos casos se requiere una sentencia de cuatro o cinco acciones,
cada una formada por una sola sentencia SQL, para manejar la nica transaccin
lgica. En un DBMS basado en SQL las sentencias de una transaccin se ejecutan
como una unidad atmica de trabajo en la base de datos. O todas las sentencias son
ejecutadas con xito, o ninguna de las sentencias es ejecutada. El DBMS es el
responsable de mantener este compromiso incluso si el programa de aplicacin aborta o
se produce un fallo a mita de la transaccin.
SQL soporta las transacciones de base de datos mediante dos sentencias de
procesamiento de transacciones SQL, cuyo diagrama sintctico se muestra en la figura
4.5.1.
COMMIT
WORK
ROLLBACK
WORK
16