Está en la página 1de 38

SOME | ANY (Transact-SQL)

SQL Server 2014


Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema
Compara un valor escalar con un conjunto de valores de una sola columna. SOME y ANY
son equivalentes.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
scalar_expression { = | < > | ! = | > | > = | ! > | < | < = | ! < }
{ SOME | ANY } ( subquery )
Argumentos
scalar_expression
Es cualquier expresin vlida.
{ = | <> | != | > | >= | !> | < | <= | !< }
Es cualquier operador de comparacin vlido.
SOME | ANY
Especifica que se debe realizar una comparacin.
subquery
Es una subconsulta con un conjunto de resultados de una columna. El tipo de datos
de la columna devuelta debe ser el mismo que el de scalar_expression.
Tipos de resultado
Boolean
Valor del resultado
SOME o ANY devuelven TRUE cuando la comparacin especificada es TRUE para
cualquier par (scalar_expression,x), donde x es un valor del conjunto de una sola columna;
de lo contrario, devuelve FALSE.
Comentarios
SOME requiere que la scalar_expression se compare de forma positiva con al menos un
valor devuelto por la subconsulta. Para instrucciones que requieren que scalar_expression
se compare de forma positiva con cada valor devuelto por la subconsulta, vea ALL
(Transact-SQL). Por ejemplo, si la subconsulta devuelve los valores 2 y 3,
scalar_expression = SOME (subconsulta) evaluara como TRUE para scalar_express de 2.
Si la subconsulta devuelve los valores 2 y 3, scalar_expression = ALL (subconsulta) se
evaluara como FALSE, porque algunos de los valores de la subconsulta (el valor 3) no
cumplira los criterios de la expresin.
Ejemplos
A.Ejecutar un ejemplo sencillo
Las instrucciones siguientes crean una tabla simple y agregan los valores 1, 2, 3 y 4 a la
columna de ID.
CREATE TABLE T1
(ID int) ;
GO
INSERT T1 VALUES (1) ;
INSERT T1 VALUES (2) ;
INSERT T1 VALUES (3) ;
INSERT T1 VALUES (4) ;
La consulta siguiente devuelve TRUE porque 3 es menor que alguno de los valores de la
tabla.
IF 3 < SOME (SELECT ID FROM T1)
PRINT 'TRUE'
ELSE
PRINT 'FALSE' ;
La consulta siguiente devuelve FALSE porque 3 no es menor que todos los valores de la
tabla.
IF 3 < ALL (SELECT ID FROM T1)
PRINT 'TRUE'
ELSE
PRINT 'FALSE' ;
B.Ejecutar un ejemplo prctico
En el ejemplo siguiente se crea un procedimiento almacenado que determina si todos los
componentes de un SalesOrderID especificado en la base de datos AdventureWorks2012 se
pueden fabricar en el nmero de das especificado. En el ejemplo se usa una subconsulta
para crear una lista de valores de DaysToManufacture para todos los componentes del
SalesOrderID especificado y, a continuacin, se comprueba si alguno de los valores
devueltos por la subconsulta es mayor que el nmero de das especificado. Si cada valor de
DaysToManufacture que se devuelve es menor que el nmero proporcionado, la condicin
es TRUE y se imprime el primer mensaje.
USE AdventureWorks2012 ;
GO

CREATE PROCEDURE ManyDaysToComplete @OrderID int, @NumberOfDays int
AS
IF
@NumberOfDays < SOME
(
SELECT DaysToManufacture
FROM Sales.SalesOrderDetail
JOIN Production.Product
ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID
WHERE SalesOrderID = @OrderID
)
PRINT 'At least one item for this order cannot be manufactured in
specified number of days.'
ELSE
PRINT 'All items for this order can be manufactured in the specified
number of days or less.' ;
Para probar el procedimiento, ejectelo utilizando SalesOrderID49080, que tiene un
componente que requiere 2 das y dos componentes que requieren 0 das. La primera
instruccin cumple los criterios. La segunda consulta no los cumple.
EXECUTE ManyDaysToComplete 49080, 2 ;
El conjunto de resultados es el siguiente.
All items for this order can be manufactured in the specified number of days or less.
EXECUTE ManyDaysToComplete 49080, 1 ;
El conjunto de resultados es el siguiente.
At least one item for this order cannot be manufactured in specified number of days.



BETWEEN (Transact-SQL)
SQL Server 2014
Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema
Especifica un intervalo que se va a probar.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Argumentos
test_expression
Es la expresin que se va a probar en el rango definido por begin_expressiony
end_expression. test_expression debe tener el mismo tipo de datos que
begin_expression y end_expression.
NOT
Especifica que se niega el resultado del predicado.
begin_expression
Cualquier expresin vlida. begin_expression debe tener el mismo tipo de datos que
test_expression y end_expression.
end_expression
Cualquier expresin vlida. end_expression debe tener el mismo tipo de datos que
test_expressiony begin_expression.
AND
Acta como un marcador de posicin que indica que test_expression debe estar
dentro del intervalo indicado por begin_expression y end_expression.
Tipos de resultado
Boolean
Valor del resultado
BETWEEN devuelve TRUE si el valor de test_expression es mayor o igual que el valor de
begin_expression y menor o igual que el valor de end_expression.
NOT BETWEEN devuelve TRUE si el valor de test_expression es o bien menor que el
valor de begin_expression o sino mayor que el valor de end_expression.
Comentarios
Para especificar un intervalo exclusivo, utilice los operadores mayor que (>) y menor que
(<). Si alguna entrada del predicado BETWEEN o NOT BETWEEN es NULL, el resultado
es UNKNOWN.
Ejemplos
A.Utilizar BETWEEN
En el siguiente ejemplo se devuelven los empleados de Adventure Works Cycles cuya
tarifa por hora se encuentra entre 27 y 30.
USE AdventureWorks2012;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate BETWEEN 27 AND 30
ORDER BY ep.Rate;
GO
El conjunto de resultados es el siguiente.
FirstName LastName Rate
----------- ------------------ ------------------
Paula Barreto de Mattos 27.1394
Karen Berg 27.4038
Ramesh Meyyappan 27.4038
Dan Bacon 27.4038
Janaina Bueno 27.4038
David Bradley 28.7500
Hazem Abolrous 28.8462
Ovidiu Cracium 28.8462
Rob Walters 29.8462
Sheela Word 30.0000
(10 row(s) affected)
B.Utilizar > y < en lugar de BETWEEN
En el siguiente ejemplo se utilizan los operadores mayor que (>) y menor que (<) y, puesto
que dichos operadores no son inclusivos, se devuelven nueve filas en lugar de las diez
devueltas en el ejemplo anterior.
USE AdventureWorks2012;
GO

SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate > 27 AND ep.Rate < 30
ORDER BY ep.Rate;
GO
El conjunto de resultados es el siguiente.
FirstName LastName Rate
--------- ------------------- ---------
Paula Barreto de Mattos 27.1394
Janaina Bueno 27.4038
Dan Bacon 27.4038
Ramesh Meyyappan 27.4038
Karen Berg 27.4038
David Bradley 28.7500
Hazem Abolrous 28.8462
Ovidiu Cracium 28.8462
Rob Walters 29.8462
(9 row(s) affected)
C.Utilizar NOT BETWEEN
En el siguiente ejemplo se buscan todas las filas que no estn incluidas en un intervalo
especificado de 27 a 30.
USE AdventureWorks2012;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate NOT BETWEEN 27 AND 30
ORDER BY ep.Rate;
GO
D.Utilizar BETWEEN con valores datetime
En el siguiente ejemplo se recuperan filas en las que los valores datetime estn entre
'20011212' y '20020105', ambos incluidos.
USE AdventureWorks2012;
GO
SELECT BusinessEntityID, RateChangeDate
FROM HumanResources.EmployeePayHistory
WHERE RateChangeDate BETWEEN '20011212' AND '20020105';
El conjunto de resultados es el siguiente.
BusinessEntityID RateChangeDate
----------- -----------------------
3 2001-12-12 00:00:00.000
4 2002-01-05 00:00:00.000
La consulta recupera las filas previstas porque los valores de fecha de la consulta y los
valores de datetime almacenados en la columna RateChangeDate se han especificado sin la
parte de hora de la fecha. Si no se especifica la parte de hora, toma el valor predeterminado
12:00 a.m. Tenga en cuenta que esta consulta no devolver una fila que contenga una parte
de hora posterior a 12:00 a.m. del 05-01-2002, ya que est fuera del rango.


EXISTS (Transact-SQL)
SQL Server 2014
Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema
Especifica una subconsulta para probar la existencia de filas.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
EXISTS subquery
Argumentos
subquery
Es una instruccin SELECT restringida. No se permite la palabra clave INTO. Para
obtener ms informacin, vea la informacin acerca de las subconsultas que aparece
en SELECT (Transact-SQL).
Tipos de resultado
Boolean
Valores de resultado
Devuelve TRUE si una subconsulta contiene filas.
Ejemplos
A.Utilizar NULL en una subconsulta para seguir devolviendo un conjunto
de resultados
En el ejemplo siguiente se devuelve un conjunto de resultados con NULL especificado en
la subconsulta, que se sigue evaluando como TRUE al utilizar EXISTS.
USE AdventureWorks2012 ;
GO
SELECT DepartmentID, Name
FROM HumanResources.Department
WHERE EXISTS (SELECT NULL)
ORDER BY Name ASC ;
B.Comparar consultas mediante EXISTS e IN
En el ejemplo siguiente se comparan dos consultas que son semnticamente equivalentes.
En la primera consulta se utiliza EXISTS y en la segunda IN.
USE AdventureWorks2012 ;
GO
SELECT a.FirstName, a.LastName
FROM Person.Person AS a
WHERE EXISTS
(SELECT *
FROM HumanResources.Employee AS b
WHERE a.BusinessEntityID = b.BusinessEntityID
AND a.LastName = 'Johnson');
GO
En la siguiente consulta se usa IN.
USE AdventureWorks2012 ;
GO
SELECT a.FirstName, a.LastName
FROM Person.Person AS a
WHERE a.LastName IN
(SELECT a.LastName
FROM HumanResources.Employee AS b
WHERE a.BusinessEntityID = b.BusinessEntityID
AND a.LastName = 'Johnson');
GO
Este es el conjunto de resultados de las consultas.
FirstName LastName
-------------------------------------------------- ----------
Barry Johnson
David Johnson
Willis Johnson
(3 row(s) affected)
C.Comparar consultas mediante EXISTS y = ANY
En el ejemplo siguiente se muestran dos consultas para buscar tiendas cuyo nombre sea el
mismo que el de un proveedor. En la primera consulta se utiliza EXISTS y en la segunda
=ANY.
USE AdventureWorks2012 ;
GO
SELECT DISTINCT s.Name
FROM Sales.Store AS s
WHERE EXISTS
(SELECT *
FROM Purchasing.Vendor AS v
WHERE s.Name = v.Name) ;
GO
En la siguiente consulta se utiliza = ANY.
USE AdventureWorks2012 ;
GO
SELECT DISTINCT s.Name
FROM Sales.Store AS s
WHERE s.Name = ANY
(SELECT v.Name
FROM Purchasing.Vendor AS v ) ;
GO
D.Comparar consultas mediante EXISTS e IN
En el siguiente ejemplo se muestran consultas para buscar empleados de departamentos que
comiencen por P.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
WHERE EXISTS
(SELECT *
FROM HumanResources.Department AS d
JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON d.DepartmentID = edh.DepartmentID
WHERE e.BusinessEntityID = edh.BusinessEntityID
AND d.Name LIKE 'P%');
GO
En la siguiente consulta se usa IN.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON e.BusinessEntityID = edh.BusinessEntityID
WHERE edh.DepartmentID IN
(SELECT DepartmentID
FROM HumanResources.Department
WHERE Name LIKE 'P%');
GO
E.Utilizar NOT EXISTS
NOT EXISTS funciona de forma contraria a EXISTS. La clusula WHERE de NOT
EXISTS se cumple si la subconsulta no devuelve ninguna fila. En el siguiente ejemplo se
buscan empleados que no sean de departamentos cuyos nombres empiecen por P.
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID
WHERE NOT EXISTS
(SELECT *
FROM HumanResources.Department AS d
JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON d.DepartmentID = edh.DepartmentID
WHERE e.BusinessEntityID = edh.BusinessEntityID
AND d.Name LIKE 'P%')
ORDER BY LastName, FirstName
GO
El conjunto de resultados es el siguiente.
FirstName LastName Title
------------------------------ ------------------------------ ------------
Syed Abbas Pacific Sales Manager
Hazem Abolrous Quality Assurance Manager
Humberto Acevedo Application Specialist
Pilar Ackerman Shipping & Receiving Superviso
Franois Ajenstat Database Administrator
Amy Alberts European Sales Manager
Sean Alexander Quality Assurance Technician
Pamela Ansman-Wolfe Sales Representative
Zainal Arifin Document Control Manager
David Barber Assistant to CFO
Paula Barreto de Mattos Human Resources Manager
Shai Bassli Facilities Manager
Wanida Benshoof Marketing Assistant
Karen Berg Application Specialist
Karen Berge Document Control Assistant
Andreas Berglund Quality Assurance Technician
Matthias Berndt Shipping & Receiving Clerk
Jo Berry Janitor
Jimmy Bischoff Stocker
Michael Blythe Sales Representative
David Bradley Marketing Manager
Kevin Brown Marketing Assistant
David Campbell Sales Representative
Jason Carlson Information Services Manager
Fernando Caro Sales Representative
Sean Chai Document Control Assistant
Sootha Charncherngkha Quality Assurance Technician
Hao Chen HR Administrative Assistant
Kevin Chrisulis Network Administrator
Pat Coleman Janitor
Stephanie Conroy Network Manager
Debra Core Application Specialist
Ovidiu Crcium Sr. Tool Designer
Grant Culbertson HR Administrative Assistant
Mary Dempsey Marketing Assistant
Thierry D'Hers Tool Designer
Terri Duffy VP Engineering
Susan Eaton Stocker
Terry Eminhizer Marketing Specialist
Gail Erickson Design Engineer
Janice Galvin Tool Designer
Mary Gibson Marketing Specialist
Jossef Goldberg Design Engineer
Sariya Harnpadoungsataya Marketing Specialist
Mark Harrington Quality Assurance Technician
Magnus Hedlund Facilities Assistant
Shu Ito Sales Representative
Stephen Jiang North American Sales Manager
Willis Johnson Recruiter
Brannon Jones Finance Manager
Tengiz Kharatishvili Control Specialist
Christian Kleinerman Maintenance Supervisor
Vamsi Kuppa Shipping & Receiving Clerk
David Liu Accounts Manager
Vidur Luthra Recruiter
Stuart Macrae Janitor
Diane Margheim Research & Development Enginee
Mindy Martin Benefits Specialist
Gigi Matthew Research & Development Enginee
Tete Mensa-Annan Sales Representative
Ramesh Meyyappan Application Specialist
Dylan Miller Research & Development Manager
Linda Mitchell Sales Representative
Barbara Moreland Accountant
Laura Norman Chief Financial Officer
Chris Norred Control Specialist
Jae Pak Sales Representative
Wanda Parks Janitor
Deborah Poe Accounts Receivable Specialist
Kim Ralls Stocker
Tsvi Reiter Sales Representative
Sharon Salavaria Design Engineer
Ken Sanchez Chief Executive Officer
Jos Saraiva Sales Representative
Mike Seamans Accountant
Ashvini Sharma Network Administrator
Janet Sheperdigian Accounts Payable Specialist
Candy Spoon Accounts Receivable Specialist
Michael Sullivan Sr. Design Engineer
Dragan Tomic Accounts Payable Specialist
Lynn Tsoflias Sales Representative
Rachel Valdez Sales Representative
Garrett Vargar Sales Representative
Ranjit Varkey Chudukatil Sales Representative
Bryan Walton Accounts Receivable Specialist
Jian Shuo Wang Engineering Manager
Brian Welcker VP Sales
Jill Williams Marketing Specialist
Dan Wilson Database Administrator
John Wood Marketing Specialist
Peng Wu Quality Assurance Supervisor
(91 row(s) affected)

IN (Transact-SQL)
SQL Server 2014
Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema
Determina si un valor especificado coincide con algn valor de una subconsulta o una lista.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
test_expression [ NOT ] IN
( subquery | expression [ ,...n ]
)
Argumentos
test_expression
Es cualquier expresin vlida.
subquery
Es una subconsulta que tiene un conjunto de resultados de una columna. Esta
columna debe tener el mismo tipo de datos que test_expression.
expression[ ,... n ]
Es una lista de expresiones en la que se buscar una coincidencia. Todas las
expresiones deben ser del mismo tipo que test_expression.
Tipos de resultado
Boolean
Valor del resultado
Si el valor de test_expression es igual a cualquier valor devuelto por subquery o si es igual
a cualquier expression de la lista separada por comas, el valor devuelto es TRUE; en caso
contrario, el valor del resultado es FALSE.
El uso de NOT IN niega el valor de subquery o expression.
Advertencia
Los valores NULL que devuelve subquery o expression comparados con test_expression
mediante IN o NOT IN devuelven UNKNOWN. La utilizacin de valores NULL con IN o
NOT IN puede provocar resultados inesperados.
Comentarios
Si se incluye un nmero sumamente grande de valores (muchos miles) en una clusula IN,
se pueden agotar los recursos y obtenerse los errores 8623 o 8632. Para evitar este
problema, almacene los elementos de la lista IN en una tabla.
Error 8623:
The query processor ran out of internal resources and could not produce a query plan. This
is a rare event and only expected for extremely complex queries or queries that reference a
very large number of tables or partitions. Please simplify the query. If you believe you have
received this message in error, contact Customer Support Services for more information.
Error 8632:
Internal error: An expression services limit has been reached. Please look for potentially
complex expressions in your query, and try to simplify them.
Ejemplos
A.Comparar OR e IN
En el ejemplo siguiente se selecciona una lista con los nombres de los empleados que son
ingenieros de diseo, ingenieros de herramientas o asistentes de marketing.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle = 'Design Engineer'
OR e.JobTitle = 'Tool Designer'
OR e.JobTitle = 'Marketing Assistant';
GO
No obstante, con IN se recuperan los mismos resultados.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing
Assistant');
GO
ste es el conjunto de resultados que se obtiene con cualquiera de las dos consultas.
FirstName LastName Title
--------- --------- ---------------------
Sharon Salavaria Design Engineer
Gail Erickson Design Engineer
Jossef Goldberg Design Engineer
Janice Galvin Tool Designer
Thierry D'Hers Tool Designer
Wanida Benshoof Marketing Assistant
Kevin Brown Marketing Assistant
Mary Dempsey Marketing Assistant

(8 row(s) affected)
B.Utilizar IN con una subconsulta
En el ejemplo siguiente se buscan todos los identificadores de vendedor de la tabla
SalesPerson para los empleados cuya cuota de ventas sea superior a 250.000 dlares al ao
y, despus, se seleccionan en la tabla Employee los nombres de todos los empleados cuyo
EmployeeID coincida con los resultados de la subconsulta SELECT.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName
FROM Person.Person AS p
JOIN Sales.SalesPerson AS sp
ON p.BusinessEntityID = sp.BusinessEntityID
WHERE p.BusinessEntityID IN
(SELECT BusinessEntityID
FROM Sales.SalesPerson
WHERE SalesQuota > 250000);
GO
El conjunto de resultados es el siguiente.
FirstName LastName
--------- --------
Tsvi Reiter
Michael Blythe
Tete Mensa-Annan

(3 row(s) affected)
C.Utilizar NOT IN con una subconsulta
En el ejemplo siguiente se buscan los vendedores con una cuota inferior a 250.000 dlares.
NOT IN busca los vendedores que no coinciden con los elementos de la lista de valores.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName
FROM Person.Person AS p
JOIN Sales.SalesPerson AS sp
ON p.BusinessEntityID = sp.BusinessEntityID
WHERE p.BusinessEntityID NOT IN
(SELECT BusinessEntityID
FROM Sales.SalesPerson
WHERE SalesQuota > 250000);
GO


LIKE (Transact-SQL)
SQL Server 2014
Otras versiones

Personas que lo han encontrado til: 1 de 1 - Valorar este tema
Determina si una cadena de caracteres especfica coincide con un patrn especificado. Un
patrn puede contener caracteres normales y caracteres comodn. Durante la operacin de
bsqueda de coincidencias de patrn, los caracteres normales deben coincidir exactamente
con los caracteres especificados en la cadena de caracteres. Sin embargo, los caracteres
comodn pueden coincidir con fragmentos arbitrarios de la cadena. La utilizacin de
caracteres comodn hace que el operador LIKE sea ms flexible que los operadores de
comparacin de cadenas = y !=. Si alguno de los argumentos no es del tipo de datos de
cadena de caracteres, Motor de base de datos de SQL Server lo convierte al tipo de datos de
cadena de caracteres, si es posible.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
Argumentos
match_expression
Es cualquier expresin vlida de tipo de datos de caracteres.
pattern
Es la cadena de caracteres especfica que se busca en match_expression y puede
incluir los siguientes caracteres comodn vlidos. pattern puede tener 8.000 bytes
como mximo.
Carcter
comodn
Descripcin Ejemplo
%
Cualquier cadena de
cero o ms caracteres.
WHERE title LIKE '%computer%' busca
todos los ttulos de libros que contengan la
palabra 'computer' en el ttulo.
_ (carcter
de
subrayado)
Cualquier carcter.
WHERE au_fname LIKE _ean busca todos
los nombres de cuatro letras que terminen en
ean (Dean, Sean, etc.)
[ ]
Cualquier carcter
individual del intervalo
([a-f]) o del conjunto
([abcdef]) que se ha
especificado.
WHERE au_lname LIKE [C-P]arsen busca
apellidos de autores que terminen en arsen y
empiecen por cualquier carcter individual
entre C y P, como Carsen, Larsen, Karsen,
etc. En las bsquedas de intervalos, los
caracteres incluidos en el intervalo pueden
variar, dependiendo de las reglas de
ordenacin de la intercalacin.
[^]
Cualquier carcter
individual que no se
encuentre en el
intervalo ([^a-f]) o el
conjunto ([^abcdef])
que se ha especificado.
WHERE au_lname LIKE de[^l]% busca
todos los apellidos de autores que empiecen
por de y en los que la siguiente letra no sea l.
escape_character
Es un carcter que se coloca delante de un carcter comodn para indicar que el
comodn no debe interpretarse como un comodn, sino como un carcter normal.
escape_character es una expresin de caracteres que no tiene valor predeterminado
y se debe evaluar como un nico carcter.
Tipos de resultado
Boolean
Valor del resultado
LIKE devuelve TRUE si match_expression coincide con el patternespecificado.
Comentarios
Cuando se realizan comparaciones de cadenas con LIKE, todos los caracteres de la cadena
patrn son significativos, incluso los espacios iniciales o finales. Si una comparacin de
una consulta debe devolver todas las filas con una cadena LIKE 'abc ' (abc seguido de un
espacio), no se devolvern las filas en las que el valor de esa columna sea abc (sin espacio
al final). Sin embargo, no se tienen en cuenta los espacios en blanco finales de la expresin
con la que se compara el patrn. Si la comparacin de una consulta debe devolver todas las
filas con la cadena LIKE 'abc' (abc sin espacio), se devolvern todas las filas que empiecen
por abc y tengan cero o ms espacios al final.
Una comparacin de cadenas donde se utilice un patrn que contenga datos de tipo char y
varchar puede no pasar una comparacin LIKE debido a la forma en que se han
almacenado los datos. Es importante conocer el almacenamiento de cada tipo de datos y
dnde puede generar errores una comparacin LIKE. En el siguiente ejemplo se pasa una
variable local char a un procedimiento almacenado y, a continuacin, se utiliza la operacin
de bsqueda de coincidencias de patrn para encontrar todos los empleados cuyos apellidos
empiecen por un juego de caracteres especificado.
USE AdventureWorks2012;
GO
CREATE PROCEDURE FindEmployee @EmpLName char(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';
SELECT p.FirstName, p.LastName, a.City
FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID =
a.AddressID
WHERE p.LastName LIKE @EmpLName;
GO
EXEC FindEmployee @EmpLName = 'Barb';
GO
En el procedimiento FindEmployee, no se devuelven filas porque la variable char
(@EmpLName) contiene espacios al final cuando el nombre tiene menos de 20 caracteres.
Debido a que la columna LastName es de tipo varchar, no hay espacios al final. Este
procedimiento no funciona porque los espacios al final son significativos.
Sin embargo, el siguiente ejemplo funciona porque no se agregan espacios al final en la
variable varchar:
USE AdventureWorks2012;
GO
CREATE PROCEDURE FindEmployee @EmpLName varchar(20)
AS
SELECT @EmpLName = RTRIM(@EmpLName) + '%';
SELECT p.FirstName, p.LastName, a.City
FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID =
a.AddressID
WHERE p.LastName LIKE @EmpLName;
GO
EXEC FindEmployee @EmpLName = 'Barb';
El conjunto de resultados es el siguiente.
FirstName LastName City
---------- -------------------- ---------------
Angela Barbariol Snohomish
David Barber Snohomish
(2 row(s) affected)
Operacin de bsqueda de coincidencias de patrn con LIKE
LIKE admite operaciones de bsqueda de coincidencias de patrn ASCII y Unicode.
Cuando todos los argumentos (match_expression, pattern y escape_character, si estn
presentes) son tipos de datos de carcter ASCII, se realiza la operacin de bsqueda de
coincidencias de patrn ASCII. Si alguno de los argumentos es del tipo de datos Unicode,
todos los argumentos se convierten a Unicode y se realiza la operacin de bsqueda de
coincidencias de patrn Unicode. Cuando se utilizan datos Unicode (tipos de datos nchar o
nvarchar) con LIKE, los espacios en blanco al final son significativos; sin embargo, para
los datos que no son Unicode, no lo son. El uso que se hace de LIKE con Unicode es
compatible con el estndar ISO. El uso que se hace de LIKE con ASCII es compatible con
las versiones anteriores de SQL Server.
A continuacin se ofrece una serie de ejemplos donde se muestran las diferencias entre las
filas devueltas tras la operacin de bsqueda de coincidencias de patrn con LIKE para
ASCII y Unicode.
-- ASCII pattern matching with char column
CREATE TABLE t (col1 char(30));
INSERT INTO t VALUES ('Robert King');
SELECT *
FROM t
WHERE col1 LIKE '% King'; -- returns 1 row

-- Unicode pattern matching with nchar column
CREATE TABLE t (col1 nchar(30));
INSERT INTO t VALUES ('Robert King');
SELECT *
FROM t
WHERE col1 LIKE '% King'; -- no rows returned

-- Unicode pattern matching with nchar column and RTRIM
CREATE TABLE t (col1 nchar (30));
INSERT INTO t VALUES ('Robert King');
SELECT *
FROM t
WHERE RTRIM(col1) LIKE '% King'; -- returns 1 row
Nota
La intercalacin influye en las comparaciones con LIKE. Para obtener ms informacin,
vea COLLATE (Transact-SQL).
Utilizar el carcter comodn %
Si se especifica el smbolo LIKE '5%', el Motor de base de datos busca el nmero 5 seguido
de cualquier cadena de cero o ms caracteres.
Por ejemplo, la siguiente consulta muestra todas las vistas de administracin dinmica de la
base de datos AdventureWorks2012 , porque todas empiezan por las letras dm.
USE AdventureWorks2012;
GO
SELECT Name
FROM sys.system_views
WHERE Name LIKE 'dm%';
GO
Para ver todos los objetos que no sean vistas de administracin dinmica, utilice NOT
LIKE 'dm%'. Si hay un total de 32 objetos y LIKE encuentra 13 nombres que coinciden con
el patrn, NOT LIKE encuentra los 19 objetos que no coinciden con el patrn de LIKE.
Es posible que no siempre se encuentren los mismos nombres con un patrn como LIKE
'[^d][^m]%'. En lugar de 19 nombres, puede que encuentre solo 14, quedando eliminados
de los resultados todos los nombres que empiecen por d o tengan m como segunda letra, y
los nombres de las vistas de administracin dinmica. Esto se debe a que las cadenas de
comparacin con caracteres comodn negativos se evalan por pasos, un comodn cada vez.
Si la coincidencia genera un error en algn momento de la evaluacin, se elimina.
Utilizar caracteres comodn como literales
Los caracteres comodn que se utilizan en la operacin de bsqueda de coincidencias de
patrn se pueden utilizar como literales. Para utilizar un carcter comodn como literal,
inclyalo entre corchetes. La tabla siguiente muestra varios ejemplos del uso de la palabra
clave LIKE y los caracteres comodn [ ].
Smbolo Significado
LIKE 5[%] 5%
LIKE [_]n _n
LIKE [a-cdf] a, b, c, d o f
LIKE [-acdf] -, a, c, d o f
LIKE [ [ ] [
LIKE ']' ]
LIKE 'abc[_]d%' abc_d y abc_de
LIKE 'abc[def]' abcd, abce y abcf
Operacin de bsqueda de coincidencias de patrn con la clusula ESCAPE
Se pueden buscar cadenas de caracteres que incluyan uno o ms caracteres comodn
especiales. Por ejemplo, la tabla discounts de una base de datos customers puede almacenar
valores de descuento que incluyan un signo de porcentaje (%). Para buscar el signo de
porcentaje como carcter en lugar de como carcter comodn, deben suministrarse la
palabra clave ESCAPE y el carcter de escape. Supongamos que una base de datos de
ejemplo contiene una columna denominada comment que contiene el texto 30%. Para
buscar filas que contengan la cadena 30% en cualquier parte de la columna comment,
especifique una clusula WHERE como WHERE comment LIKE '%30!%%' ESCAPE '!'.
Si no se especifican ESCAPE y el carcter de escape, el Motor de base de datos devolver
las filas con la cadena 30.
Si no hay ningn carcter despus de un carcter de escape en el patrn de LIKE, el patrn
no es vlido y LIKE devuelve FALSE. Si el carcter posterior a un carcter de escape no es
un carcter comodn, el carcter de escape se descarta y el carcter que sigue al escape se
trata como un carcter normal del patrn. Esto afecta a los caracteres comodn del signo de
porcentaje (%), carcter de subrayado (_) y corchete de apertura ([) cuando se encuentran
entre corchetes dobles ([ ]). Asimismo, dentro de corchetes dobles ([ ]) se pueden aplicar
caracteres de escape al smbolo de intercalacin (^), guin (-) y corchete de cierre (]).
0x0000 (char(0)) es un carcter no definido en las intercalaciones de Windows y no se
puede incluir en LIKE.
Ejemplos
A.Utilizar LIKE con el carcter comodn %
En el siguiente ejemplo se buscan todos los nmeros de telfono de la tabla PersonPhone
cuyo cdigo de rea sea 415.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, ph.PhoneNumber
FROM Person.PersonPhone AS ph
INNER JOIN Person.Person AS p
ON ph.BusinessEntityID = p.BusinessEntityID
WHERE ph.PhoneNumber LIKE '415%'
ORDER by p.LastName;
GO
El conjunto de resultados es el siguiente.
FirstName LastName Phone
----------------- ------------------- ------------
Ruben Alonso 415-555-124
Shelby Cook 415-555-0121
Karen Hu 415-555-0114
John Long 415-555-0147
David Long 415-555-0123
Gilbert Ma 415-555-0138
Meredith Moreno 415-555-0131
Alexandra Nelson 415-555-0174
Taylor Patterson 415-555-0170
Gabrielle Russell 415-555-0197
Dalton Simmons 415-555-0115
(11 row(s) affected)
B.Utilizar NOT LIKE con el carcter comodn %
En el siguiente ejemplo se buscan todos los nmeros de telfono de la tabla PersonPhone
cuyos cdigos de rea no sean 415.
USE AdventureWorks2012;
GO
SELECT p.FirstName, p.LastName, ph.PhoneNumber
FROM Person.PersonPhone AS ph
INNER JOIN Person.Person AS p
ON ph.BusinessEntityID = p.BusinessEntityID
WHERE ph.PhoneNumber NOT LIKE '415%' AND p.FirstName = 'Gail'
ORDER BY p.LastName;
GO
El conjunto de resultados es el siguiente.
FirstName LastName Phone
---------------------- -------------------- -------------------
Gail Alexander 1 (11) 500 555-0120
Gail Butler 1 (11) 500 555-0191
Gail Erickson 834-555-0132
Gail Erickson 849-555-0139
Gail Griffin 450-555-0171
Gail Moore 155-555-0169
Gail Russell 334-555-0170
Gail Westover 305-555-0100
(8 row(s) affected)
C.Utilizar la clusula ESCAPE
En el ejemplo siguiente se utiliza la clusula ESCAPE y el carcter de escape para buscar
exactamente la cadena de caracteres 10-15% en la columna c1 de la tabla mytbl2.
USE tempdb;
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytbl2')
DROP TABLE mytbl2;
GO
USE tempdb;
GO
CREATE TABLE mytbl2
(
c1 sysname
);
GO
INSERT mytbl2 VALUES ('Discount is 10-15% off'), ('Discount is .10-.15
off');
GO
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';
GO
D.Utilizar el carcter comodn [ ]
El ejemplo siguiente busca empleados en la tabla Person cuyo nombre sea Cheryl o Sheryl.
USE AdventureWorks2012;
GO
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE FirstName LIKE '[CS]heryl';
GO
En el siguiente ejemplo se buscan las filas con empleados en la tabla Person con el apellido
de Zheng o Zhang.
USE AdventureWorks2012;
GO
SELECT LastName, FirstName
FROM Person.Person
WHERE LastName LIKE 'Zh[ae]ng'
ORDER BY LastName ASC, FirstName ASC;
GO


NOT (Transact-SQL)
SQL Server 2014
Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema
Niega la entrada de un valor booleano.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
[ NOT ] boolean_expression
Argumentos
boolean_expression
Es cualquier expresin booleana vlida.
Tipos de resultado
Boolean
Valor del resultado
NOT invierte el valor de cualquier expresin booleana.
Comentarios
El uso de NOT niega una expresin.
La tabla siguiente muestra el resultado de comparar los valores TRUE y FALSE mediante
el operador NOT.
NOT
TRUE FALSE
FALSE TRUE
UNKNOWN UNKNOWN
Ejemplos
En el ejemplo siguiente se buscan todas las bicicletas Silver que no tienen un precio
estndar superior a los 400 $.
USE AdventureWorks2012;
GO
SELECT ProductID, Name, Color, StandardCost
FROM Production.Product
WHERE ProductNumber LIKE 'BK-%' AND Color = 'Silver' AND NOT StandardCost
> 400;
GO
El conjunto de resultados es el siguiente.
ProductID Name Color StandardCost
--------- ------------------- ------ ------------
984 Mountain-500 Silver, 40 Silver 308.2179
985 Mountain-500 Silver, 42 Silver 308.2179
986 Mountain-500 Silver, 44 Silver 308.2179
987 Mountain-500 Silver, 48 Silver 308.2179
988 Mountain-500 Silver, 52 Silver 308.2179
(6 row(s) affected)


OR (Transact-SQL)
SQL Server 2014
Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema
Combina dos condiciones. Cuando en una instruccin se utiliza ms de un operador lgico,
los operadores OR se evalan despus de los operadores AND. Sin embargo, se puede
cambiar el orden de evaluacin gracias a los parntesis.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
boolean_expression OR boolean_expression
Argumentos
boolean_expression
Es una expresin vlida que devuelve TRUE, FALSE o UNKNOWN.
Tipos de resultado
Boolean
Valor del resultado
OR devuelve TRUE cuando alguna de las condiciones es TRUE.
Comentarios
En la siguiente tabla se muestra el resultado del operador OR.
TRUE FALSE UNKNOWN
TRUE TRUE TRUE TRUE
FALSE TRUE FALSE UNKNOWN
UNKNOWN TRUE UNKNOWN UNKNOWN
Ejemplos
En el siguiente ejemplo se utiliza la vista vEmployeeDepartmentHistory para recuperar los
nombres del personal de Quality Assurance que trabaja en el turno de tarde o en el de
noche. Si se omiten los parntesis, la consulta devuelve los empleados de Quality
Assurance que trabajan en el turno de tarde y todos los empleados que trabajan en el turno
de noche.
USE AdventureWorks2012;
GO
SELECT FirstName, LastName, Shift
FROM HumanResources.vEmployeeDepartmentHistory
WHERE Department = 'Quality Assurance'
AND (Shift = 'Evening' OR Shift = 'Night');
El conjunto de resultados es el siguiente.
FirstName LastName Shift
------------ ---------------- -------
Andreas Berglund Evening
Sootha Charncherngkha Night

ALL (Transact-SQL)
SQL Server 2014
Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema
Compara un valor escalar con un conjunto de valores de una sola columna.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
scalar_expression { = | <> | != | > | >= | !> | < | <= | !< } ALL (
subquery )
Argumentos
scalar_expression
Es cualquier expresin vlida.
{ = | <> | != | > | >= | !> | < | <= | !< }
Es un operador de comparacin.
subquery
Es una subconsulta que devuelve un conjunto de resultados de una columna. El tipo
de datos de la columna devuelta debe ser el mismo que el de scalar_expression.
Es una instruccin SELECT restringida en la que no se permiten la clusula
ORDER BY ni la palabra clave INTO.
Tipos de resultado
Boolean
Valor del resultado
Devuelve TRUE cuando la comparacin especificada es TRUE para todos los pares
(scalar_expression,x) donde x es un valor del conjunto de una sola columna; en caso
contrario, devuelve FALSE.
Comentarios
ALL requiere que scalar_expression se compare de forma positiva con cada valor devuelto
por la subconsulta. Por ejemplo, si la subconsulta devuelve los valores 2 y 3,
scalar_expression <= ALL (subconsulta) evaluara como TRUE para una scalar_expression
de 2. Si la subconsulta devuelve los valores 2 y 3, scalar_expression = ALL (subconsulta)
se evaluara como FALSE, porque algunos de los valores de la subconsulta (el valor 3) no
cumplira los criterios de la expresin.
Para instrucciones que requieren que scalar_expression se compare de forma positiva a solo
un valor devuelto por la subconsulta, vea SOME | ANY (Transact-SQL).
Este tema hace referencia a ALL cuando se utiliza con una subconsulta. ALL tambin se
puede utilizar con UNION y SELECT.
Ejemplos
En el ejemplo siguiente se crea un procedimiento almacenado que determina si todos los
componentes de un SalesOrderID especificado en la base de datos AdventureWorks2012 se
pueden fabricar en el nmero de das especificado. En el ejemplo se usa una subconsulta
para crear una lista del nmero del valor de DaysToManufacture para todos los
componentes del SalesOrderID especfico y, a continuacin, confirma que todos los
DaysToManufacture estn dentro del nmero de das especificado.
USE AdventureWorks2012 ;
GO

CREATE PROCEDURE DaysToBuild @OrderID int, @NumberOfDays int
AS
IF
@NumberOfDays >= ALL
(
SELECT DaysToManufacture
FROM Sales.SalesOrderDetail
JOIN Production.Product
ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID
WHERE SalesOrderID = @OrderID
)
PRINT 'All items for this order can be manufactured in specified number
of days or less.'
ELSE
PRINT 'Some items for this order cannot be manufactured in specified
number of days or less.' ;
Para probar el procedimiento, ejectelo con SalesOrderID 49080, que tiene un componente
que requiere 2 das y dos componentes que requieren 0 das. La primera instruccin cumple
los criterios. La segunda consulta no los cumple.
EXECUTE DaysToBuild 49080, 2 ;
El conjunto de resultados es el siguiente.
All items for this order can be manufactured in specified number of days or less.
EXECUTE DaysToBuild 49080, 1 ;
El conjunto de resultados es el siguiente.
Some items for this order cannot be manufactured in specified number of days or less.


AND (Transact-SQL)
SQL Server 2014
Otras versiones

Combina dos expresiones booleanas y devuelve TRUE cuando ambas expresiones son
TRUE (verdaderas). Cuando se utiliza ms de un operador lgico en una instruccin, en
primer lugar se evalan los operadores AND. Puede cambiar el orden de evaluacin gracias
a los parntesis.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
boolean_expression AND boolean_expression
Argumentos
boolean_expression
Es cualquier expresin vlida que devuelve un valor booleano: TRUE, FALSE o
UNKNOWN.
Tipos de resultado
Boolean
Valor del resultado
Devuelve TRUE cuando ambas expresiones son TRUE.
Comentarios
En la siguiente tabla se muestran los resultados de la comparacin de los valores TRUE y
FALSE mediante el operador AND.
TRUE FALSE UNKNOWN
TRUE TRUE FALSE UNKNOWN
FALSE FALSE FALSE FALSE
UNKNOWN UNKNOWN FALSE UNKNOWN
Ejemplos
A.Utilizar el operador AND
En el ejemplo siguiente se selecciona informacin sobre los empleados que tienen el cargo
de Marketing Assistant y ms de 41 horas de vacaciones disponibles.
USE AdventureWorks2012;
GO
SELECT BusinessEntityID, LoginID, JobTitle, VacationHours
FROM HumanResources.Employee
WHERE JobTitle = 'Marketing Assistant'
AND VacationHours > 41 ;
B.Utilizar el operador AND en una instruccin IF
En los ejemplos siguientes se muestra cmo utilizar AND en una instruccin IF. En la
primera instruccin, 1 = 1 y 2 = 2 son true; por consiguiente, el resultado es true. En el
segundo ejemplo, el argumento 2 = 17 es false; por consiguiente, el resultado es false.
IF 1 = 1 AND 2 = 2
BEGIN
PRINT 'First Example is TRUE'
END
ELSE PRINT 'First Example is FALSE';
GO

IF 1 = 1 AND 2 = 17
BEGIN
PRINT 'Second Example is TRUE'
END
ELSE PRINT 'Second Example is FALSE' ;
GO


SOME | ANY (Transact-SQL)
SQL Server 2014
Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema
Compara un valor escalar con un conjunto de valores de una sola columna. SOME y ANY
son equivalentes.
Se aplica a: SQL Server (SQL Server 2008 a versin actual), Windows Azure SQL
Database (Versin inicial a versin actual).
Convenciones de sintaxis de Transact-SQL
Sintaxis
scalar_expression { = | < > | ! = | > | > = | ! > | < | < = | ! < }
{ SOME | ANY } ( subquery )
Argumentos
scalar_expression
Es cualquier expresin vlida.
{ = | <> | != | > | >= | !> | < | <= | !< }
Es cualquier operador de comparacin vlido.
SOME | ANY
Especifica que se debe realizar una comparacin.
subquery
Es una subconsulta con un conjunto de resultados de una columna. El tipo de datos
de la columna devuelta debe ser el mismo que el de scalar_expression.
Tipos de resultado
Boolean
Valor del resultado
SOME o ANY devuelven TRUE cuando la comparacin especificada es TRUE para
cualquier par (scalar_expression,x), donde x es un valor del conjunto de una sola columna;
de lo contrario, devuelve FALSE.
Comentarios
SOME requiere que la scalar_expression se compare de forma positiva con al menos un
valor devuelto por la subconsulta. Para instrucciones que requieren que scalar_expression
se compare de forma positiva con cada valor devuelto por la subconsulta, vea ALL
(Transact-SQL). Por ejemplo, si la subconsulta devuelve los valores 2 y 3,
scalar_expression = SOME (subconsulta) evaluara como TRUE para scalar_express de 2.
Si la subconsulta devuelve los valores 2 y 3, scalar_expression = ALL (subconsulta) se
evaluara como FALSE, porque algunos de los valores de la subconsulta (el valor 3) no
cumplira los criterios de la expresin.
Ejemplos
A.Ejecutar un ejemplo sencillo
Las instrucciones siguientes crean una tabla simple y agregan los valores 1, 2, 3 y 4 a la
columna de ID.
CREATE TABLE T1
(ID int) ;
GO
INSERT T1 VALUES (1) ;
INSERT T1 VALUES (2) ;
INSERT T1 VALUES (3) ;
INSERT T1 VALUES (4) ;
La consulta siguiente devuelve TRUE porque 3 es menor que alguno de los valores de la
tabla.
IF 3 < SOME (SELECT ID FROM T1)
PRINT 'TRUE'
ELSE
PRINT 'FALSE' ;
La consulta siguiente devuelve FALSE porque 3 no es menor que todos los valores de la
tabla.
IF 3 < ALL (SELECT ID FROM T1)
PRINT 'TRUE'
ELSE
PRINT 'FALSE' ;
B.Ejecutar un ejemplo prctico
En el ejemplo siguiente se crea un procedimiento almacenado que determina si todos los
componentes de un SalesOrderID especificado en la base de datos AdventureWorks2012 se
pueden fabricar en el nmero de das especificado. En el ejemplo se usa una subconsulta
para crear una lista de valores de DaysToManufacture para todos los componentes del
SalesOrderID especificado y, a continuacin, se comprueba si alguno de los valores
devueltos por la subconsulta es mayor que el nmero de das especificado. Si cada valor de
DaysToManufacture que se devuelve es menor que el nmero proporcionado, la condicin
es TRUE y se imprime el primer mensaje.
USE AdventureWorks2012 ;
GO

CREATE PROCEDURE ManyDaysToComplete @OrderID int, @NumberOfDays int
AS
IF
@NumberOfDays < SOME
(
SELECT DaysToManufacture
FROM Sales.SalesOrderDetail
JOIN Production.Product
ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID
WHERE SalesOrderID = @OrderID
)
PRINT 'At least one item for this order cannot be manufactured in
specified number of days.'
ELSE
PRINT 'All items for this order can be manufactured in the specified
number of days or less.' ;
Para probar el procedimiento, ejectelo utilizando SalesOrderID49080, que tiene un
componente que requiere 2 das y dos componentes que requieren 0 das. La primera
instruccin cumple los criterios. La segunda consulta no los cumple.
EXECUTE ManyDaysToComplete 49080, 2 ;
El conjunto de resultados es el siguiente.
All items for this order can be manufactured in the specified number of days or less.
EXECUTE ManyDaysToComplete 49080, 1 ;
El conjunto de resultados es el siguiente.
At least one item for this order cannot be manufactured in specified number of days.

Operadores comparativos
Los operadores comparativos que puedes utilizar en sentencias SQL son los mismos que se
encuentran disponibles para el diseo de consultas en OpenOffice Base:
Operador Se lee Resultado
=
Igual a Devuelve los registros que coinciden con la
condicin.
<
Menor que Muestra aquellos registros cuyos valores son
estrictamente menores que la condicin.
>
Mayor que Muestra aquellos registros cuyos valores son
estrictamente mayores que la condicin.
<=
Menor o igual que Devuelve los registros cuyos valores son
menores o iguales a la condicin.
>=
Mayor o igual que Devuelve los registros cuyos valores son
mayores o iguales a la condicin.
<>
Distinto de Slo muestra aquellos registros que tienen
valores distintos a la condicin.

También podría gustarte