Você está na página 1de 10

create table MTLTest

(
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';

select firstname, lastname


from SalesLT.Customer
where LastName like 'A_e%';
select firstname, lastname
from SalesLT.Customer
where LastName like 'A_[d-n]%';
------select firstname, lastname, EmailAddress, ModifiedDate
from SalesLT.Customer
order by LastName DESC;
select firstname, lastname, EmailAddress, ModifiedDate
from SalesLT.Customer
order by LastName;--asc default
select lastname, firstname, EmailAddress, ModifiedDate
from SalesLT.Customer
order by LastName, FirstName;
select lastname, firstname, EmailAddress, ModifiedDate
from SalesLT.Customer
order by ModifiedDate;
select lastname, firstname, EmailAddress, ModifiedDate
from SalesLT.Customer
order by 2;
--------select *
from SalesLT.SalesOrderDetail;
select ProductId, OrderQty
from
SalesLT.SalesOrderDetail
group by ProductID;
Msg 8120, Level 16, State 1, Line 1
Column 'SalesLT.SalesOrderDetail.OrderQty' is invalid in the select list because
it is not contained in either an aggregate function or the GROUP BY clause.
select ProductId, SUM(OrderQty)
from
SalesLT.SalesOrderDetail
group by ProductID;
------select
productId, orderqty
from SalesLT.SalesOrderDetail
where
ProductID='707';
select
productId, orderqty
from SalesLT.SalesOrderDetail
where
ProductID=707;--lo mismo q arriba
select
productId, sum(orderqty) OrderQty, count(ProductID) Orders,
avg(orderqty) AvgOrder
from SalesLT.SalesOrderDetail
group by ProductID;
-------select Productid, orderqty
from
SalesLT.SalesOrderDetail
where OrderQty>6
order by
ProductID;
select Productid, sum(orderqty)

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

where SellEndDate is not null;


-------- case
select
productid,
linetotal,
'price'=
case
when linetotal<100 then 'level 1'
when linetotal>100 and linetotal<200 then 'level 2'
when linetotal>200 and linetotal<300 then 'level 3'
else 'level 4'
end
from SalesLT.SalesOrderDetail
order by ProductID;
------ case
select
productid,
linetotal,
'price'=
case
when linetotal<100 then 'level 1'
when linetotal>100 and linetotal<200 then 'level 2'
when linetotal>200 and linetotal<300 then 'level 3'
else 'level 4'
end
from SalesLT.SalesOrderDetail
order by ProductID;
SELECT ProductID, sum(LineTotal) OrderTotal, 'Price' =
CASE
WHEN sum(LineTotal)<100 THEN 'Level1'
WHEN sum(LineTotal)>100 and sum(LineTotal)<200 THEN 'Level 2'
WHEN sum(LineTotal)>200 and sum(LineTotal)<300 THEN 'Level 3'
ELSE 'Level 4'
END
FROM SalesLT.SalesOrderDetail
group by ProductID
ORDER BY ProductID;
SELECT ProductID, sum(LineTotal) OrderTotal,count(LineTotal), 'Price' =
CASE
WHEN count(LineTotal)<100 THEN 'Level1'
WHEN count(LineTotal)>100 and sum(LineTotal)<200 THEN 'Level 2'
WHEN count(LineTotal)>200 and sum(LineTotal)<300 THEN 'Level 3'
ELSE 'Level 4'
END
FROM SalesLT.SalesOrderDetail
group by ProductID
ORDER BY ProductID;
-------select *
into SODCopy --no existe
from
SalesLT.SalesOrderDetail;
select *
from SODCopy;
select OrderQty, UnitPrice
into SODCopy2 --no existe
from
SalesLT.SalesOrderDetail;

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)

-- If data is being Inserted into each column, no column list is required


INSERT INTO TESTINSERT
VALUES
(4,5,6)
--NOTE! Data inserts are positional!!!
INSERT INTO TESTINSERT
VALUES
(6,5,4)
--To Insert data in a different order than the columns...
INSERT INTO TESTINSERT
(ColB, ColA, ColC)
VALUES
(8,7,9)
--To Insert Multiple Rows With One Insert Statement
INSERT INTO TESTINSERT
(ColA, ColB, ColC)
VALUES
(8,7,9),
(10,11,12),
(13,14,15)
--Data Types Must Be Compatible...BE CAREFUL!
INSERT INTO TESTINSERT
(ColA, ColB, ColC)
VALUES
(8,7,32.2)-- LO redondea el 32
--------------------

Você também pode gostar