You are on page 1of 8

USE TRAINING;

--PIVOT

SELECT p_name,AVG(P_PRICE) as AVG_PRICE


FROM PRODUCT GROUP BY P_NAME;

SELECT *
--INTO PIVOT_TABLE_NEW
--CAST(Laptop as NUMERIC(10,2))AS Laptop,
--CAST(Watch as NUMERIC(10,2)) AS Watch
FROM
(
select p_name, p_price from PRODUCT
)a
PIVOT(
COUNT(p_price)
FOR p_name in
(
[Laptop],
[Watch]
)) AS Pivot_Table

SELECT * FROM PIVOT_TABLE_NEW


----Dynamic Pivoting
DECLARE
@columns NVARCHAR(MAX) = '',
@sql NVARCHAR(MAX) = '';

-- select the category names


SELECT
@columns+=QUOTENAME(p_name) + ','
FROM
(select distinct p_name from product)t1;

-- remove the last comma


SET @columns = LEFT(@columns, LEN(@columns) - 1);

PRINT(@columns)
-- construct dynamic SQL
SET @sql ='
SELECT * FROM
(
SELECT
p_name,
p_price
FROM
product p

) t
PIVOT(
AVG(p_price)
FOR p_name IN ('+ @columns +')
) AS pivot_table;';

-- execute the dynamic SQL


EXECUTE sp_executesql @sql;
---UNPIVOTING

SELECT
P_NAME, COUNTPROD
INTO UNPIVOT_TABLE_NEW
FROM
(SELECT * FROM PIVOT_TABLE_NEW)u
UNPIVOT
(COUNTPROD FOR P_NAME IN ([Laptop],[Watch])) AS UNPIVOT_TABLE

SELECT * FROM UNPIVOT_TABLE_NEW;

---STUFF FUNCTION

SELECT STUFF('New York',5,4,'Delhi');

---INDEX
DROP TABLE PRODUCT_INDEX;
CREATE TABLE PRODUCT_INDEX
(
p_id INT ,
p_name VARCHAR(30) NOT NULL,
p_desc VARCHAR(40) NOT NULL,
p_price FLOAT NOT NULL,
p_expiry_date DATE
);

INSERT INTO PRODUCT_INDEX


SELECT * FROM PRODUCT;

SELECT * FROM PRODUCT_INDEX WHERE P_NAME='Laptop';

SELECT * FROM PRODUCT_INDEX


WITH (INDEX(PRODUCT_IND_NAME))
WHERE p_name='Laptop';

DROP INDEX PRODUCT_IND_NAME ON PRODUCT_INDEX;

CREATE NONCLUSTERED
INDEX PRODUCT_IND_NAME ON PRODUCT_INDEX(P_name);

CREATE NONCLUSTERED
INDEX PRODUCT_IND
ON PRODUCT_INDEX(P_PRICE);

SELECT * FROM PRODUCT_INDEX


WHERE P_PRICE>1000;

SELECT * FROM PRODUCT_INDEX


WITH (INDEX(PRODUCT_IND)) WHERE P_Price>1000;

DROP INDEX PRODUCT_IND ON PRODUCT_INDEX;


--DROP INDEX CUSTOMER_ADDRESS ON CUSTOMER;

EXECUTE SP_HELPINDEX PRODUCT_INDEX;


---IIF FUNCTION

SELECT *, IIF(p_price>1000,'HIGH_COST','LOW_COST') as cost


FROM PRODUCT;

--CORRELATED SUBQUERIES

select p_name,avg(p_price)
From product
group by p_name;

DELETE FROM product


WHERE MONTH(p_expiry_date)=1;

SELECT
* FROM PRODUCT as P1
WHERE P_PRICE >
(SELECT AVG(P_PRICE) FROM PRODUCT AS P2
WHERE P1.p_name=P2.p_name
GROUP BY p2.p_name);

SELECT * FROM TABLE WHERE


(SELECT DATEDIFF(YEAR,'2000-01-01',getdate())>23);

--EXISTS

select * From customer;


select * From CUST_ORDER;

select * From customer WHERE


c_id in (
select o_cid
from CUST_ORDER
group by o_cid
having count(*) >2
);

SELECT * FROM CUSTOMER as C


WHERE EXISTS
(
SELECT COUNT(*) FROM
CUST_ORDER AS O
WHERE
C.c_id=o.o_cid
GROUP BY o.o_cid
HAVING COUNT(*) >2
);

DROP VIEW Chennai;


CREATE VIEW training AS
SELECT *,CAST(C_ID AS NUMERIC(10,2)) as
NUM_CID FROM CUSTOMER
WHERE
c_address='Chennai'
;
select * FROM NEW_DELHI;
select * FROM chennai where c_id=2;

DELETE FROM NEW_DELHI;

--VIEW
DROP VIEW DELHI_CUSTOMERS;

CREATE VIEW DELHI_CUSTOMERS


AS
SELECT * FROM CUSTOMER WHERE c_address='New Delhi';

SELECT * FROM DELHI_CUSTOMERS;

-- STORED PROCEDURE
---Concept of PROCEDURE
SELECT * FROM PRODUCT;
/*
ALTER TABLE PRODUCT DROP CONSTRAINT DF__PRODUCT__DISCOUN__6E01572D;
ALTER TABLE PRODUCT DROP COLUMN DISCOUNT;

ALTER TABLE PRODUCT DROP CONSTRAINT


DF__PRODUCT__FINAL_P__6EF57B66;

ALTER TABLE PRODUCT DROP COLUMN FINAL_PRICE;


*/
ALTER TABLE PRODUCT ADD DISCOUNT FLOAT DEFAULT 0;

ALTER TABLE PRODUCT ADD FINAL_PRICE FLOAT DEFAULT 0 ;

select * from PRODUCT;

UPDATE PRODUCT SET FINAL_PRICE=P_PRICE;

drop procedure APPLY_ITEM_DISCOUNT;

CREATE PROCEDURE APPLY_ITEM_DISCOUNT(@p_id int, @discount float)


AS
UPDATE PRODUCT
SET
discount=@discount,
final_price=p_price*(1-@discount)
where p_id=@p_id
;
GO

exec APPLY_ITEM_DISCOUNT 107,0.10;

exec APPLY_ITEM_DISCOUNT 112,0.20;

exec APPLY_ITEM_DISCOUNT 112,0.20;

SELECT * FROM PRODUCT;

--- TRANSACTIONS
---------EXCEPTION HANDLING
BEGIN TRY
UPDATE PRODUCT SET P_PRICE=200/0
WHERE p_id=101
END TRY
BEGIN CATCH
print 'Transaction cannot completed'
END CATCH

---------------Transactions
SET IMPLICIT_TRANSACTIONS ON; -- perform manual commits in system

BEGIN TRY
BEGIN TRANSACTION
UPDATE PRODUCT SET p_price=30/0
--WHERE p_id=101
UPDATE PRODUCT SET p_price=300
WHERE p_id=102
commit transaction
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'TRANSACTION ROLLEDBACK'
END CATCH

--SAVEPOINT
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO PRODUCT VALUES (130,'Laptop','Toshiba Model 130',1600,'2025-01-
05',NULL, 1600)
INSERT INTO PRODUCT VALUES (131,'Laptop','Toshiba Model 131',1500,'2026-01-05',
NULL, 1500)
SAVE TRANSACTION INS_TOSHIBA
UPDATE PRODUCT SET p_price=30/0
WHERE p_id=101
commit transaction
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'TRANSACTION ROLLEDBACK'
END CATCH
;
select * FROM PRODUCT;

BEGIN TRY
BEGIN TRANSACTION PRD_TXN
INSERT INTO PRODUCT VALUES (130,'Laptop','Toshiba Model 130',1600,'2025-01-
05',NULL, 1600)
SAVE TRANSACTION INS_TOSHIBA130
INSERT INTO PRODUCT VALUES (131,'Laptop','Toshiba Model 131',1500,'2026-01-
05',NULL,1500 )
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
PRINT 'TRANSACTION ROLLEDBACK'
END CATCH

SELECT * FROM PRODUCT;


ROLLBACK TRANSACTION PRD_TXN;
ROLLBACK TRANSACTION INS_TOSHIBA130;
SELECT * FROM PRODUCT;

DELETE FROM PRODUCT WHERE P_ID=130;

COMMIT TRANSACTION
--ROLLUP
------ROLLUP
select * From CUST_ORDER;

SELECT
COALESCE(O_PID,-1) AS P_ID,
COALESCE(O_DATE,'9999-01-01') AS ORDER_DATE,
COUNT(o_cid) AS CUSTID
FROM CUST_ORDER
GROUP BY
ROLLUP(o_pid, O_DATE);

--TRIGGERS
--Triggers
DROP TABLE ITEM_CHG_LOG;

CREATE TABLE ITEM_CHG_LOG


(
ITEM_ID VARCHAR(10),
NEW_PRICE float,
modification_date date default getdate() not null,
Changed_by varchar(30) DEFAULT current_user NOT NULL
);

select * From ITEM_CHG_LOG;

drop trigger if exists price_chg;

CREATE TRIGGER PRICE_CHG ON product


FOR INSERT,UPDATE,DELETE
AS
BEGIN
insert into ITEM_CHG_LOG (item_id,new_price,modification_date,Changed_by)
select a.p_id,a.p_price, getdate(),SUSER_SNAME()
from product as a inner join inserted as b
on a.p_id=b.p_id
END;

select * From ITEM_CHG_LOG;

select * From product;

update PRODUCT
set p_price=1900
where p_id=112;

select * From ITEM_CHG_LOG;

--COALESCE FUNCTION
select coalesce(null,null,null,'no vALUE')
--ISNULL FUNCTION
select isnull(null,'new value')
--CONVERT FUNCTION
select convert(numeric(10,2), p_price) from product

UPDATE PRODUCT
SET
p_price=COALESCE(p_price,2100);
--CTE

WITH TEMP_AVG AS
(
SELECT P_NAME, AVG(P_PRICE) AS AVG_PRICE
FROM PRODUCT
GROUP BY P_NAME
)
SELECT
b.*
FROM TEMP_AVG as a
INNER JOIN PRODUCT as b
on a.p_name=b.p_name
WHERE b.p_price>a.AVG_PRICE
;

With AVG_PRICE AS
(SELECT AVG(P_price) as avg_price from PRODUCT ),
EXP_DATE AS ( SELECT p_PRICE FROM PRODUCT WHERE p_expiry_date ='2025-01-01')
select p_name,p_desc,P_PRICE from PRODUCT where p_price < (select avg_price from
avg_price);

---Loading CSV file in database


drop table if exists employee;

CREATE TABLE employee


(
"First Name" VARCHAR(30),
Gender char(10),
"Start Date" DATE,
"Last Login Time" VARCHAR(10),
Salary FLOAT,
"Bonus %" FLOAT,
"Senior Management" VARCHAR(20),
Team VARCHAR(30)
);

select * from employee


-- import the file
BULK INSERT dbo.employee
FROM 'C:\Users\aksha\OneDrive\Desktop\employee.csv'
WITH
(
FORMAT='CSV',
FIRSTROW=2
)
GO
-- select from file
SELECT * FROM dbo.employee;

SELECT *
FROM
STUDENT
JOIN
COURSE
ON 1=1;

You might also like