Comandos y Sintaxis SQL
(SQL Server)
Create
Crear una base de datos y usarla:
CREATE DATABASE databasename;
USE DATABASE databasename;
Crear una tabla:
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
CREATE TABLE new_table_name AS --Usando una tabla existente
SELECT column1, column2,...
FROM existing_table_name
WHERE ....;
Insert
Insertar datos en las tablas:
INSERT INTO Customers (CustomerName, ContactName, Address, City,
PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen
21', 'Stavanger', '4006', 'Norway');
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
Update
Actualizar datos de las tablas: --es importante recordar el where, ya que si no se coloca se
modifican todos los datos
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
Borrar datos en la base de datos (database, table, etc.): --es importante recordar el where, si no
se desea todos los datos
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
DELETE * FROM Customers;
Alter Table
Alterar datos de las tablas/columnas:
ALTER TABLE Persons
ADD DateOfBirth date;
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
ALTER TABLE Persons
DROP COLUMN DateOfBirth;
SQL Constraints (not null, unique, primary key, foreign key, check, default, index):
Not null:
fuerza una columna a no tener valores nulos, ya que por default puede tener valores
nulos.
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
Unique:
asegura que todos los valores en una columna son diferentes.
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
--Con alter table:
ALTER TABLE Persons
ADD UNIQUE (ID);
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
Primary key:
identifica cada record en una tabla de una base de datos. Cada tabla solo puede tener una
llave primaria.
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
); /* Nota: En el ejemplo anterior es slo una clave primaria (PK_Person). Sin embargo,
el valor de la clave primaria est formado por dos columnas (ID + apellido) */
--Con alter table:
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
ALTER TABLE Persons
DROP CONSTRAINT PK_Person;
Foreign Key:
Una clave externa es una clave que se utiliza para unir dos tablas. Una clave externa es un campo
(o conjunto de campos) en una tabla que hace referencia a la clave principal de otra tabla. La tabla
que contiene la clave externa se llama la tabla y la tabla que contiene la clave de candidato se
llama la referencia o tabla para padres.
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
--Con alter table:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
Select:
La instruccin SELECT se utiliza para seleccionar datos de una base de datos. Los datos devueltos se
almacenan en una tabla de resultados, llamada el conjunto de resultados.
SELECT * FROM Customers;
SELECT CustomerName, City FROM Customers;
Select distinct: Se utiliza la instruccin SELECT DISTINCT para devolver slo distintos
valores (diferentes). Dentro de una tabla, una columna a menudo contiene muchos valores
duplicados; y a veces slo desea enumerar los distintos valores (distintos):
SELECT DISTINCT Country FROM Customers;
SELECT COUNT(DISTINCT Country) FROM Customers;
--Este es para nombrar la columna count
SELECT Count(*) AS DistinctCountries
FROM (SELECT DISTINCT Country FROM Customers);
Select where:
La clusula WHERE se utiliza para filtrar registros. La clusula WHERE se utiliza para extraer slo los
registros que cumplen una condicin especificada:
SELECT * FROM Customers
WHERE Country='Mexico';
SELECT * FROM Customers
WHERE CustomerID=1;
Select and, or, not, combinados
SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';
SELECT * FROM Customers
WHERE City='Berlin' OR City='Mnchen';
SELECT * FROM Customers
WHERE NOT Country='Germany';
SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='Mnchen')
;
SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';
Select order by
SELECT * FROM Customers
ORDER BY Country;
SELECT * FROM Customers
ORDER BY Country DESC; (ASC)
SELECT * FROM Customers
ORDER BY Country, CustomerName;
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
Select Top
SELECT TOP 3 * FROM Customers;
SELECT * FROM Customers
LIMIT 3;
SELECT * FROM Customers
WHERE ROWNUM <= 3;
SELECT TOP 50 PERCENT * FROM Customers;
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';
Select MIN and MAX
SELECT MIN(Price) AS SmallestPrice
FROM Products;
SELECT MAX(Price) AS LargestPrice
FROM Products;
Select COUNT (), AVG () and SUM ()
SELECT COUNT(ProductID)
FROM Products;
SELECT AVG(Price)
FROM Products;
SELECT SUM(Quantity)
FROM OrderDetails;
Select Group by
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;
SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrder
s FROM Orders
LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;
Having
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
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;
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
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE SupplierId =
Suppliers.supplierId AND Price < 20);
Any/All
SELECT ProductName
FROM Products
WHERE ProductID
= ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
SELECT ProductName
FROM Products
WHERE ProductID
= ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
Operador Like
-- Finds any values that starts with "a"
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
-- Finds any values that ends with "a"
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';
-- Finds any values that have "or" in any position
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';
-- Finds any values that have "r" in the second position
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';
-- Finds any values that starts with "a" and are at least 3 characters
in length
SELECT * FROM Customers
WHERE CustomerName LIKE 'a_%_%';
-- Finds any values that starts with "a" and ends with "o"
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';
--Finds any values that NOT starts with "a":
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';
Operador In
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
Operador Between
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di
Giovanni'
ORDER BY ProductName;
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di
Giovanni'
ORDER BY ProductName;
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;
Alias
SELECT CustomerID as ID, CustomerName AS Customer
FROM Customers;
SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ',
' + Country AS Address
FROM Customers;
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;
O
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName="Around the
Horn" AND Customers.CustomerID=Orders.CustomerID;
Joins
Different Types of SQL JOINs
Here are the different types of the JOINs in SQL:
(INNER) JOIN: Returns records that have matching values in both tables
LEFT (OUTER) JOIN: Return all records from the left table, and the matched records
from the right table
RIGHT (OUTER) JOIN: Return all records from the right table, and the matched
records from the left table
FULL (OUTER) JOIN: Return all records when there is a match in either left or right
table
/*Inner Join*/
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
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);
/*Left Join*/
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
/*Right Join*/
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
/*Full Join*/
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
--Se puede poner solo FULL JOIN
Union
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
SELECT 'Customer' As Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;
Vistas
CREATE VIEW vw_Names
As
Select ProductName, Price FROM Products;
Go
SELECT*FROM vw_Names;
Procedimiento almacenado
/* La siguiente instruccin crea un procedimiento almacenado denominado pr_Names,
acepta un parmetro de entrada denominado @VarPrice del tipo de datos money. El
procedimiento almacenado imprime la instruccin Products less than concatenada con el
parmetro de entrada que cambia del tipo de datos money a un tipo de datos de
carcter varchar (10). A continuacin, el procedimiento ejecuta una instruccin SELECT en
la vista y le pasa el parmetro de entrada como parte de la clusula WHERE. Esto devuelve
todos los productos cuyo costo es menor que el valor del parmetro de entrada. */
CREATE PROCEDURE pr_Names @VarPrice money
AS
BEGIN
-- The print statement returns text to the user
PRINT 'Products less than ' + CAST(@VarPrice AS varchar(10));
-- A second statement starts here
SELECT ProductName, Price FROM vw_Names
WHERE Price < @varPrice;
END
GO
/*Para probar el procedimiento almacenado, escriba y ejecute la instruccin siguiente. El
procedimiento debe devolver los nombres de dos productos introducidos en la
tabla Products en la leccin 1 con un precio menor que 10.00. */
Exec pr_Names 10.00;
Referencia:
https://www.w3schools.com/sql/default.asp