0% encontró este documento útil (0 votos)
524 vistas28 páginas

Historia de SQL Server

Microsoft SQL Server es un sistema de gestión de base de datos relacional desarrollado por Microsoft. Ha existido desde 1989 y ha lanzado varias versiones actualizadas cada pocos años. SQL Server almacena y manipula datos y se puede usar para crear aplicaciones. Incluye características como transacciones, procedimientos almacenados y una interfaz gráfica para la administración. Existen diferentes ediciones comerciales y una versión gratuita llamada SQL Server Express.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
524 vistas28 páginas

Historia de SQL Server

Microsoft SQL Server es un sistema de gestión de base de datos relacional desarrollado por Microsoft. Ha existido desde 1989 y ha lanzado varias versiones actualizadas cada pocos años. SQL Server almacena y manipula datos y se puede usar para crear aplicaciones. Incluye características como transacciones, procedimientos almacenados y una interfaz gráfica para la administración. Existen diferentes ediciones comerciales y una versión gratuita llamada SQL Server Express.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 28

Historia de sql server

Versiones de sql server

Para que sirve sql server

Que es sgdb

Microsoft SQL Server


Ir a la navegaciónIr a la búsqueda

Microsoft SQL Server

www.microsoft.com/sql/

Información general

Desarrollador(es) Microsoft

Lanzamiento inicial 24 de abril de 1989

Última versión estable SQL Server 2017 (14.0)


Octubre de 2017

Género RDBMS

Programado en C, C++

Sistema operativo Microsoft Windows, Linux12

Licencia Microsoft EULA

[editar datos en Wikidata]

Microsoft SQL Server es un sistema de gestión de base de datos relacional, desarrollado


por la empresa Microsoft.
El lenguaje de desarrollo utilizado (por línea de comandos o mediante la interfaz gráfica de
Management Studio) es Transact-SQL(TSQL), una implementación del estándar ANSI del
lenguaje SQL, utilizado para manipular y recuperar datos (DML), crear tablas y definir
relaciones entre ellas (DDL).
Dentro de los competidores más destacados de SQL Server
están: Oracle, MariaDB, MySQL, PostgreSQL. SQL Server ha estado tradicionalmente
disponible solo para sistemas operativos Windows de Microsoft, pero desde 2016 está
disponible para GNU/Linux,23 y a partir de 2017 para Docker también.4
Puede ser configurado para utilizar varias instancias en el mismo servidor físico, la primera
instalación lleva generalmente el nombre del servidor, y las siguientes - nombres
específicos (con un guion invertido entre el nombre del servidor y el nombre de la
instalación).

Versiones[editar]

Historia de versiones5

Versión Año Nombre de la versión Nombre clave

1.0
1989 SQL Server 1-0 SQL
(OS/2)

4.21
1993 SQL Server 4.21 SEQUEL
(WinNT)

6.0 1995 SQL Server 6.0 SQL95

6.5 1996 SQL Server 6.5 Hydra

7.0 1998 SQL Server 7.06 Sphinx

SQL Server 7.0


- 1999 Plato
OLAP Tools

8.0 2000 SQL Server 20007 Shiloh


SQL Server 2000
8.0 2003 Liberty
64-bit Edition

9.0 2005 SQL Server 20058 Yukon

10.0 2008 SQL Server 20089 Katmai

10.25 2010 SQL Azure DB CloudDatabase

10.50 2010 SQL Server 2008 R210 Kilimanjaro

11.0 2012 SQL Server 201211 Denali

12.0 2015 SQL Server 201412 SQL14 (antes Hekaton)

13.0 2016 SQL Server 2016

14.0 2017 SQL Server 2017 vNext 2017

El código fuente original de SQL Server que fue utilizado en las versiones previas a la
versión 7.0 habría sido comprado de Sybase, pero fue actualizado en las versiones 7.0 y
2000, y reescrito en la versión 2005. Generalmente, cada 2-3 años, una nueva versión es
lanzada y, entre estos lanzamientos, se proponen service packes con mejoras y
correcciones de bugs, y hotfixes por problemas urgentes en el sistema de seguridad o
bugs críticos.

Características[editar]

 Soporte de transacciones.
 Soporta procedimientos almacenados.
 Incluye también un entorno gráfico de administración, que permite el uso
de comandos DDL y DMLgráficamente.
 Permite trabajar en modo cliente-servidor, donde la información y datos se alojan en
el servidor y los terminales o clientes de la red sólo acceden a la información.
 Además permite administrar información de otros servidores de datos.
Este sistema incluye una versión reducida, llamada MSDE con el mismo motor de base de
datos pero orientado a proyectos más pequeños, que en sus versiones 2005 y 2008 pasa
a ser el SQL Express Edition, que es una edición Open Source ,es decir, se distribuye en
forma gratuita.
Es común desarrollar proyectos completos empleando Microsoft SQL Server y Microsoft
Access a través de los llamados ADP (Access Data Project). De esta forma se completa
la base de datos (Microsoft SQL Server), con el entorno de desarrollo (VBA Access), a
través de la implementación de aplicaciones de dos capas mediante el uso de
formularios Windows.
En el manejo de SQL mediante líneas de comando se utiliza el SQLCMD, osql, o
PowerShell.
Para el desarrollo de aplicaciones más complejas (tres o más capas), Microsoft SQL
Server incluye interfaces de acceso para varias plataformas de desarrollo, entre
ellas .NET, pero el servidor sólo está disponible para Sistemas Operativos.
El tipo NUMERIC fue mejorado para ser usado como identificador de columna a partir de la
versión 2008 R2.

Programación[editar]
T-SQL[editar]
Artículo principal: T-SQL

T-SQL (Transact-SQL) es el principal medio de interacción con el Servidor, el cual permite


realizar las operaciones claves en SQL Server, incluyendo la creación y modificación de
esquemas de base de datos, inserción y modificación de datos en la base de datos, así
como la administración del servidor como tal. Esto se realiza mediante el envío de
sentencias en T-SQL y declaraciones que son procesadas por el servidor y los resultados
(o errores) regresan a la aplicación cliente.

Cliente Nativo de SQL[editar]


Cliente Nativo de SQL, es la biblioteca de acceso a datos para los clientes de Microsoft
SQL Server versión 2005 en adelante. Implementa de forma nativa soporte para las
características de SQL Server, incluyendo la ejecución de la secuencia de datos tabular,
soporte para bases de datos en espejo de SQL Server, soporte completo para todos los
tipos de datos compatibles con SQL Server, conjuntos de operaciones asíncronas, las
notificaciones de consulta, soporte para cifrado, así como recibir varios conjuntos de
resultados en una sola sesión de base de datos. Cliente Nativo de SQL se utiliza como
extensión de SQL Server plug-ins para otras tecnologías de acceso de datos, incluyendo
ADO u OLE DB. Cliente Nativo de SQL puede también usarse directamente, pasando por
alto las capas de acceso de datos.

Ediciones y servicios[editar]
Cada versión de SQL Server posee distintas versiones con distintos precios (para cada
versión) que dependen también en la configuración física del servidor. 13 A continuación se
presentan las versiones principales:

Enterprise[editar]
Contempla todas las características (deshabilitadas en otras ediciones).Es el tipo de
versión con más privilegios existente en el mercado.

Developer[editar]
Una edición con las mismas características que la Enterprise, con el fin de ser instalada
solamente en ambiente de desarrollo y no en producción. Si se desarrolla para una edición
Standard hay que tener en cuenta las características deshabilitadas para esta versión.

Standard[editar]
Una versión limitada según la configuración del servidor y sus características, diseñada
para servidores inferiores.
Por ejemplo: en la versión 2012, la edición Enterprise soporta un número ilimitado
de procesadores, y la agregación de memoria y CPUs en caliente sin la interrupción
del servicio o del servidor; mientras la edición Standard esta limitada a 16 procesadores y
no soporta la "agregación en caliente".

Express[editar]
Una versión gratuita que posibilita la creación de bases de datos limitadas con
características básicas, con el fin de apoyar aplicaciones que necesiten una solución
simple para almacenamiento de una cantidad limitada de datos, o usuarios que sus
recursos y necesidades son limitados.
En la versión 2012, esta edición puede utilizar un máximo de 1 GB de memoria, y
almacenar no más de 10GB, funciona en servidores con un número máximo de cuatro
procesadores. Estas limitaciones se mantienen en la versión 2014 (4 cores, 1GB ram, y
10Gb por base de datos).

SQL Azure[editar]
Es una versión de SQL Server en la nube, que permite pagar mensualmente por el servicio
sin la necesidad de mantener un servidor físico (On Premise). La empresa paga solo por el
servicio, y el servicio es manejado a través de torres de servidores en distintos lugares en
el mundo.
Con SQL Azure no es necesario instalar, mantener o actualizar un servidor físico; a pesar
que este servicio depende de aspectos relacionados a problemas de seguridad con
respecto a su presencia fuera de la empresa y a la disponibilidad de conexión a Internet.
Durante un tiempo, el servicio fue ampliado con la opción de crear un servidor virtual por la
red, e instalar SQL Server tanto como uno de los servicios competidores, y manejar el
servidor virtual como si fuera un servidor físico local (aunque físicamente no está
accesible); y se puede diferenciar entre la opción original que esta denominada PAAS
(Platform as a Service: El Plataforma como un Servicio) y la nueva opción de los
servidores virtuales denominada IAAS (Infrastructure as a Service, Infraestructura como un
Servicio).
Este servicio esta otorgado por Microsoft desde 2009 y se une a servicios similares
de empresas de third-party.

Interfaz de usuario[editar]
SQL Server proporciona unos interfaz que han cambiado durante los años, de los cuales
los más conocidos son los interfaz gráficos que están utilizados como herramienta de
desarrollo estándar a los desarrolladores y administradores.
La interfaz gráfica hasta 2005 incluyó el Enterprise Manager con una vista de árbol de los
distintos objetos y con la capacidad de manejarlos; y el Query analyzer como interfaz
textual para ejecutar comandos de TSQL.
En la versión 2005 las dos herramientas se unificaron a una –el SQL Server Management
Studio (SSMS), y a partir de 2008 fue incluida la opción de trabajar con el Visual Studio– la
interfaz estándar de desarrollo de Microsoft (a los distintos lenguajes, BI, etc.). Otro
interfaz opcional es la utilización de Línea de comandos, con herramientas como SQLCmd,
ISQL, OSQL que posibilita la ejecución de scripts y procesamiento por lotes. Desde 2008
se puede desarrollar con SQLCmd (SQL Command) a través del SSMS sin interconectarse
al interfaz textual de Windows. Otra opción en el ámbito de scripts es la utilización del
lenguaje de scripts Powershell de Microsoft.
Aparte de los intefaces estándares de SQL Server, se puede ejecutar comandos de TSQL
con herramientas de conexión como ODBC y OLE-DB.14
Servicios[editar]
A contrario de sistemas de bases de datos como Microsoft Access que son "pasivas" y
contienen un archivo a cual hay que conectar y la ejecución de los comandos se lleva a
cabo en el cliente (la computadora de usuario), en SQL Server hay número de servicios,
software que están ejecutadas en la memoria del servidor por parte del sistema, y por lo
tanto aprovechan las capacidades del servidor que es más potente que los clientes,
previenen congestión en la red, y pueden programar tareas que corran aunque el cliente
no está conectado.
Los servicios principales:

 SQL Server - El "motor" del sistema


 SQL Agent - Ejecución de tareas (Jobs, scripts programados) y envió de advertencias
en caso de carga pesada e irregulares en el sistema
 Full-Text Filter Daemon Launcher - La utilización en los indexes especiales del "Full
text search" por búsqueda textual avanzada
 SQL Browser - El "oyente" dedicado a comandos enviados y redirigirlos a su destino
 SSIS Server - La operación del SSIS (la herramienta de ETL)
 SSAS Server - La operación del SSAS (la herramienta de OLAP)
 SSRS Server - La operación del SSRS (la herramienta de informes)

Capacidades y herramientas básicas[editar]


Bases de datos[editar]
En cada instalación de SQL Server hay 4 bases de datos de sistema, y la capacidad de
crear nuevas bases de datos por el usuario, en los cuales los datos están almacenados en
tablas.
Estas bases de datos, creadas por parte de los usuarios, incluyen básicamente un archivo
de datos (con el sufijo mdf) con las tablas y los distintos objetos a nivel de la base de
datos; y un archivo de registro (con el sufijo ldf) con las transacciones abiertas, y
transacciones cerradas, Sujeto al modelo de recuperación seleccionado (se puede
acumular en el archivo de registro todos los cambios en la base de datos desde el último
respaldo). Se puede crear un conjunto de archivos de datos además del principal (con el
sufijo ndf) por consideraciones de eficiencia, partición de carga de trabajo entre los discos
rígidos, etc.
Las bases de datos del sistema:

 master - Todos los procedimientos, funciones y tablas del sistema que están utilizadas
por parte de todas las bases de datos y que están instaladas automáticamente, tanto
como las que han sido creado por parte de los administradores del sistema. Además,
todas las definiciones en respecto a la seguridad a nivel del servidor, están
almacenadas en esta base de datos.
 msdb - Almacenamiento de las tareas del agente, los códigos de CLR combinados en
el sistema, los paquetes de SSIS, y otros más.
 model - El molde de las bases de datos. Cada nueva base de datos se crea como una
copia de esta base de datos, menos que algo más estaba definido explícitamente.
 tempdb - Base de datos temporal que se crea de nuevo cada vez que el servicio
reinicia. Se utiliza para almacenar tablas temporales creadas por parte de los usuarios
o el sistema (por ejemplo en ordenaciones complejos).
Tablas fijas y temporales[editar]
Desde la perspectiva lógica, los datos almacenados en las bases de datos en tablas, que
mediante ellas se implementa la teoría de las bases de datos relacionales. La tabla se
divide en filas y columnas (A veces se les conoce como registros y campos). Las tablas
pueden ser fijas o temporales, mientras que en el segundo caso existen físicamente en la
base de datos tempdb, y se borran automáticamente en caso de desconexión de la sesión
o de la conexión al servidor, depende en el tipo de la tabla temporal.
Desde la perspectiva física, el sistema divide los archivos de la base datos en Extents de
64 KB, y cada cual a ocho páginas de 8 KB. Generalmente, cada Extent se asigna a una
tabla o un índice, menos las tablas pequeñas; y cada página se asigna siempre a una tabla
específica. El sistema es responsable del aumento de los archivos, de acuerdo con los
ajustes del usuario, y de asignar Extents y páginas a las tablas.
A las tablas se puede crear índices. Los índices se almacenan junto a la tabla (Non
Clustered Index) o son la tabla en sí (Clustered Index). Los índices asisten en la búsqueda
de datos en las tablas (como los ficheros en las librerías), en ordenarlas, y la definición
de claves primarias.
Entre las tablas se puede crear una relación de uno a muchos.
Aparte de las tablas de los usuarios, hay tablas que almacenan meta data: datos sobre el
sistema mismo, los diferentes objetos, los derechos, estadísticas sobre el rendimiento del
sistema (DMV), etc.

Tipos de datos[editar]
Para cada columna en una tabla y a cada variable o parámetro, se define un tipo de datos
que sean almacenados en él, entre ellos:

1. Numeros: Números enteros y no enteros en distintos tamaños, y en diferentes


niveles de precisión; y auto incremento opcional.
2. Textos: Cadenas de distintas longitudes, y distintas capacidades de apoyar
distintas lenguas.
3. Fechas: Fechas en distintos niveles de precisión, desde días completos hasta
fracciones menores de un segundo, que apoyan fechas a partir del principio del
siglo 20 o del calendario gregoriano, y la capacidad de diferenciar entre distintos
usos de horarios.
4. XML: Datos textuales (cadenas) que representan conjuntos estándares de datos
(estándar SGML).
5. Datos binarios: Datos almacenados como datos binarios (bits y bytes), que
posibilitan el almacenamiento de archivos gráficos, etc.
6. Geography: Representación estándar de información geográfica, tales como
estados, zonas geográficas, localidades; y las cálculos como distancias.
7. Geometry: Representación estándar de puntas, líneas, superficies en el plano; y
las relaciones entre ellas.
8. Hierarchid: Representación estándar de información jerárquica como lista de
materiales, relaciones de subordinación entre empleados, etc.
Vistas[editar]
Las vistas representan generalmente comandos de extracción de datos, que se almacenan
sin los datos (que están almacenados en las tablas). Esta opción nos posibilita crear
extracciones complejas o estándares, almacenarlas como vistas, y utilizar las vistas sin la
necesidad de escribir de nuevo los comandos o mantener los códigos donde ellas
aparecen. Adicionalmente, es un medio muy importante para otorgar derechos selectivos
de lectura (en caso que queremos posibilitar a un usuario contemplar parcialmente las
columnas o las filas de una tabla).
Una vista se puede considerar una tabla virtual o una consulta almacenada. Los datos
accesibles a través de una vista no están almacenados en un objeto distinto de la base de
datos. Lo que está almacenado en la base de datos es una instrucción SELECT. El
resultado de la instrucción SELECT forma la tabla virtual que la vista devuelve. El usuario
puede utilizar dicha tabla virtual haciendo referencia al nombre de la vista en instrucciones
Transact-SQL, de la misma forma en que se hace referencia a las tablas. Las vistas se
utilizan para alguna de estas funciones, o para todas:
• Restringir el acceso del usuario a filas concretas de una tabla. Por ejemplo, permitir que
un empleado sólo vea las filas que guardan su trabajo en una tabla de seguimiento de
actividad laboral.
• Restringir el acceso del usuario a columnas específicas. Por ejemplo, permitir que los
empleados que no trabajen en el departamento de nóminas vean las columnas de nombre,
oficina, teléfono y departamento de la tabla de empleados, pero no permitir que vean las
columnas con los datos de salario u otra información personal.
• Combinar columnas de varias tablas de forma que parezcan una sola tabla.
• Agregar información en lugar de presentar los detalles. Por ejemplo, presentar la suma
de una columna o el valor máximo o mínimo de una columna.

Las vistas se crean definiendo la instrucción SELECT que recupera los datos presentados
por la vista. Las tablas de datos a las que hace referencia la instrucción SELECT se
conocen como las tablas base para la vista. Las vistas en todas las versiones de SQL
Server son actualizables (pueden ser objetivo de instrucciones UPDATE, DELETE o
INSERT) mientras la modificación afecte sólo a una de las tablas base de la vista.

Procedimientos almacenados[editar]
Los procedimientos son scripts de comandos de TSQL, que pueden ser ejecutados con
distintos parámetros. Por ejemplo, procedimiento que obtiene número de año como
parámetro, y actualiza una tabla de resumen de ventas, con las ventas de los agentes en
el dicho año, basada en la tabla de registro de ventas.
Los procedimientos almacenados pueden facilitar en gran medida la administración de la
base de datos y la visualización de información sobre dicha base de datos y sus usuarios.
Los procedimientos almacenados son una colección precompilada de instrucciones SQL e
instrucciones de control de flujo opcionales almacenadas bajo un solo nombre y
procesadas como una unidad. Los procedimientos almacenados se guardan en una base
de datos; se pueden ejecutar desde una aplicación y permiten variables declaradas por el
usuario, ejecución condicional y otras funciones eficaces de programación. Los
procedimientos almacenados pueden contener flujo de programas, lógica y consultas a la
base de datos. Pueden aceptar parámetros, proporcionar resultados de parámetros,
devolver conjuntos de resultados individuales o múltiples y devolver valores.
Las ventajas de utilizar procedimientos almacenados en SQL Server en vez de programas
Transact-SQL almacenados localmente en equipos clientes consisten en que:
• Permiten una programación modular.
Puede crear el procedimiento una vez, almacenarlo en la base de datos, y llamarlo desde
el programa el número de veces que desee. Un especialista en programación de bases de
datos puede crear procedimientos almacenados, que luego será posible modificar
independientemente del código fuente del programa. Facilitan el mantenimiento.
• Permiten una ejecución más rápida.
En situaciones en las que se necesita una gran cantidad de código Transact-SQL, o si las
operaciones se realizan varias veces, los procedimientos almacenados pueden ser más
rápidos que los lotes de código Transact-SQL. Los procedimientos son analizados y
optimizados en el momento de su creación, y es posible utilizar una versión del
procedimiento que se encuentra en la memoria después de que se ejecute por primera
vez. Las instrucciones de Transact-SQL que se envían varias veces desde el cliente cada
vez que deben ejecutarse tienen que ser compiladas y optimizadas siempre que SQL
Server las ejecuta.
• Pueden reducir el tráfico de red.
Una operación que necesite centenares de líneas de código Transact-SQL puede
realizarse mediante una sola instrucción que ejecute el código en un procedimiento, en vez
de enviar cientos de líneas de código por la red.
• Pueden utilizarse como mecanismo de seguridad.
Es posible conceder permisos a los usuarios para ejecutar un procedimiento almacenado,
incluso si no cuentan con permiso para ejecutar directamente las instrucciones del
procedimiento.

Funciones definidas por el usuario[editar]


Las funciones son un objeto que combina algunas capacidades de las vistas, con otras de
los procedimientos. Como las vistas, pueden extraer datos y ejecutar cálculos, y devuelven
un resultado al usuario o al programa que les ejecutó. Tanto como los procedimientos,
incluyen códigos de TSQL, y pueden ser ejecutados con parámetros.
Las funciones devuelven un valor o un conjunto de valores.
Las funciones definidas por el usuario se crean con la instrucción CREATE FUNCTION, se
modifican con la instrucción ALTER FUNCTION y se quitan con la instrucción DROP
FUNCTION. Todos los nombres de funciones completos
(database_name.owner_name.function_name) definidos por el usuario deben ser únicos.
Para crear, modificar o quitar funciones definidas por el usuario, debe tener permisos de
CREATE FUNCTION. Los usuarios distintos del propietario deben tener permiso
EXECUTE para una función, y solo así podrán utilizarla en una instrucción de Transact-
SQL. Para crear o modificar tablas con referencias a funciones definidas por el usuario en
la restricción CHECK, la cláusula DEFAULT o la definición de una columna calculada,
también debe tener permiso REFERENCES para las funciones. Los errores de Transact-
SQL que producen la cancelación de una instrucción y continúan con la siguiente
instrucción del módulo, como desencadenadores o procedimientos almacenados, se tratan
de forma distinta dentro de una función. En las funciones, estos errores hacen que se
detenga la ejecución de la función. Esto hace que se cancele la función que invocó la
instrucción. Una función definida por el usuario no tiene ninguno o tiene varios parámetros
de entrada y devuelve un valor escalar o una tabla. Una función puede tener un máximo de
1024 parámetros de entrada. Cuando un parámetro de la función toma un valor
predeterminado, debe especificarse la palabra clave DEFAULT al llamar a la función para
poder obtener el valor predeterminado. Este comportamiento es diferente del de los
parámetros con valores predeterminados de los procedimientos almacenados, para los
cuales omitir el parámetro implica especificar el valor predeterminado. Las funciones
definidas por el usuario no admiten parámetros de salida.

Consultas Distribuidas[editar]
Las consultas distribuidas tienen acceso a datos de varios orígenes, que pueden estar
almacenados en un equipo o en equipos distintos. Microsoft SQL Server 2000 admite las
consultas distribuidas a través de OLE DB Las consultas distribuidas proporcionan a los
usuarios de SQL Server acceso a:
• Datos distribuidos almacenados en múltiples instancias SQL Server.
• Datos heterogéneos almacenados en varios orígenes de datos relacionales y no
relacionales a los que se tiene acceso mediante un proveedor OLE DB.
Los proveedores OLE DB exponen datos en objetos tabulares llamados conjuntos de filas.
En las instrucciones Transact-SQL, SQL Server 2000 permite que se haga referencia a los
conjuntos de filas de los proveedores OLE DB como si fueran una tabla de SQL Server. En
las instrucciones SELECT, INSERT, UPDATE y DELETE de Transact-SQL, se puede
hacer referencia directa a las tablas y vistas de orígenes de datos externos. Puesto que las
consultas distribuidas usan OLE DB como interfaz subyacente, éstas tienen acceso a los
sistemas DBMS relacionales tradicionales con procesadores de consultas SQL, así como a
los datos administrados por orígenes de datos de capacidad y sofisticación diversas.
Siempre que el software propietario de los datos los expone en un conjunto de filas tabular
a través del proveedor OLE DB, los datos se podrán usar en las consultas distribuidas.
Nota: El uso de las consultas distribuidas en SQL Server es similar a la funcionalidad de
las tablas vinculadas mediante ODBC, que anteriormente admitía Microsoft Access. Esta
funcionalidad se encuentra ahora integrada en SQL Server con OLE DB como interfaz
para los datos externos.
Transacciones[editar]
Una transacción es un conjunto de comandos, que se está ejecutado completamente o no
ejecutado en absoluto: todo o nada. Por ejemplo, si una suma de dinero fue trasladada de
una cuenta bancaria a otra, y hay que actualizar ambas cuentas sobre el depósito y la
retirada; es obligatorio que ambas cuentas se actualizan juntas, o ninguna (en caso que
una de las actualizaciones falla); para evitar consecuencias inconsistentes de un depósito
sin ninguna retirada, o viceversa. Por lo tanto, una transacción es una secuencia de
operaciones realizadas como una sola unidad lógica de trabajo. Una unidad lógica de
trabajo debe exhibir cuatro propiedades, conocidas como propiedades ACID (atomicidad,
coherencia, aislamiento y durabilidad), para ser calificada como transacción:

 Atomicidad
Una transacción debe ser una unidad atómica de trabajo, tanto si se realizan todas sus
modificaciones en los datos, como si no se realiza ninguna de ellas.

 Coherencia
Cuando finaliza, una transacción debe dejar todos los datos en un estado coherente. En
una base de datos relacional, se deben aplicar todas las reglas a las modificaciones de la
transacción para mantener la integridad de todos los datos. Todas las estructuras internas
de datos, como índices de árbol B o listas doblemente vinculadas, deben estar correctas al
final de la transacción.

 Aislamiento
Las modificaciones realizadas por transacciones simultáneas se deben aislar de las
modificaciones llevadas a cabo por otras transacciones simultáneas. Una transacción ve
los datos en el estado en que estaban antes de que otra transacción simultánea los
modificara o después de que la segunda transacción se haya concluido, pero no ve un
estado intermedio. Esto se conoce como seriabilidad debido a que su resultado es la
capacidad de volver a cargar los datos iniciales y reproducir una serie de transacciones
para finalizar con los datos en el mismo estado en que estaban después de realizar las
transacciones originales.

 Durabilidad
Una vez concluida una transacción, sus efectos son permanentes en el sistema. Las
modificaciones persisten aún en el caso de producirse un error del sistema.
SQL Server tiene una capacidad limitada de anidar transacciones.

El optimizador[editar]
El optimizador es una parte del software que "toma la decisión" de como cada comando se
ejecutará, tanto que la ejecución será lo más eficiente, o por lo menos bastante eficiente
(es decir, bastante eficiente para evitar seguir buscando otra solución, que aún que sea
más eficiente, el precio de la búsqueda adicional "costará" más que el ahorro de recursos).
SQL es un lenguaje declarativo, en el cual el desarrollador declara que quiere extraer o
actualizar sin la necesidad de indicar cómo (a contrario de los lenguajes imperativos, y por
lo tanto el optimizador juega un papel protagónico, que de acuerdo con las estadísticas
que el sistema almacena sobre las distribuciones de los datos en las tablas, los indexes, y
reglas internas; toma la decisión adecuada.

Privilegios y seguridad de datos[editar]


Para conectarse al SQL Server, se necesita un Login (usuario a nivel del servidor). Cuando
la política de seguridad se define como Windows Authentication y el servidor se combina
con las definiciones del Domain, los Logins se definen en el Active Directory. Cuando la
definición es SQL Server Authentication los logins (usuario y contraseña) se definen en el
SQL Server mismo. Consecuentemente, en el primer caso hay que identificarse con
nombre y contraseña solamente al conectarse a la red, y luego se conecta
automáticamente a todos los servidores que son Windows Authentication (con el Login
global); y en el segundo caso hay que identificarse al conectarse a cada servidor de SQL
Server Authentication (cada vez con un Login local).
A nivel de la base de datos, el usuario se identifica como un User que está relacionado
generalmente al Login (que es a nivel del servidor), y los privilegios al User existen
solamente en el ámbito de la base de datos (además a los privilegios al Login). Para
otorgar derechos generales puede asistirse con listas de Server Roles (roles a nivel del
servidor) o Database Roles (roles a nivel de la base de datos específica), cada cual con
privilegios específicos a un rol específico; y cada usuario asociado con uno de estos Roles
obtiene los privilegios asociados con él. Además, el administrador puede otorgar derechos
specificos, y crear otros Database Roles (no se puede crear Server Roles).
Los privilegios a nivel del servidor incluyen la capacidad de crear bases de datos, utilizar
las tareas (Jobs), crear respaldos de bases de datos y restaurarlos, modificar las
definiciones del servidor, etc. Los privilegios a nivel de la base de datos posibilitan extraer
y actualizar datos, crear objetos como procedimientos y tablas, utilizar dichos objetos, etc.
Como regla general se puede otorgar derechos (Grant), revocar privilegios existentes
(Revoke), y denegar privilegios aún no existen (Deny).

Sistema de gestión de bases de datos


Ir a la navegaciónIr a la búsqueda

Este artículo tiene referencias, pero necesita más para complementar


su verificabilidad.
Puedes colaborar agregando referencias a fuentes fiables como se indica aquí. El
material sin fuentes fiables podría ser cuestionado y eliminado.
Este aviso fue puesto el 14 de mayo de 2016.

Un sistema gestor de base de datos (SGBD) es un conjunto de programas que permiten


el almacenamiento, modificación y extracción de la información en una base de datos.Los
usuarios pueden acceder a la información usando herramientas específicas de consulta y
de generación de informes, o bien mediante aplicaciones al efecto.
Estos sistemas también proporcionan métodos para mantener la integridad de los datos,
para administrar el acceso de usuarios a los datos y para recuperar la información si el
sistema se corrompe. Permiten presentar la información de la base de datos en variados
formatos. La mayoría incluyen un generador de informes. También pueden incluir un
módulo gráfico que permita presentar la información con gráficos y tablas.
Generalmente se accede a los datos mediante lenguajes de consulta, lenguajes de alto
nivel que simplifican la tarea de construir las aplicaciones. También simplifican las
consultas y la presentación de la información. Un SGBD permite controlar el acceso a los
datos, asegurar su integridad, gestionar el acceso concurrente a ellos, recuperar los datos
tras un fallo del sistema y hacer copias de seguridad. Las bases de datos y los sistemas
para su gestión son esenciales para cualquier área de negocio, y deben ser gestionados
con esmero.
Índice

 1Introducción
 2Historia
o 2.1Sistemas de navegación (1960)
o 2.2Sistemas relacionales (1970)
o 2.3Sistemas SQL (finales de década de 1970)
o 2.4Sistemas orientados a objetos (1980)
o 2.5Sistemas NoSQL (2000)
o 2.6Sistemas XML (2010)
 3Componentes
 4Lenguajes de modelación
o 4.1Estructura jerárquica
o 4.2Estructura en red
o 4.3Estructura relacional
o 4.4Estructura multidimensional
o 4.5Estructura orientada a objetos
 5Lenguajes de consulta
 6Arquitectura
 7Véase también
 8Referencias

Introducción[editar]
Las bases de datos generalmente funcionan en computadoras que se dedican de forma
exclusiva a este campo. Por las prestaciones requeridas, generalmente funcionan en
computadoras multiprocesador con abundante memoria.
Para el almacenamiento de los datos puede contar con sistemas de disco propio
o almacenamiento de conexión directa (DAS), puede conectarse a una red de
almacenamiento(SAN) o conectarse a un sistema de almacenamiento en red (NAS).
Existen aceleradores hardware, usados en grandes sistemas de proceso de transacciones.
Los SGBD se encuentran en el corazón de toda aplicación que maneje datos. Los SGBD
se basan en sistemas operativos estándar para efectuar dichas funciones.

Ejemplos de SELECT (Transact-SQL)


 15/03/2017
 Tiempo de lectura: 9 minutos

o
o

En este artículo
1. A. Usar SELECT para recuperar filas y columnas
2. B. Usar SELECT con encabezados de columna y cálculos
3. C. Usar DISTINCT con SELECT
4. D. Crear tablas con SELECT INTO
5. E. Usar subconsultas correlacionadas
6. F. Usar GROUP BY
7. G. Usar GROUP BY con varios grupos
8. H. Usar GROUP BY y WHERE
9. I. Usar GROUP BY con una expresión
10. J. Usar GROUP BY con ORDER BY
11. K. Usar la cláusula HAVING
12. L. Usar HAVING y GROUP BY
13. M. Usar HAVING con SUM y AVG
14. N. Usar la sugerencia del optimizador INDEX
15. M. Usar OPTION y las sugerencias GROUP
16. O. Usar la sugerencia de consulta UNION
17. P. Usar una instrucción UNION simple
18. Q. Usar SELECT INTO con UNION
19. R. Usar UNION con dos instrucciones SELECT y ORDER BY
20. S. Usar UNION de tres instrucciones SELECT para mostrar los efectos de ALL y los paréntesis
21. Consulte también

SE APLICA A: SQL Server Azure SQL Database Azure SQL Data


Warehouse Almacenamiento de datos paralelos

En este tema se proporcionan ejemplos de uso de la instrucción SELECT.

A. Usar SELECT para recuperar filas y columnas

En el siguiente ejemplo se muestran tres fragmentos de código. En el primer


ejemplo de código, se devuelven todas las filas (no se especifica la cláusula
WHERE) y todas las columnas (con *) de la tabla Product de la base de
datos AdventureWorks2012.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT *
FROM Production.Product
ORDER BY Name ASC;
-- Alternate way.
USE AdventureWorks2012;
GO
SELECT p.*
FROM Production.Product AS p
ORDER BY Name ASC;
GO

En este ejemplo se devuelven todas las filas (no se ha especificado la cláusula


WHERE) y solo un subconjunto de las columnas (Name, ProductNumber, ListPrice)
de la tabla Product de la base de datos AdventureWorks2012. Además, se
agrega un encabezado de columna.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT Name, ProductNumber, ListPrice AS Price
FROM Production.Product
ORDER BY Name ASC;
GO

En este ejemplo solo se devuelven las filas de Product que tienen una línea de
productos de R y cuyo valor correspondiente a los días para fabricar es inferior
a 4.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT Name, ProductNumber, ListPrice AS Price
FROM Production.Product
WHERE ProductLine = 'R'
AND DaysToManufacture < 4
ORDER BY Name ASC;
GO
B. Usar SELECT con encabezados de columna y cálculos

En los siguientes ejemplos se devuelven todas las filas de la tabla Product.En el


primer ejemplo se devuelven las ventas totales y los descuentos de cada
producto. En el segundo ejemplo se calculan los beneficios totales de cada
producto.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT p.Name AS ProductName,
NonDiscountSales = (OrderQty * UnitPrice),
Discounts = ((OrderQty * UnitPrice) * UnitPriceDiscount)
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY ProductName DESC;
GO

Ésta es la consulta que calcula el beneficio de cada producto de cada pedido de


venta.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT 'Total income is', ((OrderQty * UnitPrice) * (1.0 -
UnitPriceDiscount)), ' for ',
p.Name AS ProductName
FROM Production.Product AS p
INNER JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY ProductName ASC;
GO
C. Usar DISTINCT con SELECT

En el siguiente ejemplo se utiliza DISTINCT para evitar la recuperación de títulos


duplicados.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT DISTINCT JobTitle
FROM HumanResources.Employee
ORDER BY JobTitle;
GO
D. Crear tablas con SELECT INTO

En el primer ejemplo se crea una tabla temporal


denominada #Bicyclesen tempdb.

SQLCopiar

USE tempdb;
GO
IF OBJECT_ID (N'#Bicycles',N'U') IS NOT NULL
DROP TABLE #Bicycles;
GO
SELECT *
INTO #Bicycles
FROM AdventureWorks2012.Production.Product
WHERE ProductNumber LIKE 'BK%';
GO
En el segundo ejemplo se crea la tabla permanente NewProducts.

SQLCopiar

USE AdventureWorks2012;
GO
IF OBJECT_ID('dbo.NewProducts', 'U') IS NOT NULL
DROP TABLE dbo.NewProducts;
GO
ALTER DATABASE AdventureWorks2012 SET RECOVERY BULK_LOGGED;
GO

SELECT * INTO dbo.NewProducts


FROM Production.Product
WHERE ListPrice > $25
AND ListPrice < $100;
GO
ALTER DATABASE AdventureWorks2012 SET RECOVERY FULL;
GO
E. Usar subconsultas correlacionadas

En el siguiente ejemplo se muestran consultas que son semánticamente


equivalentes y se demuestra la diferencia entre la utilización de la palabra
clave EXISTS y la palabra clave IN. Ambos son ejemplos de subconsultas válidas
que recuperan una instancia de cada nombre de producto cuyo modelo es un
jersey de manga larga con logotipo y cuyos números
de ProductModelID coinciden en las tablas Product y ProductModel.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT DISTINCT Name
FROM Production.Product AS p
WHERE EXISTS
(SELECT *
FROM Production.ProductModel AS pm
WHERE p.ProductModelID = pm.ProductModelID
AND pm.Name LIKE 'Long-Sleeve Logo Jersey%');
GO

-- OR

USE AdventureWorks2012;
GO
SELECT DISTINCT Name
FROM Production.Product
WHERE ProductModelID IN
(SELECT ProductModelID
FROM Production.ProductModel
WHERE Name LIKE 'Long-Sleeve Logo Jersey%');
GO

En el siguiente ejemplo se utiliza IN en una subconsulta correlativa o


repetitiva. Se trata de una consulta que depende de la consulta externa de sus
valores. Se ejecuta varias veces, una vez por cada fila que pueda seleccionar la
consulta externa. Esta consulta recupera una instancia del nombre y apellido de
cada empleado cuya bonificación en la tabla SalesPerson sea de 5000.00 y cuyos
números de identificación coincidan en las tablas Employee y SalesPerson.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT DISTINCT p.LastName, p.FirstName
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID WHERE 5000.00 IN
(SELECT Bonus
FROM Sales.SalesPerson AS sp
WHERE e.BusinessEntityID = sp.BusinessEntityID);
GO

La subconsulta anterior de esta instrucción no se puede evaluar


independientemente de la consulta externa. Necesita el
valor Employee.EmployeeID, aunque este valor cambia a medida que el Motor de
base de datos de SQL Server examina diferentes filas de Employee.

Una subconsulta correlativa se puede usar también en la cláusula HAVINGde una


consulta externa. En este ejemplo se buscan los modelos cuyo precio máximo es
superior al doble de la media del modelo.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT p1.ProductModelID
FROM Production.Product AS p1
GROUP BY p1.ProductModelID
HAVING MAX(p1.ListPrice) >= ALL
(SELECT AVG(p2.ListPrice)
FROM Production.Product AS p2
WHERE p1.ProductModelID = p2.ProductModelID);
GO
En este ejemplo se utilizan dos subconsultas correlativas para buscar los
nombres de los empleados que han vendido un producto específico.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT DISTINCT pp.LastName, pp.FirstName
FROM Person.Person pp JOIN HumanResources.Employee e
ON e.BusinessEntityID = pp.BusinessEntityID WHERE pp.BusinessEntityID IN
(SELECT SalesPersonID
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN
(SELECT SalesOrderID
FROM Sales.SalesOrderDetail
WHERE ProductID IN
(SELECT ProductID
FROM Production.Product p
WHERE ProductNumber = 'BK-M68B-42')));
GO
F. Usar GROUP BY

En este ejemplo se busca el total de cada pedido de venta de la base de datos.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
GO

Debido a la cláusula GROUP BY, solo se devuelve una fila que contiene la suma de
todas las ventas por cada pedido de venta.

G. Usar GROUP BY con varios grupos

En este ejemplo se busca el precio medio y la suma de las ventas anuales hasta
la fecha, agrupados por Id. de producto e Id. de oferta especial.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT ProductID, SpecialOfferID, AVG(UnitPrice) AS [Average Price],
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY ProductID, SpecialOfferID
ORDER BY ProductID;
GO
H. Usar GROUP BY y WHERE

En el siguiente ejemplo se colocan los resultados en grupos después de


recuperar únicamente las filas con precios superiores a $1000.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT ProductModelID, AVG(ListPrice) AS [Average List Price]
FROM Production.Product
WHERE ListPrice > $1000
GROUP BY ProductModelID
ORDER BY ProductModelID;
GO
I. 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.

SQLCopiar

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
J. 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.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT ProductID, AVG(UnitPrice) AS [Average Price]
FROM Sales.SalesOrderDetail
WHERE OrderQty > 10
GROUP BY ProductID
ORDER BY AVG(UnitPrice);
GO
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.

SQLCopiar

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.

SQLCopiar

USE AdventureWorks2012 ;
GO
SELECT SalesOrderID, CarrierTrackingNumber
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID, CarrierTrackingNumber
HAVING CarrierTrackingNumber LIKE '4BD%'
ORDER BY SalesOrderID ;
GO
L. 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.

SQLCopiar

USE AdventureWorks2012;
GO
SELECT ProductID
FROM Sales.SalesOrderDetail
WHERE UnitPrice < 25.00
GROUP BY ProductID
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO
M. 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.00 y cuyas cantidades de pedido medias son inferiores a 3.

SQLCopiar

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

Para ver los productos cuyas ventas totales son superiores a $2000000.00, utilice
esta consulta:

SQLCopiar

USE AdventureWorks2012;
GO
SELECT ProductID, Total = SUM(LineTotal)
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $2000000.00;
GO

Si desea asegurarse de que hay al menos mil quinientos elementos para los
cálculos de cada producto, use HAVING COUNT(*) > 1500 para eliminar los
productos que devuelven totales inferiores a 1500 elementos vendidos. La
consulta sería la siguiente:

SQLCopiar

USE AdventureWorks2012;
GO
SELECT ProductID, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING COUNT(*) > 1500;
GO
N. Usar la sugerencia del optimizador INDEX

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.

SQLCopiar

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

-- 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
M. 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.

SQLCopiar

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
O. Usar la sugerencia de consulta UNION

En el ejemplo siguiente se usa la sugerencia de consulta MERGE UNION.

SQLCopiar
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
P. 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.

SQLCopiar

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
Q. Usar SELECT INTO con UNION

En el ejemplo siguiente, la cláusula INTO de la segunda


instrucción SELECTespecifica que la tabla denominada ProductResults contiene el
conjunto final de resultados de la unión de las columnas designadas de las
tablas ProductModel y Gloves. Tenga en cuenta que la tabla Gloves se crea en la
primera instrucción SELECT.

SQLCopiar
USE AdventureWorks2012;
GO
IF OBJECT_ID ('dbo.ProductResults', 'U') IS NOT NULL
DROP TABLE dbo.ProductResults;
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

USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
INTO dbo.ProductResults
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO

SELECT ProductModelID, Name


FROM dbo.ProductResults;
R. Usar UNION con dos instrucciones SELECT y ORDER BY

El orden de algunos parámetros empleados con la cláusula UNION es


importante. En el ejemplo siguiente se muestra el uso correcto e incorrecto
de UNION en dos instrucciones SELECT en las que se va a cambiar el nombre de
una columna en el resultado.

SQLCopiar

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
/* INCORRECT */
USE AdventureWorks2012;
GO
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
ORDER BY Name
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves;
GO

/* CORRECT */
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
S. Usar UNION de tres instrucciones SELECT para mostrar los efectos de
ALL y los paréntesis

En los siguientes ejemplos se utiliza UNION para combinar los resultados de tres
tablas que tienen las mismas 5 filas de datos. En el primer ejemplo se
utiliza UNION ALL para mostrar los registros duplicados y se devuelven las 15
filas. En el segundo ejemplo se utiliza UNION sin ALL para eliminar las filas
duplicadas de los resultados combinados de las tres instrucciones SELECT y se
devuelven 5 filas.

En el tercer ejemplo se utiliza ALL con el primer UNION y los paréntesis incluyen al
segundo UNION que no utiliza ALL. El segundo UNION se procesa en primer lugar
porque se encuentra entre paréntesis. Devuelve 5 filas porque no se utiliza la
opción ALL y se quitan los duplicados. Estas 5 filas se combinan con los
resultados del primer SELECT mediante las palabras clave UNION ALL. Esto no quita
los duplicados entre los dos conjuntos de 5 filas. El resultado final es de 10 filas.

SQLCopiar

USE AdventureWorks2012;
GO
IF OBJECT_ID ('dbo.EmployeeOne', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeOne;
GO
IF OBJECT_ID ('dbo.EmployeeTwo', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeTwo;
GO
IF OBJECT_ID ('dbo.EmployeeThree', 'U') IS NOT NULL
DROP TABLE dbo.EmployeeThree;
GO

SELECT pp.LastName, pp.FirstName, e.JobTitle


INTO dbo.EmployeeOne
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeTwo
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
SELECT pp.LastName, pp.FirstName, e.JobTitle
INTO dbo.EmployeeThree
FROM Person.Person AS pp JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = pp.BusinessEntityID
WHERE LastName = 'Johnson';
GO
-- Union ALL
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeOne
UNION ALL
SELECT LastName, FirstName ,JobTitle
FROM dbo.EmployeeTwo
UNION ALL
SELECT LastName, FirstName,JobTitle
FROM dbo.EmployeeThree;
GO

SELECT LastName, FirstName,JobTitle


FROM dbo.EmployeeOne
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree;
GO

SELECT LastName, FirstName,JobTitle


FROM dbo.EmployeeOne
UNION ALL
(
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeTwo
UNION
SELECT LastName, FirstName, JobTitle
FROM dbo.EmployeeThree
);
GO
Consulte también

CREATE TRIGGER (Transact-SQL)


CREATE VIEW (Transact-SQL)
DELETE (Transact-SQL)
EXECUTE (Transact-SQL)
Expresiones (Transact-SQL)
INSERT (Transact-SQL)
LIKE (Transact-SQL)
UNION (Transact-SQL)
EXCEPT e INTERSECT (Transact-SQL)
UPDATE (Transact-SQL)
WHERE (Transact-SQL)
PathName (Transact-SQL)
INTO Clause (Transact-SQL)

También podría gustarte