Page 1
MONOGRAFÍA.
Structured Query Language Server (SQL Server).
IntegrantesCanayo Hualinga, Marcelo.
Huamán Córdova, Sandro Cesar.Lomas Laulate, Alían Aldair.
Ríos Vásquez, Yessabella Ytzel.Vásquez Mozombite, Ana Meliza.
DocenteIng. Roberto Carlos Carrasco Sánchez.
FacultadCiencias E Ingeniería
CarreraIngeniería De Sistemas De Información
CatedraAdministración De Datos E Información I
CicloIII
Fecha De Entrega: miércoles, 26 De Noviembre Del 2014.
IQUITOS _LORETO _PERÚ
INDICE
“AÑO DE LA PROMOCION DE LA INDUSTRIA RESPONSABLE Y DEL COMPROMISO CLIMÀTICO”
UNIVERSIDAD CIENTÍFICA DEL PERÙ
Page 2
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
Serve
r……………………………………………………………………………………..10
2.1.4. Característica
s………………………………………………………………………………………………
……..11
2.1.5. Ventaja SQL
Serve
r…………………………………………………………………………………………….1
4
2.1.6. Desventajas SQL
Serve
r…………………………………………………………………………………….14
2.2.Modelamiento de Base de Datos en SQL
Server……………………………….14
2
Page 3
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 –
SQ
L…………………………………………………………………………………
……..37
2.4.1. Definición de Transact -
SQL…………………………………………………………………………..37
2.4.2. Sintaxi
s………………………………………………………………………………………………
…………………..38
2.4.3. Ejercicios de Lenguaje T –
SQL………………………………………………………………………..39
3. CONCLUSIONES
BIBLIOGRAFÍA
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
Page 4
4
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
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
Page 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
5
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
Page 6
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.
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.
6
Page 7
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.
1.2. Justificación de 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
7
Page 8
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.
8
Page 9
2. MARCO TEÓRICO
2.1. Gestor De Base De Datos Microsoft SQL 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.
9
Page 10
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
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
10
Page 11
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 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
11
Page 12
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
• 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.
12
Page 13
• 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
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:
13
Page 14
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.
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.
14
Page 15
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.Desventajas SQL 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 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
15
Page 16
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 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
16
Page 17
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:
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 ...]
17
Page 18
[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:
SELECT PNAME, PRICE FROM PART WHERE PRICE > 10;
En este caso el resultado es:
PNAME | PRICE ------------+-------- Cerrojos | 15 Levas | 25
18
Page 19
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
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.
19
Page 20
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).
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
20
SELECT S.SNAME, P.PNAME FROM SUPPLIER S, PART P, SELLS SE WHERE S.SNO = SE.SNO AND P.PNO = SE.PNO;
Page 21
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:
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 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
21
AVG_PRICE ----------- 14.5
SELECT COUNT(PNO) FROM PART;
Page 22
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
Page 23
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
Page 24
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
Page 25
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
25
Page 26
FROM SUPPLIER S 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:
SNO | SNAME | CITY -----+-------+-------- 2 | Jones | Paris 3 | Adams | Vienna
26
Page 27
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
A continuación sigue una lista de algunos tipos de datos soportados
por SQL:
27
CREATE TABLE SUPPLIER (SNO INTEGER, SNAME VARCHAR(20), CITY VARCHAR(20));
Page 28
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
CREATE INDEX I ON SUPPLIER (SNAME);
Page 29
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 ):
29
CREATE VIEW view_name AS select_stmt
Page 30
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
Page 31
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
Page 32
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
32
UPDATE PART SET PRICE = 15 WHERE PNAME = 'Tornillos';
Page 33
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.Ejercicios de 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 Tipo de datos Nulos Descripción
Idpais char(3) No NULL Identificador de país. Clave primaria
NombrePais
Varchar(40) No NULL Nombre del país.
Tabla Categorías
33
Page 34
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
NombreCategoria
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 Tipo de 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 Tipo de datos Nulos Descripción
34
Page 35
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 Tipo de 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
PrecioUnidad
decimal(10,2)
No NULL
Precio por unidad del producto
UniEnExistencia
smallint No NULL
Unidades en existencia o stock del producto
35
Page 36
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 Tipo de datos Nulos Descripción
IdCargo Int No NULL Identificador de cargo. Clave primaria
Descargo varchar(30)
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 Tipo de 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
Page 37
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 Tipo de 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
FechaEntrega
Datetime No NULL
Fecha de entrega del pedido
FechaEnvio Datetime No NULL
Fecha de envío del pedido
37
Page 38
enviopedido char(1) No NULL
Indica si el pedido ha sido o no entregado
Destinatario
varchar(60) No NULL
Nombre del destinatario
Dirdestinatario
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
IdProducto
Int No NULL Identificador del producto. Clave externa de producto
PrecioUnidad
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
Page 39
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
Page 40
2.4.3.Ejercicios de Lenguaje T – SQL
1) Usar GROUP BY con una expresiónEn 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 BYEn 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 HAVINGEn 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
40
Page 41
menos. En el segundo ejemplo se muestra una
cláusula HAVING sin funciones de agregado.
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
41
Page 42
SELECT ProductID
FROM Sales.SalesOrderDetail
WHERE UnitPrice < 25.00
GROUP BY ProductID
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO
5) Usar HAVING con SUM y AVGEn 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 sugerencia del optimizador INDEXEn 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))
42
Page 43
JOIN Person.Person AS pp on e.BusinessEntityID =
pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
-- 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 OPTION y las sugerencias GROUP
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 sugerencia de 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
43
Page 44
SELECT BusinessEntityID, JobTitle, HireDate, VacationHours,
SickLeaveHours
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO
9) Usar una instrucción UNION simpleEn 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
Page 45
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.
45
Page 46
BIBLIOGRAFIA
http://es.slideshare.net/CrypticHernndezOrtega/caracteristicas-microsoft-
sql-server
http://es.slideshare.net/hcumbicusr/sistemas-gestores-de-base-de-datos-
sgbd-13333545?related=1
http://es.wikipedia.org/wiki/SQL
http://es.wikipedia.org/wiki/SQL
http://proyectobasesdedatos.galeon.com/enlaces1416755.html
http://www.aulaclic.es/sqlserver/spr_9_10_1.htm
46