Академический Документы
Профессиональный Документы
Культура Документы
(Transact-SQL)
SQL Server 2014
Otras versiones
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
bonificacin en la tablaSalesPerson sea de 5000.00 y cuyos nmeros de identificacin
coincidan en las tablas Employee y SalesPerson.
Transact-SQL
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 instruccin 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 tambin en la clusula HAVING de una
consulta externa. En este ejemplo se buscan los modelos cuyo precio mximo es
superior al doble de la media del modelo.
Transact-SQL
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 especfico.
Transact-SQL
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.
Transact-SQL
USE AdventureWorks2012;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
GO
Debido a la clusula GROUP BY, solo se devuelve una fila que contiene la suma de
todas las ventas por cada pedido de venta.
GROUP BY ProductID
HAVING AVG(OrderQty) > 5
ORDER BY ProductID;
GO
En esta consulta se utiliza la clusula LIKE en la clusula HAVING.
USE AdventureWorks2012 ;
GO
SELECT SalesOrderID, CarrierTrackingNumber
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID, CarrierTrackingNumber
HAVING CarrierTrackingNumber LIKE '4BD%'
ORDER BY SalesOrderID ;
GO
Transact-SQL
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 clculos de
cada producto, use HAVING COUNT(*) > 1500 para eliminar los productos que
devuelven totales inferiores a 1500 elementos vendidos. La consulta sera la siguiente:
Transact-SQL
USE AdventureWorks2012;
GO
SELECT ProductID, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING COUNT(*) > 1500;
GO
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
UNION
SELECT ProductModelID, Name
FROM dbo.Gloves
ORDER BY Name;
GO
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
primer SELECTmediante las palabras clave UNION ALL. Esto no quita los duplicados
entre los dos conjuntos de 5 filas. El resultado final es de 10 filas.
Transact-SQL
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
La clusula FOR se utiliza para especificar la opcin BROWSE o XML. BROWSE y XML
son opciones no relacionadas.
Importante
La directiva XMLDATA para la opcin FOR XML ha quedado desusada. Utilice la XSD generacin en
los modos RAW y AUTO. No hay sustitucin para la directiva XMLDATA en modo EXPLICIT. Esta
caracterstica se quitar en una versin futura de Microsoft SQL Server. Evite utilizar esta caracterstica
en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL Database (Versin
Sintaxis
[ FOR { BROWSE | <XML> } ]
<XML> ::=
XML
{
{ RAW [ ( 'ElementName' ) ] | AUTO }
[
<CommonDirectives>
[ , { XMLDATA | XMLSCHEMA [ ( 'TargetNameSpaceURI' ) ] } ]
[ , ELEMENTS [ XSINIL | ABSENT ]
]
| EXPLICIT
[
<CommonDirectives>
[ , XMLDATA ]
]
| PATH [ ( 'ElementName' ) ]
[
<CommonDirectives>
[ , ELEMENTS [ XSINIL | ABSENT ] ]
]
}
<CommonDirectives> ::=
[ , BINARY BASE64 ]
[ , TYPE ]
[ , ROOT [ ( 'RootName' ) ] ]
Argumentos
BROWSE
Especifica que se permiten las actualizaciones mientras se visualizan los datos
en el cursor del modo de exploracin de DB-Library. Una tabla se puede explorar
en una aplicacin si la tabla incluye una columnatimestamp, la tabla tiene un
ndice nico y la opcin FOR BROWSE est al final de las instrucciones SELECT
enviadas a una instancia de SQL Server.
Nota
No se puede utilizar <lock_hint> HOLDLOCK en una instruccin SELECT que incluya la
opcin FOR BROWSE.
FOR BROWSE no puede aparecer en instrucciones SELECT combinadas
mediante el operador UNION.
Nota
Cuando las columnas de clave de ndice nico de una tabla pueden aceptar valores NULL, y la
tabla est en la parte interna de la combinacin externa, el ndice no se admite en el modo de
exploracin.
El modo de exploracin permite examinar las filas de la tabla de SQL Server y
actualizar los datos de la tabla fila por fila. Para tener acceso a una tabla de SQL
Server en una aplicacin en el modo de exploracin, debe utilizar una de las dos
opciones siguientes:
La instruccin SELECT que utiliza para tener acceso a los datos de la
tabla de SQL Server debe finalizar con las palabras clave FOR
BROWSE. Al activar la opcin FOR BROWSE para utilizar el modo de
exploracin, se crean tablas temporales.
Debe ejecutar la instruccin de Transact-SQL siguiente para activar el
modo de exploracin utilizando la opcin NO_BROWSETABLE:
SET NO_BROWSETABLE ON
Al activar la opcin NO_BROWSETABLE, todas las instrucciones SELECT
se comportan como si la opcin FOR BROWSE se anexara a las
instrucciones. Sin embargo, la opcin NO_BROWSETABLE no crea las
tablas temporales que la opcin FOR BROWSE utiliza generalmente
para enviar los resultados a la aplicacin.
Cuando se intenta tener acceso a los datos de las tablas de SQL Server en modo
de exploracin utilizando una consulta SELECT que implica una instruccin de
combinacin externa, y cuando se define un ndice nico en la tabla que est
presente en el lado interno de una instruccin de combinacin externa, el modo
de exploracin no admite el ndice nico. El modo de exploracin nicamente
admite el ndice nico cuando todas las columnas de clave de ndice nico
pueden aceptar valores NULL. El modo de exploracin no admite el ndice nico
si se cumplen las condiciones siguientes:
Intenta tener acceso a los datos de las tablas de SQL Server en modo de
exploracin utilizando una consulta SELECT que implica una instruccin
de combinacin externa.
Un ndice nico se define en la tabla que est presente en el lado interno
de una instruccin de combinacin externa.
Para reproducir este comportamiento en el modo de exploracin, siga estos
pasos:
1. En SQL Server Management Studio, cree una base de datos
denominada SampleDB.
2. En la base de datos SampleDB, cree una tabla tleft y una tabla tright que
contengan ambas una nica columna que se denomine c1. Defina un
ndice nico en la columna c1 de la tabla tleft y establezca la columna
para aceptar valores NULL. Para ello, ejecute las instrucciones de
Transact-SQL siguientes en una ventana de consulta adecuada:
3. CREATE TABLE tleft(c1 INT NULL UNIQUE) ;
4. GO
5. CREATE TABLE tright(c1 INT NULL) ;
6. GO
7. Inserte varios valores en las tablas tleft y tright. Asegrese de insertar un
valor NULL en la tabla tleft.Para ello, ejecute las instrucciones de
Transact-SQL siguientes en la ventana de consulta:
8. INSERT INTO tleft VALUES(2) ;
9. INSERT INTO tleft VALUES(NULL) ;
10.
INSERT INTO tright VALUES(1) ;
11.
INSERT INTO tright VALUES(3) ;
12.
INSERT INTO tright VALUES(NULL) ;
13.
GO
14. Active la opcin NO_BROWSETABLE. Para ello, ejecute las instrucciones
de Transact-SQL siguientes en la ventana de consulta:
15.
SET NO_BROWSETABLE ON ;
16.
GO
17. Obtenga acceso a los datos de las tablas tleft y tright utilizando una
instruccin de combinacin externa en la consulta SELECT. Asegrese de
que la tabla tleft est en el lado interno de la instruccin de combinacin
externa. Para ello, ejecute las instrucciones de Transact-SQL siguientes
en la ventana de consulta:
18.
SELECT tleft.c1
19.
FROM tleft
20.
RIGHT JOIN tright
21.
ON tleft.c1 = tright.c1
22.
WHERE tright.c1 <> 2 ;
Observe la salida siguiente en el panel Resultados:
c1
---NULL
NULL
Despus de ejecutar la consulta SELECT para obtener acceso a las tablas en el
modo de exploracin, el conjunto de resultados de la consulta SELCT contiene
dos valores NULL para la columna c1 de la tabla tleft debido a la definicin de la
instruccin de combinacin externa derecha. Por consiguiente, en el conjunto de
resultados no puede distinguir entre los valores NULL que procedan de la tabla
y los incluidos por la instruccin de combinacin externa derecha. Puede recibir
resultados incorrectos si debe omitir los valores NULL del conjunto de
resultados.
Nota
Si las columnas que estn incluidas en el ndice nico no aceptan valores NULL, todos los
Indica que para los valores de columna NULL, no se agregarn los elementos
XML correspondientes en el resultado XML. Especifique esta opcin solo con
ELEMENTS.
PATH [ ('ElementName') ]
Genera un contenedor del elemento de <row> para cada fila en el conjunto de
resultados. Opcionalmente, especifique un nombre de elemento para el
contenedor del elemento <row>. Si se proporciona una cadena vaca, como FOR
XML PATH ('') , no se genera un elemento contenedor. El uso de PATH puede
proporcionar una alternativa ms sencilla a consultas escritas con la directiva
EXPLICIT. Para obtener ms informacin, veaUsar el modo PATH con FOR XML.
BINARY BASE64
Especifica que la consulta devuelve los datos binarios en el formato codificado
BINARY BASE64. Al recuperar datos binarios mediante el modo RAW y EXPLICIT,
se debe especificar esta opcin. ste es el valor predeterminado en el modo
AUTO.
TYPE
Especifica que la consulta devuelve un resultado de tipo xml. Para obtener ms
informacin, vea Directiva TYPE en consultas FOR XML.
ROOT [ ('RootName') ]
Especifica que se va a agregar un solo elemento de nivel superior al XML
resultante. Opcionalmente puede especificar el nombre del elemento raz que
se va a generar. Si no se especifica el nombre de raz opcional, se agrega el
elemento <root> predeterminado.
Ejemplos
En el siguiente ejemplo se especifica FOR XML AUTO con las
opciones TYPE y XMLSCHEMA. Debido a la opcin TYPE, el conjunto de resultados que
se devuelve al cliente es de tipo xml. La opcin XMLSCHEMA especifica que el
esquema XSD insertado est incluido en los datos XML devueltos y la
opcin ELEMENTS especifica que el resultado XML est centrado en elementos.
USE AdventureWorks2012;
GO
SELECT p.BusinessEntityID, FirstName, LastName, PhoneNumber AS Phone
FROM Person.Person AS p
JOIN Person.PersonPhone AS pph ON p.BusinessEntityID =
pph.BusinessEntityID
WHERE LastName LIKE 'G%'
ORDER BY LastName, FirstName
FOR XML AUTO, TYPE, XMLSCHEMA, ELEMENTS XSINIL;
GROUP BY (Transact-SQL)
Una clusula GROUP BY general incluye los elementos GROUPING SETS, CUBE,
ROLLUP, WITH CUBE o WITH ROLLUP.
Se aplica a: SQL Server (desde SQL Server 2008 hasta la versin actual), Windows Azure SQL
Database (desde la versin inicial hasta la versin actual).
Sintaxis
ISO-Compliant Syntax
GROUP BY <group by spec>
<group by spec> ::=
<group by item> [ ,...n ]
<group by item> ::=
<simple group by item>
|
|
|
|
<rollup spec>
<cube spec>
<grouping sets spec>
<grand total>
Argumentos
< column_expression>
Es la expresin en la que se realiza la operacin de agrupamiento.
ROLLUP ( )
Genera filas de agregado mediante la clusula GROUP BY simple, ms filas de
subtotal o de superagregado, as como una fila de total general.
El nmero de agrupaciones que se devuelve es igual al nmero de expresiones
de la <lista de elementos compuestos> ms uno. Considere, por ejemplo, la
siguiente instruccin:
SELECT a, b, c, SUM ( <expression> )
FROM T
GROUP BY ROLLUP (a,b,c);
Se genera una fila con un subtotal para cada combinacin nica de valores
de (a, b, c), (a, b) y (a).Tambin se calcula una fila de total general.
Las columnas se acumulan de derecha a izquierda. El orden de las columnas
influye en las agrupaciones de salida de ROLLUP y tambin puede afectar al
nmero de filas del conjunto de resultados.
CUBE ( )
Genera filas de agregado mediante la clusula GROUP BY simple, filas de
superagregado mediante la instruccin ROLLUP y filas de tabulacin cruzada.
CUBE genera una agrupacin para todas las permutaciones de expresiones de la
<lista de elementos compuestos>.
El nmero de agrupaciones generado es igual a (2n), donde n es el nmero de
expresiones de la <lista de elementos compuestos>. Considere, por ejemplo, la
siguiente instruccin:
SELECT a, b, c, SUM (<expression>)
FROM T
GROUP BY CUBE (a,b,c);
Se genera una fila para cada combinacin nica de valores de (a, b, c), (a,
b), (a, c), (b, c), (a), (b) y(c), con un subtotal para cada fila y una fila de total
general.
El orden de las columnas no afecta a la salida de CUBE.
GROUPING SETS ( )
Especifica varias agrupaciones de datos en una consulta. Solo se agregan los
grupos especificados, en lugar del conjunto completo de agregaciones generado
por CUBE o ROLLUP. Los resultados son equivalentes a usar la instruccin UNION
ALL en los grupos especificados. GROUPING SETS puede contener un nico
elemento o una lista de elementos. GROUPING SETS puede especificar
agrupaciones equivalentes a las devueltas por ROLLUP o CUBE. La <lista de
elementos de conjunto de agrupacin> puede contener ROLLUP o CUBE.
()
El grupo vaco genera un total.
Nota
Importante
Comentarios
Las expresiones de la clusula GROUP BY pueden contener columnas de las tablas, de
las tablas derivadas o de las vistas de la clusula FROM. No es necesario que
aparezcan las columnas en la lista de <seleccin> de la clusula SELECT.
Deben incluirse en la lista GROUP BY todas las columnas de la tabla o la vista de
cualquier expresin no agregada de la lista de <seleccin>:
No es posible usar GROUP BY con un alias para reemplazar el nombre de una columna
en la clusula AS, a menos que dicho alias sustituya a un nombre de columna en una
tabla derivada de la clusula FROM.
Los conjuntos de agrupacin duplicados de una lista GROUPING SETS no se
eliminan. Los conjuntos de agrupacin duplicados se pueden generar especificando
una expresin de columna ms de una vez o incluyendo una expresin de columna
tambin generada por una instruccin CUBE o ROLLUP en la lista GROUPING SETS.
Cuando se utiliza ROLLUP, CUBE y GROUPING SETS se admiten agregados Distinct,
como AVG (DISTINCTcolumn_name), COUNT (DISTINCT column_name) y SUM
(DISTINCT column_name).
ROLLUP, CUBE y GROUPING SETS no se pueden especificar en una vista indexada.
GROUP BY o HAVING no se pueden usar directamente en columnas
de ntext, text o image. Estas columnas se pueden usar como argumentos en
funciones que devuelven un valor de otro tipo de datos, como SUBSTRING() y CAST().
No se pueden especificar mtodos de tipos de datos xml directamente en
<column_expression>. En su lugar, haga referencia a una funcin definida por el
usuario que incluya mtodos de tipos de datos xml o haga referencia a una columna
calculada que los utilice.
Limitaciones de tamao
En la clusula simple GROUP BY, no hay ningn lmite en cuanto al nmero de
expresiones.
En una clusula GROUP BY que utilice ROLLUP, CUBE o GROUPING SETS, el nmero
mximo de expresiones es 32, y el nmero mximo de conjuntos de agrupacin que se
pueden generar es 4.096 (212). Los ejemplos siguientes producen un error debido a que
la clusula GROUP BY es demasiado compleja:
Caract
erstic
a
SQL Server
2008 o
posterior con
el nivel de
compatibilid
ad 90.
Agrega
dos
DISTI
NCT
Igual que el
nivel de
compatibilida
d 100.
Funci
n
definid
a por el
usuario
con un
nombre
CUBE
o
ROLL
UP en
la
clusul
a
GROU
P BY
Se admite la
funcin
definida por
el
usuariodbo.c
ube
(arg1,...argN)
odbo.rollup(
arg1,...argN)e
n la clusula
GROUP BY
Por ejemplo:
Por ejemplo:
SELECT SUM (x)
FROM T
GROUP BY dbo.cube(y);
Por ejemplo:
SELECT SUM
(x)
FROM T
GROUP BY
dbo.cube(y)
;
GROUP BY [dbo].[cube](y);
GROU
PING
SETS
No compatible
Compatible
Compatible
CUBE
No compatible
Compatible
No
compatible
ROLL
UP
No compatible
Compatible
No
compatible
Total
general
, como
GROU
P BY ()
No compatible
Compatible
Compatible
Funci
n
GROU
PING_
ID
No compatible
Compatible
Compatible
Funci
n
GROU
PING
Compatible
Compatible
Compatible
WITH
CUBE
Compatible
Compatible
Compatible
WITH
ROLL
UP
Compatible
Compatible
Compatible
Elimin
acin
de
grupos
duplica
dos de
WITH
CUBE
o
WITH
ROLL
UP
Compatible
Compatible
Compatible
Ejemplos
A.Utilizar una clusula GROUP BY simple
En el ejemplo siguiente se recupera el total de cada SalesOrderID de la
tabla SalesOrderDetail de la base de datos AdventureWorks2012.
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail AS sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
NTO (clusula de
Transact-SQL)
SQL Server 2014
Otras versiones
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL Database (Versin
inicial a versin actual).
Sintaxis
[ INTO new_table ]
Argumentos
new_table
Especifica el nombre de una nueva tabla que se va a crear en funcin de las
columnas de la lista de seleccin y de las filas elegidas desde el origen de
datos.
El formato de new_table se determina mediante la evaluacin de las
expresiones de la lista de seleccin. Las columnas de new_table se crean en el
orden que especifica la lista de seleccin. Cada columna de new_tabletiene el
mismo nombre, tipo de datos, nulabilidad y valor que la expresin
correspondiente de la lista de seleccin. La propiedad IDENTITY de una columna
se transfiere excepto bajo las condiciones definidas en "Trabajar con columnas
de identidad" en la seccin Comentarios.
Para crear la tabla en otra base de datos en la misma instancia de SQL Server,
especifique new_table como un nombre completo con
formato database.schema.table_name.
No puede crear new_table en un servidor remoto; sin embargo, puede
rellenar new_table desde un origen de datos remoto. Para crear new_table a
partir de una tabla de origen remota, especifique la tabla de origen utilizando
un nombre con cuatro partes con el
formato linked_server.catalog.schema.object en la clusula FROM de la
instruccin SELECT. Tambin puede utilizar la funcin OPENQUERY o la
funcin OPENDATASOURCE en la clusula FROM para especificar el origen de
datos remoto.
Tipos de datos
El atributo FILESTREAM no transfiere a la nueva tabla. Los BLOB FILESTREAM se copian
y se almacenan en la nueva tabla como BLOB varbinary(max). Sin el atributo
FILESTREAM, el tipo de datos varbinary(max) tiene una limitacin de 2 GB. Si un
FILESTREAM BLOB supera este valor, se produce el error 7119 y se detiene la
instruccin.
Cuando se selecciona una columna de identidad existente en una nueva tabla, la nueva
columna hereda la propiedad IDENTITY, a menos que se cumpla una de las siguientes
condiciones:
Si se cumple alguna de estas condiciones, la columna se crea como NOT NULL en lugar
de heredar la propiedad IDENTITY. Si una columna de identidad se requiere en la nueva
tabla pero este tipo de columna no est disponible o desea un valor de inicializacin o
de incremento diferente de la columna de identidad de origen, defina la columna en la
lista de seleccin utilizando la funcin IDENTITY. Vea "Crear una columna de identidad
utilizando la funcin IDENTITY" en la seccin Ejemplos siguiente.
Limitaciones y restricciones
No puede especificar una variable de tabla o parmetro con valores de tabla como la
nueva tabla.
No puede utilizar SELECTINTO para crear una tabla con particiones, incluso si la
particin se realiza sobre la tabla de origen. SELECT...INTO no usa el esquema de
particin de la tabla de origen; en su lugar, la nueva tabla se crea en el grupo de
archivos predeterminado. Para insertar filas en una tabla con particiones, primero debe
crearse la tabla con particiones y, a continuacin, utilizar la instruccin INSERT
INTO...SELECT FROM.
Los ndices, restricciones y desencadenadores definidos en la tabla de origen no se
transfieren a la nueva tabla, ni se pueden especificar en la instruccin SELECT...INTO. Si
se requieren estos objetos, puede crearlos despus de ejecutar la instruccin
SELECT...INTO.
Especificar una clusula ORDER BY no garantiza que las filas se inserten en el orden
especificado.
Cuando se incluye una columna dispersa en la lista de seleccin, la propiedad de la
columna dispersa no se transfiere a la columna de la nueva tabla. Si esta propiedad es
necesaria en la nueva tabla, modifique la definicin de columna despus de ejecutar la
instruccin SELECT...INTO para que incluya esta propiedad.
Cuando se incluye una columna calculada en la lista de seleccin, la columna
correspondiente de la nueva tabla no es una columna calculada. Los valores de la
nueva columna son los que se calcularon en el momento en que se ejecut
SELECT...INTO.
Permissions
Requiere el permiso CREATE TABLE en la base de datos de destino.
Ejemplos
A.Crear una tabla especificando columnas de varios orgenes
En el ejemplo siguiente se crea la tabla dbo.EmployeeAddresses en la base de datos
AdventureWorks2012 seleccionando siete columnas de varias tablas relacionadas con
empleados y direcciones.
SELECT c.FirstName, c.LastName, e.JobTitle, a.AddressLine1, a.City,
sp.Name AS [State/Province], a.PostalCode
INTO dbo.EmployeeAddresses
FROM Person.Person AS c
JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = c.BusinessEntityID
JOIN Person.BusinessEntityAddress AS bea
ON e.BusinessEntityID = bea.BusinessEntityID
JOIN Person.Address AS a
ON bea.AddressID = a.AddressID
JOIN Person.StateProvince as sp
ON sp.StateProvinceID = a.StateProvinceID;
GO
ORDER BY (clusula de
Transact-SQL)
SQL Server 2014
Otras versiones
Ordenar los datos devueltos por una consulta en SQL Server. Use esta clusula para:
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL Database (Versin
inicial a versin actual).
Sintaxis
Transact-SQL
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ ,...n ]
[ <offset_fetch> ]
<offset_fetch> ::=
{
OFFSET { integer_constant | offset_row_count_expression } { ROW |
ROWS }
[
FETCH { FIRST | NEXT } {integer_constant |
fetch_row_count_expression } { ROW | ROWS } ONLY
]
}
Argumentos
order_by_expression
Especifica una columna o expresin segn la que se ordenar el conjunto de
resultados de la consulta. Una columna de ordenacin se puede especificar
como un nombre o un alias de columna, o un entero no negativo que representa
la posicin de la columna en la lista de seleccin.
Es posible especificar varias columnas de ordenacin. Los nombres de columna
tienen que ser nicos. La secuencia de las columnas de ordenacin de la
clusula ORDER BY define la organizacin del conjunto de resultados
ordenado. Es decir, el conjunto de resultados se ordena conforme a la primera
columna y, a continuacin, esa lista ordenada se ordena segn la segunda
columna, y as sucesivamente.
Los nombres de columna a los que se hace referencia en la clusula ORDER BY
deben corresponderse con una columna de la lista de seleccin o con una
columna definida en la tabla especificada en la clusula FROM sin
ambigedades.
COLLATE collation_name
Se aplica a: SQL Server 2012 a SQL Server 2014 y Windows Azure SQL Database.
Se aplica a: SQL Server 2012 a SQL Server 2014 y Windows Azure SQL Database.
Prcticas recomendadas
Evite especificar enteros en la clusula ORDER BY como representaciones posicionales
de las columnas en la lista de seleccin. Por ejemplo, aunque una instruccin
como SELECT ProductID, Name FROM Production.Production ORDER BY 2 es vlida,
otros usuarios no la entendern tan bien como si especificase el nombre de la columna
real.Adems, para realizar cambios en la lista de seleccin, como modificar el orden de
las columnas o agregar otras nuevas, ser preciso modificar la clusula ORDER BY a fin
de evitar resultados inesperados.
En una instruccin SELECT TOP (N), utilice siempre una clusula ORDER BY. Esta es la
nica manera de indicar previsiblemente a qu filas afecta TOP. Para obtener ms
informacin, vea TOP (Transact-SQL).
Interoperabilidad
Cuando se utiliza con una instruccin SELECT...INTO para insertar filas de otro origen, la
clusula ORDER BY no garantiza la insercin de las filas en el orden especificado.
Al usar OFFSET y FETCH en una vista no se cambia la propiedad Updateability de la
vista.
Limitaciones y restricciones
No hay ningn lmite en cuanto al nmero de columnas de la clusula ORDER BY; sin
embargo, el tamao total de las columnas especificadas en una clusula ORDER BY no
puede superar los 8.060 bytes.
Las columnas de tipo ntext, text, image, geography, geometry y xml no se pueden
usar en una clusula ORDER BY.
No puede especificarse un entero o una constante cuando en una funcin de categora
aparece order_by_expression .Para obtener ms informacin, vea OVER (clusula de
Transact-SQL).
Si los nombres de tabla estn asociados a un alias en la clusula FROM, solo pueden
usarse los nombres de alias para calificar sus columnas en la clusula ORDER BY.
Los nombres y alias de columna especificados en la clusula ORDER BY deben estar
definidos en la lista de seleccin si la instruccin SELECT contiene uno de los
operadores o clusulas siguientes:
UNION, operador
EXCEPT, operador
INTERSECT, operador
SELECT DISTINCT
OFFSET y FETCH se pueden utilizar en cualquier consulta que permita TOP y ORDER BY
con las siguientes limitaciones:
En una consulta que utiliza los operadores UNION, EXCEPT o INTERSECT, OFFSET
y FETCH nicamente se pueden utilizar en la consulta final que especifica el
orden de los resultados de la consulta.
Vea el ejemplo que "Ejecutar varias consultas en una sola transaccin" en la seccin
Ejemplos que aparece ms adelante en este tema.
Si el hecho de que los planes de ejecucin sean coherentes es importante para su
solucin de paginacin, puede ser conveniente utilizar la sugerencia de consulta
OPTIMIZE FOR para los parmetros de OFFSET y FETCH. Vea "Especificar expresiones
para valores de OFFSET y FETCH" en la seccin Ejemplos que aparece ms adelante en
este tema. Para obtener ms informacin acerca de OPTIMIZE FOR, vea Sugerencias de
consulta (Transact-SQL).
Ejemplos
Categora
Sintaxis bsica
ORDER BY
DESC ASC
COLLATE
CASE, expresin
Funciones de categora
OFFSET FETCH
UNION
Sintaxis bsica
En los ejemplos de esta seccin se muestra la funcionalidad bsica de la clusula
ORDER BY utilizando la sintaxis mnima requerida.
GO
CREATE TABLE #t1 (name nvarchar(15) COLLATE Latin1_General_CI_AI)
GO
INSERT INTO #t1 VALUES(N'Snchez'),(N'Sanchez'),(N'snchez'),
(N'sanchez');
-- This query uses the collation specified for the column 'name' for
sorting.
SELECT name
FROM #t1
ORDER BY name;
-- This query uses the collation specified in the ORDER BY clause for
sorting.
SELECT name
FROM #t1
ORDER BY name COLLATE Latin1_General_CS_AS;
Se aplica a: SQL Server 2012 a SQL Server 2014 y Windows Azure SQL Database.
A.Especificar constantes enteras para los valores de OFFSET y FETCH
En el siguiente ejemplo se especifica una constante entera como valor para las
clusulas OFFSET y FETCH. La primera consulta devuelve todas las filas ordenadas
segn la columna DepartmentID. Compare los resultados devueltos por esta consulta
con los de las dos consultas siguientes. La consulta siguiente utiliza la clusula OFFSET
5 ROWS para omitir las primeras 5 filas y devolver todas las restantes. La ltima
consulta utiliza la clusula OFFSET 0 ROWS para comenzar por la primera fila y, a
continuacin, utiliza FETCH NEXT 10 ROWS ONLY para limitar las filas devueltas a 10
filas del conjunto de resultados ordenado.
USE AdventureWorks2012;
GO
-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;
-- Skip the first 5 rows from the sorted result set and return all
remaining rows.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;
-- Skip 0 rows and return only the first 10 rows from the sorted result
set.
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID
OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;
GO
CREATE TABLE dbo.AppSettings (AppSettingID int NOT NULL, PageSize int NOT
NULL);
GO
INSERT INTO dbo.AppSettings VALUES(1, 10);
GO
DECLARE @StartingRowNumber tinyint = 1;
SELECT DepartmentID, Name, GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC
OFFSET @StartingRowNumber ROWS
FETCH NEXT (SELECT PageSize FROM dbo.AppSettings WHERE AppSettingID =
1) ROWS ONLY;
OVER (clusula de
Transact-SQL)
SQL Server 2014
Otras versiones
Funciones de categora
Funciones de agregado
Funciones analticas
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL Database (Versin
inicial a versin actual).
Sintaxis
OVER (
[ <PARTITION BY clause> ]
[ <ORDER BY clause> ]
[ <ROW or RANGE clause> ]
)
<PARTITION BY clause> ::=
PARTITION BY value_expression , ... [ n ]
<ORDER BY clause> ::=
ORDER BY order_by_expression
[ COLLATE collation_name ]
[ ASC | DESC ]
[ ,...n ]
Argumentos
PARTITION BY
Divide el conjunto de resultados de la consulta en particiones. La funcin se
aplica a cada particin por separado y el clculo se reinicia para cada particin.
value_expression
Especifica la columna a partir de la cual se particiona el conjunto de
filas. value_expression solo puede hacer referencia a columnas disponibles a
travs de la clusula FROM. value_expression no puede hacer referencia a
expresiones ni a alias de la lista de seleccin. value_expression puede ser una
expresin de columna, una subconsulta escalar, una funcin escalar o una
variable definida por el usuario.
tienen los mismos valores en la expresin ORDER BY que la fila actual. Por
ejemplo, ROWS BETWEEN 2 PRECEDING AND CURRENT ROW indica que la
ventana de filas en la que opera la funcin tiene un tamao de tres filas, con
dos filas delante hasta e inclusive la fila actual.
Nota
Se utiliza con ROWS o RANGE para especificar los puntos de lmite inferior
(inicio) y superior (final) de la ventana. <lmite del marco de ventana> define el
punto inicial del lmite y <lmite del marco de ventana> define el punto final. El
lmite superior no puede ser menor que el lmite inferior.
UNBOUNDED FOLLOWING
Comentarios generales
Se pueden utilizar varias funciones de ventana en una sola consulta con una nica
clusula FROM. La clusula OVER de cada funcin puede diferir en particiones y
tambin en orden.
Si no se especifica PARTITION BY, la funcin trata todas las filas del conjunto de
resultados de la consulta como un nico grupo.
Si no se especifica ORDER BY, se utiliza la particin completa para el marco de
ventana. Esto se aplica nicamente a las funciones que no requieren la clusula ORDER
BY. Si no se especifica ROWS/RANGE pero s ORDER BY, RANGE UNBOUNDED
PRECEDING AND CURRENT ROW se utiliza como valor predeterminado para el marco de
ventana. Esto se aplica solamente a las funciones que pueden aceptar la especificacin
opcional de ROWS/RANGE. Por ejemplo, las funciones de clasificacin no pueden
aceptar ROWS/RANGE; por lo tanto, este marco de ventana no se aplica aunque se
especifique ORDER BY y no se especifique ROWS/RANGE.
Si se especifica ROWS/RANGE y se usa <marco de ventana precedente> para
<extensin de marco de ventana> (sintaxis abreviada), esta especificacin se usa para
el punto inicial del lmite del marco de ventana y CURRENT ROW se usa para el punto
final. Por ejemplo, ROWS 5 PRECEDING es igual a ROWS BETWEEN 5 PRECEDING
AND CURRENT ROW.
Limitaciones y restricciones
No se puede utilizar la clusula OVER con la funcin de agregado CHECKSUM.
No se puede utilizar RANGE con <especificacin de valor sin signo> PRECEDING o
<especificacin de valor sin signo> FOLLOWING.
Dependiendo de la funcin de clasificacin, de agregado o analtica utilizada con la
clusula OVER, puede que no se admitan la <clusula ORDER BY> o la <clusula
ROWS y RANGE>.
Ejemplos
A.Utilizar la clusula OVER con la funcin ROW_NUMBER
En el ejemplo siguiente se muestra cmo usar la clusula OVER con la funcin
ROW_NUMBER para mostrar un nmero de fila para cada fila de una particin. La
clusula ORDER BY especificada en la clusula OVER ordena las filas de cada particin
por la columna SalesYTD. La clusula ORDER BY en la instruccin SELECT determina el
orden en que se devuelve el conjunto completo de resultados de la consulta.
USE AdventureWorks2012;
GO
LastName
SalesYTD
PostalCode
Mitchell
4251368.5497
98027
Blythe
3763178.1787
98027
Carson
3189418.3662
98027
Reiter
Vargas
Ansman-Wolfe
Pak
Varkey Chudukatil
Saraiva
Ito
Valdez
Mensa-Annan
Campbell
Tsoflias
2315185.611
98027
1453719.4653
98027
1352577.1325
98027
4116871.2277
98055
3121616.3202
2604540.7172
2458535.6169
1827066.7118
1576562.1966
1573012.9383
1421810.9242
98055
98055
98055
98055
98055
98055
98055
OrderQty Total
Avg
Count
Min
26
12
26
12
26
12
26
12
26
12
26
12
26
12
26
12
26
12
26
12
26
12
26
12
43664
4
43664
4
43664
4
43664
4
43664
4
43664
4
43664
4
43664
4
772
14
775
14
714
14
716
14
777
14
771
14
773
14
778
14
Percent by ProductID
3.85
11.54
3.85
3.85
3.85
7.69
3.85
11.54
3.85
23.08
7.69
15.38
43664
43664
43664
43664
43664
43664
43664
43664
772
775
714
716
777
771
773
778
1
4
1
1
2
3
1
1
14
14
14
14
14
14
14
14
7.14
28.57
7.14
7.14
14.29
21.4
7.14
7.14
287
1,079,603.50
285
1,252,127.95
283
1,462,795.04
280
1,462,795.04
284
1,500,717.42
275
3,763,178.18
277
3,189,418.37
276
3,354,952.08
281
3,354,952.08
NULL
2006
519,905.93
539,801.75
NULL
2007
172,524.45
417,375.98
1
1
1
2
3
4
4
2005
2,925,590.07
2005
2,925,590.07
2006
4,502,152.27
2005
3,763,178.18
2005
3,189,418.37
2005
6,709,904.17
2005
6,709,904.17
1,573,012.94
1,352,577.13
1,576,562.20
3,763,178.18
3,189,418.37
4,251,368.55
2,458,535.62
275
2
2005
2,449,684.05
17,147,788.35
276
4
2005
2,449,684.05
17,147,788.35
277
3
2005
2,449,684.05
17,147,788.35
280
1
2005
2,449,684.05
17,147,788.35
281
4
2005
2,449,684.05
17,147,788.35
283
1
2005
2,449,684.05
17,147,788.35
284
1
2006
2,138,250.72
19,244,256.47
287
NULL
2006
2,138,250.72
19,244,256.47
285
NULL
2007
1,941,678.09
19,416,780.93
(10 row(s) affected)
3,763,178.18
4,251,368.55
3,189,418.37
1,352,577.13
2,458,535.62
1,573,012.94
1,576,562.20
519,905.93
172,524.45
En el ejemplo siguiente se utiliza la clusula ROWS para definir una ventana de cuyas
filas se calcula la fila actual y el nmero N de filas incluidas a continuacin (1 fila en
este ejemplo).
SELECT BusinessEntityID, TerritoryID
,CONVERT(varchar(20),SalesYTD,1) AS SalesYTD
,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(varchar(20),SUM(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY
DATEPART(yy,ModifiedDate)
ROWS BETWEEN CURRENT ROW AND
1 FOLLOWING ),1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5;
El conjunto de resultados es el siguiente.
BusinessEntityID TerritoryID SalesYTD
SalesYear
CumulativeTotal
---------------- ----------- -------------------- -----------------------------274
NULL
559,697.56
2005
1,079,603.50
287
285
283
2,925,590.07
280
2,929,139.33
284
1,576,562.20
275
3,763,178.18
277
3,189,418.37
276
6,709,904.17
281
2,458,535.62
NULL
NULL
1
519,905.93
172,524.45
1,573,012.94
2006
2007
2005
1,352,577.13
2005
1,576,562.20
2006
3,763,178.18
2005
3,189,418.37
2005
4,251,368.55
2005
2,458,535.62
2005
692,430.38
172,524.45
SalesYTD
SalesYear
-------------------- ----------559,697.56
519,905.93
2005
2006
172,524.45
2007
1,573,012.94
2005
1,352,577.13
2005
1,576,562.20
2006
559,697.56
275
3,763,178.18
277
3,189,418.37
276
4,251,368.55
281
6,709,904.17
3,763,178.18
2005
3,189,418.37
2005
4,251,368.55
2005
2,458,535.62
2005
Sintaxis de SQL
Tablas
Una base de datos contienen uno o mas tablas. Cada tabla esta identificada por un
nombre (ejemplo Clientes o Ordenes). Las tablas contienen registros (filas) con datos
Sentencias SQL
El punto y como es un estandar que se para cada sentencia SQL en sistemas de bases
de datos que habilitan mas de una sentencia SQL ejecutada en la misma llamada al
servidor
SQL DML Y DLL
SQL puede ser dividido en dos partes: El Lenguaje de Manipulacion de Datos (DML) y el
Lenguaje de Definicion de Datos (DDL)
DLL del SQL que permite a bases de datos y tablas ser creadas o borradas.
Tambien define indices(llaves). especifica enlaces entre tablas, y impone relaciones
entre tablas.
La parte DLL del SQL, las sentencias mas importante DDL en SQL son:
CREATE DATABASE - crea una nueva base de datos
ALTER DATABASE - modifica una base de datos
CREATE TABLE - crea una nueva tabla
ALTER TABLE - modifica una tabla
DROP TABLE - borra una tabla
CREATE INDEX - crea un indice (llave de busqueda)
DROP INDEX - borra un indice
La sentencia SELECT
La sentencia SELECT es usada para seleccionar datos de una base de datos.
Ejemplo 1
SELECT nombre_columna(s)
FROM nombre_tabla
SELECT Nombre,Apellidos,Ciudad
FROM Personas
Ejemplo 2
Dentro de una tabla, algunas columnas pueden contener valores duplicados. Esto no es
un problema, algunas veces tu querras listar solo los valores diferentes (distintos) en la
tabla
La palabra DISTINCT puede ser usada como llave para regresar solo los valores
distintos(diferentes).
Sintaxis SQL SELECT DISTINCT
SELECT DISTINCT nombre_columna(s)
FROM nombre_table
Ejemplo:
SELECT DISTINCT Apellidos
FROM Personas
Abajo esta el resultado de la sentencia DISTINCT a la tabla "Personas":
SQL WHERE
La sentencia where es usada para extraer solo los registros que cumplen con el criterio
especificad
La Sintaxis SQL WHERE
SELECT nombre_columna(s)
FROM nombre_tabla
WHERE nombre_columna operador valor
Ejemplo de la sentecia WHERE
SELECT *
FROM Personas
WHERE Apellidos ='Trejo Lemus'
FROM Personas
WHERE Nombre=Lucero
Para valores numericos:
Esta es la forma correcta:
SELECT *
FROM Personas
WHERE P_id = 9
Esta es la forma incorrecta:
SELECT *
FROM Personas
WHERE P_id = '9'
Para seleccionar solo las personas con el Nombre igual a Marcel Abisag y el apellido
igual a Sobrevilla Trejo,
Usaremos la siguiente sentencia SELECT:
SELECT * FROM Personas
WHERE Nombre='Marcel Abisag'
AND Apellidos='Sobrevilla Trejo'
El resultado seria:
Operador OR
Ahora seleccionaremos las personas con el campo Nombre igual a "Martha" o el campo
Nombre igual a "Elvira"
Usaremos la siguiente sentencia SELECT
SELECT * FROM Personas
WHERE Nombre='Martha Beatriz'
OR Nombre='Juana Elvira'
El resultado sera el siguiente:
SQL ORDER BY
The ORDER BY keyword is used to sort the result-set.
La sentencia ORDER BY es usada para ordenar un resultado ordenado por una columna
especifica
La sentencia ORDER BY es usada para ordenar los registros en orden ascendente por
default
Si quieres ordenar los registros en orden descendente utiliza la palabra DESC
Sintaxis SQL ORDER BY
SELECT nombre_columna(s)
FROM nombre_tabla
ORDER BY nombre_column(s) ASCDESC
Ahora vamos a seleccionar todas las personas de la tabla, pero mostrando en orden por
el campo Nombre
Usaremos la siguiente sentencia SELECT:
ORDER BY DESC
Ahora vamos a seleccionar a todas las personas de la tabla pero mostrandolas en un
orden descendente por el campo Nombre con la palabra DESC
We use the following SELECT statement:
SELECT * FROM Personas
ORDER BY Nombre DESC
El resultado sera el siguiente:
La segunda forma especifica los nombres de las columnas y los valores insertados
INSERT INTO nombre_tabla (columna1, columna2, columna3,...)
VALUES (valor1, valor2, valor3,...)
Ejemplo INSERT INTO
Dado que tenemos la siguiente tabla Personas:
Ahora vamos a borrar la persona "Marco Antonio Trejo Lemus" en la tabla Personas con
la siguiente sentencia:
DELETE FROM Personas
WHERE Nombre='Marco Antonio' AND Apellidos='Trejo Lemus'
SELECT * FROM Personas
El resultado sera el siguiente:
APENDICE 1
El siguiente codigo creara la base de datos en el servidor SQL EXPRESS
1.- Hacer clic en Inicio --> Todos los Programas --> Microsoft SQL SERVER 2008 --> SQL
3.- Hacer clic Nueva Consulta (se encuentra en el margen superior izquierdo)
USE master
if exists (select * from sysdatabases where name='empresa')
begin
raiserror('La base de datos existe; eliminndola....',0,1)
DROP database empresa
end
GO
raiserror('Creando base de datos empresa....',0,1)
go
CREATE DATABASE empresa
GO
USE empresa
GO
CREATE TABLE Personas(
P_id int PRIMARY KEY IDENTITY,
Nombre nchar(20) NOT NULL,
Apellidos nchar(30) NOT NULL,
Direccion nchar(40) NOT NULL,
Ciudad nchar(10) NOT NULL)
GO
GO
INSERT INTO Personas VALUES ('Marco Antonio','Trejo Lemus','Calle E
822','Tampico')INSERT INTO Personas VALUES ('Martha Beatriz','Trejo Lemus','Calle E
822','Tampico')INSERT INTO Personas VALUES ('Juana Elvira','Trejo Lemus','Calle E
822','Tampico')
INSERT INTO Personas VALUES ('Nora Zulma','Trejo Lemus','Calle E 822','Tampico')
INSERT INTO Personas VALUES ('Laura Lucero','Sobrevilla Trejo','Calle E
822','Tampico')INSERT INTO Personas VALUES ('Maria de la luz','Trejo Campos','Calle E
822','Tampico')INSERT INTO Personas VALUES ('Trinidad','Trejo Bautista','Calle E
822','Tampico')
INSERT INTO Personas VALUES ('Marcel Abisag','Sobrevilla Trejo','Calle E
822','Tampico')INSERT INTO Personas VALUES ('Jose Abraham','Sobrevilla Trejo','Calle E
822','Tampico')INSERT INTO Personas VALUES ('Samuel Salomon','Olmeda Trejo','Calle E
822','Tampico')
GO
select * from Personas
quit
______________________________________________________
5.- Ejecutar el codigo SQL haciendo clic sobre la opcion !Ejecutar que se muestra a
continuacion:
FROM nombre_tabla
Ahora seleccionaremos solo los dos primeros registros de la tabla que se muestra
abajo:
El operador LIKE se usa en una sentencia WHERE para buscar un patron en una
columna
Sintaxis LIKE
SELECT nombre_columna(s)
FROM nombre_tabla
WHERE nombre_columna LIKE patron
Ahora vamos a seleccionar las personas que viven en la ciudad que comienza con una
"T" de la tabla personas
Usaremos la siguiente sentencia SELECT:
SELECT * FROM Personas
WHERE Ciudad LIKE '%T'
El resultado seria el siguiente:
Ahora vamos a seleccionar las personas que viven en la ciudad que contiene el patron
"tam" de la tabla personas
Usaremos la siguiente sentencia SELECT:
SELECT * FROM Personas
WHERE Ciudad LIKE '%tam%'
Tambien es posible seleccionar las personas que viven en la ciudad que no contienen el
patron "tamp" de la tabla personas, usando la palabra clave NOT
Usaremos la siguiente sentencia SELECT:
SELECT * FROM Personas
WHERE Ciudad NOT LIKE '%tamp%'
El resultado seria el siguiente:
Comodines SQL
Los comodines SQL pueden ser usados en la busqueda de datos en una base de datos
pueden sustituir a uno o mas caracteres cuando se busquen los datos
Los comodines deben usarse con el operador LIKE
Se pueden usar con SQL los siguientes comodines:
Usando el comodn %
Ahora seleccionaremos las personas que viven en la ciudad de Tampico que empiecen
con "Ta" de la tabla Personas
Usando el _ Comodn
Ahora selectionaremos las personas que el primer nombre comience con algun caracter
seguido de "Ma" de la tabla Personas
Usaremos la siguiente sentencia SELECT:
SELECT * FROM Personas
WHERE Nombre LIKE '_ar'