Tutorial de SQL Server
Tutorial de SQL Server
SQL es un lenguaje estndar para almacenar, manipular y recuperar datos en bases de datos.
Introduccin al SQL
SQL es un lenguaje estndar para acceder y manipular bases de datos.
Qu es SQL?
SQL significa Structured Query Language
SQL le permite acceder y manipular bases de datos
SQL es un estndar ANSI (American National Standards Institute)
Sin embargo, para ser compatible con el estndar ANSI, todos ellos soportan al menos los comandos principales (como
SELECT, UPDATE, DELETE, INSERT, WHERE) de una manera similar.
Nota: La mayora de los programas de base de datos SQL tambin tienen sus propias extensiones propietarias adems
del estndar SQL.
Un programa de base de datos RDBMS (es decir, MS Access, SQL Server, MySQL)
Para utilizar un lenguaje de scripting del lado del servidor, como PHP o ASP
Para usar SQL para obtener los datos que desea
Para usar HTML / CSS para disear la pgina
RDBMS
RDBMS significa Sistema de Gestin de Bases de Datos Relacionales.
RDBMS es la base para SQL y para todos los sistemas de bases de datos modernos como MS SQL Server, IBM DB2,
Oracle, MySQL y Microsoft Access.
Los datos en RDBMS se almacenan en objetos de base de datos denominados tablas. Una tabla es una coleccin de
entradas de datos relacionadas y consiste en columnas y filas.
Ejemplo
SELECT * FROM Customers;
Cada tabla se divide en entidades ms pequeas llamadas campos. Los campos de la tabla Customers constan de
CustomerID, CustomerName, ContactName, Address, City, PostalCode y Country. Un campo es una columna de una
tabla que est diseada para mantener informacin especfica acerca de cada registro de la tabla.
Un registro, tambin llamado una fila, es cada entrada individual que existe en una tabla. Por ejemplo, hay 91 registros
en la tabla Customers anterior. Un registro es una entidad horizontal en una tabla.
Una columna es una entidad vertical en una tabla que contiene toda la informacin asociada a un campo especfico de
una tabla.
Sintaxis de SQL
Tablas de base de datos
Una base de datos a menudo contiene una o ms tablas. Cada tabla se identifica con un nombre (por ejemplo,
"Clientes" u "Pedidos"). Las tablas contienen registros (filas) con datos.
En este tutorial usaremos la conocida base de datos de ejemplo de Northwind (incluida en MS Access y MS SQL Server).
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
La tabla anterior contiene cinco registros (uno para cada cliente) y siete columnas (CustomerID, CustomerName,
ContactName, Address, City, PostalCode y Country).
Sentencias SQL
La mayora de las acciones que necesita realizar en una base de datos se realizan con sentencias SQL.
Ejemplo
SELECT * FROM Customers;
Los datos devueltos se almacenan en una tabla de resultados, denominada conjunto de resultados.
SELECT Sintaxis
SELECT column1, column2, ...
FROM table_name;
Aqu, column1, column2, ... son los nombres de campo de la tabla de la que desea seleccionar los datos. Si desea
seleccionar todos los campos disponibles en la tabla, utilice la siguiente sintaxis:
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
SELECT CustomerName, City FROM Customers;
Ejemplo
SELECT * FROM Customers;
Dentro de una tabla, una columna contiene a menudo muchos valores duplicados; ya veces slo desea enumerar los
diferentes valores (distintos).
La instruccin SELECT DISTINCT se utiliza para devolver slo valores distintos (diferentes).
SELECT DISTINCT Sintaxis
SELECT DISTINCT column1, column2, ...
FROM table_name;
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
SELECT Ejemplo
La instruccin SQL siguiente selecciona todos los valores (y duplicados) de la columna "Pas" de la tabla "Clientes":
Ejemplo
SELECT Country FROM Customers;
Ejemplo
SELECT DISTINCT Country FROM Customers;
Ejemplo
SELECT COUNT(DISTINCT Country) FROM Customers;
La clusula WHERE se utiliza para extraer slo los registros que cumplen una condicin especificada.
Sintaxis de WHERE
SELECT column1, column2, ...
FROM table_name
WHERE condition;
Nota: La clusula WHERE no slo se utiliza en la instruccin SELECT, tambin se utiliza en UPDATE, DELETE
declaracin, etc!
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbkp Christina Berguvsvgen 8 Lule S-958 22 Sweden
Berglund
Ejemplo
SELECT * FROM Customers
WHERE Country='Mexico';
Operator Description
= Equal
<> Not equal. Note: In some versions of SQL this operator may be written
as !=
> Greater than
Los operadores AND y OR se utilizan para filtrar registros basados en ms de una condicin:
El operador AND muestra un registro si todas las condiciones separadas por AND son TRUE.
El operador OR muestra un registro si alguna de las condiciones separadas por OR es TRUE.
Sintaxis AND
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
OR Sintaxis
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
Sin sintaxis
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Y Ejemplo
La instruccin SQL siguiente selecciona todos los campos de "Clientes" donde el pas es "Alemania" Y la ciudad es
"Berln":
Ejemplo
SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';
Ejemplo
SELECT * FROM Customers
WHERE City='Berlin' OR City='Mnchen';
No ejemplo
La instruccin SQL siguiente selecciona todos los campos de "Clientes" donde el pas NO es "Alemania":
Ejemplo
SELECT * FROM Customers
WHERE NOT Country='Germany';
La siguiente sentencia SQL selecciona todos los campos de "Clientes" donde el pas es "Alemania" Y la ciudad debe ser
"Berln" O "Mnchen" (use parntesis para formar expresiones complejas):
Ejemplo
SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='Mnchen');
La instruccin SQL siguiente selecciona todos los campos de "Clientes" donde el pas NO es "Alemania" y NO "EE. UU.":
Ejemplo
SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';
La palabra ORDER BY ordena los registros en orden ascendente por defecto. Para ordenar los registros en orden
descendente, utilice la palabra clave DESC.
Sintaxis de ORDER BY
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
SELECT * FROM Customers
ORDER BY Country;
Ejemplo
SELECT * FROM Customers
ORDER BY Country DESC;
Ejemplo
SELECT * FROM Customers
ORDER BY Country, CustomerName;
Ejemplo
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
Si est agregando valores para todas las columnas de la tabla, no es necesario especificar los nombres de columna en
la consulta SQL. Sin embargo, asegrese de que el orden de los valores est en el mismo orden que las columnas de la
tabla. La sintaxis INSERT INTO sera la siguiente:
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
La siguiente instruccin SQL insertar un nuevo registro, pero slo insertar datos en las columnas "CustomerName",
"City" y "Country" (CustomerID se actualizar automticamente):
Ejemplo
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
89 White Clover Markets Karl Jablonski 305 - 14th Ave. S. Suite 3B Seattle 98128 USA
Nota: Es muy importante entender que un valor NULL es diferente de un valor cero o un campo que contiene
espacios. Un campo con un valor NULL es uno que se ha dejado en blanco durante la creacin del registro!
Sintaxis de IS NULL
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
Suponga que la columna "Direccin" de la tabla "Personas" es opcional. Si se inserta un registro sin valor para
"Direccin", la columna "Direccin" se guardar con un valor NULL.
El operador IS NULL
La instruccin SQL siguiente utiliza el operador IS NULL para enumerar todas las personas que no tienen direccin:
Bloggs Joe
Roe Jane
Sintaxis de UPDATE
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
Nota: Tenga cuidado al actualizar registros en una tabla! Observe la clusula WHERE en la instruccin
UPDATE. La clusula WHERE especifica qu registro (s) que se debe actualizar. Si omite la clusula WHERE,
todos los registros de la tabla se actualizarn.
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
La instruccin SQL siguiente actualizar el nombre de contacto a "Juan" para todos los registros donde el pas es
"Mxico":
Ejemplo
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
Actualizar Aviso!
Tenga cuidado al actualizar los registros. Si omite la clusula WHERE, TODOS los registros se actualizarn!
Ejemplo
UPDATE Customers
SET ContactName='Juan';
4 Around the Horn Juan 120 Hanover Sq. London WA1 1DP UK
Sintaxis DELETE
DELETE FROM table_name
WHERE condition;
Nota: Tenga cuidado al eliminar registros en una tabla! Observe la clusula WHERE en la instruccin DELETE. La
clusula WHERE especifica qu registros deben eliminarse. Si omite la clusula WHERE, todos los registros
de la tabla se eliminarn.
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
2 Ana Trujillo Emparedados y Ana Trujillo Avda. de la Constitucin Mxico 05021 Mexico
helados 2222 D.F.
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
o:
La clusula SELECT TOP es til en tablas grandes con miles de registros. Devolver un gran nmero de registros puede
tener un impacto en el rendimiento.
Nota: No todos los sistemas de bases de datos admiten la clusula SELECT TOP. MySQL admite la clusula LIMIT
para seleccionar un nmero limitado de registros, mientras que Oracle utiliza ROWNUM.
Sintaxis de MySQL:
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
Sintaxis de Oracle:
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
SELECT TOP 3 * FROM Customers;
Ejemplo
SELECT * FROM Customers
WHERE ROWNUM <= 3;
Ejemplo
SELECT TOP 50 PERCENT * FROM Customers;
Ejemplo
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';
Ejemplo
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
Ejemplo
SELECT * FROM Customers
WHERE Country='Germany' AND ROWNUM <= 3;
Funciones SQL MIN () y MAX ()
Las funciones SQL MIN () y MAX ()
La funcin MIN () devuelve el valor ms pequeo de la columna seleccionada.
MIN () Sintaxis
SELECT MIN(column_name)
FROM table_name
WHERE condition;
Sintaxis MAX ()
SELECT MAX(column_name)
FROM table_name
WHERE condition;
Demo Database
A continuacin se muestra una seleccin de la tabla "Productos" de la base de datos de ejemplo Northwind:
2 Chang 1 1 24 - 12 oz bottles 19
Ejemplo
SELECT MIN(Price) AS SmallestPrice
FROM Products;
MAX () Ejemplo
La instruccin SQL siguiente encuentra el precio del producto ms caro:
Ejemplo
SELECT MAX(Price) AS LargestPrice
FROM Products;
COUNT () Sintaxis
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
Sintaxis de AVG ()
SELECT AVG(column_name)
FROM table_name
WHERE condition;
Sintaxis SUM ()
SELECT SUM(column_name)
FROM table_name
WHERE condition;
Demo Database
A continuacin se muestra una seleccin de la tabla "Productos" de la base de datos de ejemplo Northwind:
2 Chang 1 1 24 - 12 oz bottles 19
Ejemplo COUNT ()
La instruccin SQL siguiente encuentra el nmero de productos:
Ejemplo
SELECT COUNT(ProductID)
FROM Products;
Ejemplo
SELECT AVG(Price)
FROM Products;
Demo Database
A continuacin se muestra una seleccin de la tabla "OrderDetails" en la base de datos de ejemplo Northwind:
1 10248 11 12
2 10248 42 10
3 10248 72 5
4 10249 14 9
5 10249 51 40
SUM () Ejemplo
La siguiente instruccin SQL encuentra la suma de los campos "Cantidad" en la tabla "OrderDetails":
Ejemplo
SELECT SUM(Quantity)
FROM OrderDetails;
Intntalo t mismo "
Nota: MS Access utiliza un signo de interrogacin (?) En lugar del subrayado (_).
Sintaxis de LIKE
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
Sugerencia: Tambin puede combinar cualquier nmero de condiciones con los operadores AND u OR.
Estos son algunos ejemplos que muestran diferentes operadores LIKE con comodines '%' y '_':
LIKE Operator Description
WHERE CustomerName LIKE Finds any values that starts with "a"
'a%'
WHERE CustomerName LIKE Finds any values that ends with "a"
'%a'
WHERE CustomerName LIKE Finds any values that have "or" in any position
'%or%'
WHERE CustomerName LIKE Finds any values that have "r" in the second position
'_r%'
WHERE CustomerName LIKE Finds any values that starts with "a" and are at least 3
'a_%_%' characters in length
WHERE ContactName LIKE Finds any values that starts with "a" and ends with "o"
'a%o'
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
Intntalo t mismo "
La instruccin SQL siguiente selecciona todos los clientes con un CustomerName que termina con "a":
Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
La instruccin SQL siguiente selecciona todos los clientes con un CustomerName que tiene "o" en cualquier posicin:
Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';
La instruccin SQL siguiente selecciona todos los clientes con un CustomerName que tienen "r" en la segunda posicin:
Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
Ejemplo
SELECT * FROM Customers
WHERE CustomerName LIKE 'a_%_%';
La instruccin SQL siguiente selecciona todos los clientes con un ContactName que comienza con "a" y termina con "o":
Ejemplo
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
La instruccin SQL siguiente selecciona todos los clientes con un CustomerName que NO empiece con "a":
Ejemplo
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';
Los caracteres comodn se utilizan con el operador SQL LIKE . El operador LIKE se utiliza en una clusula WHERE para
buscar un patrn especificado en una columna.
Nota: MS Access utiliza un signo de interrogacin (?) En lugar del subrayado (_).
Estos son algunos ejemplos que muestran diferentes operadores LIKE con comodines '%' y '_':
WHERE CustomerName LIKE Finds any values that ends with "a"
'%a'
WHERE CustomerName LIKE Finds any values that have "or" in any position
'%or%'
WHERE CustomerName LIKE Finds any values that have "r" in the second position
'_r%'
WHERE CustomerName LIKE Finds any values that starts with "a" and are at least 3
'a_%_%' characters in length
WHERE ContactName LIKE Finds any values that starts with "a" and ends with "o"
'a%o'
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
SELECT * FROM Customers
WHERE City LIKE 'ber%';
Intntalo t mismo "
La instruccin SQL siguiente selecciona todos los clientes con una ciudad que contiene el patrn "es":
Ejemplo
SELECT * FROM Customers
WHERE City LIKE '%es%';
Ejemplo
SELECT * FROM Customers
WHERE City LIKE '_erlin';
La instruccin SQL siguiente selecciona a todos los clientes con una Ciudad que comienza con "L", seguido de cualquier
carcter seguido de "n", seguido de cualquier carcter, seguido de "on":
Ejemplo
SELECT * FROM Customers
WHERE City LIKE 'L_n_on';
Ejemplo
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
La instruccin SQL siguiente selecciona todos los clientes con una ciudad que comienza con "a", "b" o "c":
Ejemplo
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
Ejemplo
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
O:
Ejemplo
SELECT * FROM Customers
WHERE City NOT LIKE '[bsp]%';
SQL IN Operador
El operador SQL IN
El operador IN le permite especificar varios valores en una clusula WHERE.
Sintaxis de IN
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
o:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT STATEMENT);
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
CustomerID CustomerName ContactName Address City PostalCode Country
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
La instruccin SQL siguiente selecciona todos los clientes que NO se encuentran en "Alemania", "Francia" o "Reino
Unido":
Ejemplo
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
La instruccin SQL siguiente selecciona todos los clientes que son de los mismos pases que los proveedores:
Ejemplo
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
ENTRE Sintaxis
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
Demo Database
A continuacin se muestra una seleccin de la tabla "Productos" de la base de datos de ejemplo Northwind:
2 Chang 1 1 24 - 12 oz bottles 19
Ejemplo
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
NO ENTRE Ejemplo
Para mostrar los productos fuera del rango del ejemplo anterior, utilice NOT BETWEEN:
Ejemplo
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
Ejemplo
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);
Ejemplo
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
Intntalo t mismo "
Ejemplo
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
Tabla de muestras
A continuacin se muestra una seleccin de la tabla "Pedidos" en la base de datos de ejemplo Northwind:
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
Alias de SQL
Alias de SQL
Los alias SQL se usan para dar una tabla, o una columna en una tabla, un nombre temporal.
Los alias se utilizan a menudo para hacer que los nombres de columnas sean ms legibles.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
10354 58 8 1996-11-14 3
10355 4 6 1996-11-15 1
10356 86 6 1996-11-18 2
La instruccin SQL siguiente crea dos alias, uno para la columna CustomerName y otro para la columna
ContactName. Nota: Requiere comillas dobles o corchetes si el nombre de alias contiene espacios:
Ejemplo
SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;
La instruccin SQL siguiente crea un alias denominado "Address" que combina cuatro columnas (Address, PostalCode,
City y Country):
Ejemplo
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;
Nota: Para obtener la sentencia SQL anterior para trabajar en MySQL, utilice lo siguiente:
SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;
Ejemplo
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName="Around the Horn" AND c.CustomerID=o.CustomerID;
Ejemplo
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName="Around the Horn" ANDCustomers.CustomerID=Orders.CustomerID;
SQL se une
SQL JOIN
Una clusula JOIN se utiliza para combinar filas de dos o ms tablas, en funcin de una columna relacionada entre ellas.
10308 2 1996-09-18
10309 37 1996-09-19
10310 77 1996-09-20
Observe que la columna "CustomerID" en la tabla "Orders" se refiere al "CustomerID" en la tabla "Customers". La
relacin entre las dos tablas anteriores es la columna "CustomerID".
A continuacin, podemos crear la siguiente sentencia SQL (que contiene una 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;
(INNER) JOIN : Devuelve registros que tienen valores coincidentes en ambas tablas
LEFT (OUTER) JOIN : Devuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla
derecha
RIGHT (OUTER) JOIN : Devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla
izquierda
FULL (OUTER) JOIN : Devuelve todos los registros cuando hay una coincidencia en la tabla izquierda o derecha
SQL INNER JOIN Palabra clave
Anterior Siguiente
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2
Nota: La palabra clave INNER JOIN selecciona todas las filas de ambas tablas siempre y cuando haya una coincidencia
entre las columnas. Si hay registros en la tabla "Pedidos" que no tienen coincidencias en "Clientes", estos
pedidos no se mostrarn!
Ejemplo
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);
Nota: En algunas bases de datos LEFT JOIN se denomina LEFT OUTER JOIN.
Demo Database
En este tutorial usaremos la base de datos de ejemplo Northwind bien conocida.
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2
SQL LEFT JOIN Ejemplo
La siguiente sentencia de SQL seleccionar a todos los clientes y cualquier pedido que tenga:
Ejemplo
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
Nota: La palabra clave LEFT JOIN devuelve todos los registros de la tabla izquierda (clientes), incluso si no hay
coincidencias en la tabla derecha (rdenes).
Nota: En algunas bases de datos RIGHT JOIN se llama RIGHT OUTER JOIN.
Demo Database
En este tutorial usaremos la base de datos de ejemplo Northwind bien conocida.
A continuacin se muestra una seleccin de la tabla "Pedidos":
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2
Ejemplo
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
Nota: La palabra clave RIGHT JOIN devuelve todos los registros de la tabla derecha (Empleados), incluso si no hay
coincidencias en la tabla izquierda (rdenes).
SQL FULL OUTER JOIN Palabra clave
Anterior Siguiente
Nota: FULL OUTER JOIN puede potencialmente devolver conjuntos de resultados muy grandes.
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2
SQL FULL OUTER JOIN Ejemplo
La instruccin SQL siguiente selecciona todos los clientes y todos los pedidos:
CustomerName OrderID
Alfreds Futterkiste
10382
10351
Nota: La palabra clave FULL OUTER JOIN devuelve todas las filas de la tabla izquierda (clientes) y todas las filas de la
tabla derecha (rdenes). Si hay filas en "Clientes" que no tienen coincidencias en "Pedidos", o si hay filas en
"Pedidos" que no tienen coincidencias en "Clientes", esas filas tambin aparecern.
Demo Database
En este tutorial usaremos la base de datos de ejemplo Northwind bien conocida.
Ejemplo
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;
Cada sentencia SELECT dentro de UNION debe tener el mismo nmero de columnas
Las columnas tambin deben tener tipos de datos similares
Las columnas de cada instruccin SELECT tambin deben estar en el mismo orden
Sintaxis de UNION
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
Nota: Los nombres de columnas en el conjunto de resultados suelen ser iguales a los nombres de columnas en la
primera sentencia SELECT de UNION.
Demo Database
En este tutorial usaremos la base de datos de ejemplo Northwind bien conocida.
2 New Orleans Cajun Shelley Burke P.O. Box New 70117 USA
Delights 78934 Orleans
3 Grandma Kelly's Regina Murphy 707 Oxford Ann Arbor 48104 USA
Homestead Rd.
Ejemplo de SQL UNION
La siguiente sentencia SQL selecciona todas las ciudades diferentes (slo valores distintos) de "Clientes" y
"Proveedores":
Ejemplo
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
Nota: Si algunos clientes o proveedores tienen la misma ciudad, cada ciudad slo se enumerar una vez, porque
UNION selecciona slo valores distintos. Utilice UNION ALL para seleccionar tambin valores duplicados!
Ejemplo
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
Ejemplo
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
Ejemplo
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
Ejemplo
SELECT 'Customer' As Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;
Ejemplo
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;
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
La siguiente instruccin SQL enumera el nmero de clientes en cada pas, ordenados de alto a bajo:
Ejemplo
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;
Demo Database
A continuacin se muestra una seleccin de la tabla "Pedidos" en la base de datos de ejemplo Northwind:
OrderID CustomerID EmployeeID OrderDate ShipperID
10248 90 5 1996-07-04 3
10249 81 6 1996-07-05 1
10250 34 4 1996-07-08 2
ShipperID ShipperName
1 Speedy Express
2 United Package
3 Federal Shipping
Ejemplo
SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROMOrders
LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;
Teniendo sintaxis
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
Demo Database
A continuacin se muestra una seleccin de la tabla "Customers" en la base de datos de ejemplo Northwind:
3 Antonio Moreno Taquera Antonio Moreno Mataderos 2312 Mxico 05023 Mexico
D.F.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Ejemplo
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
La siguiente instruccin SQL enumera el nmero de clientes en cada pas, ordenados de alto a bajo (slo incluyen
pases con ms de 5 clientes):
Ejemplo
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
10248 90 5 1996-07-04 3
10249 81 6 1996-07-05 1
10250 34 4 1996-07-08 2
Ms HAVING Ejemplos
La instruccin SQL siguiente enumera los empleados que han registrado ms de 10 rdenes:
Ejemplo
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;
La siguiente instruccin SQL indica si los empleados "Davolio" o "Fuller" han registrado ms de 25 pedidos:
Ejemplo
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
EXISTS Sintaxis
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
Demo Database
A continuacin se muestra una seleccin de la tabla "Productos" de la base de datos de ejemplo Northwind:
2 Chang 1 1 24 - 12 oz bottles 19
3 Aniseed Syrup 1 2 12 - 550 ml bottles 10
2 New Orleans Cajun Shelley Burke P.O. Box 78934 New 70117 USA
Delights Orleans
3 Grandma Kelly's Regina Murphy 707 Oxford Rd. Ann Arbor 48104 USA
Homestead
Ejemplo
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE SupplierId = Suppliers.supplierId AND Price < 20);
La sentencia SQL siguiente devuelve TRUE y lista a los proveedores con un precio del producto igual a 22:
Ejemplo
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE SupplierId = Suppliers.supplierId AND Price = 22);
El operador ANY devuelve true si cualquiera de los valores de subconsulta cumple con la condicin.
El operador ALL devuelve true si todos los valores de subconsulta cumplen la condicin.
CUALQUIER Sintaxis
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name FROM table_name WHERE condition);
Sintaxis ALL
SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name FROM table_name WHERE condition);
Nota: El operador debe ser un operador de comparacin estndar (=, <>,! =,>,> =, <, O <=).
Demo Database
A continuacin se muestra una seleccin de la tabla "Productos" de la base de datos de ejemplo Northwind:
1 10248 11 12
2 10248 42 10
3 10248 72 5
4 10249 14 9
5 10249 51 40
La instruccin SQL siguiente devuelve TRUE y lista los nombres de producto si encuentra registros ANY en la tabla
OrderDetails que cantidad = 10:
Ejemplo
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
La instruccin SQL siguiente devuelve TRUE y lista los nombres de producto si encuentra registros ANY en la tabla
OrderDetails que cantidad> 99:
Ejemplo
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity > 99);
La sentencia SQL siguiente devuelve TRUE y lista los nombres de producto si TODOS los registros de la tabla
OrderDetails tienen quantity = 10:
Ejemplo
SELECT ProductName
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
SELECT *
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
Copie slo algunas columnas en una nueva tabla:
La nueva tabla se crear con los nombres de columna y los tipos definidos en la tabla antigua. Puede crear nuevos
nombres de columna utilizando la clusula AS.
La instruccin SQL siguiente utiliza la clusula IN para copiar la tabla en una tabla nueva en otra base de datos:
La siguiente instruccin SQL copia slo unas pocas columnas en una nueva tabla:
La instruccin SQL siguiente copia datos de ms de una tabla en una nueva tabla:
Sugerencia: SELECT INTO tambin se puede usar para crear una nueva tabla vaca utilizando el esquema de
otro. Simplemente agregue una clusula WHERE que hace que la consulta no devuelva datos:
INSERT INTO SELECT requiere que los tipos de datos en las tablas de origen y destino coincidan
Los registros existentes en la tabla de destino no se ven afectados
2 Ana Trujillo Emparedados y Ana Trujillo Avda. de la Constitucin Mxico 05021 Mexico
helados 2222 D.F.
2 New Orleans Cajun Delights Shelley Burke P.O. Box 78934 New Orleans 70117 USA
3 Grandma Kelly's Homestead Regina Murphy 707 Oxford Rd. Ann Arbor 48104 USA
La siguiente instruccin SQL copia "Proveedores" en "Clientes" (rellenar todas las columnas):
Ejemplo
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;
Ejemplo
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23
3 Gorgonzola 15.67 9 20
En el ejemplo anterior, si alguno de los valores "UnitsOnOrder" es NULL, el resultado ser NULL.
Soluciones
MySQL
La funcin MySQL IFNULL () le permite devolver un valor alternativo si una expresin es NULL:
servidor SQL
La funcin ISNULL () de SQL Server le permite devolver un valor alternativo cuando una expresin es NULL:
La funcin MS Access IsNull () devuelve TRUE (-1) si la expresin es un valor nulo, de lo contrario FALSE (0):
Orculo
Comentarios de SQL
Anterior Siguiente
Comentarios de SQL
Los comentarios se utilizan para explicar secciones de instrucciones SQL o para evitar la ejecucin de sentencias
SQL.
Ejemplo
--Select all:
SELECT * FROM Customers;
El ejemplo siguiente utiliza un comentario de una sola lnea para ignorar el final de una lnea:
Ejemplo
SELECT * FROM Customers -- WHERE City='Berlin';
Ejemplo
--SELECT * FROM Customers;
SELECT * FROM Products;
Ejemplo
/*Select all the columns
of all the records
in the Customers table:*/
SELECT * FROM Customers;
Intntalo t mismo "
El ejemplo siguiente utiliza un comentario de varias lneas para ignorar muchas instrucciones:
Ejemplo
/*SELECT * FROM Customers;
SELECT * FROM Products;
SELECT * FROM Orders;
SELECT * FROM Categories;*/
SELECT * FROM Suppliers;
Para ignorar slo una parte de una declaracin, tambin utilice el / * * / comentario.
Ejemplo
SELECT CustomerName, /*City,*/ Country FROM Customers;