Está en la página 1de 27

Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

UNIDAD 4
INTRODUCCIÓN A SQL

¿Qué es el SQL?

¿Qué es el DDL? ¿Cuáles son las sentencias DDL y cuál es su sintaxis? ,

¿Qué es el DML? ¿Cuáles son las sentencias DML y cuál es su sintaxis?

¿Qué es DCL? ¿Cuáles son las sentencias DCL?

¿Cuáles son las variaciones de la Sentencia Select y cuál es su sintaxis?

74 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Lección 9
Conceptos relacionados a SQL
9.1 Definición
El SQL (Structured Query Language) es el lenguaje más usado para bases de datos
relacionales, es un lenguaje declarativo de alto nivel, desarrollado por IBM (1974-1977). Se
convirtió en un standard definido por: ANSI (American National Standards Institute) e ISO
(International Standards Organization).
SQL está compuesto por lenguajes para: Definición de Datos o DDL (Data Definition Language),
Manipulación o DML (Data Manipulation Language), y Control o DCL (Data Control Language).

9.2 Lenguaje de Definición de Datos


El lenguaje de definición de datos LDD o DDL (Data Definition Language) proporciona órdenes
para definir esquemas de relación, eliminar relaciones, crear índices y modificar esquemas de
relación. También nos permite definir restricciones de integridad, vistas, estructuras de
almacenamiento físico y ordenes para especificar derechos de acceso a las relaciones y vistas.

Nivel lógico Global Nivel Externo Nivel Físico

Definición de esquema CREATE TABLE CREATE VIEW CREATE INDEX

ALTER TABLE
Evolución de esquema DROP VIEW DROP INDEX
DROP TABLE

Una vista es como una ventana a través de la cual se puede consultar o cambiar información
de la tabla a la que está asociada. Las vistas tienen la misma estructura que una tabla: filas y
columnas. La única diferencia es que sólo se almacena de ellas la definición, no los datos. Los
datos que se recuperan mediante una consulta a una vista se presentarán igual que los de una
tabla. De hecho, si no se sabe que se está trabajando con una vista, nada hace suponer que es
así. Al igual que sucede con una tabla, se pueden insertar, actualizar, borrar y seleccionar datos
en una vista. Aunque siempre es posible seleccionar datos de una vista, en algunas condiciones
existen restricciones para realizar el resto de las operaciones sobre vistas.
Las vistas pueden proporcionar un nivel adicional de seguridad. Por ejemplo, en la tabla de
empleados, cada responsable de departamento sólo tendrá acceso a la información de sus
empleados.
Las vistas permiten ocultar la complejidad de los datos. Una BD se compone de muchas tablas.
La información de dos o más tablas puede recuperarse utilizando una combinación de dos o
más tablas, y estas combinaciones pueden llegar a ser muy confusas. Creando una vista como
resultado de la combinación se puede ocultar la complejidad al usuario. Las vistas ayudan a
mantener unos nombres razonables.
Los índices nos ayudan a obtener datos de las tablas en forma más rápida. Utilicemos un
ejemplo para ilustrar este punto: Digamos que estamos interesados en leer en un libro de
jardinería acerca de cómo cultivar pimientos. En vez de leer el libro desde el comienzo hasta

75 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

que encontremos una sección sobre pimientos, es mucho más rápido para nosotros ir a la
sección índice al final del libro, ubicar qué páginas contienen la información sobre pimientos, y
luego dirigirnos a esas páginas directamente. Al dirigirnos al índice primero ahorramos tiempo
y seguramente es el método más eficiente para ubicar la información que necesitamos.
El mismo principio se aplica para la obtención de datos desde una tabla de base de datos. Sin
un índice, el sistema de base de datos lee a través de toda la tabla (este proceso se denomina
“escaneo de tabla”) para localizar la información deseada. Con el índice correcto en su lugar, el
sistema de base de datos puede entonces primero dirigirse al índice para encontrar de dónde
obtener los datos, y luego dirigirse a dichas ubicaciones para obtener los datos necesarios.
Esto es mucho más rápido.

9.3 Lenguaje de Manipulación de Datos


El lenguaje de manipulación de datos LMD o DML (Data Manager Language) proporciona un
lenguaje de consultas basados en algebra relacional y el cálculo relacional de tuplas. También
incluye órdenes para insertar, suprimir y modificar tuplas de una base de datos.
Adicionalmente la forma inmersa del SQL está diseñada para usar dentro de los lenguajes de
programación tales como: Pascal, C, Fortran, Cobol, C#, JAVA.

Actualizaciones
INSERT INTO ,,,
Altas
DELETE FROM …
Bajas
UPDATE ..
Cambios

Consultas SELECT

9.4 Lenguaje de Control de Datos


Para recuperación, control de concurrencias, seguridad y protección

COMMIT
Recuperación y Control de concurrencias
ROLLBACK ..

GRANT
Seguridad y Protección
REVOKE

76 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Lección 10
Sentencias DDL
10.1 CREATE
Esta instrucción crea un objeto dentro de la base de datos. Puede ser una base de datos Tabla,
vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la base de
datos soporte.

10.1.1 CREAR UNA BASE DE DATOS


CREATE DATABASE nombre de la base de datos
Ejemplo 1: Crear una base de datos “banquito”
CREATE DATABASE banquito

10.1.2 CREAR UNA TABLA


CREATE TABLE “nombre_tabla” (‘CAMPO_1’ TIPO_DATO null|not null,
‘CAMPO_2’ TIPO_DATO null|not null,
‘CAMPO_3’ TIPO_DATO null|not null,
…)
Ejemplo 1: Crear una Tabla cliente con 3 campos todos ellos de tipo carácter con el
campo nombre_cliente de 8 bytes, calle_cliente de 25 bytes y ciudad_cliente de 10
bytes
create table cliente
(
nombre_cliente char(8) ,
calle_cliente char(25) ,
ciudad_cliente char(10)
)
Ejemplo 2: Crear una Tabla cliente con 3 campos todos ellos de tipo carácter con el
campo nombre_cliente de 8 bytes ,calle_cliente de 25 bytes y ciudad cliente de 10
bytes
not null : De manera predetermine null es un valor valido para cualquier atributo en
SQL, a menos que se especifique con not null
create table cliente
(
nombre_cliente char(8) NOT NULL,
calle_cliente char(25) NULL,
ciudad_cliente CHAR(10) NULL
)

10.1.3 CREAR UN ÍNDICE


Un índice ayudara a la base de datos a recuperar más rápidamente los datos,
principalmente cuando las tablas son grandes. Los índices se asocian a una Tabla.
CREATE [UNIQUE] INDEX índice
ON tabla (campo [ASC DESC}[,campo [ASC|DESC]…..])

77 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

[WITH {PRIMARY |DISALLON NULL | IGNORE NULL}]


Ejemplo 1: Crear un índice llamado MPI a una tabla cliente sobre el atributo
nombre_cliente
CREATE INDEX MPI ON cliente (nombre_cliente)
Ejemplo 2 : Crear un índice llamado MI a una tabla préstamo sobre el atributo
nombre_sucursal
CREATE UNIQUE INDEX MI ON prestamo (nombre_sucursal)
UNIQUE: Indica que se trata de un índice único, es decir , no admite más de una tupla
con el mismo valor en los atributos que forman el índice.

10.1.4 CREAR UNA VISTA


Una vista es una declaración SELECT nombrada que dinámicamente produce un juego de
resultados en que usted puede operar. Una vista no guarda ningún dato realmente, actúa
como un filtro para tablas subyacentes en el que el dato se guarda. La declaración SELECT que
define la vista puede ser de una o las tablas más subyacentes o de otras vistas.
CREATE VIEW nombre_vista AS <expresión de consulta>
Ejemplo 1: Crear una vista que muestre a todos los clientes con su dirección que tienen una
cuenta que no se encuentre en la sucursal “San Felipe”.
CREATE VIEW v_clientes1 AS SELECT DISTINCT nombre_cliente, calle_cliente,ciudad_cliente
FROM deposito
WHERE nombre_sucursal <> “San Felipe”

Ejemplo 2: Crear una vista que muestre solo los nombres de los clientes de todos los clientes
que tienen una cuenta que no se encuentre en la sucursal “San Felipe”.
SELECT nombre_cliente
FROM v_clientes1

Importante: Otro uso habitual de las vistas es restringir el acceso de un usuario a sólo ciertas
columnas de una Tabla.

10.1.5 CREAR UN PROCEDIMIENTO


Transact SQL permite agrupar una serie de instrucciones como lote, ya sea de forma
interactiva o desde un archivo operativo. También, se puede utilizar estructuras de control de
flujo por Transact SQL para conectar las instrucciones utilizando estructuras de tipo de
programación.
Los procedimientos almacenados pueden incluir parámetros, llamar a otros procedimientos,
devolver un valor de estado a un procedimiento de llamada o lote para indicar el éxito o el
fracaso del mismo, devolver valores de parámetros de llamada o lote.
Usamos el comando EXECUTE para ejecutarlo.
CREATE PROCEDURE nombre procedimiento
AS
CONSULTA SQL

78 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

EJEMPLO 1: Crear un procedimiento que muestre todos los atributos de un determinado


cliente.
CREATE PROCEDURE lista_cliente
@nombre as varchar (50)
As
Select * from Cliente where nombre_cliente like @nombre

Nota: Todos los parámetros empiezan con @, en nuestro ejemplo identificamos un parámetro
de entrada @nombre seguido del tipo de dato .Para ejecutar este procedimiento. Ejecutamos
el procedimiento
EXECUTE liste_cliente ‘Hansen’
Dara como resultado mostrar los atributos del cliente Hansen
EJEMPLO 2: Crear un procedimiento que muestre el nombre del cliente y su respectivo saldo
dentro de un rango de saldos de deposito
CREATE PROCEDURE selecciona_saldos
@min as numeric (18), @max as numeric (18)
as
Select nombre_cliente ,saldo FROM deposito
where saldo > @min and saldo< @max

Nota: Tenemos 2 parámetros de entrada @min y @max dimensionadas con su tipo de dato.
Ejecutamos el procedimiento
EXECUTE selecciona_saldos 350, 900
Dara como resultado mostrar los saldos de depósito entre 350 y 900 con sus respectivos
nombre de cliente.

10.2 ALTER
Esta instrucción permite modificar la estructura de un objeto. Se pueden modificar las tablas y
agregar o cambiar la definición de los campos, agregar, quitar índices a una tabla, modificar un
trigger o una base de datos.

ALTER TABLE nombre_columna / | [ALTER COLUMN nombre_columna / ADD |DROP|

{ ADD / <nombre_columna> -type/ [NULL|NOT NULL]

Ejemplo 1: Modificar la tabla cliente añadiéndole una columna llamada edad que permite los
valores nulos

ALTER TABLE cliente

ADD edad NULL

79 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Ejemplo 2: Modificar la tabla cliente añadiéndole una columna llamada edad que permite los
valores nulos

ALTER TABLE cliente

DROP COLUMN ciudad_sucursal

Nota: Deben de quitarse todos los índices y constraints (restricciones)que son basadas en una
columna antes de que se elimine

10.3 DROP
Esta instrucción elimina un objeto. Puede ser una Tabla, vista, índice, trigger, función,
procedimiento o cualquier otro objeto que soporte el motor de la base de datos. Se puede
combinar con la sentencia ALTER

10.3.1 ELIMINAR UNA BASE DE DATOS


DROP DATABASE nombre de la base de datos

Ejemplo 1 Eliminar la base de datos banquito


DROP DATABASE banquito

10.3.2 ELIMINAR UNA TABLA


Al eliminar una tabla elimina la definición y todos los datos de una tabla, asi como las
especificaciones del permiso para esa tabla. Antes de que usted elimine una tabla usted debe
quitar cualquier dependencia entre tabla y otros objetos.

DROP TABLE nombre_tabla

Ejemplo 1 : Eliminar la tabla cliente de la base de datos


DROP TABLE clientes

80 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Lección 11
Sentencias DML
Las siguientes tablas permitirán realizar ejemplos xde esta leccion

DEPOSITO CLIENTE
NOMBRE_SUC N°_CU NOMBRE_CLI NOMBRE_CLI CALLE CIUDAD
SALDO
URSAL ENTA ENTE ENTE CLIENTE

DASSO 101 HANSEN 500 VALDERRAMA LARCO 444 LIMA

MANTA 215 SALVATIERRA 700 SALVATIERRA JOSE GONZALEZ 252 LIMA

SAN FELIPE 102 HANSEN 400 HANSEN LAS CAMELIAS 123 LIMA

RIO HUARA 305 TAPIA 350 CUTIMBO BOLOGNESI 232 PIURA


SAN FELIPE 201 WARRENS 900 LIMON MANCO CAPAC CHICLAYO

ANGAMOS 222 LIMON 700 TAPIA SAN LORENZO 245 PIURA

BENAVIDES 217 CUTIMBO 750 WARRENS LUNA IGLESIAS 222 LIMA


DASSO 105 CUTIMBO 850

PRESTAMO SUCURSAL
NOMBRE_S N_PRES NOMBRE_CLI SALDO NOMBRE_SUC ACTIVO CIUDAD_SUCUR
UCURSAL TAMO ENTE URSAL SAL

DASSO 17 VALDERRAMA 1000 DASS0 9´000,000 LIMA


ANGAMOS 23 SALVATIERRA 2000 GAMARRA 2´100,000 LIMA
SAN 15 CUTIMBO 1500 SAN FELIPE 1´700,000 LIMA
FELIPE
DASSO 14 TAPIA 1500 MANTA 400,000 CHICLAYO
MANTA 93 TAPIA 500 RIO HUARA 8´000,000 LIMA
RIO HUARA 11 WARRENS 900 GRAU 300,000 PIURA
GRAU 29 WARRENS 1200 LA MOLINA 3´700,000 LIMA
LA MOLINA 16 SALVATIERRA 1300 BALTA 7´100,000 CHICLAYO
DASSO 18 CUTIMBO 2000

11.1 INSERT
La instrucción INSERT se utiliza para añadir registros a las tablas de la base de datos.

El formato de la instrucción es:

INSERT INTO nombre_tabla [(nombre_columna,……..)] VALUES (Expr,..)

El nombre_tabla es únicamente el nombre de la tabla donde se desea ingresar los nuevos


datos. El nombre_columna es una lista opcional de nombres de campo en los que se insertaran
valores en el mismo número y orden que se especificaran en la clausula VALUES. Expr es una
lista de expresiones o valores constantes, separados por comas para dar valor a los distintos
campos del registro que se añadirá a la tabla.

81 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Ejemplo 1: Insertar un cliente a la tabla cliente

INSERT INTO cliente values (‘VALDERRAMA’, ‘LARCO 444’,’LIMA’)

Ejemplo 2: Podemos crear una copia de la tabla cliente llamada copia_cliente con la misma
estructura. Y después pediríamos: Insertar a la tabla copia_cliente todos los clientes

INSERT INTO COPIA_CLIENTE Select * From cliente

11.2 DELETE
La instrucción DELETE es especialmente útil cuando se desea eliminar varios registros. Esta
instrucción elimina registros o tuplas completas. No podemos eliminar valores sólo de
atributos determinados. Con la clausula WHERE (opcional) solo eliminara las filas que
seleccione la clausula WHERE. Se puede utilizar DELETE para eliminar registros de una única
tabla o desde de varios lados de una relación uno a muchos. Las operaciones de eliminación en
cascada en una consulta únicamente eliminan desde varios lados de una relación.

El formato de la instrucción es:

DELETE FROM nombre_tabla [WHERE ( condicion) ]

Ejemplo 1: Eliminar la tabla Prestamo

DELETE FROM prestamo

Ejemplo 2: Eliminar todos los registros de cuentas de Salvatierra

DELETE FROM deposito

WHERE nombre_cliente = ‘Salvatierra’

11.3 UPDATE
La sentencia UPDATE se utiliza para cambiar el contenido de los registros de una tabla de base
de datos. Con esta instrucción podemos desear cambiar un valor en un registro sin cambiar
todos los valores en un registro.

UPDATE nombre_tabla SET nombre_columna = expr,…

[WHERE (condición)]

Ejemplo 1: Actualizar pagos de interés a todos los saldos de depósito con un incremento de
10%

UPDATE DEPOSITO

SET SALDO =SALDO * 1.10

Ejemplo 2: Actualizar las cuentas con saldos mayores a 1000 soles éstas recibirán un
incremento de 6%, mientras que las demás recibirán un interés de 5%.

82 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

UPDATE DEPOSITO

SET SALDO =SALDO * 1.06

WHERE saldo > 1000

UPDATE DEPOSITO

SET SALDO =SALDO * 1.05

WHERE saldo < 1000

83 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Lección 12
Sentencias SELECT
12.1 SELECT SIMPLE
La sintaxis de una consulta de selección simple es la siguiente
SELECT campos FROM Tabla
En donde campos es la lista de campos que se desean recuperar y Tabla es el origen de
datos. Esta instrucción extrae todos los datos de una tabla

Ejemplo 1: Listar cada nombre de sucursal de la Tabla deposito

SELECT DISTINCT nombre_sucursal FROM deposito


Importante: La palabra clave DISTINCT fuerza la eliminación de duplicados

Ejemplo 2: Listar cada nombre de sucursal de la Tabla deposito sin eliminar duplicados

SELECT ALL nombre_sucursal FROM deposito


Importante: La palabra clave ALL especifica que no se eliminan los duplicados

12.2 SELECT CON CONDICIONES


La sintaxis de una consulta de selección simple con condición es la siguiente:

SELECT campos FROM Tabla WHERE condicion

La clausula WHERE condición, limita el número de registros que se devuelven,


indicándole al gestor de datos que devuelvan los registros que cumplan ciertos
criterios especificados en la condición

Ejemplo 1: Encontrar a todos los clientes que tienen una cuenta en la sucursal
“San Felipe”
SELECT DISTINCT nombre_cliente FROM deposito
WHERE nombre_sucursal = “San Felipe”

Ejemplo 2: Encontrar a todos los clientes que tienen una cuenta que no sea iguala la
sucursal “San Felipe”

SELECT DISTINCT nombre_cliente FROM deposito


WHERE nombre_sucursal <> “San Felipe”

Ejemplo 3: Listar la tabla prestamo en orden descendente de saldo

SELECT * FROM prestamo order by saldo desc,n_prestamo

La clausula order by sirve para recuperar los registros en un cierto orden , en donde se
especifica los campos a ordenar.

84 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Si varios préstamos tuvieran el mismo saldo, los ordenamos en orden ascendente por
numero de préstamo.

Ejemplo 4. Encontrar los nombres de todos los clientes cuya calle incluya la subcadena
“Las”.
SELECT nombre_cliente
FROM cliente
WHERE calle LIKE “%Las%”

Usamos el operador de comparación LIKE , esto quiere decir lo siguiente ,si usáramos
el carácter % en esta posición : “Parac%” es igual a cualquier cadena que empiece por
“Parac”; si colocáramos dos caracteres % al comienzo y al final “%imes%” es igual a
cualquier cadena que contenga “imes” como subcadena.

Ejemplo 5: Encontrar el número de clientes con depósitos para cada sucursal

SELECT nombre_sucursal, count (distinct, nombre_cliente)


FROM deposito
GROUP BY nombre_sucursal

Usamos la función de agregación COUNT cuenta el grupo de registros


Ejemplo 6: Podríamos necesitar saber únicamente las sucursales en las que saldo
promedio de las cuentas es mayor a 400 soles

SELECT nombre_sucursal, AVG( saldo)


FROM deposito
GROUP BY nombre_sucursal
HAVING AVG(saldo) > 400

Es útil declarar una condición que se aplica a grupos. Esta condición no se aplica a
único registro sino se aplica a cada grupo construido con la instrucción GROUP BY
Para realizar esta consulta, usamos la clausula HAVING que se aplica después de la
formación de grupos.

12.3 SELECT CON FUNCIONES DE AGREGACIÓN


Las funciones de agregación de son funciones que toman una colección de valores como
entrada y producen un único valor de salida. SQL proporciona cinco funciones de
agregación. Media :avg ; Minimo: min; Maximo:max; Total : sum; Cuenta:count

Ejemplo 1: Encontrar el saldo promedio de todas las cuentas: count

SELECT AVG (saldo) FROM DEPOSITO

Usamos la función de agregación AVG llamada promedio viene del inglés AVERAGE

Ejemplo 2: Encontrar el máximo saldo de todas las cuentas

85 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

SELECT MAX (saldo) FROM DEPOSITO

Usamos la función de agregación MAX llamada máximo viene del inglés MAXIMUM

Ejemplo 3: Encontrar el mínimo saldo de todas las cuentas

SELECT MIN(saldo) FROM DEPOSITO

Usamos la función de agregación MIN llamada mínimo viene del inglés MINIMUN

12.4 SELECT CON COMBINACION DE TABLAS


La sintaxis de una consulta de selección con combinación de tablas es la siguiente:

SELECT campos FROM Tabla(1),TABLA(2),TABLA(3),… TABLA(N)


WHERE condición

Recordar que la clausula WHERE es OPCIONAL como lo usamos en los ejemplos


anteriores para el caso de SELECT a una sola Tabla

Ejemplo 1: Encontrar el nombre y la ciudad de todos los clientes un préstamo en alguna


sucursal.

SELECT DISTINCT cliente.nombre_cliente,ciudad_cliente


FROM PRESTAMO,CLIENTE
WHERE préstamo.nombre_cliente = cliente.nombre_cliente

Observe que se usa la notación tabla.nombre del atributo para indicar el sentido de
pertenencia del atributo con la tabla ya que este puede repetirse en cualquier otra
relación o tabla así que el punto(.) especifica esta pertenecía,asi mismo para el
ejemplo el atributo ciudad_cliente no es necesario ya que este no se repite en otra
relación

Ejemplo 2: Encontrar el nombre y la ciudad de todos los clientes que tienen un prestamo
en la sucursal ‘San Felipe”

SELECT DISTINCT cliente.nombre_cliente,ciudad_cliente


FROM PRESTAMO,CLIENTE
WHERE préstamo.nombre_cliente = cliente.nombre_cliente
AND nombre_sucursal = “San Felipe”

12.5 SELECT CON COMBINACIONES INTERNAS DE TABLAS USANDO


INNER JOIN
La combinación INNER JOIN se utiliza como parte de una instrucción SELECT para
devolver un solo conjunto de resultado formado a partir de varias tablas. JOIN se

86 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

utiliza para vincular (o combinar) tablas por una columna en común y devolver
registros que se correspondan en esas columnas.

La sintaxis de una consulta de selección con combinación de tablas usando INNER


JOIN es la siguiente:
SELECT campos FROM <tabla1> INNER JOIN <tabla2> ON CONDICION1
INNER JOIN <Tabla3> ON CONCION2…….<TablaN> ON CONDICIONn

Ejemplo 1: Encontrar el nombre y la ciudad de todos los clientes que tiene un


prestamo en alguna sucursal.

SELECT cliente.nombre_cliente,cliente.ciudad_cliente
FROM cliente INNER JOIN prestamo ON
cliente.nombre_cliente = prestamo.nombre_cliente

Ejemplo 2: Encontrar el nombre y la ciudad de todos los clientes que tienen un


prestamo en la sucursal “San Felipe”.

SELECT cliente.nombre_cliente,cliente.ciudad_cliente
FROM cliente INNER JOIN prestamo ON
cliente.nombre_cliente = prestamo.nombre_cliente
AND nombre_sucursal = “San Felipe”

12.6 SELECT CON COMBINACIONES EXTERNAS DE TABLAS LEFT


JOIN/RIGHT JOIN /FULL JOIN
Existen tres tipos de combinaciones externas o OUTER JOIN,RIGHT OUTER JOIN
(normalmente abreviado como RIGHT JOIN se usa si necesita ver todos los registros de la
tabla situada a la derecha en la clausula JOIN ,tengan o no un registro correspondiente
en la tabla de la izquierda. Para ver todos los registros de la tabla situadas a la izquierda,
independientemente de que tengan registros correspondientes en la tabla de la derecha,
se aplica LEFT OUTER JOIN (o LEFT JOIN). Si se desea ver todos los registros de las dos
tablas, tanto si tienen un registro correspondiente en la otra tabla como si no ,se usa
FULL OUTER JOIN(u OUTER JOIN).

Ejemplo 1: Encontrar el nombre y la ciudad de todos los clientes que tengan o no


prestamo en alguna sucursal.

SELECT cliente.nombre_cliente,cliente.ciudad_cliente
FROM cliente LEFT JOIN prestamo ON
cliente.nombre_cliente = prestamo.nombre_cliente

Ejemplo 2: Encontrar el nombre y la ciudad de todos los clientes que tengan prestamo en
alguna sucursal.

SELECT cliente.nombre_cliente,cliente.ciudad_cliente

87 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

FROM cliente RIGHT JOIN prestamo ON


cliente.nombre_cliente = prestamo.nombre_cliente

12.7 SELECT ANIIDADOS O SUBCONSULTAS ANIDADAS


Una subconsulta es una consulta SELECT que devuelve un valor único y esta anidada en
una instrucción SELECT, INSERT, UPDATE o dentro de una subconsulta. Una
subconsulta se puede utilizar en cualquier parte en la que se permite una expresión.

Predicado IN: Prueba si se es miembro de un conjunto donde el conjunto es una


colección de valores producidos por una clausula SELECT. El predicado NOT IN prueba
la no pertenecía al conjunto.
Predicado EXISTS: Devuelve el valor true si la subconsulta del argumento no esta vacía
Predicado ALL: Corresponde a la frase ‘mayor que todos”. Se utiliza para recuperar
únicamente aquellos registros de la consulta principal que satisfacen la comparación
con todos los registros recuperados en la subconsulta.
Predicado ANY /SOME: Se puede utilizar el predicado ANY o SOME, los cuales son
sinónimos para recuperar registros de la consulta principal que satisfagan la
comparación con cualquier otro registro recuperado en la subconsulta.

Ejemplo 1: Encontrar a todos los clientes que tienen una cuenta en la sucursal ‘San
Felipe” pero no tienen un prestamo en la sucursal “San Felipe”

SELECT DISTINCT nombre_cliente FROM deposito


WHERE nombre_sucursal = “San Felipe” and nombre_cliente NOT IN
(SELECT nombre_cliente FROM Prestamo
WHERE nombre_sucursal = “San Felipe”)

Ejemplo 2: Encontrar a todos los clientes que tienen una cuenta en la sucursal “San
Felipe” y un prestamo en la sucursal ‘San Felipe”.

SELECT DISTINCT nombre_cliente FROM deposito


WHERE nombre_sucursal = “San Felipe” and nombre_cliente IN
(SELECT nombre_cliente FROM Prestamo
WHERE nombre_sucursal = “San Felipe”)

Ejemplo 3: Encontrar a todos los clientes que tiene una cuenta y un prestamo en la
sucursal ‘San Felipe”.

SELECT DISTINCT nombre_cliente FROM cliente


WHERE EXIST (SELECT *FROM deposito WHERE deposito.nombre_cliente =
cliente.nombre_cliente AND nombre_sucursal = “San Felipe” AND EXISTS
(SELECT * FROM prestamo WHERE prestamo.nombre_cliente =
cliente.nombre_cliente AND nombre_sucursal = “San Felipe”)

88 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Importante: La primera subconsulta exists prueba si el cliente tiene cuenta en la


sucursal “San Felipe”’. La segunda subconsulta exists prueba si el cliente tiene un
préstamo de la sucursal “San Felipe”.

Ejemplo 4: Encontrar los nombres de todas las sucursales que tienen un activo mayor
que todas las sucursales de “Lima”

SELECT nombre_sucursal FROM sucursal


WHERE activo > ALL
(SELECT activo FROM sucursal WHERE ciudad_sucursal = “Lima”)

Importante: La construcción > all corresponde a la frase “mayor que todos”

Caso de estudio
A continuación crearemos una base de datos con el analizador de consultas del SQL SERVER.

La base de datos que crearemos la llamaremos banquito que muestra la información


básica que se maneja en un BANCO. A continuación mostramos el modelo relacional de
nuestra base de datos ejemplo .

Como paso 1 crearemos nuestra base de datos en el disco E de nuestro ordenador y


particularmente en una carpeta llamada pcarpio. Dicha base de datos constara de un
archivo principal llamado bancodb.mdf, un archivo secundario llamado bancodb2.ndf y
un archivo de transacciones llamado bancodb2log.ldf.

Nuestra base de datos consta de 4 tablas relacionadas; semánticamente la entendemos


como un archivo de clientes, para facilitar el caso suponemos que estarán identificados
por su nombre (por ser clave primaria dichos valores no se podrán repetir), éstos tienen
depósitos identificados por su número de cuenta, así mismo tienen préstamos que
estarán identificados por su número de préstamo. Encontramos las sucursales que se
identifican por su nombre y éstas a su vez tienen muchos depósitos y préstamos.

A continuación el programa en SQL que nos implemente las tablas, las llaves primarias,
las llaves foráneas y las relaciones. Paso a Paso

PASO 1

CREATE DATABASE banquito ON


primary
(NAME = banKdb,
FILENAME= 'E:\pcarpio\bancodb.mdf',
SIZE = 8 MB,
MAXSIZE = 20 MB,
FILEGROWTH = 25%),
(NAME = banKdb2,
FILENAME= 'E:\pcarpio\bancodb2.ndf',
SIZE= 8 MB,
MAXSIZE = 20 MB,

89 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

FILEGROWTH = 8MB)
log on
(NAME = banKdblog,
FILENAME= 'E:\pcarpio\bancodb2log.ldf',
SIZE= 4 MB,
MAXSIZE = 15 MB,
FILEGROWTH = 10%)

Estas instrucciones deben ser ejecutadas para lograr la creación de la base de datos que
constara de tres archivos. El primero archivo principal llamado bancodb.mdf que
contendrá los datos de la base de datos, de tamaño 8 MB, con un tamaño máximo de
20MB y de porcentaje de crecimiento de 10%. Un segundo archivo llamado archivo
secundario llamado bancodb2 que nos servirá para almacenar los datos de la base de
datos, si se llenara el archivo principal con un tamaño de 8 MB, con un tamaño máximo
de 20 MB y 8 MB de crecimiento, finalmente el tercer archivo el archivo de
transacciones llamado bancodb2log.ldf que se usa para recuperar datos, guarda un
registro de las acciones hechas a la base de datos .Los registros de transacciones son
importante para la protección de los datos. Al anotar las operaciones en un registro, el
servidor de la base de datos puede recuperarlos ante cualquier desastre.

Figura 4.1 Modelo Relacional de la Base de Datos banquito

90 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Como PASO 2 crearemos las tablas que son 4. Las tablas: Cliente, Préstamo, Depósito

y Sucursal .

create table cliente


(
nombre_cliente char(8) NOT NULL,
calle_cliente char(25) NULL,
ciudad_cliente CHAR(10) NULL
)

create table prestamo


(
n_prestamo char(10) NOT NULL,
nombre_sucursal char(15) NOT NULL,
nombre_cliente char(08) NOT NULL,
saldo int NOT NULL,
check ( saldo >0)
)

create table deposito


(
n_cuenta char(10) NOT NULL,
nombre_sucursal char(15) not null,
nombre_cliente char(8) NOT NULL,
saldo int NOT NULL,
check ( saldo >0)
)

create table sucursal


(nombre_sucursal char(15) NOT NULL,
ciudad_sucursal char (30) null,
activo int not null,
check (activo > 0),
)

En la creación de cada tabla se está definiendo el tipo de dato indicándose también que
dicho campo puede permitirse valores nulos NULL. Además estamos indicando una
restricción a ciertos campos de la tabla con la palabra CHECK. La restricción CHECK se emplea
para restringir los datos que se aceptan en el campo. Por ejemplo el campo saldo acepta
valores mayores que cero. La Restricción de datos se puede forzar también con la restricción
UNIQUE siendo necesaria utilizarla para no ingresar valores duplicados a un campo que no
forma parte de la clave principal. Es importante decirle al lector que cuando indicamos NOT
NULL solo hemos hecho obligatorio para aquellos campos que van a ser claves primarias.
Veamos la tabla cliente el campo nombre_cliente va a ser la clave primaria entonces se le ha
definido como NOT NULL (ver grafico 4.1). Los tipos de datos usados en este ejemplo son: char
tipo de datos de carácter y el otro tipo usado int solo puede contener datos enteros.

91 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Como PASO 3 crearemos las claves primarias y foráneas

ALTER TABLE cliente


ADD primary key nonclustered
(nombre_cliente)

ALTER TABLE SUCURSAL


ADD primary key nonclustered
(nombre_sucursal)

ALTER TABLE deposito


ADD FOREIGN KEY (NOMBRE_CLIENTE)
REFERENCES CLIENTE

ALTER TABLE deposito


ADD FOREIGN KEY (nombre_sucursal)
REFERENCES sucursal

ALTER TABLE DEPOSITO


ADD primary key nonclustered
(n_cuenta,nombre_cliente,nombre_sucursal)

ALTER TABLE prestamo


ADD FOREIGN KEY (NOMBRE_CLIENTE)
REFERENCES CLIENTE

ALTER TABLE prestamo


ADD FOREIGN KEY (nombre_sucursal)
REFERENCES sucursal

ALTER TABLE prestamo


ADD primary key nonclustered
(n_prestamo,nombre_cliente,nombre_sucursal)

En estas instrucciones el lector tiene que ver la figura 4.1 y notar que las claves primarias
pasan como foráneas Veamos las tablas cliente y deposito tienen cardinalidad 1 a muchos el
campo clave nombre_cliente pasa como clave foránea en la tabla deposito esto se detalla en el
siguiente párrafo de instrucciones:

ALTER TABLE deposito


ADD FOREIGN KEY (NOMBRE_CLIENTE)
REFERENCES CLIENTE

Estamos modificando la tabla deposito y le agregamos la llave foránea nombre_cliente que


tiene como referencia la tabla cliente, estamos relacionado la tabla cliente con la tabla
deposito.

El lector debe notar que el orden del párrafo de instrucciones es muy importante ya que para
definir la clave primaria de préstamo que es una superclave conformada por los siguientes
campos (n_prestamo,nombre_cliente,nombre_sucursal), previamente hemos definido
aquellos campos que son claves foráneas.

92 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Al terminar los pasos 1 ,2 y 3 se debe tener el modelo relacional mostrado en la figura 4.1 ,
esto lo puede visualizar en la carpeta diagramas de base de datos , el lector puede crear su
propio diagrama con la interfase visual ingrese a la opción crear diagrama (botón 2 del mouse)
coloque el cursor sobre la carpeta diagrama de base de datos y compruebe su diagrama con la
figura 4.1.

Siempre recuerde que las tablas son el corazón de la base de datos relacionales en
general y las restricciones de integridad aseguran que la clave primaria identifique
unívocamente a cada tabla representada de la base de datos y además que las
relaciones entre tablas de la base de datos se preserven durante las actualizaciones.
A diferencia de la sentencia SELECT , que puede operar sobre múltiples tablas, las
sentencias INSERT,DELETE,UPDATE funcionan solamente sobre una única tabla cada
vez.
La instrucción SELECT se utiliza para expresar una consulta SQL. Toda sentencia SELECT
produce una tabla de resultados que contiene una o más columnas y cero o mas filas.
La clausula FROM especifica la (s) tabla que contienen (n) los datos a recuperar de una
consulta.
La clausula WHERE selecciona las filas a incluir en los resultados aplicando una
condición de búsqueda a las filas de las tablas de base de datos
La clausula ORDER BY específica que los resultados de la consulta deben ser ordenados
en sentido ascendente o descendente, basándose en los valores de una o mas
columnas
Las funciones de columnas pueden calcular el promedio, la suma, el valor mínimo, el
valor máximo, de una columna, contar el número de valores de datos de una columna
o contar el número de filas de los resultados de una consulta
Las consultas sumarias sin clausula GROUP BY genera una única fila de resultados,
sumariando todas las filas de una tabla o de un conjunto compuesto de tablas.
Las consultas sumarias con clausula GROUP BY genera múltiples filas de resultados,
cada una acumulando en valor de la suma en fila de un grupo en particular.
En una consulta multitabla, las tablas que contienen los datos son designadas en la
clausula FROM.
Una subconsulta es una consulta dentro de una consulta. Las subconsultas aparecen
dentro de una de la condiciones de búsqueda. Cuando aparece una subconsulta en la
clausula WHERE los resultados de la subconsultas se utilizan para seleccionar las filas
individuales que contribuyen a los datos de los resultados de la consulta.
Las vistas permiten redefinir la estructura de una base de datos proporcionando a cada
usuario una vista personalizada de la estructura y los contenidos de la base de datos.
No olvide que una vista es una tabla virtual definida mediante una consulta. La vista
parece contener filas y columnas de datos, al igual que una tabla real, pero los datos
visibles a través de la vistas son los resultados de la consulta.

Una vista puede ser un subconjunto simple fila/columna de una única tabla. Puede
mostrar resultados obtenidos de funciones de agrupamiento o puede extraer los datos
de dos o más tablas. Son muy útiles para la seguridad de la base de datos. Por último
las instrucciones Transact Sql pueden agruparse en procesos o lotes permanecer en
una base de datos, ejecutarse repetidamente en forma de procedimientos

93 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

almacenados. Estos pueden ser bastantes complejos y pueden convertirse en partes


importantes del código fuente de su aplicación

94 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Lectura
Lenguajes de base de datos
Los sistemas relacionales más comunes de base de datos consultan y modifican la
base de datos por medio de un lenguaje denominado SQL (Strucuture Query
Language = Lenguaje Estructurado de base de Datos). Un núcleo importante de el
equivale al algebra relacional, aunque ofrece muchas características importantes
que van más allá de lo que encontramos en ella, por ejemplo la agregación (sumas
y conteos, entre otras cosas) y actualizaciones de la base de datos.
Este lenguaje consta de muchos dialectos. Primero hay dos estándares principales
el SQL ANSI (American National Standards Institute) y un estándar actualizado que
se adopto en 1992 llamado SQL-92 o SQL2.
También existe un estándar más reciente, el SQL3 que amplía el anterior con
muchas características novedosas como la recursión, los disparadores y los objetos,
Existen además versiones del SQL producidas por los principales proveedores de
los sistemas administradores de base de datos. En todas ellas se encuentra las
capacidades del estándar original ANSI. En gran medida se conforman al SQL2 mas
reciente, aunque cada uno presenta sus propias variaciones y extensiones de él,
entre ellas algunas de las características del estándar propuestas SQL3.

Jeffrey D. Ullman pag243

95 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Actividades
Caso: Se ha diseñado una base de datos para el control del consumo, gustos y preferencias de
Bebedores de una localidad como se detalla en el siguiente diagrama. El diagrama muestra la
cardinalidad según la notación del SQL SERVER.

Figura 11.2

Se pide:

1. Crear las tablas, llaves primarias ,foráneas y relaciones


2. Crear un diagrama de la base de datos
3. Crear una restricción donde el precio de la cerveza de la tabla Vende sea mayor que
2.50
4. Insertar registros a cada una de la Tablas
5. Proponer instrucciones DML
a) (03)Select Sencillos
b) (03)Select con Condiciones

96 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Autoevaluación
1. ¿Cuál de las siguientes instrucciones del lenguaje SQL se usan para definir datos
a) Drop b) Select c) Alter d) Insert e) Create

2. ¿Cuál de los siguientes comandos están mal propuestos?


a) Create Cliente (codigo char(10),calle char(30),e_mail(30))
b) Alter TABLE Cliente ADD e_mail NULL
c) Alter Cliente DROP COLUMN Ciudad_Sucursal
d) Create view VISTA as Select activo from Sucursal
e) Drop Table Sucursal

3. ¿Cuál de las siguientes consultas satisfacen el siguiente enunciado “Eliminar todos los
prestamos con números de préstamo entre 17 y 29
a) Delete from préstamo where N_prestamo between 17 and 29
b) Delete from prestamo where N_prestamo <=29 and N_prestamo >= 17
c) Delete from prestamo where N_prestamo <29 and N_prestamo > 17
d) Delete from prestamo where N_prestamo >29 and N_prestamo < 17
e) N.A.

4. ¿Cuál de las siguientes consultas satisfacen el siguiente enunciado “Eliminar de la tabla


sucursal todas las sucursales que no tengan ciudad
a) Delete from Sucursal where ciudad_sucursal is not null
b) Delete from Sucursal where ciudad_sucursal is null
c) Delete from Sucursal where ciudad_sucursal = null
d) Delete from Sucursal where ciudad_sucursal is not exist
e) N.A.
5. ¿Cuál de las siguientes consultas satisfacen el siguiente enunciado “Encontrar el nombre
y la ciudad de todos los clientes que tienen cuentas con saldos mayores a 5000 soles”
a) SELECT cliente.nombre_cliente,cliente.ciudad_cliente FROM cliente INNER JOIN
deposito ON cliente.nombre_cliente = deposito.nombre_cliente AND
saldo.deposito >5000
b) SELECT cliente.nombre_cliente,cliente.ciudad_cliente FROM deposito,cliente
where cliente.nombre_cliente = deposito.nombre_cliente AND saldo.deposito
>5000
c) SELECT cliente.nombre_cliente,cliente.ciudad_cliente FROM cliente LEFT JOIN
deposito ON cliente.nombre_cliente = deposito.nombre_cliente AND
saldo.deposito >5000
d) SELECT cliente.nombre_cliente,cliente.ciudad_cliente FROM cliente FULL JOIN
deposito ON cliente.nombre_cliente = deposito.nombre_cliente AND
saldo.deposito >5000
e) N.A.

Respuestas de Control
1E, 2C, 3 AyB, 4B, 5AyB

97 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

Exploración On-Line
• Microsoft SQL Server 2008
http://www.microsoft.com/latam/sqlserver/

• MySQL
http://www.mysql.com/

• http://www.mailxmail.com/curso-sql
• http://www.programatium.com/bd/sql.htm
• http://www.zonagratuita.com/a-cursos/programacion/SQL7.htm

Referencias Bibliográficas
1. Korth, H. y otros (2002) Fundamentos de base de datos. 5ta. Ed. España. MacGrawHill.
2. Mike Gunderloy,Joseph L.Jorden ,David W.Tschanz La Biblia de Microsoft SQL SERVER
2005 Edicion 2006. Ediciones ANAYA
3. Training Computer Center IBM del Peru ,Base de Datos Guía del Alumno. IBM del Perú
Edicion 1999
4. Pablo Noriega Base de Datos Teoría 4ta Edición 2008 Editorial Universidad Peruana de
Ciencias Aplicadas

98 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

GLOSARIO
1. Base de datos: Colección de datos organizados de una empresa, los cuales son
recolectados y explotados por los sistemas de información de la empres.
2. Administrador de base de datos: Persona responsable de la confidencialidad,
disponibilidad, seguridad e integridad de los datos almacenados en la base de datos; vigila
el buen funcionamiento del sistema de base de datos.
3. Sistema de gestión de base de datos: Software que permite crear y mantener una base de
datos.
4. Sistema de base de datos: Formado por base de datos y Sistema de gestión de base de
datos.
5. Independencia de datos: Se refiere a la protección contra los programas de aplicación que
pueden generar incoherencias cuando se altera la organización física o lógica de la base de
datos.
6. Arquitectura ANSI/x3/SPARC: Arquitectura de tres niveles (externo, conceptual e interno)
que permite la independencia de datos.
7. Modelo de datos: Representación, a través de conceptos, reglas y convenciones para
describir los datos de una organización o domino particular.
8. MER: Modelo Entidad Relación, es un modelo conceptual que describe los datos como
entidades y sus relaciones.
9. Modelo relacional: Modelo de datos lógicos formado por relaciones o tablas.
10. Tabla: Conjunto de datos formado por filas o tuplas y columnas y atributos.
11. Primary Key: Clave Primaria, atributo (s) que identifican a las filas de una tabla.
12. Foreign Key: Clave Foránea, atributo (s) cuyos valores corresponde a los valores de la clave
primaria de la tabla relacionada.
13. SQL: Structured Query Language, Lenguaje de Consultas estructurado, formado por DDL,
DML y DCL.
14. DDL: Data Definition Language, Lenguaje de definición de datos
15. DML: Data Manipulation Language, Lenguaje de manipulación de datos
16. DCL: Data Control Language, Lenguaje de Control de los datos

99 Sistema a Distancia
Base de Datos I - Unidad IV César Luza M. / Pedro Carpio F.

BIBLIOGRAFÍA GENERAL
1. ANSI (1977): The ANSI/X3/SPARC DBMS Framework. Report on the Study Group on
Database Management Systems. D. Tsichiritzis y A. Klug (eds). Montvalle, N.J.: AFIP Press.
2. Booch, G., Rumbaugh, J. y Jacobson, I. (1999) El lenguaje unificado de modelado.
Madrid: Addison Wesley,
3. Chen, Peter (1976), “The entety-relationship model:Towards a unified view of data”. ACM
Trans.Sistemas de bases de datos 1 (1) 9-36
4. Codd, E.F. (1970) "A Relational Model of Data for Large Shared Data Banks")
Communications of the ACM, Vol 13 Num. 6.
5. Connolly, Thomas y Begg, Carolyn. (2008) Database Solutions. 5ta. Ed. España. Addison
Wesley.
6. Date, . (1995) An introduction to data base systems. 5ta. Ed. USA. Addison Wesley.
7. De Miguel A. y Piattini M., (1999) Fundamentos y Modelos de Base de datos. 2da. Ed.
España. Alfa y Omega.
8. Elmasri, Ramez y Shamkant Navathe (1997) Sistemas de Bases de Datos. Conceptos
fundamentales. Segunda Edición Addison-Wesley Iberoamericana.
9. Fagin R. (1977) “Multi-Valued Dependencies and a New Normal Form for relationa data
bases”. ACM TODS 2. No 3 (Septiembre)
10. Finkelstein, C. (1992) Strategic systems development. Sydney: Addison-Wesley.
11. Gunderloy M., Joseph L.Jorden, David W.Tschanz (2006) La Biblia de Microsoft SQL SERVER
2005. Edicion 2006. Ediciones ANAYA
12. Korth, H. y otros (2002) Fundamentos de base de datos. 5ta. Ed. España. MacGrawHill.
13. Kroenke, D. (2003) Procesamiento de base de datos. Fundamentos, diseño e
implementación. 8va. Edición, Mexico. Pearson Educacion.
14. Luque I. y Otros (2002) Bases de Datos-desde Chen hasta Codd con ORACLE,. España.
Alfaomega.
15. Martin, James. (1975) Computer Data Base Organization. USA. Prentice Hall.
16. Noriega, Pablo (2008) Base de Datos, Teoría. 4ta Edición. Editorial Universidad Peruana de
Ciencias Aplicadas
17. Training Computer Center IBM del Peru, Base de Datos Guía del Alumno. IBM del Perú
Edición 1999

100 Sistema a Distancia

También podría gustarte