Operadores Logicos y Comparativos

download Operadores Logicos y Comparativos

of 38

Transcript of Operadores Logicos y Comparativos

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-SQLSintaxis scalar_expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } { SOME | ANY } ( subquery ) Argumentos scalar_expression Es cualquier expresin vlida. { = | | != | > | >= | !> | < | ) y menor que ( y < en lugar de BETWEENEn el siguiente ejemplo se utilizan los operadores mayor que (>) y menor que ( 27 AND ep.Rate < 30ORDER BY ep.Rate;GOEl conjunto de resultados es el siguiente.FirstNameLastNameRate-------------------------------------PaulaBarreto de Mattos27.1394JanainaBueno27.4038DanBacon27.4038RameshMeyyappan27.4038KarenBerg27.4038DavidBradley28.7500HazemAbolrous28.8462OvidiuCracium28.8462RobWalters29.8462(9 row(s) affected)C.Utilizar NOT BETWEENEn el siguiente ejemplo se buscan todas las filas que no estn incluidas en un intervalo especificado de 27 a 30. USE AdventureWorks2012;GOSELECT e.FirstName, e.LastName, ep.RateFROM HumanResources.vEmployee e JOIN HumanResources.EmployeePayHistory ep ON e.BusinessEntityID = ep.BusinessEntityIDWHERE ep.Rate NOT BETWEEN 27 AND 30ORDER BY ep.Rate;GOD.Utilizar BETWEEN con valores datetimeEn el siguiente ejemplo se recuperan filas en las que los valores datetime estn entre '20011212' y '20020105', ambos incluidos. USE AdventureWorks2012;GOSELECT BusinessEntityID, RateChangeDateFROM HumanResources.EmployeePayHistoryWHERE RateChangeDate BETWEEN '20011212' AND '20020105';El conjunto de resultados es el siguiente.BusinessEntityID RateChangeDate----------- -----------------------32001-12-12 00:00:00.00042002-01-05 00:00:00.000La 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-SQLSintaxis EXISTS subqueryArgumentos 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 resultadosEn 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 ;GOSELECT DepartmentID, Name FROM HumanResources.Department WHERE EXISTS (SELECT NULL)ORDER BY Name ASC ;B.Comparar consultas mediante EXISTS e INEn 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 ;GOSELECT a.FirstName, a.LastNameFROM Person.Person AS aWHERE EXISTS(SELECT * FROM HumanResources.Employee AS b WHERE a.BusinessEntityID = b.BusinessEntityID AND a.LastName = 'Johnson');GOEn la siguiente consulta se usa IN.USE AdventureWorks2012 ;GOSELECT a.FirstName, a.LastNameFROM Person.Person AS aWHERE a.LastName IN(SELECT a.LastName FROM HumanResources.Employee AS b WHERE a.BusinessEntityID = b.BusinessEntityID AND a.LastName = 'Johnson');GOEste es el conjunto de resultados de las consultas.FirstName LastName-------------------------------------------------- ----------Barry JohnsonDavid JohnsonWillis Johnson(3 row(s) affected)C.Comparar consultas mediante EXISTS y = ANYEn 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 ;GOSELECT DISTINCT s.NameFROM Sales.Store AS s WHERE EXISTS(SELECT * FROM Purchasing.Vendor AS v WHERE s.Name = v.Name) ;GOEn la siguiente consulta se utiliza = ANY.USE AdventureWorks2012 ;GOSELECT DISTINCT s.NameFROM Sales.Store AS s WHERE s.Name = ANY(SELECT v.Name FROM Purchasing.Vendor AS v ) ;GOD.Comparar consultas mediante EXISTS e INEn el siguiente ejemplo se muestran consultas para buscar empleados de departamentos que comiencen por P. USE AdventureWorks2012;GOSELECT p.FirstName, p.LastName, e.JobTitleFROM Person.Person AS p JOIN HumanResources.Employee AS eON e.BusinessEntityID = p.BusinessEntityID WHERE EXISTS(SELECT * FROM HumanResources.Department AS dJOIN HumanResources.EmployeeDepartmentHistory AS edhON d.DepartmentID = edh.DepartmentID WHERE e.BusinessEntityID = edh.BusinessEntityID AND d.Name LIKE 'P%');GOEn la siguiente consulta se usa IN.USE AdventureWorks2012;GOSELECT p.FirstName, p.LastName, e.JobTitleFROM Person.Person AS p JOIN HumanResources.Employee AS eON e.BusinessEntityID = p.BusinessEntityID JOIN HumanResources.EmployeeDepartmentHistory AS edhON e.BusinessEntityID = edh.BusinessEntityID WHERE edh.DepartmentID IN(SELECT DepartmentIDFROM HumanResources.DepartmentWHERE Name LIKE 'P%');GOE.Utilizar NOT EXISTSNOT 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.JobTitleFROM Person.Person AS p JOIN HumanResources.Employee AS eON e.BusinessEntityID = p.BusinessEntityID WHERE NOT EXISTS(SELECT *FROM HumanResources.Department AS dJOIN HumanResources.EmployeeDepartmentHistory AS edhON d.DepartmentID = edh.DepartmentIDWHERE e.BusinessEntityID = edh.BusinessEntityIDAND d.Name LIKE 'P%')ORDER BY LastName, FirstNameGOEl 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 SupervisoFranois 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 AssistantThierry 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 EngineeMindy Martin Benefits Specialist Gigi Matthew Research & Development EngineeTete Mensa-Annan Sales Representative Ramesh Meyyappan Application Specialist Dylan Miller Research & Development ManagerLinda 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 SpecialistKim 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 SpecialistMichael 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 SpecialistJian 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-SQLSintaxis 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 INEn 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;GOSELECT p.FirstName, p.LastName, e.JobTitleFROM Person.Person AS pJOIN HumanResources.Employee AS e ON p.BusinessEntityID = e.BusinessEntityIDWHERE e.JobTitle = 'Design Engineer' OR e.JobTitle = 'Tool Designer' OR e.JobTitle = 'Marketing Assistant';GONo obstante, con IN se recuperan los mismos resultados.USE AdventureWorks2012;GOSELECT p.FirstName, p.LastName, e.JobTitleFROM Person.Person AS pJOIN HumanResources.Employee AS e ON p.BusinessEntityID = e.BusinessEntityIDWHERE e.JobTitle IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant');GOste 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 subconsultaEn 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;GOSELECT p.FirstName, p.LastNameFROM Person.Person AS p JOIN Sales.SalesPerson AS sp ON p.BusinessEntityID = sp.BusinessEntityIDWHERE p.BusinessEntityID IN (SELECT BusinessEntityID FROM Sales.SalesPerson WHERE SalesQuota > 250000);GOEl 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 subconsultaEn 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;GOSELECT p.FirstName, p.LastNameFROM Person.Person AS p JOIN Sales.SalesPerson AS sp ON p.BusinessEntityID = sp.BusinessEntityIDWHERE 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-SQLSintaxis 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;GOCREATE PROCEDURE FindEmployee @EmpLName char(20)ASSELECT @EmpLName = RTRIM(@EmpLName) + '%';SELECT p.FirstName, p.LastName, a.CityFROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressIDWHERE p.LastName LIKE @EmpLName;GOEXEC FindEmployee @EmpLName = 'Barb';GOEn 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;GOCREATE PROCEDURE FindEmployee @EmpLName varchar(20)ASSELECT @EmpLName = RTRIM(@EmpLName) + '%';SELECT p.FirstName, p.LastName, a.CityFROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressIDWHERE p.LastName LIKE @EmpLName;GOEXEC FindEmployee @EmpLName = 'Barb';El conjunto de resultados es el siguiente.FirstNameLastNameCity ---------- -------------------- ---------------AngelaBarbariolSnohomishDavidBarberSnohomish(2 row(s) affected)Operacin de bsqueda de coincidencias de patrn con LIKELIKE 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 columnCREATE 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 columnCREATE 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 RTRIMCREATE TABLE t (col1 nchar (30));INSERT INTO t VALUES ('Robert King');SELECT * FROM t WHERE RTRIM(col1) LIKE '% King'; -- returns 1 rowNota

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;GOSELECT NameFROM sys.system_viewsWHERE Name LIKE 'dm%';GOPara 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 literalesLos 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 [ ]. SmboloSignificado

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 ESCAPESe 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;GOSELECT p.FirstName, p.LastName, ph.PhoneNumberFROM Person.PersonPhone AS phINNER JOIN Person.Person AS pON ph.BusinessEntityID = p.BusinessEntityIDWHERE ph.PhoneNumber LIKE '415%'ORDER by p.LastName;GOEl conjunto de resultados es el siguiente.FirstNameLastNamePhone------------------------------------------------RubenAlonso415-555-124ShelbyCook415-555-0121KarenHu415-555-0114JohnLong415-555-0147DavidLong415-555-0123GilbertMa415-555-0138MeredithMoreno415-555-0131AlexandraNelson415-555-0174TaylorPatterson415-555-0170GabrielleRussell415-555-0197DaltonSimmons415-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;GOSELECT p.FirstName, p.LastName, ph.PhoneNumberFROM Person.PersonPhone AS phINNER JOIN Person.Person AS pON ph.BusinessEntityID = p.BusinessEntityIDWHERE ph.PhoneNumber NOT LIKE '415%' AND p.FirstName = 'Gail'ORDER BY p.LastName;GOEl conjunto de resultados es el siguiente.FirstNameLastNamePhone---------------------- -------------------- -------------------GailAlexander1 (11) 500 555-0120GailButler1 (11) 500 555-0191GailErickson834-555-0132GailErickson849-555-0139GailGriffin450-555-0171GailMoore155-555-0169GailRussell334-555-0170GailWestover305-555-0100(8 row(s) affected)C.Utilizar la clusula ESCAPEEn 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;GOIF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'mytbl2') DROP TABLE mytbl2;GOUSE tempdb;GOCREATE TABLE mytbl2( c1 sysname);GOINSERT mytbl2 VALUES ('Discount is 10-15% off'), ('Discount is .10-.15 off');GOSELECT c1 FROM mytbl2WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';GOD.Utilizar el carcter comodn [ ]El ejemplo siguiente busca empleados en la tabla Person cuyo nombre sea Cheryl o Sheryl. USE AdventureWorks2012;GOSELECT BusinessEntityID, FirstName, LastName FROM Person.Person WHERE FirstName LIKE '[CS]heryl';GOEn el siguiente ejemplo se buscan las filas con empleados en la tabla Person con el apellido de Zheng o Zhang.USE AdventureWorks2012;GOSELECT LastName, FirstNameFROM Person.PersonWHERE 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-SQLSintaxis [ NOT ] boolean_expressionArgumentos 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;GOSELECT ProductID, Name, Color, StandardCostFROM Production.ProductWHERE ProductNumber LIKE 'BK-%' AND Color = 'Silver' AND NOT StandardCost > 400;GOEl conjunto de resultados es el siguiente.ProductID Name Color StandardCost --------- ------------------- ------ ------------984 Mountain-500 Silver, 40 Silver 308.2179985 Mountain-500 Silver, 42 Silver 308.2179986 Mountain-500 Silver, 44 Silver 308.2179987 Mountain-500 Silver, 48 Silver 308.2179988 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-SQLSintaxis boolean_expression OR boolean_expressionArgumentos 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;GOSELECT FirstName, LastName, Shift FROM HumanResources.vEmployeeDepartmentHistoryWHERE Department = 'Quality Assurance' AND (Shift = 'Evening' OR Shift = 'Night');El conjunto de resultados es el siguiente.FirstName LastName Shift------------ ---------------- -------Andreas Berglund EveningSootha 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-SQLSintaxis scalar_expression { = | | != | > | >= | !> | < | | >= | !> | < | 41 ;B.Utilizar el operador AND en una instruccin IFEn 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 = 2BEGINPRINT 'First Example is TRUE'ENDELSE PRINT 'First Example is FALSE';GO

IF 1 = 1 AND 2 = 17BEGINPRINT 'Second Example is TRUE'ENDELSE 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-SQLSintaxis scalar_expression { = | < > | ! = | > | > = | ! > | < | < = | ! < } { SOME | ANY } ( subquery ) Argumentos scalar_expression Es cualquier expresin vlida. { = | | != | > | >= | !> | < | Mayor que Muestra aquellos registros cuyos valores son estrictamente mayores que 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.