Mod5 SQL
Mod5 SQL
--PIVOT
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
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;';
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
---STUFF FUNCTION
---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
);
CREATE NONCLUSTERED
INDEX PRODUCT_IND_NAME ON PRODUCT_INDEX(P_name);
CREATE NONCLUSTERED
INDEX PRODUCT_IND
ON PRODUCT_INDEX(P_PRICE);
--CORRELATED SUBQUERIES
select p_name,avg(p_price)
From product
group by p_name;
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);
--EXISTS
--VIEW
DROP VIEW 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;
--- 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
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;
update PRODUCT
set p_price=1900
where p_id=112;
--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);
SELECT *
FROM
STUDENT
JOIN
COURSE
ON 1=1;