Sei sulla pagina 1di 62

Access Básico_

Formación
11.11.2017
Índice (I)

1. Introducción_

Access vs Excel

Access frente a otras BBDD

Otras BBDD

Uso de la Base de datos

2. Diseño de la BD_

Modelado conceptual

El modelo Entidad/Relación

Claves primarias

Ejercicios de modelo conceptual

Modelo físico

1ª Forma normal

2ª Forma normal

3ª Forma normal

Tipos de datos

Ejercicios de modelo físico

2
DISCOVER, DISRUPT, DELIVER
Índice (II)

3. SQL_

SELECT

Agregados

Subqueries

Vistas

UNION

Álgebra relacional: producto cartesiano

INNER JOIN. LEFT JOIN. FULL OUTER JOIN

Convirtiendo datos: CAST

Funciones de fecha

Funciones de cadena

4. Conceptos avanzados_

Cambiar datos: INSERT, UPDATE, DELETE

Funciones de usuario

Optimización de consultas

3
DISCOVER, DISRUPT, DELIVER
Introducción: Access vs Excel 1

Estructura de información

Rapidez de proceso

Coherencia de datos

Multiusuario

Acceso mediante lenguaje


estándar

4
Introducción: Access frente a otras BBDD 2

Ventajas
• Interfaz de usuario muy sencilla
y potente
• Fácil de instalar en cualquier
PC
• Gran comunidad de usuarios
• Posibilidad de macros potentes

Desventajas
• Poco escalable en tamaño y
usuarios
• No es cliente/servidor
• Lenguaje SQL no estándar
• Pobre tolerancia a fallos

5
Introducción: Otras BBDD 3

• Difícil conseguir • Difícil conseguir • Posibilidad de • Muy difícil

ad
cliente y servidor cliente y conseguir
servidor corporativo servidor servidor
corporativos • Fácil de instalar corporativos corporativo
• Fácil de instalar y utilizar • Fácil de instalar • Poco amigable
y utilizar • Gran potencia y utilizar para
• Gran comunidad • Muy amigable desarrolladores
• No muy potente para y usuarios
desarrolladores • Potentísimo
y usuarios

6
Introducción: Uso de la BD 4

OLTP
Datawarehouse

SQL Interfaz
gráfico

Clientes
ad hoc Uso directo

7
Índice

1. Introducción_

Access vs Excel

Access frente a otras BBDD

Otras BBDD

Uso de la Base de datos

2. Diseño de la BD_

El modelo Entidad/Relación

Claves primarias

Ejercicios de modelo conceptual

Modelo físico

1ª Forma normal

2ª Forma normal

3ª Forma normal

Tipos de datos

Ejercicios de modelo físico

8
DISCOVER, DISRUPT, DELIVER
Diseño de la BD: El modelo Entidad/Relación (I) 5

Entidad
• Objeto, una cosa sobre la que la BD guarda
información. En general, una tabla de la BD.
Atributo
• Un dato referido a una entidad. Clásicamente, un
campo. En general, una columna de la BD.
Clave primaria
• Identificación única en una tabla (Primary Key, PK)

Relación
• Forma en que se enlazan las entidades
Diseño de la BD: El modelo Entidad/Relación (II) 6

Entidad

Relación
Clave primaria

Atributo
Diseño de la BD: El modelo Entidad/Relación (IV) 7
Diseño de la BD: El modelo Entidad/Relación (V) 8
Diseño de la BD: Claves 9

• Clave primaria
ID_
Cli
ent
e • Claves candidatas
NIF
ID_Cliente

NIF+Nombre
NIF+Nombre+Apellidos • Superclaves
ID_Cliente+Dirección
ID_Cliente+NIF
Diseño de la BD: Ejercicio (identificar claves) 10

¿Clave candidata, clave,


superclave o no es clave?
•Nombre
•ID_Alumno
•Email
•Direccion
•Sexo
¿Clave primaria?
•Nombre+NIF •NIF
•Nombre+ID_Alumno •ID_Alumno
•Nonbre+Email •Email
•Nombre+Direccion •Nombre+Direccion
•Nombre+sexo
•ID_Alumno+Email
•ID_Alumno+Sexo
•Nombre+Direccion+Sexo
•NIF+Sexo
•Nombre+NIF+ID_Alumno+Email+Sexo
Diseño de la BD: Ejercicios de modelado (I) 11

Caso 1: Cada alumno va a un curso y sólo un curso

Caso 2: Un alumno puede ir a un mismo curso varias veces, pero


como máximo una vez por año

Caso 3: Un alumno puede hacer el curso varias veces, pero sólo


si es impartido por distintos profesores

Caso 4: Un alumno puede hacer el curso varias veces, pero sólo


si es impartido por distintos profesores en distintos años
Diseño de la BD: Ejercicios de modelado (II) 12
Diseño de la BD: Ejercicios de modelado (III) 13
Diseño de la BD: Ejercicios de modelado (IV) 14

• Los clientes compran libros a dependientes


• Los autores escriben libros
• Los autores firman libros a los clientes
Diseño de la BD: Ejercicios de modelado (V) 15
• Los profesores aconsejan a los alumnos
• Los alumnos trabajan como tutores para otros alumnos
• Los profesores son mentores de otros profesores o de alumnos
• Los profesores trabajan en un departamento
• Un profesor es el jefe de departamento
Diseño de la BD: Ejercicios de modelado (VI) 16

• Los empleados dirigen departamentos


• Un empleado dirige como máximo un departamento
• Todo departamento esta dirigido por alguien , pero como
máximo por una persona
• No todos los empleados dirigen un departamento
Diseño de la BD: Modelado físico (I) 21

• Se puede pensar en una tabla como una hoja Excel con filas y
columnas

• Los encabezados de columnas son los atributos

• Las relaciones se modelan mediante columnas que se añaden,


Claves Extranjeras (Foreign Keys, FK)
Diseño de la BD: Modelado físico (II) 22
Cómo se transforma una tabla en el modelo físico

Clave
Atributos primaria

Entidad

Autor Título Fecha


Miguel Noguera Mejor que vivir 2014
Jorge Luis Borges Ficciones 1944
Joseph Heller Catch-22 1961
Diseño de la BD: Modelado físico (III) 23
Cómo se transforma una relación en el modelo físico (0..n o 1..n)

NIF Nombre NIF_Profesor


1 Summer Smith 1
2 Morty Smith 2
3 Jerry Smith 2
4 Squanchy 2

NIF_Profesor Nombre
1 Rick Sanchez
2 Birdperson
Diseño de la BD: Modelado físico (IV) 24

Cómo se transforma una relación en el modelo físico (n..m)

1. Las entidades afectadas se convierten en tablas


2. Se crea una nueva tabla cuya PK es la concatenación de las PK de las
entidades relacionadas. Cada PK individual es una FK en esta tabla
3. Los atributos de las entidades asociativas pasan a ser un atributo de la tabla
del paso 2, y a formar parte de la PK si procede
Diseño de la BD: Modelado físico (V) 25

Cómo se transforma una relación en el modelo físico (n..m)


Diseño de la BD: 1ª Forma normal 26
No se admiten repeticiones en las columnas

NIF Nombre
1 Rick
3 Morty

NIF Nombre Telefono1 Telefono2 4 Jerry


1 Rick 911014211 645815485
3 Morty 915435759 NIF Telefono
4 Jerry 915483575 918753489 1 911014211
1 645815485
3 915435759
4 915483575
4 918753489
Diseño de la BD: 2ª Forma normal 27

La clave primaria no debe ser nunca una superclave

• Si parte de la clave implica automáticamente el resto de la clave, la PK no


está bien elegida
• Por ejemplo, NIF+Nombre como PK rompe la 2FN, y es necesario eliminar el
Nombre de la PK
Diseño de la BD: 3ª Forma normal 28

El valor de un atributo no puede depender del valor de otras


columnas que no sean clave candidata

• Todos los atributos deben ser mutuamente independientes


• Ejemplos:
• Incluir el total cuando están las unidades y el importe
• Incluir el nombre y dirección del proveedor en un artículo
• Incluir el saldo en una tabla de movimientos
Diseño de la BD: Tipos de datos 29

• Numéricos:
• Integrales:
• Autonumérico
• Entero largo
• Entero corto
• Byte
• Decimal
• Número grande
• Moneda
• Texto:
• Texto corto (hasta 255 caracteres)
• Texto largo (ilimitado)
• Fecha
• Lógico
• Archivos:
• Adjunto
• Objeto OLE
Diseño de la BD: Ejercicios de modelo físico (I) 30
Diseño de la BD: Ejercicios de modelo físico (II) 31
Diseño de la BD: Ejercicios de modelo físico (III) 32
Diseño de la BD: Ejercicios de modelo físico (IV) 33
Diseño de la BD: Ejercicios de modelo físico (V) 34
Índice (II)

3. SQL_

SELECT

Agregados

Subqueries

Vistas

UNION

Álgebra relacional: producto cartesiano

INNER JOIN. LEFT JOIN. FULL OUTER JOIN

Convirtiendo datos

Funciones de fecha

Funciones de cadena

4. Conceptos avanzados_

Cambiar datos: INSERT, UPDATE, DELETE

Funciones de usuario

Optimización de consultas

3
DISCOVER, DISRUPT, DELIVER 5
SQL: SELECT 35

SELECT ram AS MB ,disco AS GB

CAMPOS
FROM PC

TABLAS
WHERE ( precio < 500 AND precio > 100 ) OR precio < 50

ORDER BY velocidad CRITERIOS

ORDEN

3
6
SQL: SELECT. Alias. Condiciones 36

SELECT ram AS MB ,disco AS GB FROM PC

Alias

• Tras WHERE viene la condición. Esta condición puede incluir:


• AND, OR, NOT
• =, <, >, <=, >=, <>
• LIKE
• IS [NOT] NULL. Normalmente, no =NULL
• Valores lógicos

3
7
SQL: SELECT (I) 37

• Encontrar todos los barcos cuya clase termina por la letra 'o'

SELECT * FROM Barcos WHERE clase LIKE '*o'

• Encontrar todos los barcos cuya clase termina por la letra 'o', pero no por 'go'

SELECT * FROM Barcos WHERE clase LIKE '*o' AND clase NOT
LIKE '*go'

SELECT * FROM Barcos WHERE clase LIKE '*[!g]o'

3
8
SQL: SELECT (II) 38

• Encontrar todos las clases de las cuales se sepa la eslora

SELECT * FROM clases WHERE eslora IS NOT NULL

• Eslora y nombre de todas las clases. Si no se sabe la eslora, poner 0

SELECT clases.clase ,Switch ( eslora IS NULL ,0 ,NOT


IsNull (eslora) ,eslora ) FROM clases
SELECT clases.clase ,Iif ( eslora IS NULL ,0 ,eslora )
FROM clases

• Si la eslora es mayor que 15, poner 'grande', menor que 15, 'pequeño' e igual a
15, 'mediano';y nombre de todas las clases.

SELECT clase ,Switch ( eslora < 15 ,'pequeño' ,eslora > 15


,'mediano' ,TRUE ,'grande' ) FROM clases
3
9
SQL: AGREGADOS 39
• Para sumar o contar campos se usan las funciones de agregado: SUM, COUNT,
AVG, MIN, MAX

• Ejemplo: ¿Cuántos portátiles hay?

SELECT COUNT (*) FROM Portatil

• Ejemplo: ¿Cuál es el portátil más caro?

SELECT MAX (Precio) FROM Portatil

4
0
SQL: AGREGADOS (II) 40

• Se puede agrupar el agregado mediante GROUP BY

• Ejemplo: ¿Cuántos PC's hay para cada tipo de CD?

SELECT COUNT (*) FROM Portatil

• Las condiciones de agregado se establecen con HAVING


• HAVING se evalúa después de WHERE. Ejemplo:

SELECT COUNT (*) AS total ,cd FROM PC WHERE cd = '12x'


GROUP BY cd HAVING COUNT (*) > 2

4
1
SQL: AGREGADOS (III) 41
• Encontrar el modelo, velocidad y capacidad de disco de todos los PC's con
precio inferior a 500

SELECT modelo ,velocidad ,disco FROM PC WHERE precio < 500

• Encontrar todas las marcas de impresoras

SELECT marca FROM Producto WHERE tipo = 'Impresora' GROUP


BY marca
SELECT DISTINCT marca FROM Producto WHERE tipo =
'Impresora’

• Encontrar el modelo, velocidad y disco duro de los PC's con CD 12x o 24x y
precios menores que 600

SELECT modelo ,velocidad ,disco FROM PC WHERE ( cd = '12x'


OR 'cd=24x' ) AND precio < 600
4
2
SQL: Subqueries 42

• El ejercicio anterior también se puede resolver como:

SELECT modelo ,velocidad ,disco FROM PC WHERE cd IN


( '12x' ,'24x' ) AND precio < 600

SUBQUERY

• Marcas que fabrican portátiles de precio superior a 1000:

SELECT DISTINCT marca FROM producto WHERE modelo IN


(SELECT modelo FROM portatil WHERE precio > 1000)

SUBQUERY

4
3
SQL: UNION 43

• Mostrar el modelo y la RAM de todos los PC's y portátiles

SELECT modelo ,ram FROM PC UNION SELECT modelo ,ram FROM


Portatil

• Mismo número y tipo (o convertible) de columnas

SELECT SELECT modelo SELECT modelo


modelo ,ram ,cd FROM ,ram ,velocidad
,ram ,cd FROM PC UNION SELECT FROM PC UNION
PC UNION modelo ,ram SELECT modelo ,ram
SELECT modelo ,precio FROM ,precio FROM
,ram FROM Portatil Portatil
Portatil

UNION ALL incluye duplicados

4
4
SQL: UNION y Subqueries 44

• Encuentra el modelo y precio de todos los productos de la marca B

SELECT modelo ,precio FROM PC


WHERE modelo IN Vista todos_los_productos:
( SELECT modelo FROM Producto SELECT codigo ,modelo
WHERE marca = 'B' AND tipo = ,precio FROM PC UNION
'PC’ ) SELECT codigo ,modelo
,precio FROM Portatil
UNION SELECT modelo ,precio UNION SELECT codigo
FROM Portatil WHERE modelo IN
,modelo ,precio FROM
( SELECT modelo FROM
Producto WHERE marca = 'B' impresora
AND tipo = 'Portatil’ ) Query:
SELECT modelo ,precio
UNION SELECT modelo ,precio FROM todos_los_productos
FROM impresora WHERE modelo WHERE modelo IN ( SELECT
IN ( SELECT modelo FROM modelo FROM Producto
Producto WHERE marca = 'B' WHERE marca = 'B' )
AND tipo = 'Impresora' )
4
5
SQL: SELECT (III) 45
• Encontrar las marcas que fabrican PC's pero no portátiles

SELECT marca FROM producto WHERE marca NOT IN ( SELECT


marca FROM producto WHERE tipo = 'Portatil' ) AND marca IN
( SELECT marca FROM producto WHERE tipo = 'PC' )
• Encontrar todas las impresoras que tienen el máximo precio

SELECT modelo ,precio FROM impresora WHERE precio =


( SELECT MAX (precio) FROM impresora )

• Encontrar la velocidad media de los PC's

SELECT AVG (velocidad) FROM PC

• Encontrar los portátiles con velocidad menor que cualquier PC

SELECT DISTINCT (modelo) FROM portatil WHERE velocidad < (


SELECT MIN (Velocidad) FROM PC )
4
6
SQL: SELECT (IV) 46

• Encontrar las marcas que hacen al menos 3 modelos de PC.

SELECT COUNT (*) ,marca FROM producto WHERE tipo = 'PC'


GROUP BY marca HAVING COUNT (*) >= 3

• Encontrar las marcas que produzcan un PC y un portátil, ambos con una


velocidad mínima de 750

SELECT DISTINCT marca FROM producto WHERE marca IN


( SELECT marca FROM producto WHERE modelo IN ( SELECT
modelo FROM PC WHERE velocidad >= 750 ) ) AND marca IN
( SELECT marca FROM producto WHERE modelo IN ( SELECT
modelo FROM Portatil WHERE velocidad >= 750 ) )

4
7
SQL: SELECT (V) 47

• Encontrar el producto (PC, Portátil o impresora) con el precio más alto de todos

SELECT modelo FROM todos_los_productos WHERE precio =


( SELECT MAX (precio) FROM todos_los_productos )

• Encontrar las marcas que produzcan un PC y un portátil, ambos con una


velocidad mínima de 750

SELECT DISTINCT marca FROM producto WHERE marca IN


(SELECT marca FROM producto WHERE modelo IN
(SELECT modelo FROM PC WHERE velocidad >= 750 )) AND
marca IN
(SELECT marca FROM producto WHERE modelo IN
(SELECT modelo FROM Portatil WHERE velocidad >= 750 ))

4
8
SQL: Álgebra relacional. Producto cartesiano 48
• El producto cartesiano A x B es la combinación de todas las filas de A con todas
las filas de B

AxB
A B
a b c d
a b c d
1 2 2 4
1 2 2 4
1 2 3 3
2 1 3 3
2 1 2 4
2 1 3 3

• En Access esto se escribe así:

SELECT * FROM A,B

4
9
SQL: INNER JOIN 49

• Encontrar la marca, modelo y precio de todos los PC's

SELECT marca ,Producto.modelo ,PC.modelo

TIPO DE JOIN
CAMPOS
FROM Producto INNER JOIN PC

ORIGEN DE DATOS
ON PC.modelo = Producto.modelo

CONDICIÓN DEL JOIN

• Un INNER JOIN es un producto cartesiano del que se eliminan las filas que no
cumplen la condición
5
0
SQL: LEFT JOIN 50
NombreEmpleado IDEmpleado NombreDepartamento
Harry 3415 Financiero
Sally 2241 Ventas
George 3401 Financiero
Harriet 2202 Ventas NombreDepartamento Jefe
Tim 1123 Ejecutivo Ventas Harriet
Producción Charles

SELECT NombreEmpleado ,IDEmpleado ,departamentos.NombreDepartamento ,Jefe


FROM Empleados LEFT JOIN Departamentos
ON Empleados.NombreDepartamento = Departamentos.NombreDepartamento

NombreEmpleado IDEmpleado NombreDepartamento Jefe


Harry 3415 <NULL> <NULL>
Sally 2241 Ventas Harriet
George 3401 <NULL> <NULL>
Harriet 2202 Ventas Harriet
Tim 1123 <NULL> <NULL>

5
1
SQL: SELECT (VI) 51

• Encontrar los tamaños de disco duro que son iguales en dos o más PC's

SELECT DISTINCT (pc1.disco) FROM PC AS pc1 INNER JOIN PC


AS pc2 ON pc1.codigo <> pc2.codigo AND pc1.disco =
pc2.disco

• Encontrar parejas de modelos distintos de PC con la misma RAM y velocidad.


Cada pareja sólo se muestra una vez: sólo (i,j), no (j,i). Cada fila será: Modelo
con nº más grande, Modelo con nº más pequeño, velocidad y RAM

SELECT pc1.modelo ,pc2.modelo ,pc1.velocidad ,pc1.ram FROM


PC AS pc1 INNER JOIN PC AS pc2 ON pc1.modelo > pc2.modelo
AND pc1.velocidad = pc2.velocidad AND pc1.RAM = pc2.RAM

5
2
SQL: SELECT (VII) 51
Para el modelo de varios movimientos diarios, sacar la suma de ingresos y la
suma de gastos en cada punto cada día

Vista gastosdiarios: SELECT SUM (cantidad) AS gastos ,punto


,fecha FROM salida GROUP BY punto ,fecha

Vista ingresosdiarios: SELECT SUM (cantidad) AS ingresos


,punto ,fecha FROM entrada GROUP BY punto ,fecha

SELECT * FROM ingresosdiarios INNER JOIN gastosdiarios ON


ingresosdiarios.punto = gastosdiarios.punto AND
ingresosdiarios.fecha = gastosdiarios.fecha
UNION ALL SELECT * FROM ingresosdiarios RIGHT JOIN
gastosdiarios ON ingresosdiarios.punto = gastosdiarios.punto
AND ingresosdiarios.fecha = gastosdiarios.fecha WHERE
ingresosdiarios.punto IS NULL
UNION ALL SELECT * FROM ingresosdiarios LEFT JOIN
gastosdiarios ON ingresosdiarios.punto = gastosdiarios.punto
AND ingresosdiarios.fecha = gastosdiarios.fecha WHERE
gastosdiarios.punto IS NULL
5
3
SQL: SELECT (VIII) 52
Para el modelo de un sólo movimiento diario, sacar el saldo actual en cada punto

Vista gastosdiarios_o: SELECT SUM (cantidad) AS gastos ,punto


FROM salida_o GROUP BY punto

Vista ingresosdiarios_o: SELECT SUM (cantidad) AS ingresos ,punto


FROM entrada_o GROUP BY punto

SELECT ingresos - gastos ,* FROM ingresosdiarios_o INNER JOIN


gastosdiarios_o ON ingresosdiarios_o.punto =
gastosdiarios_o.punto
UNION ALL SELECT ingresos - gastos ,* FROM ingresosdiarios_o
LEFT JOIN gastosdiarios_o ON ingresosdiarios_o.punto =
gastosdiarios_o.punto WHERE gastosdiarios_o.punto IS NULL
UNION ALL SELECT ingresos - gastos ,* FROM ingresosdiarios_o
RIGHT JOIN gastosdiarios_o ON ingresosdiarios_o.punto =
gastosdiarios_o.punto WHERE ingresosdiarios_o.punto IS NULL

5
4
SQL: SELECT (IX) 53
Batallas para las que hay al menos 3 barcos de algún país.

Vista barcosporbatallaconpais:
SELECT barcos.nombre ,resultados.batalla ,clases.pais FROM
(barcos INNER JOIN clases ON ( barcos.clase = clases.clase AND
barcos.nombre <> barcos.clase ))
INNER JOIN resultados ON resultados.barco = barcos.nombre
UNION
SELECT clases.clase ,resultados.batalla ,clases.pais FROM
resultados INNER JOIN clases ON resultados.barco =
clases.clase

SELECT COUNT (*) ,batalla ,pais FROM barcosporbatallaconpais


GROUP BY batalla ,pais HAVING COUNT (*) >= 3 IN clases ON
resultados.barco = clases.clase

5
5
SQL: SELECT (X) 54
Barcos que resultaron dañados en alguna batalla y tomaron parte en una batalla
posterior

Vista batallaconresultados:
SELECT barco ,batalla ,resultado ,fecha FROM resultados INNER
JOIN batallas ON resultados.batalla = batallas.nombre

SELECT resultadoviejo.barco FROM batallaconresultados AS


resultadoviejo INNER JOIN batallaconresultados AS
resultadonuevo ON ( resultadoviejo.barco = resultadonuevo.barco
AND resultadoviejo.fecha < resultadonuevo.fecha AND
resultadoviejo.resultado = 'damaged')

5
6
SQL: SELECT (XI) 55
Nombre, número de cañones y desplazamiento de todos los barcos que tomaron
parte en Guadalcanal

SELECT clase ,numerocanyones ,desplazamiento


FROM clases INNER JOIN resultados
ON clases.clase = resultados.barco
WHERE resultados.batalla = 'Guadalcanal’
UNION
SELECT barcos.nombre ,numerocanyones ,desplazamiento
FROM (barcos INNER JOIN clases ON barcos.clase = clases.clase)
INNER JOIN resultados
ON barcos.nombre = resultados.barco
WHERE resultados.batalla = 'Guadalcanal'

5
7
SQL: Convirtiendo datos 56
Precio medio de los portátiles, poniendo antes el literal 'Precio medio = '

SELECT 'Precio medio = ' + AVG (precio) FROM Portatil

SELECT 'Precio medio = ' + format (precio) FROM Portatil

• CBool( expression )
• CByte( expression )
• CCur( expression )
• CDate( expression )
• CDbl( expression )
• CDec( expression )
• CInt( expression )
• CLng( expression )
• CSng( expression )
• CStr( expression )
5
8
SQL: Funciones de fecha (I) 57
La fecha de dentro de 7 días

SELECT DATEADD ( 'd' ,7 ,now ) ;

La fecha de dentro de una semana

SELECT DATEADD ('ww' ,7 ,now ) ;

Días entre el primer y último vuelo

SELECT DATEDIFF ( 'd’ ,


( SELECT MIN (fecha) FROM pasajeroviaje ) ,
( SELECT MAX (fecha) FROM pasajeroviaje ) )
FROM ( SELECT COUNT (*) FROM impresora )

5
9
SQL: Funciones de fecha (II) 58

La fecha y hora del vuelo 1123

SELECT DISTINCT pasajeroviaje.numero_viaje ,


DATEADD ( 'n' ,
DATEPART ( 'h' ,hora_salida ) * 60 + DATEPART ('n',hora_salida),
fecha ) AS FechayHora
FROM pasajeroviaje INNER JOIN viaje ON pasajeroviaje.numero_viaje
= viaje.numero_viaje WHERE viaje.numero_viaje = 1123

6
0
SQL: Funciones de cadena (I) 59

• CHR, ASC
• LEFT (caracteres,entero). RIGHT
• INSTR (comienzo,cadenabuscada,cadenadondebuscamos)
• LEN
• MID (cadena, comienzo, final)

6
1
SQL: Funciones de cadena (II) 60

• STRREVERSE
• REPLACE (dondebuscamos,cadenabuscada, reemplazo,comienzo,cuantos)
• REPLICATE (carácter,veces)
• LTRIM, RTRIM,TRIM

6
2