Sie sind auf Seite 1von 42

Bienve

nidos
Tecnología avanzada en bases de
SQL crear Base de Datos

CREATE DATABASE Sales

CREATE DATABASE Sales


ON ( NAME = Sales_dat,
FILENAME = 'C:\Program Files\Microsoft SQL
Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\saledat.mdf', SIZE = 10,
MAXSIZE = 50, FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL
Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\salelog.ldf', SIZE = 5MB,
MAXSIZE = 25MB, FILEGROWTH = 5MB )
SQL crear Tablas

Crear Tablas

CREATE TABLE table_name CREATE TABLE Persons


( (
column_name1 data_type(size), PersonID int,
column_name2 data_type(size), LastName varchar(255),
column_name3 data_type(size), FirstName varchar(255),
.... Address varchar(255),
); City varchar(255)
);
SQL Tipos de Datos

Númericos Fecha y hora Caracteres


bigint numeric float date datetimeoffset char varchar
bit smallint real datetime2 smalldatetime text  
decimal smallmoney datetime time
int tinyint
money  
Otros
cursor timestamp
Caracteres unicode Cadenas binarias hierarchyid uniqueidentifier
nchar nvarchar binary varbinary
sql_variant xml
ntext image  
tabla Tipos espaciales
SQL instrucciones con Tablas

CREATE TABLE table_name
ALTER TABLE table_name
DROP TABLE table_name
TRUNCATE TABLE table_name
INSERT INTO "nombre_tabla" ("columna1", "columna2", ...)
VALUES ("valor1", "valor2", ...);
UPDATE "nombre_tabla“ SET "columna_1" = [nuevo valor] WHERE "condición";
DELETE FROM "nombre_tabla“ WHERE "condición";
SQL Tablas con Índices

CREATE TABLE t1 ( c1 int, INDEX ix_1 NONCLUSTERED (c1))


CREATE TABLE t4( c1 int, c2 int, INDEX ix_1 NONCLUSTERED
(c1,c2))
CREATE TABLE dbo.Employee (EmployeeID int
PRIMARY KEY CLUSTERED);
CREATE TABLE #MyTempTable (ID_Emp INT PRIMARY KEY);
INSERT INTO #MyTempTable VALUES (1);
CREATE TABLE t1 (a int, b int, c AS a/b);
CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c);
SQL Sintáxis crear tabla con llave
primaria

CREATE TABLE person


(num INT NOT NULL ,
firstname VARCHAR(20) NULL ,
lastname VARCHAR(30) NULL ,
gender_code VARCHAR(1) NULL ,
birth_dttm DATETIME NULL ,
inactive_date DATETIME NULL ,
CONSTRAINT PK_Person
PRIMARY KEY CLUSTERED (num ASC) ON [PRIMARY] )
SQL Constraints (reforzar
integridad)

• NOT NULL - Indicates that a column cannot store NULL value


• UNIQUE - Ensures that each row for a column must have a unique value
• PRIMARY KEY - A combination of a NOT NULL and UNIQUE. Ensures that a
column (or combination of two or more columns) have an unique identity
which helps to find a particular record in a table more easily and quickly
• FOREIGN KEY - Ensure the referential integrity of the data in one table to
match values in another table
• CHECK - Ensures that the value in a column meets a specific condition*
• DEFAULT - Specifies a default value when specified none for this column**

* CONSTRAINT chk_id CHECK (cust_id BETWEEN 0 and 10000 ) -- Calificacion (Calif>0)


** Ciudad varchar(255) DEFAULT ‘Aguascalientes‘
SQL Foreign Key

CREATE TABLE Orders


(O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id))

CREATE TABLE Orders


(O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id))
SQL Instrucción Select

SELECT select_list
[ INTO new_table_name ]
FROM table_list
[ WHERE search_conditions ]
[ GROUP BY group_by_list ]
[ HAVING search_conditions ]
[ ORDER BY order_list [ ASC | DESC ] ]
SQL Instrucción Select con
comodines

Comodín Descripción
% Sustituye uno o más caracteres
_ Sustituye un simple caracter
[charlist] Asigna rango de caracteres
[^charlist] Hace Matches solamente del character NO especificado dentro de los
or corchetes.
[!charlist]
SQL Instrucción Select con
comodines (ejemplos)
Custo CustomerName ContactName Address City PostalCode Country
merID
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany

2 Ana Trujillo Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
Emparedados y
helados

3 Antonio Moreno Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico
Taquería

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

5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden


SQL Instrucción Select con
comodines (ejemplos)

SELECT * FROM Customers SELECT * FROM Customers


WHERE City LIKE 'ber%'; WHERE City LIKE '[bsp]%';

SELECT * FROM Customers SELECT * FROM Customers


WHERE City LIKE '%es%'; WHERE City LIKE '[a-c]%';

SELECT * FROM Customers SELECT * FROM Customers


WHERE City LIKE '_erlin'; WHERE City LIKE '[!bsp]%'

SELECT * FROM Customers SELECT * FROM Customers


WHERE City LIKE 'L_n_on'; WHERE City NOT LIKE '[bsp]%';
SQL Having

Claúsula Having

Especifica una condición de búsqueda para un Grupo o Agregado.


HAVING suele utilizarse con la cláusula GROUP BY.

Ejemplo:
SQL Ejemplos Having

@ # ##

declare @tabla table(c1 int,c2 int)


 
insert into @tabla values(1,2),(1,3),(1,3),(1,4),(2,10)
select * from @tabla
 
select c1,COUNT(*) from @tabla group by c1
having COUNT(*) > 2
SQL Tablas Having

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

EmployeeID LastName FirstName BirthDate Photo Notes


1 Davolio Nancy 1968-12-08 EmpID1.pic Education includes a BA....
2 Fuller Andrew 1952-02-19 EmpID2.pic Andrew received his BTS....
3 Leverling Janet 1963-08-30 EmpID3.pic Janet has a BS degree....
SQL ejemplo Having

El siguiente Query encuentra cualquiera de los empleados que tengan


registradas más de 10 órdenes:

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;
SQL ejemplo Having

Ahora agregaremos una cláusula WHERE para encontrar los empleados


“Davolio” y “Fuller” y verificar si tienen más de 25 órdenes:

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;
SQL Inner Join

Regresa todos los renglones de ambas tablas siempre y cuando exista un


match entre los registros de ambas tablas.

SELECT Customers.ContactName, Orders.OrderID


FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.ContactName;
SQL Full Outer Join

Regresa todos los renglones de la parte izquierda de la Tabla1 y la parte


derecha de la Tabla2

SELECT Customers.ContactName, Orders.OrderID


FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.ContactName;
SQL Left Join

Regresa todos los renglones de la Tabla1 (Izquierda) con los registros que
hagan match en la Tabla2 (Derecha). El resultado es NULL en la Tabla2
(Derecha) cuando no hay match

SELECT Customers.ContactName, Orders.OrderID


FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.ContactName;
SQL Right Join

Regresa todos los renglones de la Tabla2 (Derecha) con los registros que
hagan match en la Tabla1 (Izquierda). El resultado es NULL en la Tabla1
(Izquierda) cuando no hay match.

SELECT Orders.OrderID, Employees.FirstName


FROM Orders
RIGHT JOIN Employees
ON orders.EmployeeID=Employees.EmployeeID
ORDER BY Orders.OrderID;
SQL Select Distinct

Regresa solamente valores distintos de una tabla

SELECT City FROM Customers

SELECT DISTINCT City FROM Customers


SQL Select Top

Especifica el número de registros a seleccionar

SELECT TOP 2 * FROM Customers;

SELECT TOP 50 PERCENT * FROM Customers;


SQL Alias

Son utilizados para dar a una Tabla o Columna un nombre Temporal

SELECT CompanyName AS Compañía,


ContactName AS [Contact Person]
FROM Customers;

SELECT CompanyName AS Compañía,


ContactName AS Contact_Person
FROM Customers;
SQL Select Into

Utilizado para copiar información de una tabla a otra nueva

SELECT *
INTO CustomersBackup2013
FROM Customers;

SELECT CompanyName, ContactName


INTO CustomersBackup2013
FROM Customers;

SELECT *
INTO CustomersBackup2013
FROM Customers
WHERE Country='Germany';
SQL Insert Into Select

Utilizado para copiar información de una tabla a otra tabla existente

INSERT INTO Customers (ContactName, Country) SELECT


ContactName, Country FROM Suppliers;

INSERT INTO Customers (ContactName, Country)


SELECT ContactName, Country FROM Suppliers
WHERE Country='Germany';
SQL Auto Increment

Permite incrementar automáticamente el valor (único) de un campo por lo


general Llave cuando un nuevo registro es insertado.

DECLARE @Tabla TABLE


(
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(255) NOT NULL,
FirstName VARCHAR (255),
Address VARCHAR (255),
City VARCHAR (255)
)

ID INT IDENTITY(10,5) PRIMARY KEY,


SQL Vistas

Una vista es una tabla Virtual que se basa en el resultado de una consulta.

CREATE VIEW [Current Product List] AS CREATE VIEW [Products Above Average Price]
SELECT ProductID,ProductName AS
FROM Products SELECT ProductName,UnitPrice
WHERE Discontinued=1 FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice)
SELECT * FROM [Current Product List] FROM Products)

DROP VIEW view_name


SQL Convert

SELECT CONVERT(int, 14.85); 14


SELECT CONVERT(float, 14.85); 14.85
SELECT CONVERT(varchar, 15.6); ‘15.6’
SELECT CONVERT(varchar(4), 15.6); ’15.6’
SELECT CONVERT(float, '15.6'); 15.6
SELECT CONVERT(datetime, '2014-05-02'); '2014-05-02 00:00:00.000‘
SELECT CAST('7/7/2011' as datetime) ‘2011-07-07 00:00:00.000’

Tabla de conversiones
SQL Funciones

AVG() SELECT AVG(UnitPrice) AS PriceAverage FROM Products;


SELECT ProductName, Price FROM Products WHERE Price>(SELECT AVG(Price) FROM Products);
COUNT() SELECT COUNT(CustomerID) AS OrdersFromCustomerID7 FROM Orders WHERE EmployeeID=1;
MAX() SELECT MAX(UnitPrice) AS HighestPrice FROM Products;
MIN() SELECT MIN(UnitPrice) AS HighestPrice FROM Products;
SUM() SELECT SUM(Quantity) AS TotalItemsOrdered FROM [Order Details];
UPPER() SELECT UPPER(ContactName) AS Customer, City FROM Customers;
LOWER() SELECT UPPER(ContactName) AS Customer, City FROM Customers;
SUBSTRING() SELECT SUBSTRING(City,1,4) AS ShortCity FROM Customers;
LEN() SELECT ContactName,LEN(Address) AS LengthOfAddress FROM Customers;
ROUND() SELECT ProductName, ROUND(UnitPrice,0) AS RoundedPrice FROM Products;
REPLACE() SELECT REPLACE('abcdefghicde','cde','xxx');
STR() SELECT STR(123.45, 6, 1); --Convierte a String de 6 posiciones y 1 digito, redondea
SQL Funciones

LEFT() SELECT LEFT('abcdefg',5); SELECT LEFT(LastName,2) FROM Employees


RIGHT() SELECT RIGHT('abcdefg',5); SELECT RIGHT(LastName,2) FROM Employees
LTRIM() DECLARE @string_to_trim varchar(60);
SET @string_to_trim = ' Five spaces are at the beginning of this string.';
SELECT 'Here is the string without the leading spaces: ' + LTRIM(@string_to_trim);
RTRIM() DECLARE @string_to_trim varchar(60);
SET @string_to_trim = 'Four spaces are after the period in this sentence. ';
SELECT @string_to_trim + ' Next string.';
SELECT RTRIM(@string_to_trim) + ' Next string.';
REPLICATE() SELECT FirstName, REPLICATE('Hola', 4) FROM Employees
REVERSE() SELECT FirstName, REVERSE(FirstName) as Reversed FROM Employees
SPACE() SELECT RTRIM(LastName) + ',' + SPACE(2) + LTRIM(FirstName) FROM Employees
STUFF() SELECT STUFF('abcdef', 2, 3, 'ijklmn'); --Borra 3 chrs empezando en la posición 2
SQL Funciones Matemáticas

ABS DEGREES RAND


ACOS EXP ROUND
ASIN FLOOR SIGN
ATAN LOG SIN
ATN2 LOG10 SQRT
CEILING PI SQUARE
COS POWER TAN
COT RADIANS
SQL Subqueries

SELECT DISTINCT country FROM Northwind.dbo.Customers


WHERE country NOT IN(SELECT DISTINCT country FROM
Northwind.dbo.Suppliers)
SQL Subqueries

SELECT Country,CompanyName, ContactName, ContactTitle, Phone


FROM Northwind.dbo.Customers
WHERE country =
(SELECT TOP 1 country
FROM Northwind.dbo.Customers C
JOIN
Northwind.dbo.Orders O ON C.CustomerId = O.CustomerID
GROUP BY country
ORDER BY count(*))
SQL Subqueries
CREATE TABLE x(i INT IDENTITY, a CHAR(1))

INSERT INTO x VALUES ('a')


INSERT INTO x VALUES ('b')
INSERT INTO x VALUES ('c')
INSERT INTO x VALUES ('d')
SELECT * FROM x

UPDATE x SET a = b.a FROM (SELECT max(a) AS a FROM x) AS b


WHERE i > 2

SELECT * FROM x
DROP TABLE x
SQL Subqueries

SELECT pub_name, COUNT(*) bookcnt


FROM pubs.dbo.titles t
JOIN
pubs.dbo.publishers p
ON t.pub_id = p.pub_id
GROUP BY pub_name
HAVING p.pub_name IN
(SELECT pub_name FROM pubs.dbo.publishers WHERE STATE <> 'CA')
SQL Función
DATEDIFF ( datepart , startdate , enddate )
datepart Abreviaturas
year yy, yyyy
quarter qq, q
month mm, m
dayofyear dy, y
day dd, d
week wk, ww
hour hh
minute mi, n
second ss, s
millisecond ms
microsecond mcs
nanosecond ns
SQL DATEDIFF

DECLARE @tabla TABLE(startdate DATETIME,enddate DATETIME)

INSERT INTO @tabla VALUES(CONVERT(DATETIME,'2007-05-01'),


CONVERT(DATETIME,'2015-28-03'))

SELECT DATEDIFF(DAY, startdate, enddate) FROM @tabla


SQL Subqueries

SELECT TOP 1 OrderId,convert(char(10),


OrderDate,121) AS Last_Paris_Order,
(SELECT CONVERT(char(10),max(OrderDate),121) FROM
Northwind.dbo.Orders) AS Last_OrderDate,
DATEDIFF(dd,OrderDate,
(SELECT MAX(OrderDate) FROM Northwind.dbo.Orders)) AS Day_Diff
FROM Northwind.dbo.Orders
WHERE ShipCity = 'Paris'
ORDER BY OrderDate DESC
Northwind
Referencias bibliográficas
• http://msdn.microsoft.com/es-MX/library/ms176061.aspx
• http://technet.microsoft.com/es-es/library/ms173260%28v=sql.110%29.aspx
• http://www.w3schools.com/sql/sql_wildcards.asp
• http://msdn.microsoft.com/es-MX/library/ms187752.aspx
• http://www.w3schools.com/sql/sql_having.asp
• http://www.1keydata.com/es/sql/
• http://www.w3schools.com/sql/sql_constraints.asp
• http://www.sqlinfo.net/sqlserver/sql_server_Create_table.php
• http://msdn.microsoft.com/es-MX/library/ms188783.aspx
• https://msdn.microsoft.com/en-us/library/ms189800.aspx

Das könnte Ihnen auch gefallen