Calavera calculo de estructuras de cimentacion.pdf
sql server
1. MONOGRAFÍA.
Structured Query Language Server (SQL Server).
Integrantes
Canayo Hualinga, Marcelo.
Huamán Córdova, Sandro Cesar.
Lomas Laulate, Alían Aldair.
Ríos Vásquez, Yessabella Ytzel.
Vásquez Mozombite, Ana Meliza.
Docente
Ing. Roberto Carlos Carrasco Sánchez.
Facultad
Ciencias E Ingeniería
Carrera
Ingeniería De Sistemas De Información
Catedra
Administración De Datos E Información I
Ciclo
III
Fecha De Entrega: miércoles, 26 De Noviembre Del 2014.
IQUITOS _LORETO _PERÚ
“AÑO DE LA PROMOCION DE LA INDUSTRIA RESPONSABLE Y DEL
COMPROMISO CLIMÀTICO”
UNIVERSIDAD CIENTÍFICA DEL PERÙ
2. 2
INDICE
1. INTRODUCCION………………………………………………………………………………………….5
1.1.OBJETIVOS DE LA INVESTIGACIÓN…………………………………………………..6
Objetivo General
Objetivos Específicos
1.2.JUSTIFICACIÓN DE LA INVESTIGACIÓN………………………………………..7
2. MARCO TEÓRICO……………………………………………………………………………………..9
2.1. Gestor de Base de Datos Microsoft SQL Server…………………………………………...9
2.1.1. Definición de base Datos…………………………………………………………………………………….9
2.1.2. Definición de SQL Server…………………………………………………………………………………..10
2.1.3. Historia de SQL Server……………………………………………………………………………………..10
2.1.4. Características……………………………………………………………………………………………………..11
2.1.5. Ventaja SQL Server…………………………………………………………………………………………….14
2.1.6. Desventajas SQL Server…………………………………………………………………………………….14
2.2.Modelamiento de Base de Datos en SQL Server……………………………….14
2.3. Lenguaje SQL…………………………………………………………………………….16
2.3.1. Definición de SQL..........................................................31
2.3.2. Sintaxis.....................................................................32
2.3.3. Ejercicios de Lenguaje SQL………………………………………………………………………………..32
2.4. T – SQL………………………………………………………………………………………..37
2.4.1. Definición de Transact - SQL…………………………………………………………………………..37
2.4.2. Sintaxis…………………………………………………………………………………………………………………..38
2.4.3. Ejercicios de Lenguaje T – SQL………………………………………………………………………..39
3. CONCLUSIONES
BIBLIOGRAFÍA
3. 3
DEDICATORIA
A la Universidad Científica del Perú, institución en la cual encontramos la
oportunidad para estudiar cada uno de nosotros como becarios, y además de
hacer realidad los sueños de muchos jóvenes que tienen el anhelo de ser
profesionales para el futuro del país.
A la Facultad de Ciencias e Ingeniería, por su organización
administrativa y académica, cuyas condiciones han favorecido superar nuestras
limitaciones y asimilar nuevas experiencias académicas y en el futuro ser
profesionales.
4. 4
AGRADECIMIENTO.
Agradecemos a Dios, por cada una de las cosas en especial por la vida;
y también por iluminar nuestra mente y nuestra salud. A nuestros padres y a
aquellas personas que han sido nuestros soportes y compañía durante todo el
periodo de estudio y desarrollo del tema.
Al Ing. Roberto Carlos Carrasco Sánchez, por su capacidad y
constante motivación durante la orientación y conducción de todo el proceso de
investigación, y que gracias a sus conocimientos que nos trasmite en cada clase,
motiva nuestro deseo de seguir estudiando y llegar a la meta de ser
profesionales en el futuro.
5. 5
1. INTRODUCCIÓN
La tecnología y el desarrollo de sistemas informáticos se cuentan entre los
conceptos más ambiguos y controvertidos del mundo tecnológico. El presente
documento procura examinar estos conceptos desde una perspectiva sistémica
tratando de extraer de ellos sus elementos fundamentales.
Es cada vez más evidente que la búsqueda de información y el desarrollo de
cada uno de las herramientas que se usan exige integrar factores económicos,
científico, e investigación. Además de ello la capacitación de cada uno de
nosotros y la actualización de como emplear la herramienta; en este caso en la
creación base de datos. Sean estas herramientas SQL, SQL server, Transact
SQL. Que son lenguajes de tratamiento de base de datos y programas gestores
base de datos, posteriormente el desarrollo y manejo de estas herramientas ya
mencionadas se darán a continuación. Todo esto Requiere la articulación
constructiva de los criterios que abordan el desarrollo de arriba hacia abajo con
las iniciativas de base, exige tener en cuenta el estudio completo del manejo de
estas herramientas.
Finalmente, requiere ampliar el horizonte espacial y temporal para adaptarse a
la necesidad de conocimiento de este curso.
Al abordar estos temas, el enfoque sistémico puede proporcionar una
perspectiva más útil que otros métodos analíticos, debido a que es una manera
de reflexionar en función de conexiones, relaciones y contexto.
En esta monografía se propone una definición general de las herramientas que
vamos emplear, en el ámbito profesional y que sea aplicable a cualquier sistema
de información.
6. 6
1.1. Objetivos De La Investigación
Objetivo General
Aprender a utilizar correctamente el programa SQL para poder
construir, diseñar y administrar una base de datos dependiendo
de las circunstancias que uno se encuentre, también como en
el procesamiento y modelamiento de los datos, lo cual es
importante saber, para que nos facilite al momento de realizar
nuestras tablas con los datos obtenidos.
Conocer sobre las distintas versiones de dicha herramienta ya
que cada uno de ellos exige actualizar cada cierto tiempo. De
acuerdo a como sigue avanzando la tecnología moderna.
Objetivos Específicos
Mejorar el aprendizaje de base de datos de acuerdo a los
distintos pasos o procesos.
Analizar los distintos gestores de base de datos de SQL
server por medio de varias herramientas que son útil para el
excelente manejo del programa.
Implementar el conocimiento sobre SQL para poder lograr
una mejor calidad de comprensión en este ámbito para los
estudiantes.
Investigar los lenguajes que tiene SQL lo cual nos permite
ampliar nuestros conocimientos mediante este trabajo.
7. 7
1.2. Justificaciónde la investigación
Existen un conjunto de factores que intervienen para en un lenguaje de
desarrollo SQL.
Su desarrollo es fundamental porque a partir de ella se pueden emprender
tareas compuesta de tablas donde almacenamos registros catalogados en
función de distintos campos (características).
Un aspecto previo a considerar los valores que introducimos en esos
campos. Dado que una base de datos trabaja con todo tipo de informaciones
Es el nivel del usuario individual, es decir, los usuarios pueden ser
programadores en algunos casos usuarios finales, cada usuario dispone de
un lenguaje y en el caso de un programador. Dispone de un lenguaje
convencional. En el caso de un usuario final, será un lenguaje de consulta o
un lenguaje orientado hacia los usuarios. El punto importante de todos estos
lenguajes es que debe incluir un sub lenguaje de datos del cuál estará
inmerso o dentro de un lenguaje anfitrión, un lenguaje dado, cualquier va a
permitir el empleo de varios lenguajes anfitriones y varios sub lenguajes
para datos.
Prácticamente, la creación de la base de datos consiste en la creación de
las tablas que la componen. En realidad, antes de poder proceder a la
creación de las tablas, normalmente hay que crear la base de datos, lo que
a menudo significa definir un espacio de nombres separado para cada
conjunto de tablas. De esta manera, para una DBMS se pueden gestionar
diferentes bases de datos independientes al mismo tiempo sin que se den
conflictos con los nombres que se usan en cada una de ellas. El sistema
previsto por el estándar para crear los espacios separados de nombres
consiste en usar las instrucciones SQL "CREATE SCHEMA". A menudo,
dicho sistema no se usa (o por lo menos no con los fines y el significado
previstos por el estándar), pero cada DBMS prevé un procedimiento
propietario para crear una base de datos.
El sentido de la investigación gira en torno a la informática con propósitos
de integrarlo, con los demás personas escrito para el mundo académico
universitario.
9. 9
2. MARCO TEÓRICO
2.1. Gestor De Base De Datos MicrosoftSQL Server
Un sistema gestor de base de datos se define como el conjunto de
programas que administran y gestionan la información contenida en una
base de datos. Ayuda a realizar las siguientes acciones:
Definición de los datos.
Mantenimiento de la integridad de los datos dentro de la base de
datos.
Control de la seguridad y privacidad de los datos.
Manipulación de los datos.
2.1.1.Definición Base de Datos
Una base de datos se define como un fichero en el cual se
almacena información en campos o delimitadores, teniendo acceso
a ella posteriormente tanto de forma separada como de forma
conjunta. Se utiliza normalmente para recoger grandes cantidades
de información. (Por ejemplo el listado de nombres y apellidos de
los alumnos de varios cursos)
Normalmente el número de campos (columnas) que se pueden
tener en una base varía según las necesidades en cuanto a gestión
de datos, de forma que después se pueda explotar la información
de forma ordenada y separada, aunque el resto de la información
sigue almacenada y guardada en la base de datos. En realidad
aparte de los datos que son almacenados en el archivo, también
hay una serie de datos, en los que se informa del tipo de campo,
los campos y la longitud de cada campo, es lo que se llama gestor
de datos, que permite saber cada registro o fila, (un registro es una
suma de campos).
El programa que sirve para manejar toda esa información se
denomina sistema gestor de base de datos. Las principales en
10. 10
estos momentos son Microsoft Access, Lotus Aproach, parados, u
Oracle
2.1.2.Definición de SQL Server
Es un sistema para la gestión de bases de datos creado por
Microsoft, el mismo se basa en el modelo relacional. El SQL Server
utiliza como lenguajes de consulta T-SQL y ANSI SQL.
2.1.3.Historia de SQL Server
Comenzó como un proyecto en colaboración en 1988 entre
Microsoft, Sybase, IBM e incluso Ashton-Tate para crear un
sistema de gestión de base de datos para el sistema operativo OS/2
(un sistema desarrollado entre IBM y Microsoft) tiempo después se
desarrolló la versión para Windows NT por allá de 1993 (claro que
en ese entonces era un producto “bebe” para toda la “madurez” que
ha alcanzado hasta hoy). Al año siguiente en 1994 Sybase y
Microsoft deciden dar por terminada su colaboración y Sybase se
dedica al desarrollo de sus bases de datos y Microsoft a las suyas.
Después de “la separación” un año más tarde en 1995 Microsoft
Lanza su primera versión ya como independiente y único
propietario y desarrollador de SQL Server con la versión Microsoft
SQL Server 6.0 una versión mejorada principalmente en
rendimiento, y en el año de 1996 se lanza la versión Microsoft SQL
Server 6.5 una versión que se mantuvo vigente 2 años antes de
sacar una nueva versión en 1998 la 7.0 durante esos 2 años
Microsoft trabajo duro para realizar mejoras considerables en
cuanto usabilidad, potencia y rendimiento. Y fue una de las
versiones más fuertes, paso de ser un niño a un joven, pudiéndole
competir a sistemas como ORACLE o el propio DB2, y poco a poco
irse colocando como una propuesta atractiva a empresas que
manejaban volúmenes un poco mayores a los que SQL Server
venía manejando. Tanto que esta versión permaneció estables y
11. 11
con ligeras actualizaciones hasta el desarrollo de Microsoft SQL
Server 2000 en esta versión incorpora ediciones para ‘diferentes
enfoques’ una de ellas la edición de 64 bits, workgroup, desktop
engine, profesional, personal, standard, developer, enterprise etc y
durante los siguientes 5 años comenzó a causarle delirios de
persecución los gigantes de las bases de datos como ORACLE o
IBM con DB2, para la versión 2005 de SQL Server ya era un serio
competidor digno de respeto.
2.1.4.Características
Seguridad
Protección de datos
• Criptografía integrada.
• Cifrado transparente.
• Clave extensible.
• Firma de módulos de códigos.
• Certificados a partir de bytes.
• Claves de seguridad usando AES256.
• Soporte para hashes SHA512 y SHA2 (256 y 512
bits).
Control de acceso
• Flexibilidad mediante reparto de responsabilidades y
roles anidados.
• Evasión del acceso de Administrador del Sistema.
• Mayor cumplimiento de las normas utilizando
Windows Group.
• Usuarios individuales.
• Seguridad de usuarios con controles de TI
integrados.
Garantía de cumplimiento
12. 12
• Optimización mejorada y capacidades enriquecidas
con respecto a versiones anteriores.
• Mayor flexibilidad para filtrar eventos no deseados en
el log de la auditoría.
• Permite que las aplicaciones escriban código
personalizado dentro de log de la auditoría
Integridad de datos
La exigencia de integridad de los datos garantiza la calidad de
los datos de la base de datos.
• SQL Server proporciona los siguientes mecanismos para
exigir la integridad de los datos en una columna:
Restricciones PRIMARY KEY
Restricciones FOREIGN KEY
Restricciones UNIQUE
Restricciones CHECK
Definiciones DEFAULT
Permitir o denegar valores NULL
• SQL Server admite distintos tipos de datos: Integer, Float,
Decimal, Char, Varchar, binarios, texto, entre otros, además
de que permite a los usuarios definir y usar su propio tipo de
datos compuestos (UDT)
Concurrencia
• SQL Server permite que varios clientes usen la misma base
de datos al mismo tiempo controlando el acceso simultáneo
mediante 2 modos de control de concurrencia:
Pessimistic concurrency: Uso de bloqueos exclusivos y
compartidos.
Optimistic concurrency: Similar al uso de sistemas
subversión. Permite la creación de una nueva fila cada
13. 13
vez que ésta se actualiza, almacenando las “versiones
anteriores” de la fila en una tabla temporal junto con el
ID de la transacción mediante la cual fueron
actualizadas.
Recuperación
• Microsoft SQL Server 2012 cuenta con 3 formas diferentes de
respaldo y recuperación de bases de datos:
SQL Server Management Studio (Herramienta gráfica de
administración para SQL Server 2005 y posteriores) (nivel
de dificultad: fácil)
PowerShell (Interfaz de consola avanzada disponible para
Microsoft Windows con posibilidad de interactuar con SQL
Server) (nivel de dificultad: medio)
Transact-SQL (Lenguaje propio de SQL Server) (nivel de
dificultad: avanzado)
Diccionario de datos
Conjunto de metadatos que contiene las características lógicas
de los datos que se van a utilizar en el sistema que se programa,
incluyendo nombre, descripción, alias, contenido y organización.
• Microsoft SQL Server contiene palabras reservadas como
cualquier otro SGBD que permiten acceder a la información
de la estructura de una BD. Para crear un diccionario de
datos simple, solo basta con crear un script que obtenga
dicha información:
2.1.5. Ventaja SQL Server
Soporte de transacciones.
14. 14
Escalabilidad, estabilidad y seguridad.
Soporta procedimientos almacenados.
Incluye también un potente entorno gráfico de administración,
que Permite el uso de comandos DDL y DML gráficamente.
Permite trabajar en modo cliente-servidor, donde la
información y datos se alojan en el servidor y las terminales o
clientes de la red sólo acceden a la información.
Además permite administrar información de otros servidores
de datos.
2.1.6.DesventajasSQL Server
La principal desventaja de Microsoft SQL SERVER es la enorme
cantidad de memoria RAM que utiliza para la instalación y
utilización del software.
Una de las desventajas de SQL es que si lo quieres para practicas
no te va hacer útil porque en él se prohíben muchas cosas tiene
restricciones en lo particular me parase más viable usar MySQL es
mucho mejor además de ser un software gratis.
La relación calidad-precio esta muy debajo comparado con Oracle.
2.2. Modelamiento de Base de Datos en SQL Server
La base de datos modelo se utiliza como plantilla para todas las bases de
datos creadas en una instancia de SQL Server. Puesto que tempdb se
crea cada vez que se inicia SQL Server, la base de datos modelo debe
existir siempre en un sistema de SQL Server. Todo el contenido de la base
de datos modelo, incluidas las opciones de base de datos, se copia en la
base de datos nueva. Algunos de los valores de configuración de la base
de datos modelo también se usan para crear una base de datos tempdb
15. 15
nueva durante el inicio, de modo que la base de datos modelo siempre
debe existir en un sistema SQL Server.
Las bases de datos de usuario recién creadas usan el mismo modelo de
recuperación que la en. La opción predeterminada la puede configurar el
usuario. Para obtener información sobre el modelo de recuperación actual
del modelo, vea Ver o cambiar el modelo de recuperación de una base de
datos (SQL Server).
El diseño de una base de datos consiste en definir la estructura de los
datos que debe tener un sistema de información determinado. Para ello
se suelen seguir por regla general unas fases en el proceso de diseño,
definiendo para ello el modelo conceptual, el lógico y el físico.
En el diseño conceptual se hace una descripción de alto nivel de la
estructura de la base de datos, independientemente del SGBD
(Sistema Gestor de Bases de Datos) que se vaya a utilizar para
manipularla. Su objetivo es describir el contenido de información de la
base de datos y no las estructuras de almacenamiento que se
necesitarán para manejar dicha información.
El diseño lógico parte del resultado del diseño conceptual y da como
resultado una descripción de la estructura de la base de datos en
términos de las estructuras de datos que puede procesar un tipo de
SGBD. El diseño lógico depende del tipo de SGBD que se vaya a
utilizar, se adapta a la tecnología que se debe emplear, pero no
depende del producto concreto. En el caso de bases de datos
convencionales relacionales (basadas en SQL para entendernos), el
diseño lógico consiste en definir las tablas que existirán, las relaciones
entre ellas, normalizarlas, etc.
El diseño físico parte del lógico y da como resultado una descripción
de la implementación de una base de datos en memoria secundaria:
las estructuras de almacenamiento y los métodos utilizados para tener
un acceso eficiente a los datos. Aquí el objetivo es conseguir una
16. 16
mayor eficiencia, y se tienen en cuenta aspectos concretos del SGBD
sobre el que se vaya a implementar. Por regla general esto es
transparente para el usuario, aunque conocer cómo se implementa
ayuda a optimizar el rendimiento y la escalabilidad del sistema.
2.3. Lenguaje SQL
Como en el caso de los más modernos lenguajes relacionales, SQL está
basado en el cálculo relacional de tuplas. Como resultado, toda consulta
formulada utilizando el cálculo relacional de tuplas (o su equivalente, el
álgebra relacional) se pude formular también utilizando SQL. Hay, sin
embargo, capacidades que van más allá del cálculo o del álgebra
relaciona. Aquí tenemos una lista de algunas características
proporcionadas por SQL que no forman parte del álgebra y del cálculo
relacional:
Comandos para inserción, borrado o modificación de datos.
Capacidades aritméticas: En SQL es posible incluir operaciones
aritméticas así como comparaciones, por ejemplo A < B + 3. Nótese
que ni + ni otros operadores aritméticos aparecían en el álgebra
relacional ni en cálculo relacional.
Asignación y comandos de impresión: es posible imprimir una relación
construida por una consulta y asignar una relación calculada a un
nombre de relación.
Funciones agregadas: Operaciones tales como promedio
(average), suma (sum), máximo (max), etc. se pueden aplicar a las
columnas de una relación para obtener una cantidad única.
Select
El comando más usado en SQL es la instrucción SELECT, que se utiliza
para recuperar datos. La sintaxis es:
17. 17
SELECT [ALL|DISTINCT]
{ * | expr_1 [AS c_alias_1] [, ...
[, expr_k [AS c_alias_k]]]}
FROM table_name_1 [t_alias_1]
[, ... [, table_name_n [t_alias_n]]]
[WHERE condition]
[GROUP BY name_of_attr_i
[,... [, name_of_attr_j]] [HAVING
condition]]
[{UNION [ALL] | INTERSECT | EXCEPT} SELECT
...]
[ORDER BY name_of_attr_i [ASC|DESC]
[, ... [, name_of_attr_j
[ASC|DESC]]]];
Ilustraremos ahora la compleja sintaxis de la instrucción SELECT con
varios ejemplos. Las tablas utilizadas para los ejemplos se definen en: La
Base de Datos de Proveedores y Artículos.
Ejemplo: Select sencillas
Aquí tenemos algunos ejemplos sencillos utilizando la instrucción
SELECT:
Query sencilla con cualificación
Para recuperar todas las tuplas de la tabla PART donde el
atributo PRICE es mayor que 10, formularemos la siguiente
consulta:
SELECT * FROM PART
WHERE PRICE > 10;
y obtenemos la siguiente tabla:
PNO | PNAME | PRICE
-----+-------------+--------
3 | Cerrojos | 15
4 | Levas | 25
Utilizando "*" en la instrucción SELECT solicitaremos todos los
atributos de la tabla. Si queremos recuperar sólo los atributos
PNAME y PRICE de la tabla PART utilizaremos la instrucción:
18. 18
SELECT PNAME, PRICE
FROM PART
WHERE PRICE > 10;
En este caso el resultado es:
PNAME | PRICE
------------+--------
Cerrojos | 15
Levas | 25
Nótese que la SELECT SQL corresponde a la "proyección" en álgebra
relaciona, no a la "selección" (vea Álgebra Relacional para más detalles).
Las cualificaciones en la cláusula WHERE pueden también conectarse
lógicamente utilizando las palabras claves OR, AND, y NOT:
SELECT PNAME, PRICE
FROM PART
WHERE PNAME = 'Cerrojos' AND
(PRICE = 0 OR PRICE <
15);
dará como resultado:
PNAME | PRICE
------------+--------
Cerrojos | 15
Las operaciones aritméticas se pueden utilizar en la lista de objetivos y en
la cláusula WHERE. Por ejemplo, si queremos conocer cuánto cuestan si
tomamos dos piezas de un artículo, podríamos utilizar la siguiente
consulta:
SELECT PNAME, PRICE * 2 AS DOUBLE
FROM PART
WHERE PRICE * 2 < 50;
y obtenemos:
PNAME | DOUBLE
------------+---------
Tornillos | 20
Tuercas | 16
Cerrojos | 30
19. 19
Nótese que la palabra DOBLE tras la palabra clave AS es el nuevo título
de la segunda columna. Esta técnica puede utilizarse para cada elemento
de la lista objetivo para asignar un nuevo título a la columna resultante.
Este nuevo título recibe el calificativo de "un alias". El alias no puede
utilizarse en todo el resto de la consulta.
Joins (Cruces)
El siguiente ejemplo muestra como las joins (cruces) se realizan en SQL.
Para cruzar tres tablas SUPPLIER, PART y SELLS a través de sus
atributos
comunes,
formularemos la siguiente instrucción:
Y obtendremos la siguiente tabla como resultado:
SNAME | PNAME
-------+-------
Smith | Tornillos
Smith | Tuercas
Jones | Levas
Adams | Tornillos
Adams | Cerrojos
Blake | Tuercas
Blake | Cerrojos
Blake | Levas
En la cláusula FROM hemos introducido un alias al nombre para cada
relación porque hay atributos con nombre común (SNO y PNO) en las
relaciones. Ahora podemos distinguir entre los atributos con nombre
común simplificando la adicción de un prefijo al nombre del atributo con el
nombre del alias seguido de un punto. La Join se calcula de la misma
forma, tal como se muestra en Una Inner Join (Una Join Interna). Primero
el producto cartesiano: SUPPLIER × PART × SELLS Ahora
seleccionamos únicamente aquellas tuplas que satisfagan las condiciones
dadas en la cláusula WHERE (es decir, los atributos con nombre común
deben ser iguales). Finalmente eliminamos las columnas repetidas
(S.SNAME, P.PNAME).
SELECT S.SNAME, P.PNAME
FROM SUPPLIER S, PART P, SELLS SE
WHERE S.SNO = SE.SNO AND
P.PNO = SE.PNO;
20. 20
Operadores Agregados
SQL proporciona operadores agregados (como son AVG, COUNT, SUM,
MIN, MAX) que toman el nombre de un atributo como argumento. El valor
del operador agregado se calcula sobre todos los valores de la columna
especificada en la tabla completa. Si se especifican grupos en la consulta,
el cálculo se hace sólo sobre los valores de cada grupo (vean la siguiente
sección).
Ejemplo: Agregates
Si queremos conocer el coste promedio de todos los artículos de la tabla
PART, utilizaremos la siguiente consulta:
SELECT AVG(PRICE) AS AVG_PRICE
FROM PART;
El resultado es:
Si queremos conocer cuántos artículos se recogen en la tabla PART,
utilizaremos la instrucción:
y obtendremos:
COUNT
-------
4
Agregación por Grupos
SQL nos permite particionar las tuplas de una tabla en grupos. En estas
condiciones, los operadores agregados descritos antes pueden aplicarse
a los grupos (es decir, el valor del operador agregado no se calculan sobre
todos los valores de la columna especificada, sino sobre todos los valores
AVG_PRICE
-----------
14.5
SELECT COUNT(PNO)
FROM PART;
21. 21
de un grupo. El operador agregado se calcula individualmente para cada
grupo).
El aprisionamiento de las tuplas en grupos se hace utilizando las palabras
clave GROUP BY seguidas de una lista de atributos que definen los
grupos. Si tenemos GROUP BY A1, ⃛, Ak habremos particionado la
relación en grupos, de tal modo que dos tuplas son del mismo grupo si y
sólo si tienen el mismo valor en sus atributos A1, ⃛, Ak.
Ejemplo: Agregados
Si queremos conocer cuántos artículos han sido vendidos por cada
proveedor formularemos la consulta:
SELECT S.SNO, S.SNAME,
COUNT(SE.PNO)
FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO
GROUP BY S.SNO, S.SNAME;
y obtendremos:
SNO | SNAME | COUNT
-----+-------+-------
1 | Smith | 2
2 | Jones | 1
3 | Adams | 2
4 | Blake | 3
Demos ahora una mirada a lo que está ocurriendo aquí. Primero, la join
de las tablas SUPPLIER y SELLS:
S.SNO | S.SNAME | SE.PNO
-------+---------+--------
1 | Smith | 1
1 | Smith | 2
2 | Jones | 4
3 | Adams | 1
3 | Adams | 3
4 | Blake | 2
4 | Blake | 3
4 | Blake | 4
Ahora particionamos las tuplas en grupos reuniendo todas las tuplas que
tiene el mismo atributo en S.SNO y S.SNAME:
22. 22
S.SNO | S.SNAME | SE.PNO
-------+---------+--------
1 | Smith | 1
| 2
--------------------------
2 | Jones | 4
--------------------------
3 | Adams | 1
| 3
--------------------------
4 | Blake | 2
| 3
| 4
En nuestro ejemplo, obtenemos cuatro grupos y ahora podemos aplicar el
operador agregado COUNT para cada grupo, obteniendo el resultado total
de la consulta dada anteriormente.
Nótese que para el resultado de una consulta utilizando GROUP BY y
operadores agregados para dar sentido a los atributos agrupados,
debemos primero obtener la lista objetivo. Los demás atributos que no
aparecen en la cláusula GROUP BY se seleccionarán utilizando una
función agregada. Por otro lado, no se pueden utilizar funciones
agregadas en atributos que aparecen en la cláusula GROUP BY.
Having
La cláusula HAVING trabaja de forma muy parecida a la cláusula WHERE,
y se utiliza para considerar sólo aquellos grupos que satisfagan la
cualificación dada en la misma. Las expresiones permitidas en la cláusula
HAVING deben involucrar funcionen agregadas. Cada expresión que
utilice sólo atributos planos deberá recogerse en la cláusula WHERE. Por
otro lado, toda expresión que involucre funciones agregadas debe
aparecer en la cláusula HAVING.
Ejemplo: Having
Si queremos solamente los proveedores que venden más de un artículo,
utilizaremos la consulta:
23. 23
SELECT S.SNO, S.SNAME,
COUNT(SE.PNO)
FROM SUPPLIER S, SELLS SE
WHERE S.SNO = SE.SNO
GROUP BY S.SNO, S.SNAME
HAVING COUNT(SE.PNO) > 1;
y obtendremos:
SNO | SNAME | COUNT
-----+-------+-------
1 | Smith | 2
3 | Adams | 2
4 | Blake | 3
Subconsultas
En las clausulas WHERE y HAVING se permite el uso de subconsultas
(subselects) en cualquier lugar donde se espere un valor. En este caso, el
valor debe derivar de la evaluación previa de la subconsulta. El uso de
subconsultas amplía el poder expresivo de SQL.
Ejemplo: Subselect
Si queremos conocer los artículos que tienen mayor precio que el
artículo llamado 'Tornillos', utilizaremos la consulta:
SELECT *
FROM PART
WHERE PRICE > (SELECT PRICE FROM PART
WHERE PNAME='Tornillos');
El resultado será:
PNO | PNAME | PRICE
-----+-------------+--------
3 | Cerrojos | 15
4 | Levas | 25
Cuando revisamos la consulta anterior, podemos ver la palabra clave
SELECT dos veces. La primera al principio de la consulta - a la que nos
referiremos como la SELECT externa - y la segunda en la cláusula
WHERE, donde empieza una consulta anidada - nos referiremos a ella
24. 24
como la SELECT interna. Para cada tupla de la SELECT externa, la
SELECT interna deberá ser evaluada. Tras cada evaluación,
conoceremos el precio de la tupla llamada 'Tornillos', y podremos
chequear si el precio de la tupla actual es mayor.
Si queremos conocer todos los proveedores que no venden ningún
artículo (por ejemplo, para poderlos eliminar de la base de datos),
utilizaremos:
SELECT *
FROM SUPPLIER S
WHERE NOT EXISTS
(SELECT * FROM SELLS SE
WHERE SE.SNO = S.SNO);
En nuestro ejemplo, obtendremos un resultado vacío, porque cada
proveedor vende al menos un artículo. Nótese que utilizamos S.SNO de
la SELECT externa en la cláusula WHERE de la SELECT interna. Como
hemos descrito antes, la subconsulta se evalúa para cada tupla de la
consulta externa, es decir, el valor de S.SNO se toma siempre de la tupla
actual de la SELECT externa.
Unión, Intersección, Excepción
Estas operaciones calculan la unión, la intersección y la diferencia de la
teoría de conjuntos de las tuplas derivadas de dos subconsultas.
Ejemplo: Union, Intersect, Except
La siguiente consulta es un ejemplo de UNION:
SELECT S.SNO, S.SNAME,
S.CITY
FROM SUPPLIER S
WHERE S.SNAME = 'Jones'
UNION
SELECT S.SNO, S.SNAME,
S.CITY
FROM SUPPLIER S
25. 25
WHERE S.SNAME = 'Adams';
Dará el resultado:
SNO | SNAME | CITY
-----+-------+--------
2 | Jones | Paris
3 | Adams | Vienna
Aquí tenemos un ejemplo para INTERSECT:
SELECT S.SNO, S.SNAME,
S.CITY
FROM SUPPLIER S
WHERE S.SNO > 1
INTERSECT
SELECT S.SNO, S.SNAME,
S.CITY
FROM SUPPLIER S
WHERE S.SNO > 2;
que dará como resultado:
SNO | SNAME | CITY
-----+-------+--------
2 | Jones | Paris
La única tupla devuelta por ambas partes de la consulta es
la única que tiene $SNO=2$.
Finalmente, un ejemplo de EXCEPT:
SELECT S.SNO, S.SNAME,
S.CITY
FROM SUPPLIER S
WHERE S.SNO > 1
EXCEPT
SELECT S.SNO, S.SNAME,
S.CITY
FROM SUPPLIER S
WHERE S.SNO > 3;
que dará como resultado:
26. 26
SNO | SNAME | CITY
-----+-------+--------
2 | Jones | Paris
3 | Adams | Vienna
Definición de Datos
El lenguaje SQL incluye un conjunto de comandos para definición de
datos.
Create Table
El comando fundamental para definir datos es el que crea una nueva
relación (una nueva tabla). La sintaxis del comando CREATE TABLE es:
CREATE TABLE table_name
(name_of_attr_1 type_of_attr_1
[, name_of_attr_2 type_of_attr_2
[, ...]]);
Ejemplo: Creación de una tabla
Para crear las tablas definidas en La Base de Datos de
Proveedores y Artículos se utilizaron las siguientes instrucciones
de SQL:
CREATE TABLE PART
(PNO INTEGER,
PNAME VARCHAR(20),
PRICE DECIMAL(4 , 2));
CREATE TABLE SELLS
(SNO INTEGER,
PNO INTEGER);
o Tipos de Datos en SQL
CREATE TABLE SUPPLIER
(SNO INTEGER,
SNAME VARCHAR(20),
CITY VARCHAR(20));
27. 27
A continuación sigue una lista de algunos tipos de datos soportados
por SQL:
INTEGER: entero binario con signo de palabra completa (31 bits de
precisión).
SMALLINT: entero binario con signo de media palabra (15 bits de
precisión).
DECIMAL (p[,q]): número decimal con signo de p dígitos de precisión,
asumiendo q a la derecha para el punto decimal. (15 ≥ p ≥ qq ≥ 0).
Si q se omite, se asume que vale 0.
FLOAT: numérico con signo de doble palabra y coma flotante.
CHAR(n): cadena de caracteres de longitud fija, de longitud n.
VARCHAR(n): cadena de caracteres de longitud variable, de longitud
máxima n.
Create Index
Se utilizan los índices para acelerar el acceso a una relación. Si una
relación R tiene un índice en el atributo A podremos recuperar todas la
tuplas t que tienen t(A) = a en un tiempo aproximadamente proporcional
al número de tales tuplas t más que en un tiempo proporcional al tamaño
de R.
Para crear un índice en SQL se utiliza el comando CREATE INDEX. La
sintaxis es:
CREATE INDEX index_name
ON table_name ( name_of_attribute
);
Ejemplo: Create Index
Para crear un índice llamado I sobre el atributo SNAME de la relación
SUPPLIER, utilizaremos la siguiente instrucción:
28. 28
El índice creado se mantiene automáticamente. es decir, cada vez que
una nueva tupla se inserte en la relación SUPPLIER, se adaptará el índice
I. Nótese que el único cambio que un usuario puede percibir cuando se
crea un índice es un incremento en la velocidad.
Create View
Se puede ver una vista como una tabla virtual, es decir, una tabla que no
existe físicamente en la base de datos, pero aparece al usuario como si
existiese. Por contra, cuando hablamos de una tabla base, hay realmente
un equivalente almacenado para cada fila en la tabla en algún sitio del
almacenamiento físico.
Las vistas no tienen datos almacenados propios, distinguibles y
físicamente almacenados. En su lugar, el sistema almacena la definición
de la vista (es decir, las reglas para acceder a las tablas base físicamente
almacenadas para materializar la vista) en algún lugar de los catálogos
del sistema (vea System Catalogs). Para una discusión de las diferentes
técnicas para implementar vistas, refiérase a SIM98.
En SQL se utiliza el comando CREATE VIEW para definir una vista. La
sintaxis es:
Donde select_stmt es una instrucción select válida, como se definió
en Select. Nótese que select_stmt no se ejecuta cuando se crea la vista.
Simplemente se almacena en los catálogos del sistema y se ejecuta cada
vez que se realiza una consulta contra la vista.
Sea la siguiente definición de una vista (utilizamos de nuevo las tablas
de La Base de Datos de Proveedores y Artículos ):
CREATE INDEX I
ON SUPPLIER (SNAME);
CREATE VIEW view_name
AS select_stmt
29. 29
CREATE VIEW London_Suppliers
AS SELECT S.SNAME, P.PNAME
FROM SUPPLIER S, PART P, SELLS
SE
WHERE S.SNO = SE.SNO AND
P.PNO = SE.PNO AND
S.CITY = 'London';
Ahora podemos utilizar esta relación virtual London_Suppliers como si
se tratase de otra tabla base:
SELECT *
FROM London_Suppliers
WHERE P.PNAME = 'Tornillos';
Lo cual nos devolverá la siguiente tabla:
SNAME | PNAME
-------+----------
Smith | Tornillos
Para calcular este resultado, el sistema de base de datos ha realizado
previamente un acceso oculto a las tablas de la base SUPPLIER, SELLS
y PART. Hace esto ejecutando la consulta dada en la definición de la vista
contra aquellas tablas base. Tras eso, las cualificaciones adicionales
(dadas en la consulta contra la vista) se podrán aplicar para obtener la
tabla resultante.
o Drop Table, Drop Index, Drop View
Se utiliza el comando DROP TABLE para eliminar una tabla (incluyendo
todas las tuplas almacenadas en ella):
DROP TABLE table_name;
Para eliminar la tabla SUPPLIER, utilizaremos la instrucción:
30. 30
DROP TABLE SUPPLIER;
Se utiliza el comando DROP INDEX para eliminar un índice:
DROP INDEX index_name;
Finalmente, eliminaremos una vista dada utilizando el comando DROP
VIEW:
DROP VIEW view_name;
Manipulación de Datos
o Insert Into
Una vez que se crea una tabla (vea Create Table), puede ser llenada
con tuplas mediante el comando INSERT INTO. La sintaxis es:
INSERT INTO table_name (name_of_attr_1
[, name_of_attr_2
[,...]])
VALUES (val_attr_1
[, val_attr_2 [, ...]]);
Para insertar la primera tupla en la relación SUPPLIER (de La Base de
Datos de Proveedores y Artículos) utilizamos la siguiente instrucción:
INSERT INTO SUPPLIER (SNO, SNAME, CITY)
VALUES (1, 'Smith', 'London');
Para insertar la primera tupla en la relación SELLS, utilizamos:
INSERT INTO SELLS (SNO, PNO)
VALUES (1, 1);
o Update
Para cambiar uno o más valores de atributos de tuplas en una relación,
se utiliza el comando UPDATE. La sintaxis es:
UPDATE table_name
SET name_of_attr_1 = value_1
[, ... [, name_of_attr_k = value_k]]
WHERE condition;
31. 31
Para cambiar el valor del atributo PRICE en el artículo 'Tornillos' de la
relación PART, utilizamos:
El nuevo valor del atributo PRICE de la tupla cuyo nombre es 'Tornillos'
es ahora 15.
o Delete
Para borrar una tupla de una tabla particular, utilizamos el comando
DELETE FROM. La sintaxis es:
DELETE FROM table_name
WHERE condition;
Para borrar el proveedor llamado 'Smith' de la tabla SUPPLIER,
utilizamos la siguiente instrucción:
DELETE FROM SUPPLIER
WHERE SNAME =
'Smith';
2.3.1.Definición de SQL
La sigla que se conoce como SQL corresponde a la expresión
inglesa Structured Query Language (entendida en español como
Lenguaje de Consulta Estructurado), la cual identifica a un tipo de
lenguaje vinculado con la gestión de bases de datos de carácter
relacional que permite la especificación de distintas clases de
operaciones entre éstas. Gracias a la utilización del álgebra y de
cálculos relacionales, el SQL brinda la posibilidad de realizar
consultas con el objetivo de recuperar información de las bases de
datos de manera sencilla.
2.3.2.Sintaxis
UPDATE PART
SET PRICE = 15
WHERE PNAME = 'Tornillos';
32. 32
Comandos para definición de datos:
CREATE TABLE: Se utiliza para crear una nueva relación a la
que se le asigna un nombre y unos atributos:
DROP TABLE: Borra una relación existente así como también
sus atributos y la tupla asignada a esta relación
ALTER TABLE: Modifica la tabla, agrega un atributo a una de
estas, además de cambiar la tupla del código de la Base de
Datos
CREATE INDEX: Comando empleado para crear índices, estos
índices se crean bajo un nombre y pueden ser eliminados
cuando son innecesarios
DROP INDEX: Este comando es usado para borrar los índices
de la tabla relacionada y la tupla del catálogo.
2.3.3.Ejerciciosde Lenguaje SQL
Ejemplo:
Tabla Países
Contiene información o relación de países en donde viven los
clientes o empleados. La tabla Países se encuentra en el
esquema Venta.
Columna Tipode datos Nulos Descripción
Idpais char(3) No NULL Identificador de país.
Clave primaria
Nombre
Pais
Varchar(40) No NULL Nombre del país.
Tabla Categorías
33. 33
Contiene información o relación de categorías en donde se
encuentran registrados los productos. La tabla Categorías se
encuentra en el esquema Compra.
Columna Tipo de datos Nulos Descripción
IdCategoria int No
NULL
Identificador de categoría.
Clave primaria
NombreCateg
oria
Varchar(40) No
NULL
Nombre de la categoría.
Descripción Text Null Descripción de la categoría
Tabla Clientes
Contiene información o relación de clientes que se encuentran
registrados en la base de datos. La tabla Clientes se
encuentra en el esquema Venta.
Columna Tipode datos Nulos Descripción
IdCliente Char(5) No NULL Identificador de
cliente. Clave primaria
NomCliente Varchar(40) No NULL Nombre del cliente.
DirCliente Varchar(80) No NULL Dirección del cliente
Idpais Char(3) No NULL Identificador de país.
Clave externa de
países.
fonoCliente Varchar(15) NULL Teléfono del cliente
Tabla Proveedores
Contiene información o relación de los proveedores que se
encuentran registrados en la base de datos. La tabla
Proveedores se encuentra en el esquema Compra
Columna Tipode datos Nulos Descripción
34. 34
IdProveedor Int No
NULL
Identificador de proveedor.
Clave primaria
NomProveedor Varchar(80) No
NULL
Nombre del proveedor.
DirProveedor Varchar(100
)
No
NULL
Dirección del proveedor.
NomContacto Varchar(80) No
NULL
Nombre del contacto del
proveedor.
CargoContacto Varchar(50) No
NULL
Cargo del contacto del
proveedor
Idpais Char(3) No
NULL
Identificador del país.
Clave externa de países
FonoProveedor Varchar(15) No
NULL
Teléfono del proveedor.
FaxProveedor Varchar(15) No
NULL
Fax del proveedor.
Tablas de Productos
Contiene información o relación de los productos que ofrecen
para la venta y que se encuentra registrado en la base de
datos. La tabla producto se encuentra en el esquema compra.
Columna Tipode datos Nulos Descripción
IdProducto Int No
NULL
Identificador de producto.
Clave primaria
nomProducto varchar(80) No
NULL
Nombre del producto.
idProveedor Int No
NULL
Identificador del
proveedor. Clave externa
de proveedores
idCategoria Int No
NULL
Identificador de la
categoría. Clave externa
de categorías.
cantxUnidad varchar(50) No
NULL
Cantidad de productos por
unidad almacenada
PrecioUnida
d
decimal(10,
2)
No
NULL
Precio por unidad del
producto
UniEnExiste
ncia
smallint No
NULL
Unidades en existencia o
stock del producto
35. 35
UniEnPedido smallint No
NULL
Unidades que se encuentran
en pedido.
Tabla Cargos
Contiene información o relación de los cargos que se le asigna
a cada empleado que se encuentran registrados en la base de
datos. La tabla Cargos se encuentra en el esquema RRHH.
Columna Tipode datos Nulos Descripción
IdCargo Int No NULL Identificador de cargo. Clave
primaria
Descargo varchar(3
0)
No NULL Descripción del cargo
Tabla Distrito
Contiene información o relación de los distritos que se
asignan a cada empleados que se encuentran registrado
en base de datos. La tabla distrito se encuentra en el
esquema RRHH.
Columna Tipode datos Nulos Descripción
IdDistrito Int No
NULL
Identificador de distrito.
Clave primaria
nomDistrito varchar(50) No
NULL
Nombre del distrito
Tabla Empleados
Contiene información o relación de los empleados que se
encuentran registrados en la base de datos. La tabla
Empleados se encuentra en el esquema RRHH.
Columna Tipo de datos Nulos Descripción
36. 36
IdEmpleado Int No NULL Identificador del empleado.
Clave primaria
NomEmpleado varchar(50) No NULL Nombre del empleado
ApeEmpleado varchar(50) No NULL Apellido del empleado
FecNac Datetime No NULL Fecha de Nacimiento
DirEmpleado varchar(100
)
No
NULLL
Dirección del empleado
IdDistrito Int No NULL Identificador de distrito.
Clave externa de distritos.
fonoEmpleado varchar(15) NULL Teléfono del empleado
Idcargo Int No NULL Identificador de cargo, clave
externa de cargos
FecContrata Datetime No NULL Fecha de contratación
fotoEmpleado Image NULL Foto del empleado
Tabla Pedidos Cabe
Contiene información o relación de la cabecera de los
pedidos que se registran en el proceso de la venta y que
se encuentran registrados en la base de datos. La tabla
Pedidos Cabe se encuentra en el esquema Venta.
Columna Tipode datos Nulos Descripción
IdPedido Int No
NULL
Identificador de la
cabecera de pedido. Clave
primaria
Idcliente varchar(5) No
NULL
Identificador de cliente.
Clave externa de clientes
IdEmpleado Int No
NULL
Identificador del
empleado. Clave externa
de empleados
fechaPedido Datetime No
NULL
Fecha de solicitud del
pedido
FechaEntreg
a
Datetime No
NULL
Fecha de entrega del
pedido
FechaEnvio Datetime No
NULL
Fecha de envío del pedido
37. 37
enviopedido char(1) No
NULL
Indica si el pedido ha
sido o no entregado
Destinatari
o
varchar(60) No
NULL
Nombre del destinatario
Dirdestinat
ario
varchar(100) No
NULL
Dirección del
destinatario
Tabla Pedidos Deta
Contiene información o relación del detalle de los
productos solicitados en los pedidos de venta y que se
encuentran registrados en la base de datos. La tabla
PedidosDeta se encuentra en el esquema Compra.
Columna Tipo de datos Nulos Descripción
IdPedido Int No NULL Identificador de pedido.
Clave externa de pedidoscabe
IdProduct
o
Int No NULL Identificador del producto.
Clave externa de producto
PrecioUni
dad
Decimal(10,2) No NULL Precio del producto en el
pedido
Cantidad smallint No NULL Cantidad solicitada del
producto
Descuento Decimal(10,2) No NULL Cantidad de productos por
unidad almacenada
2.4. T-SQL
2.4.1.Definición de Transact-SQL
• Transact-SQL es una extensión del lenguaje SQL, propiedad de
Microsoft y Sybase. Implementa el estándar ISO del nivel básico
de la especificación ANSI SQL-92.
• Se pueden ejecutar desde cualquier producto que cumpla los
requisitos básicos.
• Incluye una funcionalidad ampliada.
Para hacer a SQL más poderoso, le fueron agregados algunas
características como:
38. 38
Mejora en las declaraciones DELETE y UPDATE
Variables locales.
Soporte de varias funciones para el procesamiento de cadenas,
datos, matemática, etc.
Un lenguaje de control de flujos.
Para el lenguaje de control de flujos utiliza palabras claves como
BEGIN y END, BREAK, CONTINUE, GOTO, IF y ELSE,
RETURN, WAITFOR y WHILE.
Para las variables locales utiliza DECLARE para declararlas y
SET para proveerles un valor.
2.4.2.Sintaxis
Directivas de proceso por lotes
Comentarios
Identificadores
Tipos de datos
Variables
Funciones del sistema
Operadores
Expresiones
Elementos del lenguaje de control de flujo
Palabras clave reservadas
39. 39
2.4.3.Ejerciciosde Lenguaje T – SQL
1) Usar GROUP BY con una expresión
En este ejemplo se agrupa por una expresión. Puede agrupar por
una expresión si ésta no incluye funciones de agregado.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT AVG(OrderQty) AS [Average Quantity],
NonDiscountSales = (OrderQty * UnitPrice)
FROM Sales.SalesOrderDetail
GROUP BY (OrderQty * UnitPrice)
ORDER BY (OrderQty * UnitPrice) DESC;
GO
2) Usar GROUP BY con ORDER BY
En este ejemplo se busca el precio medio de cada tipo de producto
y se ordenan los resultados por precio medio.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT ProductID, AVG(UnitPrice) AS [Average Price]
FROM Sales.SalesOrderDetail
WHERE OrderQty > 10
GROUP BY ProductID
ORDER BY AVG(UnitPrice);
GO
3) K.Usar la cláusula HAVING
En el primer ejemplo se muestra una cláusula HAVING con una
función de agregado. Agrupa las filas de la
tabla SalesOrderDetail por Id. de producto y elimina aquellos
productos cuyas cantidades de pedido medias son cinco o
menos. En el segundo ejemplo se muestra una
cláusula HAVING sin funciones de agregado.
40. 40
Transact-SQL
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO
En esta consulta se utiliza la cláusula LIKE en la cláusula HAVING.
USE AdventureWorks2012 ;
GO
SELECT SalesOrderID, CarrierTrackingNumber
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID, CarrierTrackingNumber
HAVING CarrierTrackingNumber LIKE '4BD%'
ORDER BY SalesOrderID ;
GO
4) Usar HAVING y GROUP BY
En el siguiente ejemplo se muestra el uso de las cláusulas GROUP
BY, HAVING, WHERE y ORDER BY en una
instrucción SELECT. Genera grupos y valores de resumen pero lo
hace tras eliminar los productos cuyos precios superan los 25 $ y
cuyas cantidades de pedido medias son inferiores a 5. También
organiza los resultados por ProductID.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Sales.SalesOrderDetail
WHERE UnitPrice < 25.00
GROUP BY ProductID
41. 41
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO
5) Usar HAVING con SUM y AVG
En el siguiente ejemplo se agrupa la tabla SalesOrderDetail por Id.
de producto y solo se incluyen aquellos grupos de productos cuyos
pedidos suman más de $1000000.00y cuyas cantidades de pedido
medias son inferiores a 3.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT ProductID, AVG(OrderQty) AS AverageQuantity,
SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $1000000.00
AND AVG(OrderQty) < 3;
GO
6) Usar la sugerenciadeloptimizadorINDEX
En el ejemplo siguiente se muestran dos formas de usar la
sugerencia del optimizador INDEX. En el primer ejemplo se
muestra cómo obligar al optimizador a que use un índice no clúster
para recuperar filas de una tabla, mientras que en el segundo
ejemplo se obliga a realizar un recorrido de tabla mediante un
índice igual a 0.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT pp.FirstName, pp.LastName, e.NationalIDNumber
FROM HumanResources.Employee AS e WITH
(INDEX(AK_Employee_NationalIDNumber))
JOIN Person.Person AS pp on e.BusinessEntityID =
pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
42. 42
-- Force a table scan by using INDEX = 0.
USE AdventureWorks2012;
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
FROM HumanResources.Employee AS e WITH (INDEX = 0) JOIN
Person.Person AS pp
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
7) Usar OPTIONy las sugerenciasGROUP
En el ejemplo siguiente se muestra cómo se usa la
cláusula OPTION (GROUP) con una cláusula GROUP BY.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (HASH GROUP, FAST 10);
GO
8) Usar la sugerenciade consulta UNION
En el ejemplo siguiente se usa la sugerencia de consulta MERGE
UNION.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT BusinessEntityID, JobTitle, HireDate, VacationHours,
SickLeaveHours
FROM HumanResources.Employee AS e1
UNION
SELECT BusinessEntityID, JobTitle, HireDate, VacationHours,
SickLeaveHours
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO
43. 43
9) Usar una instrucción UNION simple
En el ejemplo siguiente, el conjunto de resultados incluye el
contenido de las columnas ProductModelID y Name de las
tablas ProductModel y Gloves.
Transact-SQL
USE AdventureWorks2012;
GO
IF OBJECT_ID ('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
-- Create Gloves table.
SELECT ProductModelID, Name
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
-- Here is the simple union.
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
44. 44
3. CONCLUSIONES
La realización de la investigación acerca de la herramienta SQL en la
asignatura de Administración de Datos e información nos lleva a las siguientes
conclusiones:
Se logró el objetivo de conocer como es el manejo adecuado de la
herramienta SQL. Teniendo en cuenta el estudio previo y la practica con
dicha herramienta.
Así mismo, aprendimos los pasos a seguir para crear estructuras de
tablas, procesos y consultas. De acuerdo al lenguaje de dicha
herramienta.
De igual forma tuvimos que analizar los distintos gestores de base de
datos de una forma teórica ya que tienen un vínculo directo con la
herramienta SQL, SQL server y Transact-SQL.
La investigación se enfatizó en las características encontradas, y la
implementación de estas herramientas, para que se pueda dar una mejora
en la comprensión y facilidad de manejo para los estudiantes.
De esta manera, esta investigación formara parte del aprendizaje
obtenido acerca de una de las herramientas muy importantes basado en
la creación de base de datos. Y que posteriormente lo emplearemos en
nuestra vida profesional.