Consultas Avanzadas En Bases De Datos

 Consultas Avanzadas En Bases De Datos



Consultas:

Una consulta SQL es tipo de consulta a una base de datos empleando lenguaje SQL.


    Una consulta SQL básica puede constar con un máximo de seis cláusulas, de las cuales sólo dos son obligatorias (SELECT y FROM). Las cláusulas se especifican en el siguiente orden:
    SELECT < lista de atributos >
    FROM < lista de tablas >
    WHERE < condición >
    GROUP BY < atributo(s) de agrupación >
    HAVING < condición de agrupación >
    ORDER BY < lista de atributos >

    SELECT: indica qué atributos o funciones se van a recuperar.

    FROM: especifica todas las relaciones (tablas) que se necesitan en la consulta.

    WHERE: especifica las condiciones, si es que hacen falta, para seleccionar tuplas de esas relaciones, incluyendo las condiciones de reunión.

    GROUP BY: especifica atributos de agrupación.

    HAVING: especifica una condición que deben cumplir los grupos seleccionados, no las tuplas individuales. Las funciones agregadas integradas COUNT, SUM, MIN, MAX y AVG se usan junto con la agrupación.

    ORDER BY: especifica un orden para presentar el resultado de una consulta.

Sub-Consultas que producen valores escalares:

Un valor escalar puede ser entendido como un valor numérico, aunque también se consideran escalares los caracteres o las cadenas de caracteres (considerando éstas 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 también llamada sub consulta escalar. El valor de una expresión en una sub consulta escalar es el valor del elemento de la lista seleccionado de la sub consulta.

Ejemplo: Empleados que ganan más que el promedio de salarios pagados en el depto 20.

Condiciones que involucran relaciones:

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

ALL: También 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 lógicos son válidos. 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 informática, o concretamente en el contexto de una base de datos relacional, un registro (también llamado fila o tupla) representa un objeto único de datos implícitamente estructurados en una tabla. En términos 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 posición. 


Eliminación de duplicados:

Los datos duplicados a menudo se arrastran cuando varios usuarios agregan datos a la base de datos al mismo tiempo o si la base de datos no estaba diseñada para buscar duplicados. Es más fácil usar una consulta cuando desea eliminar una gran cantidad de datos duplicados. El primer paso es buscar registros duplicados con una consulta en la base de datos.




    Clausula Having:

Así como la cláusula "where" permite seleccionar (o rechazar) registros individuales; la cláusula "having" permite seleccionar (o rechazar) un grupo de registros.

Si queremos saber la cantidad de libros agrupados por editorial usamos la siguiente instrucción ya aprendida:

 select editorial, count(*)

  from libros

  group by editorial;

Si queremos saber la cantidad de libros agrupados por editorial pero considerando sólo algunos grupos, por ejemplo, los que devuelvan un valor mayor a 2, usamos la siguiente instrucción:

 select editorial, count(*) from libros

  group by editorial

  having count(*)>2;

Se utiliza "having", seguido de la condición de búsqueda, para seleccionar ciertas filas retornadas por la cláusula "group by".

Veamos otros ejemplos. Queremos el promedio de los precios de los libros agrupados por editorial, pero solamente de aquellos grupos cuyo promedio supere los 25 pesos:

 select editorial, avg(precio) from libros

  group by editorial

  having avg(precio)>25;

En algunos casos es posible confundir las cláusulas "where" y "having". Queremos contar los registros agrupados por editorial sin tener en cuenta a la editorial "Planeta".
Analicemos las siguientes sentencias:

 select editorial, count(*) from libros

  where editorial<>'Planeta'

  group by editorial;

 select editorial, count(*) from libros

  group by editorial

  having editorial<>'Planeta';

Ambas devuelven el mismo resultado, pero son diferentes. La primera, selecciona todos los registros rechazando los de editorial "Planeta" y luego los agrupa para contarlos. La segunda, selecciona todos los registros, los agrupa para contarlos y finalmente rechaza fila con la cuenta correspondiente a la editorial "Planeta".

No debemos confundir la cláusula "where" con la cláusula "having"; la primera establece condiciones para la selección de registros de un "select"; la segunda establece condiciones para la selección de registros de una salida "group by".

Veamos otros ejemplos combinando "where" y "having". Queremos la cantidad de libros, sin considerar los que tienen precio nulo, agrupados por editorial, sin considerar la editorial "Planeta":

    Tipos de Datos:


Tipo de dato es un concepto propio de la informática, presente en cualquier lenguaje de programación, donde cada entorno de programación tiene su modo particular de definirlos. Los hay muy diversos, clasificados por grupos, definidos por el usuario... pero para lo que aquí nos ocupa vamos a considerar solamente estos cuatro tipos de dato:

Cadena
(cadena de texto o alfanumérica)
Número entero (sin decimales)
Número decimal (parte entera + parte decimal)
Fecha


    Definición de Tablas:

Las Tablas son objetos de la base de datos que contienen la información de los usuarios, estos datos están organizados en filas y columnas, similar al de una hoja de cálculo. Cada columna representa un dato aislado y en bruto que por sí solo no brinda información, por lo tanto estas columnas se deben agrupar y formar una fila para obtener conocimiento acerca del objeto tratado en la tabla. Por ejemplo, puede definir una tabla que contenga los datos de los productos ofertados por una tienda, cada producto estaría representado por una fila mientras que las columnas podrían identificar los detalles como el código del producto, la descripción, el precio, las unidades en stock, etc.






Modificación de Esquemas:

En la introducción a este punto observamos que los tipos de modificación que pueden hacerse en un esquema de base de datos relacional son bastantes simples:

Crear o quitar una relación.

Añadir o eliminar atributos de un esquema de relaciones.

Esta simplicidad no se cumple en los esquemas de bases de datos orientadas a objetos.

Fuentes:
Cambios Complejos: los tipos de modificación que pueden hacerse en un esquema orientado a objetos son más complejos que los que pueden hacerse en un esquema de base de datos relacional.

Cambios Frecuentes: las aplicaciones que motivan el uso del modelo orientado a objetos requieren cambios de esquema frecuentes, las aplicaciones de diseño a menudo implican: la alteración de la estructura del elemento que se está diseñando, mientras en el ejemplo bancario, los datos descriptivos que se requieren para préstamos, cuentas, etc., cambian relativamente poco.

Tipos:
Adición de una Nueva Clase: esta adición en una base de datos orientada a objetos implica más de lo que implicaba la adición de un esquema de relaciones en una base de datos relacional, la nueva clase debe colocarse en la jerarquía de Clase / Subclase o D. A. G., y deben resolverse los problemas de herencia. Si la nueva clase no es un nodo hoja en la jerarquía o el D. A. G., puede que las subclases de la nueva clase necesita heredar variables o métodos de la nueva clase, lo mismo se aplica a las subclases y así sucesivamente.

Eliminación de una Clase:
la eliminación en una base de datos orientada a objetos requiere varias operaciones, las variables y los métodos que heredan las subclases se deben volver a eliminar. Cualquier cambio en una subclase puede que necesite propagarse a las subclases, y así sucesivamente; las instancias de las clases eliminadas deben hacerse instancias de otra clase, generalmente un padre de la clase eliminada.

Modificación de una Definición de Clase: puede definirse una nueva o variable o método o puede eliminarse una definición de una variable o un método, como en los casos anteriores, la definición de las subclases puede verse afectada.


        Valores por defecto, índices, selección de índices:

Hemos visto que si al insertar registros no se especifica un valor para un campo que admite valores nulos, se ingresa automaticamente "null" y si el campo está declarado "identity", se inserta el siguiente de la secuencia. A estos valores se les denomina valores por defecto o predeterminados.

Un valor por defecto se inserta cuando no está presente al ingresar un registro y en algunos casos en que el dato ingresado es inválido.

Para campos de cualquier tipo no declarados "not null", es decir, que admiten valores nulos, el valor por defecto es "null". Para campos declarados "not null", no existe valor por defecto, a menos que se declare explícitamente con la cláusula "default".

Para todos los tipos, excepto los declarados "identity", se pueden explicitar valores por defecto con la cláusula "default".

Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para ello utilizamos "default" al definir el campo. Por ejemplo, queremos que el valor por defecto del campo "autor" de la tabla "libros" sea "Desconocido" y el valor por defecto del campo "cantidad" sea "0":

 create table libros(
  codigo int identity,
  titulo varchar(40),
  autor varchar(30) not null default 'Desconocido',
  editorial varchar(20),
  precio decimal(5,2),
  cantidad tinyint default 0
);

    Restricciones de Integridad. Claves Primarias. Protección. Índice. Clave de una Relación. Declaración n de Claves:

La integridad referencial es un sistema de reglas que utilizan la mayoría de las bases de datos relacionales para asegurarse que los registros de tablas relacionadas son válidos y que no se borren o cambien datos relacionados de forma accidental produciendo errores de integridad.

    Hay dos formas de declarar una clave primaria en la proposición CREATE TABLE que define una relación.
 Declararla en el listado del esquema relacional (válida sólo cuando la clave primaria está formada por un atributo)
 Agregarle a la lista de elementos declarados en el esquema una declaración más que indique el atributo o conjunto de atributos que forman la clave primaria.
CREATE TABLE Estrellas (nombre)   CHA9R(30)PRIMARY KEY, dirección VARCHAR(255),...PRIMARY KEY (nombre)

 Declararla en el listado del esquema relacional (válida sólo cuando la clave primaria está formada por un atributo)
 Agregarle a la lista de elementos declarados en el esquema una declaración más que indique el atributo o conjunto de atributos que forman la clave primaria.
CREATE TABLE Estrellas (nombre)   CHA9R(30)PRIMARY KEY, dirección VARCHAR(255),...PRIMARY KEY (nombre)



    UNIQUE:

Otra manera de declarar una clave consiste en emplear la palabra UNIQUE(puede aparecer donde pueda hacerlo PRIMARY KEY, tras un atributo o como elemento independiente)En una tabla puede haber varias declaraciones UNIQUE, pero sólo una clave primaria CREATE TABLE Estrellas
 (nombre    CHAR(30) UNIQUE, dirección VARCHAR(255)
UNIQUE,.
    ..);

)
2. Aave
CEATE TABLE Estrellas (
nombre C
HAR(30)
PRIMARY
,
dirección VARCHAR(255),
...
PRIMARY KEY (nombre)

    Este tipo de restricción es muy parecida a PRIMARY KEY,  las diferencias son las siguientes:

También genera un índice automáticamente pero es de tipo de NON CLUSTERED.
       La tabla puede tener más de una restricción de tipo UNIQUE.
       Si puede aceptar NULL, pero solo una fila puede contenerlo ya que como su nombre lo indica, es de tipo UNIQUE 
o único. 

    Operaciones de inserción, actualización, eliminación y selección en tablas y vistas con el adaptador de SQL:


La operación de inserción toma una matriz de registros como entrada. Cada registro está fuertemente tipado en la tabla de destino y se asigna a la fila que se va a insertar en la tabla.
-Puede insertar valores en columnas de identidad siempre que el valor de la propiedad de enlace AllowIdentityInsert esté establecido en true. Para obtener más información acerca de la propiedad de enlace AllowIdentityInsert , vea leer información sobre el adaptador de BizTalk para las propiedades de enlace del adaptador de SQL Server.

: El valor devuelto de la operación de inserción es una matriz de tipo de datos Long. Esta matriz almacena los valores de identidad de las filas insertadas, si las hay. Si no hay ninguna columna de identidad en una tabla, el valor devuelto es NULL.

Algunos valores del mensaje de la operación de inserción se tratan de la siguiente manera Adaptador de SQL :

-Los valores especificados para columnas calculadas y columnas de marca de tiempo se omiten.
-Si el nodo de una columna de identidad es null, se omite.

Para todos los demás valores del mensaje de la operación de inserción:

-Si se especifica un valor para una columna, se utiliza ese valor en la instrucción INSERT.
-Si el nodo de una columna determinada es null, se utiliza NULL en la instrucción INSERT. Nota: Si para un registro determinado no hay ningún valor que se pueda usar en la instrucción INSERT (es decir, no se especificó ningún valor para ninguna columna o se omitieron todos los valores de columna), el adaptador ejecuta la siguiente instrucción SQL: insert into <table_name> default values





    Autores:
Eddwin Urdaneta C.I.: 28.256.040
Brahian Fernández C.I.: 30.023.283
Joel Zambrano C.I.: 29.545.204


Comentarios