Sunteți pe pagina 1din 11

REPUBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO DEL PODER POPULAR PARA LA EDUCACIN


UNIVERSITARIA
INSTITUTO UNIVERSITARIO DE TECNOLOGA DE LOS LLANOS
PROGRAMA NACIONAL DE FORMACIN EN INFORMTICA (PNFI)
TRAYECTO III| SECCIN 01
VALLE DE LA PASCUA, EDO-GURICO

CONSULTAS AVANZADAS EN
BASE DE DATOS
INTEGRANTES:
Figuera Vanessa Cl. 25.678.911
Gonzlez Orianny Cl. 25.382.243

JULIO 2015

SUB-CONSULTAS QUE PRODUCEN VALORES ESCALARES


Un valor escalar puede ser entendido como un valor numrico, aunque tambin se
consideran escalares los caracteres o cadenas de caracteres (considerando estas como
un tipo de datos elemental no como un vector de caracteres)
Una sub consulta que obtiene exactamente un valor de una columna de una fila es
tambin llamada sub-consulta escalar. El valor de una expresin en una sub-consulta
escalar es el valor del elemento de la lista seleccionado de la sub consulta.

CONDICIONES QUE INVOLUCRAN RELACIONES


ANY. Chequean si alguna fila de la lista resultado de una subconsulta se
encuentra el valor especificado en la condicin. Compara un valor escalar con los
valores de un campo y devuelven "true" si la comparacin con cada valor de la
lista de la subconsulta es verdadera, sino "false". El tipo de datos que se comparan

deben ser compatibles.


ALL: Tambin compara un valor escalar con una serie de valores. Chequea si
TODOS los valores de la lista de la consulta externa se encuentran en la lista de
valores devuelta por la consulta interna.
EXITS: Cuando anidamos sentencias SELECT, todos los operadores lgicos son
vlidos. En suma, se puede usar el operador EXISTS. Este operador es
frecuentemente usado en sub consultas relacionales para verificar cuando un valor
recuperado por la consulta externa existe en el conjunto de resultados obtenidos
por la consulta interna. Si la sub consulta obtiene al menos una fila, el operador
obtiene el valor TRUE. Si el valor no existe, se obtiene el valor FALSE.
Consecuentemente, NOT EXISTS verifica cuando un valor recuperado por la
consulta externa no es parte del conjunto de resultados obtenidos por la consulta
interna.

CONDICIONES QUE INVOLUCRAN TUPLAS


En informtica, o concretamente en el contexto de una base de datos relacional, un
registro (tambin llamado fila o tupla) representa un objeto nico de datos
implcitamente estructurados en una tabla. En trminos simples, una tabla de una base
de datos puede imaginarse formada de filas y columnas o campos. Cada fila de una
tabla representa un conjunto de datos relacionados, y todas las filas de la misma tabla
tienen la misma estructura. Las tuplas son estructuras de datos que constan de varios
campos que pueden contener datos de tipos distintos. El acceso al contenido de los
campos en las tuplas se hace utilizando el nombre de los campos en lugar de su
posicin.
Comandos asociados con las tuplas:
Insert inserta una o varias tuplas en una relacin. Formato:
INSERT INTO <Tabla> VALUES (a1, a2, ..., an);
Delete: borra una o varias tuplas en una relacin. Formato:
DELETE [FROM] <Tabla> [<Alias>] [WHERE <Cond>];
Update: actualiza o modifica tuplas de una relacin. Formato:
UPDATE <Tabla> [<Alias>] SET <Actualizaciones>
[ WHERE <Cond> ];
SUB-CONSULTAS EN CLAUSURAS FROM
En la clusula FROM se puede encontrar una sentencia SELECT encerrada entre
parntesis pero ms que subconsulta sera una consulta ya que no se ejecuta para cada
fila de la tabla origen sino que se ejecuta una sola vez al principio, su resultado se
combina con las filas de la otra tabla para formar las filas origen de la SELECT
primera y no admite referencias externas.
ELIMINACION DE DUPLICADOS
Hay ocasiones en que se necesitan eliminar duplicados de nuestras tablas en la base
de datos, un mtodo sencillo para ubicarlos puede ser por ejemplo este query:
SELECT isourceid, isourcekind, iresourceId, COUNT(*
las repeticiones

INTO tabtemp
FROM relSRight
GROUP
BY isourceid,
isourcekind,
iresourceId
HAVING COUNT(*) > 1
Con este query insertamos en una tabla temporal (tabtemp) los registros que estn
duplicados y la cantidad de repeticiones del mismo.
Ahora, lo que haremos es un cursor que ir analizando registro a registro de nuestra
tabla temporal y eliminar los registros duplicados para cada conjunto, pero siempre
dejando al menos un registro, es decir, si se encuentran 2 repeticiones de un registro
borrar solamente una, si se encuentran 4 repeticiones del mismo borrar 3, y as
sucesivamente.
DECLARE @isourceid int, @isourcekind int,@iresourceId int, @repeticiones int;
DECLARE @sqlexec
varchar(200)
DECLARE dup_cursor
CURSOR
FOR
SELECT isourceid,
isourcekind,
iresourceId,
repeticiones
FROM tabtemp
OPEN dup_cursor;
FETCH NEXT FROM dup_cursor INTO @isourceid, @isourcekind, @iresourceId,
@repeticiones;
WHILE @@FETCH_STATUS =
0
BEGIN
SET @sqlexec = set rowcount + CAST( (@repeticiones 1) AS VARCHAR(3)) +

delete
from
relSright
where
isourceid
=
+ CAST(
@isourceid AS VARCHAR(10))
+
and isourcekind = + CAST( @isourcekind AS VARCHAR(10)) +

and
iresourceId
=
+
CAST(@iresourceId AS VARCHAR(10))
EXEC(@sqlexec)
FETCH NEXT FROM dup_cursor INTO @isourceid, @isourcekind, @iresourceId,
@repeticiones;
END
CLOSE dup_cursor;
DEALLOCATE dup_cursor;
Y con esto tenemos eliminados todas las repeticiones de nuestros registros en una
tabla.
AGRUPACIONES Y AGREGACIONES EN SQL
Funciones de agregacin Las funciones de agregacin en SQL nos permiten efectuar
operaciones sobre un conjunto de resultados, pero devolviendo un nico valor
agregado para todos ellos. Es decir, nos permiten obtener medias, mximos, etc...
sobre un conjunto de valores.
Las funciones de agregacin bsicas que soportan todos los gestores de datos son las
siguientes:
o COUNT: devuelve el nmero total de filas seleccionadas por la
consulta.

o MIN: devuelve el valor mnimo del campo que especifiquemos.


o MAX: devuelve el valor mximo del campo que especifiquemos.
o SUM: suma los valores del campo que especifiquemos. Slo se puede
utilizar en columnas numricas.
o AVG: devuelve el valor promedio del campo que especifiquemos.
Slo se puede utilizar en columnas numricas.
Las funciones anteriores son las bsicas en SQL, pero cada sistema gestor de bases
de datos relacionales ofrece su propio conjunto, ms amplio, con otras funciones de
agregacin
particulares.
Puedes
consultar
las
que
ofrecen SQL
Server, Oracle y MySQL.
Todas estas funciones se aplican a una sola columna, que especificaremos entre
parntesis, excepto la funcin COUNT, que se puede aplicar a una columna o indicar
un *. La diferencia entre poner el nombre de una columna o un *, es que en el
primer caso no cuenta los valores nulos para dicha columna, y en el segundo si.
As, por ejemplo, si queremos obtener algunos datos agregados de la tabla de
pedidos de la base de datos de ejemplo Northwind, podemos escribir una consulta
simple como la siguiente:
SELECT COUNT(*) AS TotalFilas, COUNT(ShipRegion) AS FilasNoNulas,
MIN(ShippedDate) AS FechaMin, MAX(ShippedDate) AS FechaMax,
SUM(Freight) AS PesoTotal, AVG(Freight) PesoPromedio
FROM Orders
y obtendramos el siguiente resultado en el entorno de pruebas:

De esta manera sabremos que existen en total 830 pedidos en la base de datos, 323
registros que tienen asignada una zona de entrega, la fecha del pedido ms antiguo (el
10 de julio de 1996), la fecha del pedido ms reciente (el 6 de mayo de 1998 los
datos de ejemplo son muy antiguos!), el total de peso enviado entre todos los pedidos
(64.942,69 Kg o sea, ms de 64 toneladas) y el peso promedio del los envos
(78,2442Kg). No est mal para una consulta tan simple.
Agrupando resultados
La clusula GROUP BY unida a un SELECT permite agrupar filas segn las

columnas que se indiquen como parmetros, y se suele utilizar en conjunto con las
funciones de agrupacin, para obtener datos resumidos y agrupados por las
columnas que se necesiten.
Hemos visto en el ejemplo anterior que obtenamos slo una fila con los datos
indicados correspondientes a toda la tabla. Ahora vamos a ver con otro ejemplo
cmo obtener datos correspondientes a diversos grupos de filas, concretamente
agrupados por cada empleado:
SELECT EmployeeID, COUNT(*) AS TotalPedidos, COUNT(ShipRegion) AS
FilasNoNulas,
MIN(ShippedDate) AS FechaMin, MAX(ShippedDate) AS FechaMax,
SUM(Freight) PesoTotal, AVG(Freight) PesoPromedio
FROM Orders
GROUP BY EmployeeID
En este caso obtenemos los mismos datos pero agrupndolos por empleado, de modo
que para cada empleado de la base de datos sabemos cuntos pedidos ha realizado,
cundo fue el primero y el ltimo, etc...:

De hecho nos resultara muy fcil cruzarla con la tabla de empleados, usando lo
aprendido sobre consultas multi-tabla, y que se devolvieran los mismos resultados
con el nombre y los apellidos de cada empleado:

En este caso fjate en cmo hemos usado la expresin Employees.FirstName + ' ' +

Employees.LastName como parmetro en GROUP BY para que nos agrupe por un


campo compuesto (en SQL Server no podemos usar alias de campos para las
agrupaciones). De esta forma tenemos casi un informe preparado con una simple
consulta de agregacin.
CLAUSULAS HAVING
La clusula HAVING establece las condiciones de la clusula GROUP BY de la
misma forma que WHERE interacta con SELECT. Mientras que las condiciones de
bsqueda de WHERE se aplican antes de que se produzca la operacin de
agrupamiento, las condiciones de bsqueda de HAVING se aplican despus. La
sintaxis de la clusula HAVING es similar a la de la clusula WHERE, con la
diferencia de que HAVING puede contener funciones de agregado. Las clusulas
HAVING pueden hacer referencia a cualquiera de los elementos que aparecen en la
lista de seleccin.
TIPOS DE DATOS
Por regla general seran:
1. Cadenas de Caracteres (char, nchar, varchar, nvarchar, ...)
2. Numricos Exactos (int, smallint, tinyint, long, ...)
3. Numricos Aproximados (float, double, single, ...)
4. Fecha y Hora (date, datetime, time, ...)
5. Otros tipos (datos de imagen, textos largos, unicode, binarios, ...)
Ahora, segn el motor de base de datos, estos pueden variar, por ejemplo en SQL
server, versin 2005 tienes los siguientes:
Numricos exactos: bigint, decimal, int, numeric, smallint, money, tinyint,
smallmoney, bit,
Numricos aproximados: float, real
Fecha y hora: datetime, smalldatetime,
Cadenas de caracteres: char, text, varchar
Cadenas de caracteres Unicode: nchar, ntext, nvarchar
Cadenas binarias: binary, image, varbinary
Otros tipos de datos: cursor, timestamp, sql_variant, uniqueidentifier, table, xml
En MySQL tienes estos tipos de datos clasificados de la siguiente manera:
Tipos numricos (flotantes y no flotantes): TinyInt, Bit Bool, Smallint, MediumInt,

Integer, BigInt, Float, xReal, Double,


Decimal, Numeric
Tipos fecha: Date, DateTime, TimeStamp, Time, Year
Tipos de cadena: Char, VarChar, TinyText y TinyBlob, Blob y Text, MediumBlob y
MediumText, LongBlob y LongText, Enum, Set
DEFINICION DE TABLAS
Se refiere al tipo de modelado de datos, donde se guardan los datos recogidos por un
programa. Su estructura general se asemeja a la vista general de un programa de hoja
de clculo.
Una tabla es utilizada para organizar y presentar informacin. Las tablas se
componen de filas y columnas de celdas que se pueden rellenar con textos y grficos
Las tablas se componen de dos estructuras:
Registro: es cada una de las filas en que se divide la tabla. Cada registro
contiene datos de los mismos tipos que los dems registros. Ejemplo: en una
tabla de nombres y direcciones, cada fila contendr un nombre y una
direccin.
Campo: es cada una de las columnas que forman la tabla. Contienen datos de
tipo diferente a los de otros campos. En el ejemplo anterior, un campo
contendr un tipo de datos nico, como una direccin, o un nmero de
telfono, un nombre, etc.
A los campos se les puede asignar, adems, propiedades especiales que afectan a los
registros insertados. El campo puede ser definido como ndice o autoincrementable,
lo cual permite que los datos de ese campo cambien solos o sean el principal a la hora
de ordenar los datos contenidos.
Cada tabla creada debe tener un nombre nico en la Base de Datos, hacindola
accesible mediante su nombre o su seudnimo (Alias) (dependiendo del tipo de base
de datos elegida) La estructura de las tablas viene dado por la forma de un archivo
plano, los cuales en un inicio se componan de un modo similar.
MODIFICACION DE RELACIONES EN EL ESQUEMA
En la introduccin a este punto observamos que los tipos de modificacin que
pueden hacerse en un esquema de base de datos relacional son bastantes simples:
Crear o quitar una relacin.
Aadir o eliminar atributos de un esquema de relaciones.
Esta simplicidad no se cumple en los esquemas de bases de datos orientadas a
objetos.
VALORES POR DEFECTO
Para campos de cualquier tipo no declarados "not null" el valor por defecto es
"null" (excepto para tipos "timestamp" que no trataremos aqu).
Para campos declarados "not null", el valor por defecto depende del tipo de dato.
Para cadenas de caracteres el valor por defecto es una cadena vaca. Para valores
numricos el valor por defecto es 0; en caso de ser "auto_increment" es el valor

mayor existente+1 comenzando en 1. Para campos de tipo fecha y hora, el valor por
defecto es 0 (por ejemplo, en un campo "date" es "0000-00-00").
Para todos los tipos, excepto "blob", "text" y "auto_increment" se pueden explicitar
valores por defecto con la clusula "default"; tema que veremos ms adelante.
Un valor por defecto se inserta cuando no est presente al ingresar un registro y en
algunos casos en que el dato ingresado es invlido.
Los campos para los cuales no se ingresaron valores tomarn los valores por defecto
segn el tipo de dato del campo, en el campo "codigo" ingresar el siguiente valor de
la secuencia porque es "auto_increment"; en el campo "titulo", ingresar una cadena
vaca porque es "varchar not null"; en el campo "editorial" almacenar "null", porque
no est definido "not null"; en el campo "precio" guardar "null" porque es el valor
por defecto de los campos no definidos como "not null" y en el campo "cantidad"
ingresar 0 porque es el valor por defecto de los campos numricos que no admiten
valores nulos.
Tipo
Valor por defecto
Clusula
"default"
____________________________________________________________________
_________________
caracter not null
cadena vaca
permite
numerico not null
0
permite
fecha not null
0000-00-00
permite
hora not null
00:00:00
permite
auto_increment
siguiente de la sec., empieza en 1 no permite
carac.,numer.,fecha,hora null
null
permite
INDICES
Los ndices en las BBDD pretenden aligerar las consultas, a modo de simil
podramos verlos como un ndice de libro. Buscar un captulo en un libro sin un
ndice implicara recorrer el libro entero hasta que nos topemos con el mientras que
encontrarlo con un ndice supondra recorrer este ltimo y luego ir directamente a la
pgina en la que se encuentra lo que nos interesa.
El espacio en disco requerido para almacenar el ndice es tpicamente menor que el
espacio de almacenamiento de la tabla (puesto que los ndices generalmente
contienen solamente los campos clave de acuerdo con los que la tabla ser ordenada,
y excluyen el resto de los detalles de la tabla), lo que da la posibilidad de almacenar
en memoria los ndices de tablas que no cabran en ella. En una base de datos
relacional un ndice es una copia de una parte de la tabla.
Algunas bases de datos amplan la potencia del indexado al permitir que los ndices
sean creados de funciones o expresiones. Por ejemplo, un ndice puede ser creado
sobre la funcin upper(apellido), que almacenara en el ndice solamente las versiones
maysculas del campo apellido. Otra opcin a veces soportada, es el uso de ndices
"filtrados", donde las entradas del ndice son creadas solamente para los registros que

satisfagan una cierta expresin condicional. Un aspecto adicional de flexibilidad es


permitir la indexacin en funciones definidas por el usuario, tambin como
expresiones formadas de un surtido de funciones incorporadas. Todos estos
refinamientos de la indexacin son soportados en Visual FoxPro y otros lenguajes de
programacin, por ejemplo.
Los ndices pueden ser definidos como nicos o no nicos. Un ndice nico acta
como una restriccin en la tabla previniendo filas idnticas en el ndice.
DECLARACION DE CLAVES PRIMARIAS
Son un campo o una combinacin de campos que identifica de forma nica a
cada fila de una tabla. Una clave primaria comprende de esta manera una columna o
conjunto de columnas. No puede haber dos filas en una tabla que tengan la misma
clave primaria.
Una clave primaria debe identificar a todas las posibles filas de una tabla y no
nicamente a las filas que se encuentran en un momento determinado. Ejemplos de
claves primarias son DNI (asociado a una persona) o ISBN (asociado a un libro). Las
guas telefnicas y diccionarios no pueden usar nombres o palabras o nmeros del
sistema decimal de Dewey como claves candidatas, porque no identifican
unvocamente nmeros de telfono o palabras.
Las claves primarias estn definidas el estndar ANSI SQL, mediante la directiva
PRIMARY KEY. La sintaxis para aplicar tal directiva a una tabla existente est
definida en SQL:2003 de esta manera:
ALTER TABLE <identificador_de_la_tabla>
ADD [ CONSTRAINT <identificador_de_la_directiva> ]
PRIMARY KEY ( <nombre_de_columna> {, <nombre_de_columna>}... )
La clave primaria puede especificarse directamente o de forma inmediata en el
momento de la creacin de la tabla tambin. En el estndar SQL, las claves primarias
pueden estar compuestas por una o ms columnas. Cada columna que forme parte de
la clave primaria queda implcitamente definida como NOT NULL. Ntese que
algunos sistemas de bases de datos requieren que se marque explcitamente a las
columnas de clave primaria como NOT NULL.
CREATE TABLE nombre_de_la_tabla (
id_col INT,
col2 CHARACTER VARYING(20),
...
CONSTRAINT clapri_tabla PRIMARY KEY(id_col),
...
)
En el caso en que la clave primaria sea una sola columna, sta puede marcarse como
tal por medio de la siguiente sintaxis:
CREATE TABLE nombre_de_la_tabla (
id_col INT PRIMARY KEY,
col2 CHARACTER VARYING(20),
...
)
UNIQUE

La restriccin UNIQUE identifica de manera nica a cada fila de una tabla.


Puede haber varias restricciones UNIQUE en diferentes columnas de una tabla.
Existen varias formas diferentes de sintaxis segn el sistema de base de datos
utilizado:
Ejemplo SQL UNIQUE para la base de datos MySQL
CREATE
TABLE
personas
{
identificador
int
NOT
NULL,
nombre
varchar(255)
NOT
NULL,
apellido1
varchar(255)
NOT
NULL,
apellido2
varchar(255),
UNIQUE
(identificador)
}
La sentencia anterior crea la tabla 'personas' con 4 columnas, donde la columna
'identificador' tiene un valor diferente para cada fila de la tabla.
Si intentamos insertar una fila con un identificador que ya exista, nos dar un error, y
no nos dejar insertarlo.
RESTRICCIONES SOBRE CLAVES
Las claves principales y las claves externas son dos tipos de restricciones que se
pueden usar para aplicar la integridad de datos en las tablas de SQL. Se trata de
objetos de base de datos importantes.
Restricciones de clave principal
Una tabla suele tener una columna o una combinacin de columnas cuyos valores
identifican de forma nica cada fila de la tabla. Estas columnas se denominan claves
principales de la tabla y exigen la integridad de entidad de la tabla. Debido a que las
restricciones de clave principal garantizan datos nicos, con frecuencia se definen en
una columna de identidad.
Cuando especifica una restriccin de clave principal en una tabla, Motor de base de
datos exige la unicidad de los datos mediante la creacin automtica de un ndice
nico para las columnas de clave principal. Este ndice tambin permite un acceso
rpido a los datos cuando se usa la clave principal en las consultas. Si se define una
restriccin de clave principal para ms de una columna, puede haber valores
duplicados dentro de la misma columna, pero cada combinacin de valores de todas
las columnas de la definicin de la restriccin de clave principal debe ser nica.
Como
se
muestra
en
la
siguiente
ilustracin,
las
columnas ProductID y VendorID de la tabla Purchasing.ProductVendor forman
una restriccin de clave principal compuesta para esta tabla. De este modo, se
garantiza que todas las filas de la tabla ProductVendortengan una combinacin
de ProductID y VendorID. Esto impide la insercin de filas duplicadas.

Una tabla solo puede incluir una restriccin de clave principal.


Una clave principal no puede superar las 16 columnas y una longitud de clave
total de 900 bytes.
El ndice generado por una restriccin de clave principal no puede hacer que
el nmero de ndices de la tabla supere 999 ndices no clster y 1 ndice
clster.
Si no se especifica si es en clster o no en clster para una restriccin de clave
principal, se usa la disposicin en clster si no hay ndices clster en la tabla.
Todas las columnas definidas en una restriccin de clave principal se deben
definir como no NULL. Si no se especifica nulabilidad, la nulabilidad de
todas las columnas que participan en una restriccin de clave principal se
establece en no NULL.
Si la clave principal se define en una columna de tipo definido por el usuario
CLR, la implementacin del tipo debe admitir el orden binario.
Restricciones de clave externa
Una clave externa (FK) es una columna o combinacin de columnas que se usa para
establecer y aplicar un vnculo entre los datos de dos tablas a fin de controlar los
datos que se pueden almacenar una tabla de clave externa. En una referencia de clave
externa, se crea un vnculo entre dos tablas cuando las columnas de una de ellas
hacen referencia a las columnas de la otra que contienen el valor de clave
principal. Esta columna se convierte en una clave externa para la segunda tabla.
ndices de restricciones de clave externa
A diferencia de las restricciones de clave principal, la creacin una restriccin de
clave externa no crea automticamente el ndice correspondiente. No obstante, la
creacin manual de un ndice en una clave externa suele ser til por los siguientes
motivos:
Las columnas de clave externa suelen usarse en los criterios de combinacin
cuando los datos de las tablas relacionadas se combinan en consultas mediante
la correspondencia de la columna o columnas de la restriccin de clave
externa de una tabla y la columna o columnas de la clave nica o principal de
la otra. Un ndice permite al Motor de base de datos buscar con rapidez datos
relacionados en la tabla de clave externa. No obstante, no es necesario crear
este ndice. Pueden combinarse los datos de dos tablas relacionadas aunque no
se hayan definido restricciones de clave principal o de clave externa entre
ellas, pero una relacin de clave externa entre dos tablas indica que estas se
han optimizado para su combinacin en una consulta que use las claves como
criterio.
Los cambios en las restricciones de clave principal se comprueban con
restricciones de clave externa en las tablas relacionadas.

S-ar putea să vă placă și