Comandos SQL Fundamentales y Ejemplos

Clasificado en Informática

Escrito el en español con un tamaño de 18,72 KB

Introducción a las Consultas SQL

La siguiente instrucción SQL selecciona las columnas "CustomerName" y "City" de la tabla "Customers":

SELECT CustomerName, City
FROM Customers;

La siguiente instrucción SQL selecciona todas las columnas de la tabla "Customers":

SELECT *
FROM Customers;

La Cláusula SELECT DISTINCT

La instrucción SELECT DISTINCT se usa para devolver solo valores distintos (diferentes).

SELECT DISTINCT <em>column1</em>, <em>column2</em>, ...
FROM <em>table_name</em>;

La siguiente declaración SQL enumera la cantidad de países de clientes distintos:

SELECT COUNT(DISTINCT Country)
FROM Customers;

La Cláusula WHERE

La cláusula WHERE se utiliza para filtrar registros.

La cláusula WHERE se utiliza para extraer solo los registros que cumplen una condición especificada.

SELECT <em>column1</em>, <em>column2</em>, ...
FROM <em>table_name</em>
WHERE <em>condition</em>;

La siguiente instrucción SQL selecciona todos los clientes del país "México", en la tabla "Customers":

SELECT *
FROM Customers
WHERE Country='Mexico';

SQL requiere comillas simples alrededor de valores de texto (la mayoría de los sistemas de bases de datos también permitirán comillas dobles).

Sin embargo, los campos numéricos no deben ir entre comillas:

SELECT *
FROM Customers
WHERE CustomerID=1;

Operadores Lógicos (AND, OR, NOT)

La cláusula WHERE se puede combinar con operadores AND, OR y NOT.

Los operadores AND y OR se utilizan para filtrar registros en función de más de una condición:

  • El operador AND muestra un registro si todas las condiciones separadas por AND son VERDADERAS.
  • El operador OR muestra un registro si alguna de las condiciones separadas por OR es VERDADERA.

El operador NOT muestra un registro si la(s) condición(es) NO son VERDADERAS.

SELECT <em>column1</em>, <em>column2</em>, ...
FROM <em>table_name</em>
WHERE <em>condition1</em> AND <em>condition2</em> AND <em>condition3</em> ...;
SELECT <em>column1</em>, <em>column2</em>, ...
FROM <em>table_name</em>
WHERE <em>condition1</em> OR <em>condition2</em> OR <em>condition3</em> ...;
SELECT <em>column1</em>, <em>column2</em>, ...
FROM <em>table_name</em>
WHERE NOT <em>condition</em>;

La siguiente instrucción SQL selecciona todos los campos de "Customers" donde el país es "Alemania" Y la ciudad es "Berlín":

SELECT *
FROM Customers
WHERE Country='Germany' AND City='Berlin';

La siguiente instrucción SQL selecciona todos los campos de "Customers" donde la ciudad es "Berlín" O "München":

SELECT *
FROM Customers
WHERE City='Berlin' OR City='München';

La siguiente instrucción SQL selecciona todos los campos de "Customers" donde el país NO es "Alemania":

SELECT *
FROM Customers
WHERE NOT Country='Germany';

También puede combinar los operadores AND, OR y NOT.

La siguiente instrucción SQL selecciona todos los campos de "Customers" donde el país es "Alemania" Y la ciudad debe ser "Berlín" O "München" (use paréntesis para formar expresiones complejas):

SELECT *
FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');

La siguiente instrucción SQL selecciona todos los campos de "Customers" donde el país NO es "Alemania" y NO es "EE. UU.":

SELECT *
FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';

La Cláusula ORDER BY

La palabra clave ORDER BY se usa para ordenar el conjunto de resultados en orden ascendente o descendente.

La palabra clave ORDER BY ordena los registros en orden ascendente por defecto. Para ordenar los registros en orden descendente, use la palabra clave DESC.

SELECT <em>column1</em>, <em>column2</em>, ...
FROM <em>table_name</em>
ORDER BY <em>column1</em>, <em>column2</em>, ... ASC|DESC;

La siguiente instrucción SQL selecciona todos los clientes de la tabla "Customers", ordenados por la columna "Country":

SELECT *
FROM Customers
ORDER BY Country;

La siguiente instrucción SQL selecciona todos los clientes de la tabla "Customers", ordenados DESCENDENTE por la columna "Country":

SELECT *
FROM Customers
ORDER BY Country DESC;

La siguiente declaración SQL selecciona todos los clientes de la tabla "Customers", ordenados por la columna "Country" y "CustomerName":

SELECT *
FROM Customers
ORDER BY Country, CustomerName;

La siguiente instrucción SQL selecciona todos los clientes de la tabla "Customers", ordenados ascendentemente por "Country" y descendente por la columna "CustomerName":

SELECT *
FROM Customers
ORDER BY Country ASC, CustomerName DESC;

La Instrucción INSERT INTO

La instrucción INSERT INTO se utiliza para insertar nuevos registros en una tabla.

Es posible escribir la instrucción INSERT INTO de dos formas.

La primera forma especifica tanto los nombres de columna como los valores a insertar:

INSERT INTO <em>table_name</em> (<em>column1</em>, <em>column2</em>, <em>column3</em>, ...)
VALUES (<em>value1</em>, <em>value2</em>, <em>value3</em>, ...);

Si se están agregando valores para todas las columnas de la tabla, no es necesario especificar los nombres de columna en la consulta SQL. Sin embargo, asegúrese de que el orden de los valores coincida con el orden de las columnas de la tabla. La sintaxis INSERT INTO sería la siguiente:

INSERT INTO <em>table_name</em>
VALUES (<em>value1</em>, <em>value2</em>, <em>value3</em>, ...);

La siguiente instrucción SQL inserta un nuevo registro en la tabla "Customers":

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');

También es posible insertar datos solo en columnas específicas.

La siguiente instrucción SQL insertará un nuevo registro, pero solo insertará datos en las columnas "CustomerName", "City" y "Country" (CustomerID se asignará automáticamente):

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');

Valores NULL

Un campo con valor **NULL** es un campo sin valor.

Si un campo en una tabla es opcional, es posible insertar o actualizar un registro sin asignar un valor a este campo. En ese caso, el campo se guardará con valor **NULL**.

No es posible comparar valores **NULL** con operadores de comparación como `=`, `<`, o `<>`.

En su lugar, se deben usar los operadores **IS NULL** e **IS NOT NULL**.

SELECT <em>column_names</em>
FROM <em>table_name</em>
WHERE <em>column_name</em> IS NULL;
SELECT <em>column_names</em>
FROM <em>table_name</em>
WHERE <em>column_name</em> IS NOT NULL;

La siguiente instrucción SQL usa el operador **IS NULL** para listar a todas las personas que no tienen dirección:

SELECT LastName, FirstName, Address
FROM Persons
WHERE Address IS NULL;

La siguiente instrucción SQL usa el operador **IS NOT NULL** para listar a todas las personas que sí tienen una dirección:

SELECT LastName, FirstName, Address
FROM Persons
WHERE Address IS NOT NULL;

La Instrucción UPDATE

La instrucción UPDATE se utiliza para modificar registros existentes en una tabla.

UPDATE <em>table_name</em>
SET <em>column1</em> = <em>value1</em>, <em>column2</em> = <em>value2</em>, ...
WHERE <em>condition</em>;

La siguiente declaración SQL actualiza el primer cliente (CustomerID = 1) con una nueva persona de contacto y una nueva ciudad.

UPDATE Customers
SET ContactName = 'Alfred Schmidt', City = 'Frankfurt'
WHERE CustomerID = 1;

La cláusula **WHERE** determina cuántos registros se actualizarán.

La siguiente instrucción SQL actualizará el nombre de contacto a "Juan" para todos los registros donde el país sea "México":

UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';

La Instrucción DELETE

La declaración DELETE se utiliza para eliminar registros existentes en una tabla.

DELETE FROM <em>table_name</em>
WHERE <em>condition</em>;

La siguiente declaración SQL elimina al cliente "Alfreds Futterkiste" de la tabla "Customers":

DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';

Es posible eliminar todas las filas de una tabla sin eliminar la tabla. Esto significa que la estructura de la tabla, los atributos y los índices permanecerán intactos:

DELETE FROM <em>table_name</em>;

La Cláusula SELECT TOP

La cláusula SELECT TOP se usa para especificar el número de registros a devolver.

La cláusula SELECT TOP es útil en tablas grandes con miles de registros. Devolver una gran cantidad de registros puede afectar el rendimiento.

SELECT TOP <em>number</em>|<em>percent</em> <em>column_name(s)</em>
FROM <em>table_name</em>
WHERE <em>condition</em>;

La siguiente instrucción SQL selecciona los primeros tres registros de la tabla "Customers":

SELECT TOP 3 * FROM Customers;

La siguiente instrucción SQL muestra el ejemplo equivalente usando la cláusula LIMIT (usada en MySQL):

SELECT * FROM Customers
LIMIT 3;

La siguiente instrucción SQL muestra el ejemplo equivalente usando ROWNUM (usado en Oracle):

SELECT * FROM Customers
WHERE ROWNUM <= 3;

La siguiente instrucción SQL selecciona el primer 50% de los registros de la tabla "Customers":

SELECT TOP 50 PERCENT * FROM Customers;

La siguiente instrucción SQL selecciona los primeros tres registros de la tabla "Customers", donde el país es "Alemania":

SELECT TOP 3 * FROM Customers
WHERE Country='Germany';

Funciones Agregadas (MIN, MAX, COUNT, AVG, SUM)

La siguiente instrucción SQL encuentra el precio del producto más barato:

SELECT MIN(Price) AS SmallestPrice
FROM Products;

La siguiente instrucción SQL encuentra el precio del producto más caro:

SELECT MAX(Price) AS LargestPrice
FROM Products;

La función **COUNT()** devuelve el número de filas que coinciden con un criterio especificado.

La función **AVG()** devuelve el valor promedio de una columna numérica.

La función **SUM()** devuelve la suma total de una columna numérica.

La siguiente instrucción SQL encuentra la cantidad de productos:

SELECT COUNT(ProductID)
FROM Products;

La siguiente instrucción SQL encuentra el precio promedio de todos los productos:

SELECT AVG(Price)
FROM Products;

Operador LIKE

La siguiente instrucción SQL selecciona todos los clientes con un CustomerName que comienza con 'a':

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

La siguiente declaración SQL selecciona todos los clientes con un CustomerName que termina con 'a':

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

La siguiente instrucción SQL selecciona todos los clientes con un CustomerName que contiene 'o' en cualquier posición:

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

La siguiente instrucción SQL selecciona todos los clientes con un CustomerName que tenga 'r' en la segunda posición:

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

La siguiente declaración SQL selecciona todos los clientes con un CustomerName que comienza con 'a' y tiene al menos 3 caracteres de longitud:

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

La siguiente instrucción SQL selecciona todos los clientes con un ContactName que comienza con 'a' y termina con 'o':

SELECT *
FROM Customers
WHERE ContactName LIKE 'a%o';

La siguiente instrucción SQL selecciona todos los clientes con un CustomerName que NO comienza con 'a':

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

La siguiente instrucción SQL selecciona todos los clientes con una ciudad que comienza con 'ber':

SELECT *
FROM Customers
WHERE City LIKE 'ber%';

La siguiente instrucción SQL selecciona todos los clientes con una ciudad que contiene el patrón 'es':

SELECT *
FROM Customers
WHERE City LIKE '%es%';

La siguiente instrucción SQL selecciona todos los clientes con una ciudad que comienza con cualquier carácter, seguido de 'erlin':

SELECT *
FROM Customers
WHERE City LIKE '_erlin';

La siguiente declaración SQL selecciona todos los clientes con una ciudad que comienza con 'a', 'b' o 'c':

SELECT *
FROM Customers
WHERE City LIKE '[a-c]%';

Operador IN

La siguiente instrucción SQL selecciona todos los clientes que se encuentran en 'Alemania', 'Francia' y 'Reino Unido':

SELECT *
FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');

La siguiente instrucción SQL selecciona todos los clientes que NO se encuentran en 'Alemania', 'Francia' o 'Reino Unido':

SELECT *
FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');

La siguiente declaración SQL selecciona todos los clientes que son de los mismos países que los proveedores:

SELECT *
FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);

Operador BETWEEN

La siguiente instrucción SQL selecciona todas las órdenes con un OrderDate **BETWEEN** '1996-07-04' y '1996-07-09':

SELECT *
FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;

La siguiente instrucción SQL selecciona todos los productos con un ProductName **NOT BETWEEN** 'Carnarvon Tigers' y 'Mozzarella di Giovanni':

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

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

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

La siguiente instrucción SQL selecciona todos los productos con un precio **BETWEEN** 10 y 20. Además, no muestre productos con un ID de categoría de 1, 2 o 3:

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

JOINs

La siguiente instrucción SQL selecciona todas las órdenes con información del cliente y del remitente:

SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);

La siguiente instrucción SQL selecciona todas las órdenes con información del cliente:

SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

La siguiente declaración SQL seleccionará todos los clientes y todas las órdenes que puedan tener (incluye clientes sin órdenes):

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

La siguiente instrucción SQL devolverá todos los empleados y todas las órdenes que puedan haber realizado (incluye empleados sin órdenes):

SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;

La siguiente declaración SQL selecciona todos los clientes y todas las órdenes (incluye clientes sin órdenes y órdenes sin clientes):

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;

Self Join

La siguiente instrucción SQL encuentra los clientes que son de la misma ciudad:

SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;

Operador UNION

La siguiente declaración SQL selecciona todas las ciudades distintas de 'Customers' y 'Suppliers':

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

La siguiente instrucción SQL selecciona todas las ciudades (incluyendo duplicados) de 'Customers' y 'Suppliers':

SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;

La siguiente declaración SQL selecciona todas las ciudades alemanas distintas de 'Customers' y 'Suppliers':

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

Entradas relacionadas: