Buscar..


Sintaxis

  • SELECCIONAR nombre_columna
    FROM nombre_tabla
    DÓNDE nombre del operador column_name
  • SELECCIONAR column_name, aggregate_function (column_name)
    FROM nombre_tabla
    GRUPO POR nombre_columna
    TENIENDO el valor del operador aggregate_function (column_name)

La cláusula WHERE solo devuelve filas que coinciden con sus criterios

Steam tiene una sección de juegos por debajo de $ 10 en la página de su tienda. En algún lugar profundo del corazón de sus sistemas, probablemente haya una consulta que se parece a algo como:

SELECT * 
FROM Items 
WHERE Price < 10

Utilice IN para devolver filas con un valor contenido en una lista

Este ejemplo utiliza la tabla de coches de las bases de datos de ejemplo.

SELECT *
FROM Cars
WHERE TotalCost IN (100, 200, 300)

Esta consulta devolverá el Car # 2, que cuesta 200 y el Car # 3, que cuesta 100. Tenga en cuenta que esto es equivalente a usar varias cláusulas con OR , por ejemplo:

SELECT *
FROM Cars
WHERE TotalCost = 100 OR TotalCost = 200 OR TotalCost = 300

Usa LIKE para encontrar cadenas y subcadenas que coincidan

Ver la documentación completa en el operador LIKE .

Este ejemplo utiliza la tabla de empleados de las bases de datos de ejemplo.

SELECT *
FROM Employees
WHERE FName LIKE 'John'

Esta consulta solo devolverá al Empleado # 1 cuyo nombre coincide exactamente con 'John'.

SELECT *
FROM Employees
WHERE FName like 'John%'

Agregar % permite buscar una subcadena:

  • John% : devolverá a cualquier Empleado cuyo nombre comience con 'John', seguido de cualquier cantidad de caracteres
  • %John : devolverá a cualquier Empleado cuyo nombre termine con 'John', seguido por cualquier cantidad de caracteres
  • %John% : devolverá a cualquier empleado cuyo nombre contenga "John" en cualquier lugar dentro del valor

En este caso, la consulta devolverá al Empleado # 2 cuyo nombre es 'John', así como al Empleado # 4 cuyo nombre es 'Johnathon'.

Cláusula WHERE con valores NULL / NOT NULL

SELECT *
FROM Employees
WHERE ManagerId IS NULL

Esta declaración devolverá todos los registros de Empleado donde el valor de la columna ManagerId es NULL .

El resultado será:

Id    FName    LName    PhoneNumber    ManagerId    DepartmentId
1     James    Smith    1234567890     NULL         1

SELECT *
FROM Employees
WHERE ManagerId IS NOT NULL

Esta declaración devolverá todos los registros de Empleado donde el valor de ManagerId no sea NULL .

El resultado será:

Id    FName       LName     PhoneNumber    ManagerId    DepartmentId
2     John        Johnson   2468101214     1            1
3     Michael     Williams  1357911131     1            2
4     Johnathon   Smith     1212121212     2            1

Nota: la misma consulta no devolverá resultados si cambia la cláusula WHERE ManagerId = NULL a WHERE ManagerId = NULL o WHERE ManagerId <> NULL .

Usar HAVING con funciones agregadas

A diferencia de la cláusula WHERE , HAVING se puede usar con funciones agregadas.

Una función agregada es una función donde los valores de varias filas se agrupan como entrada en ciertos criterios para formar un valor único de significado o medida más significativo ( Wikipedia ).

Las funciones agregadas comunes incluyen COUNT() , SUM() , MIN() y MAX() .


Este ejemplo utiliza la tabla de coches de las bases de datos de ejemplo.

SELECT CustomerId, COUNT(Id) AS [Number of Cars]
FROM Cars
GROUP BY CustomerId
HAVING COUNT(Id) > 1

Esta consulta devolverá el Number of Cars CustomerId y Number of Cars de cualquier cliente que tenga más de un auto. En este caso, el único cliente que tiene más de un automóvil es el Cliente # 1.

Los resultados se verán como:

Identificación del cliente Numero de autos
1 2

Use ENTRE para filtrar los resultados

Los siguientes ejemplos utilizan las bases de datos de muestra Item Sales and Customers .

Nota: El operador BETWEEN es inclusivo.

Usando el operador BETWEEN con números:

SELECT * From ItemSales
WHERE Quantity BETWEEN 10 AND 17

Esta consulta devolverá todos los registros de ItemSales que tienen una cantidad mayor o igual a 10 y menor o igual a 17. Los resultados se verán como:

Carné de identidad Fecha de venta Identificación del artículo Cantidad Precio
1 2013-07-01 100 10 34.5
4 2013-07-23 100 15 34.5
5 2013-07-24 145 10 34.5

Usando el operador BETWEEN con valores de fecha:

SELECT * From ItemSales
WHERE SaleDate BETWEEN '2013-07-11' AND '2013-05-24'

Esta consulta devolverá todos los registros de ItemSales con una fecha de SaleDate mayor o igual al 11 de julio de 2013 y menor o igual al 24 de mayo de 2013.

Carné de identidad Fecha de venta Identificación del artículo Cantidad Precio
3 2013-07-11 100 20 34.5
4 2013-07-23 100 15 34.5
5 2013-07-24 145 10 34.5

Cuando compare valores de fecha y hora en lugar de fechas, es posible que deba convertir los valores de fecha y hora en valores de fecha, o sumar o restar 24 horas para obtener los resultados correctos.


Usando el operador BETWEEN con valores de texto:

SELECT Id, FName, LName FROM Customers
WHERE LName BETWEEN 'D' AND 'L';

Ejemplo en vivo: violín de SQL

Esta consulta devolverá a todos los clientes cuyo nombre alfabéticamente se encuentre entre las letras 'D' y 'L'. En este caso, los clientes # 1 y # 3 serán devueltos. El cliente # 2, cuyo nombre comience con una 'M' no será incluido.

Carné de identidad FName LName
1 William Jones
3 Ricardo Davis

Igualdad

SELECT * FROM Employees 

Esta declaración devolverá todas las filas de la tabla Employees .

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Usar un WHERE al final de su instrucción SELECT permite limitar las filas devueltas a una condición. En este caso, donde hay una coincidencia exacta usando el signo = :

SELECT * FROM Employees WHERE DepartmentId = 1

Solo devolverá las filas donde el DepartmentId es igual a 1 :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Y y o

También puede combinar varios operadores para crear condiciones de WHERE más complejas. Los siguientes ejemplos utilizan la tabla Employees :

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
1    James     Smith    1234567890    NULL        1               1000    01-01-2002    01-01-2002    01-01-2002
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Y

SELECT * FROM Employees WHERE DepartmentId = 1 AND ManagerId = 1

Volverá

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
2    John      Johnson  2468101214    1           1               400     23-03-2005    23-03-2005    01-01-2002

O

SELECT * FROM Employees WHERE DepartmentId = 2 OR ManagerId = 2

Volverá

Id   FName     LName    PhoneNumber   ManagerId   DepartmentId    Salary  Hire_date     CreatedDate   ModifiedDate
3    Michael   Williams 1357911131    1           2               600     12-05-2009    12-05-2009    NULL
4    Johnathon Smith    1212121212    2           1               500     24-07-2016    24-07-2016    01-01-2002

Use HAVING para verificar múltiples condiciones en un grupo

Tabla de Pedidos

Identificación del cliente Identificación de producto Cantidad Precio
1 2 5 100
1 3 2 200
1 4 1 500
2 1 4 50
3 5 6 700

Para verificar los clientes que han pedido ambos, ProductID 2 y 3, se puede usar HAVING

 select customerId
 from orders
 where productID in (2,3)
 group by customerId
 having count(distinct productID) = 2

Valor de retorno:

Identificación del cliente
1

La consulta selecciona solo los registros con productIDs en las preguntas y con la cláusula HAVING verifica los grupos que tienen 2 productIds y no solo uno.

Otra posibilidad seria

 select customerId
 from orders
 group by customerId
 having sum(case when productID = 2 then 1 else 0 end) > 0
    and sum(case when productID = 3 then 1 else 0 end) > 0

Esta consulta selecciona solo grupos que tienen al menos un registro con productID 2 y al menos uno con productID 3.

Donde exista

Seleccionará registros en TableName que tengan registros coincidentes en TableName1 .

SELECT * FROM TableName t WHERE EXISTS (
    SELECT 1 FROM TableName1 t1 where t.Id = t1.Id)


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow