Escolar Documentos
Profissional Documentos
Cultura Documentos
(
FirstName varchar(40) NOT NULL,
LastName varchar(30) NOT NULL,
State char(2) NULL
)
-----alter table mtltest
add country varchar(15) NULL;
-----alter table mtltest
drop column city;
-----alter table mtltest
drop column state;
-----alter table mtltest
alter column country varchar(20) not null;
----drop table mtltest;
---Create view CustomerInfo
as
select FirstName, LastName, EmailAddress
from SalesLT.Customer;
select *
from CustomerInfo;
--Create view ML with schemabinding
as
select firstname from dbo.Mtltest;
select * from ml;
drop table MTLTest;
Msg 3729, Level 16, State 1, Line 1
Cannot DROP TABLE 'MTLTest' because it is being referenced by object 'ML'.
----nested views
----create view CustomerInfo
as
SELECT
FirstName, LastName, EmailAddress
FROM
SalesLT.Customer;
create view LessInfo
as
select lastname, emailaddress
from CustomerInfo;
select * from LessInfo;create view CustomerInfo
as
SELECT
FirstName, LastName, EmailAddress
FROM
SalesLT.Customer;
create view LessInfo
as
select lastname, emailaddress
from CustomerInfo;
select * from LessInfo;
------
-- creating constraints
create table testconstraint
(
lastname varchar(20) not null,
firstname varchar(20) not null,
employeeid int not null,
constraint UC_EmployeeId unique(employeeid)
);
insert into testconstraint
values
('Long','Mark', 37845),
('Jones','Bill', 77845);
insert into testconstraint
values
('Smith','Al', 37845);
Msg 2627, Level 14, State 1, Line 1
Violation of UNIQUE KEY constraint 'UC_EmployeeId'. Cannot insert duplicate key
in object 'dbo.testconstraint'. The duplicate key value is (37845).
The statement has been terminated.
alter table testconstraint
add constraint PK_EmpId primary key clustered
(lastname,firstname);
------- creating triggers
select top 2 firstname, lastname, companyname
into triggertes
from SalesLT.Customer;
select *
from triggertes;
create trigger loginsertrig
on
triggertes
after insert
as
insert into insertlog
values
(CURRENT_USER, GETDATE())
RAISERROR('Insert action has been logged...',16,10);
create table insertlog
(login varchar(20),
date datetime);
select * from insertlog;
insert into triggertes
values
('Bob', 'Long','ABC,Inc');
(1 row(s) affected)
Msg 50000, Level 16, State 10, Procedure loginsertrig, Line 9
Insert action has been logged...
(1 row(s) affected)
......
select * from insertlog;
dbo
2015-09-25 16:14:53.220
-------select firstname, lastname
from SalesLT.Customer
where LastName like 'A%';
select firstname, lastname
from SalesLT.Customer
where LastName like 'Al';
from
SalesLT.SalesOrderDetail
where OrderQty>6
group by ProductID
order by
ProductID;--lo limita antes
select Productid, sum(orderqty)
from
SalesLT.SalesOrderDetail
group by ProductID
having sum(orderqty)>26
order by
ProductID;--sum(orderqty) toda la columna es mas de 26
-------select lastname, firstname
from SalesLT.Customer
where LastName='Harris';
select lastname, firstname
from SalesLT.Customer
where LastName like 'Harris';--con like usamos %_ y otros
select lastname, firstname
from SalesLT.Customer
where LastName like 'He%';
select lastname, firstname
from SalesLT.Customer
where LastName like 'he%';--lo mismo q arriba
select lastname, firstname
from SalesLT.Customer
where LastName like '[A-D]%'
order by lastname;
-----select distinct
city, stateprovince
from
saleslt.Address
order by StateProvince, city;
select distinct
stateprovince
from
saleslt.Address
order by StateProvince;
-----select
firstname 'first name',
lastname as last,
companyname as 'company name',
emailaddress email
from SalesLT.Customer;
select Productid, sum(orderqty) 'order quantity'
from
SalesLT.SalesOrderDetail
group by ProductID
having sum(orderqty)>26
order by
ProductID
----select top 4
productid, orderqty
from SalesLT.SalesOrderDetail
where ProductID='707'
order by OrderQty;
select top 50 percent
productid, orderqty
from SalesLT.SalesOrderDetail
where ProductID='707'
order by OrderQty;--si es 3.5 lo redondea a 4}
select top 50.7 percent
productid, orderqty
from SalesLT.SalesOrderDetail
where ProductID='707'
order by OrderQty;
------select
productid, orderqty
from SalesLT.SalesOrderDetail
where ProductID='707'
order by
ProductID offset 5 rows;-- se salta las primeras 5 filas
select
productid, orderqty
from SalesLT.SalesOrderDetail
where ProductID='707'
order by
ProductID offset 0 rows fetch next 3 rows only;--es lo mismo q top 3
select
productid, orderqty
from SalesLT.SalesOrderDetail
where ProductID='707'
order by
ProductID offset 3 rows fetch next 3 rows only;
select
productid, orderqty
from SalesLT.SalesOrderDetail
where ProductID='707'
order by
ProductID offset 6 rows fetch next 3 rows only;
--select
ProductId,
name,
sellenddate
from SalesLT.Product
where SellEndDate=null;--esta mal
select
ProductId,
name,
sellenddate
from SalesLT.Product
where SellEndDate is null;
select
ProductId,
name,
sellenddate
from SalesLT.Product
where SellEndDate <> null;--esta mal
select
ProductId,
name,
sellenddate
from SalesLT.Product
select *
from SODCopy2;
drop table SODCopy, SODCopy2;
----select firstname, lastname into cust1
from SalesLT.Customer
where LastName like '[A-J]%';
select firstname, lastname into cust2
from SalesLT.Customer
where LastName like '[K-Z]%';
select
firstname, lastname
from cust1
union all
select
firstname, lastname
from cust2
order by LastName, FirstName;
-select
firstname, lastname
from cust1
union all
select
name, color
from SalesLT.Product;
-select
firstname, lastname
from cust1
union
select
name, color
from SalesLT.Product;
---------- USE SELECT INTO TO CREATE TWO NEW TABLES WITH DATA FROM THE CUSTOMER TABLE
-- NOTE THAT THE DATA OVERLAPS...LASTNAME E'S AND F'S ARE IN BOTH TABLES
SELECT
FirstName, LastName, EmailAddress
INTO CustTest1
FROM
SalesLT.Customer
WHERE LastName like '[A-F]%'
SELECT
FirstName, LastName, EmailAddress
INTO CustTest2
FROM
SalesLT.Customer
WHERE LastName like '[E-Z]%'
SELECT
FirstName, LastName, EmailAddress
FROM
CustTest1
INTERSECT
SELECT
FirstName, LastName, EmailAddress
FROM
CustTest2
ORDER BY LastName, FirstName
------------------
USE THE CUSTTEST1 AND CUSTTEST2 TABLES CREATED FOR THE EXCEPT EXAMPLE...
NOTE THAT THE DATA OVERLAPS...LASTNAME E'S AND F'S ARE IN BOTH TABLES
EXCEPT ALWAYS RETURNS ANY DISTINCT VALUES FROM THE QUERY TO THE LEFT
OF THE EXCEPT KEYWORD THAT ARE NOT ALSO FOUND ON THE RIGHT QUERY
SELECT
FirstName, LastName, EmailAddress
INTO CustTest1
FROM
SalesLT.Customer
WHERE LastName like '[A-F]%'
SELECT
FirstName, LastName, EmailAddress
INTO CustTest2
FROM
SalesLT.Customer
WHERE LastName like '[E-Z]%'
SELECT
FirstName, LastName, EmailAddress
FROM
CustTest1
EXCEPT
SELECT
FirstName, LastName, EmailAddress
FROM
CustTest2
ORDER BY LastName, FirstName
-- NOTE! SWITCH THE TABLES FROM LEFT TO RIGHT TO SEE DIFFERENT RESULTS...
---------create synonym sod for saleslt.salesorderdateil;-- te pudes esquivocar pero igua
l crea el sinonimo
create synonym sod for SalesLT.SalesOrderDetail;
select *
from SalesLT.SalesOrderDetail;
select *
from sod;
drop synonym sod;
--------select FirstName+' '+LastName
from SalesLT.Customer;
select FirstName+' '+LastName Customer
from SalesLT.Customer
order by Customer;
select FirstName+' '+LastName Customer
from SalesLT.Customer
order by FirstName;-- lo mismo q arriba
select FirstName+', '+LastName Customer
from SalesLT.Customer
order by LastName;
-------DYNAMIC SQL EXAMPLE
--Passing variables into queries
DECLARE @T varchar(20);
SET @T = 'Harris'
SELECT
FirstName, LastName
FROM SalesLT.Customer
WHERE LastName = @T
DECLARE @T varchar(20);
SET @T = 'gEE'
SELECT
FirstName, LastName
FROM SalesLT.Customer
WHERE LastName = @T
DECLARE @T varchar(20);
SET @T = 'SalesLT.Customer '
SELECT
FirstName, LastName
FROM @T --ERROR
--WAIT! Can't pass object names as variables COMO TABLAS
DECLARE @T varchar(20);
SET @T = 'SalesLT.Customer';
EXECUTE('SELECT TOP 5 FirstName, LastName from' + @T)--ERROR
DECLARE @T varchar(20);
SET @T = 'SalesLT.Customer';
EXECUTE('SELECT TOP 5 FirstName, LastName from ' + @T);--BIEN
--One More Example...Get Creative!
DECLARE @Q varchar(60);
SET @Q='SELECT TOP 5 LastName, FirstName FROM SalesLT.Customer'
EXECUTE(@Q)
----------------- INSERT EXAMPLES
-CREATE TABLE TestInsert
(ColA int,
ColB int,
ColC int)
SELECT * FROM TestInsert
INSERT INTO TESTINSERT(ColA, ColB, ColC) --List the columns that will received
data
VALUES(1, 2, 3)
--List the values that will be inserted (Must match Co
lumn list positionally)