Вы находитесь на странице: 1из 17

SQL > Comandos SQL > In

En SQL, hay dos usos de la palabra clave IN, y esta sección introduce aquél
relacionado con la cláusula WHERE. Cuando se lo utiliza en este contexto,
sabemos exactamente el valor de los valores regresados que deseamos ver para
al menos una de las columnas. La sintaxis para el uso de la palabra clave IN es la
siguiente:

SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" IN (''valor1', ''valor2', ...);

El número de valores en los paréntesis pueden ser uno o más, con cada valor
separado por comas. Los valores pueden ser números o caracteres. Si hay sólo
un valor dentro del paréntesis, este comando es equivalente a

WHERE "nombre_columna" = 'valor1'

Por ejemplo, podríamos desear seleccionar todos los registros para los negocios
de Los Ángeles y San Diego en la Tabla Store_Information,

Tabla Store_Information

Store_Name Sales Txn_Date


Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
San Francisco 300 08-Jan-1999
Boston 700 08-Jan-1999

Ingresamos,

SELECT *
FROM Store_Information
WHERE Store_Name IN ('Los Angeles', 'San Diego');

Resultado:

Store Name Sales Txn_Date


Los Angeles 1500 05-Jan-1999
San Diego 250 07-Jan-1999
El operador SQL LIKE
El operador LIKE se utiliza en una cláusula WHERE para buscar un patrón
específico en una columna.

Hay dos comodines utilizados junto con el operador LIKE:

 %: El signo de porcentaje representa cero, uno o varios caracteres


 _ - El subrayado representa un solo carácter.

¡El signo de porcentaje y el guión bajo también se pueden usar en


combinaciones!

Like la sintaxis
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;

Aquí hay algunos ejemplos que muestran diferentes operadores LIKE con los comodines '%' y '_':

LIKE Operator Description

WHERE CustomerName LIKE 'a%' Finds any values that start with "a"

WHERE CustomerName LIKE '%a' Finds any values that end with "a"

WHERE CustomerName LIKE Finds any values that have "or" in any position
'%or%'

WHERE CustomerName LIKE '_r%' Finds any values that have "r" in the second position

WHERE CustomerName LIKE Finds any values that start with "a" and are at least 3 characters
'a_%_%' in length

WHERE ContactName LIKE 'a%o' Finds any values that start with "a" and ends with "o"
Base de datos de demostración
A continuación, se muestra una selección de la tabla "Clientes" en la base
de datos de muestra de Northwind:

CustomerID CustomerName ContactName Address City PostalCode Country

1 Alfreds Maria Anders Obere Str. 57 Berlin 12209 Germany


Futterkiste

2 Ana Trujillo Ana Trujillo Avda. de la México 05021 Mexico


Emparedados y Constitución D.F.
helados 2222

3 Antonio Moreno Antonio Mataderos México 05023 Mexico


Taquería Moreno 2312 D.F.

4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.

5 Berglunds Christina Berguvsvägen Luleå S-958 22 Sweden


snabbköp Berglund 8

Ejemplos de SQL LIKE


La siguiente declaración SQL selecciona a todos los clientes con un nombre
de cliente que comienza con "a":

Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';

La siguiente declaración SQL selecciona a todos los clientes con un


CustomerName que termina con "a":

Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
La siguiente declaración SQL selecciona a todos los clientes con un nombre
de cliente que tienen "o" en cualquier posición:

Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';

La siguiente declaración SQL selecciona a todos los clientes con un nombre


de cliente que tienen "r" en la segunda posición:

Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';

La siguiente declaración SQL selecciona a todos los clientes con un nombre


de cliente que comienza con "a" y tiene una longitud de al menos 3
caracteres:

Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE 'a_%_%';

La siguiente declaración SQL selecciona a todos los clientes con un Nombre


de contacto que comienza con "a" y termina con "o":

Ejemplo
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
La siguiente declaración SQL selecciona a todos los clientes con un nombre
de cliente que NO comienza con "a":

Ejemplo
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';

El operador BETWEEN de SQL


El operador BETWEEN selecciona valores dentro de un rango dado. Los
valores pueden ser números, texto o fechas.

El operador BETWEEN es inclusivo: se incluyen los valores inicial y final.

ENTRE la sintaxis
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

Base de datos de demostración


A continuación, se muestra una selección de la tabla "Productos" en la base
de datos de muestra de Northwind:

ProductID ProductName SupplierID CategoryID Unit Price

1 Chais 1 1 10 boxes x 20 18
bags

2 Chang 1 1 24 - 12 oz 19
bottles
3 Aniseed Syrup 1 2 12 - 550 ml 10
bottles

4 Chef Anton's Cajun 1 2 48 - 6 oz jars 22


Seasoning

5 Chef Anton's Gumbo 1 2 36 boxes 21.35


Mix

ENTRE EJEMPLO
La siguiente declaración SQL selecciona todos los productos con un precio
ENTRE 10 y 20:

Ejemplo
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;

NO ENTRE Ejemplo
Para mostrar los productos fuera del rango del ejemplo anterior, use NO
ENTRE:

Ejemplo
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
ENTRE con el ejemplo IN
La siguiente declaración SQL selecciona todos los productos con un precio
ENTRE 10 y 20. Además; No muestre productos con una CategoryID de 1,2
o 3:

Ejemplo
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);

ENTRE Ejemplo de valores de texto


La siguiente declaración SQL selecciona todos los productos con un
ProductName ENTRE 'Carnarvon Tigers' y 'Mozzarella di Giovanni':

Ejemplo
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di
Giovanni'
ORDER BY ProductName;

NO ENTRE Ejemplo de valores de texto


La siguiente declaración SQL selecciona todos los productos con un
ProductName NO ENTRE 'Carnarvon Tigers' y 'Mozzarella di Giovanni':

Ejemplo
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella
di Giovanni'
ORDER BY ProductName;
Tabla de muestra
A continuación se muestra una selección de la tabla "Pedidos" en la base de
datos de ejemplo de Northwind:

OrderID CustomerID EmployeeID OrderDate ShipperID

10248 90 5 7/4/1996 3

10249 81 6 7/5/1996 1

10250 34 4 7/8/1996 2

10251 84 3 7/9/1996 1

10252 76 4 7/10/1996 2

ENTRE FECHAS Ejemplo


La siguiente declaración SQL selecciona todas las órdenes con una fecha de
pedido ENTRE '01 -Julio-1996 'y '31 -Julio-1996':

Ejemplo
SELECT * FROM Orders
WHERE OrderDate BETWEEN #01/07/1996# AND #31/07/1996#;
O:

Ejemplo
SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';

El SQL ANY y ALL


Los operadores ANY y ALL se utilizan con una cláusula WHERE o HAVING.

El operador ANY devuelve true si alguno de los valores de la subconsulta


cumple la condición.

El operador ALL devuelve verdadero si todos los valores de subconsulta


cumplen la condición.

Cualquier sintaxis
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name FROM table_name WHERE condition);

ALL Sintaxis
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name FROM table_name WHERE condition);

Base de datos de demostración


A continuación se muestra una selección de la tabla "Productos" en la base
de datos de muestra de Northwind:

ProductID ProductName SupplierID CategoryID Unit Price

1 Chais 1 1 10 boxes x 20 18
bags

2 Chang 1 1 24 - 12 oz 19
bottles

3 Aniseed Syrup 1 2 12 - 550 ml 10


bottles

4 Chef Anton's Cajun 2 2 48 - 6 oz jars 22


Seasoning

5 Chef Anton's Gumbo 2 2 36 boxes 21.35


Mix

Y una selección de la tabla "OrderDetails":

OrderDetailID OrderID ProductID Quantity

1 10248 11 12
2 10248 42 10

3 10248 72 5

4 10249 14 9

5 10249 51 40

SQL ANY Ejemplos


El operador ANY devuelve VERDADERO si alguno de los valores de la
subconsulta cumple la condición.

La siguiente instrucción SQL devuelve VERDADERO y enumera los nombres


de los productos si encuentra CUALQUIER registro en la tabla de Detalles
de Orden que la cantidad = 10:

Ejemplo
SELECT ProductName
FROM Products
WHERE ProductID
= ANY (SELECT ProductID FROM OrderDetails WHEREQuantity = 10);

La siguiente instrucción SQL devuelve VERDADERO y enumera los nombres


de los productos si encuentra CUALQUIER registro en la tabla de Detalles
de Orden que tenga esa cantidad> 99:

Ejemplo
SELECT ProductName
FROM Products
WHERE ProductID
= ANY (SELECT ProductID FROM OrderDetails WHEREQuantity > 99);
Ejemplo de SQL ALL
El operador ALL devuelve VERDADERO si todos los valores de subconsulta
cumplen la condición.

La siguiente declaración SQL devuelve VERDADERO y enumera los nombres


de productos si TODOS los registros en la tabla OrderDetails tienen
cantidad = 10:

Ejemplo
SELECT ProductName
FROM Products
WHERE ProductID
= ALL (SELECT ProductID FROM OrderDetails WHEREQuantity = 10);

¿Qué es consultas anidadas?


Es una subconsulta, una consulta que se lanza dentro de otra consulta.
Por ejemplo:

select nombre, edad from Jugadores where NomEquipo in(select Nombre from Equipos
where titulos=2);

Esto nos da el nombre y edad de los jugadores cuyos equipos tengan dos titulos.
Primero se resuelve la subconsulta o consulta anidada dando los nombres de los
aquipos que tienen dos titulos y luego este dato se compara con la tabla jugadores
resolviendo la otra consulta.
Hay problemas con ellas porque son lentas al tener que resolver una por una cada
consulta, por eso se recomienda usar consultas multitabla que hacen la consulta
directamente en mas de una tabla a la vez.
Multitabla seria algo asi..

select Jugadores.nombre, Jugadores.edad from Jugadores inner join Equipos on


Jugadores.NomEquipo = Equipos.Nombre where Equipos.titulos=2;

Funciones SQL NULL


Funciones SQL IFNULL (), ISNULL (), COALESCE () y NVL ()
Mira la siguiente tabla de "Productos":

P_Id ProductName UnitPrice UnitsInStock UnitsOnOrder

1 Jarlsberg 10.45 16 15

2 Mascarpone 32.56 23

3 Gorgonzola 15.67 9 20

Supongamos que la columna "UnitsOnOrder" es opcional y puede contener


valores NULL.

Mira la siguiente declaración SELECT:

SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)


FROM Products;

En el ejemplo anterior, si alguno de los valores de "UnitsOnOrder" es NULL,


el resultado será NULL.

Soluciones
MySQL

La función MySQL IFNULL () le permite devolver un valor alternativo si una


expresión es NULL:

SELECT ProductName, UnitPrice * (UnitsInStock +


IFNULL(UnitsOnOrder, 0))
FROM Products

o podemos usar la función COALESCE () , así:


SELECT ProductName, UnitPrice * (UnitsInStock
+ COALESCE(UnitsOnOrder, 0))
FROM Products

servidor SQL

La función ISNULL () de SQL Server le permite devolver un valor alternativo


cuando una expresión es NULL:

SELECT ProductName, UnitPrice * (UnitsInStock +


ISNULL(UnitsOnOrder, 0))
FROM Products

MS Access

La función IsNull () de MS Access devuelve VERDADERO (-1) si la expresión


es un valor nulo, de lo contrario FALSO (0):

SELECT ProductName, UnitPrice * (UnitsInStock +


IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products

Oráculo

La función Oracle NVL () logra el mismo resultado:

SELECT ProductName, UnitPrice * (UnitsInStock +


NVL(UnitsOnOrder, 0))
FROM Products

SQL JOIN
Una cláusula JOIN se utiliza para combinar filas de dos o más tablas, en
función de una columna relacionada entre ellas.

Veamos una selección de la tabla "Pedidos":

OrderID CustomerID OrderDate

10308 2 1996-09-18
10309 37 1996-09-19

10310 77 1996-09-20

Luego, mire una selección de la tabla "Clientes":

CustomerID CustomerName ContactName Country

1 Alfreds Futterkiste Maria Anders Germany

2 Ana Trujillo Emparedados y helados Ana Trujillo Mexico

3 Antonio Moreno Taquería Antonio Moreno Mexico

Observe que la columna "CustomerID" en la tabla "Pedidos" se refiere a


"CustomerID" en la tabla "Clientes". La relación entre las dos tablas
anteriores es la columna "CustomerID".

Luego, podemos crear la siguiente declaración SQL (que contiene un INNER


JOIN), que selecciona registros que tienen valores coincidentes en ambas
tablas:
Ejemplo
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;

y producirá algo como esto:

OrderID CustomerName OrderDate

10308 Ana Trujillo Emparedados y helados 9/18/1996

10365 Antonio Moreno Taquería 11/27/1996

10383 Around the Horn 12/16/1996

10355 Around the Horn 11/15/1996

10278 Berglunds snabbköp 8/12/1996

Diferentes tipos de SQL JOINs


Aquí están los diferentes tipos de JOINs en SQL:

 (INNER) JOIN : devuelve registros que tienen valores coincidentes


en ambas tablas
 LEFT (OUTER) JOIN : Devuelve todos los registros de la tabla de la
izquierda y los registros coincidentes de la tabla de la derecha
 JUNTA DERECHA (EXTERIOR) : devuelve todos los registros de la
tabla derecha y los registros coincidentes de la tabla izquierda
 UNIR COMPLETO (EXTERIOR) : devuelve todos los registros
cuando hay una coincidencia en la tabla izquierda o derecha

Вам также может понравиться