0% found this document useful (0 votes)
10 views

Mod5 SQL

The document discusses various SQL concepts like pivoting, unpivoting, dynamic pivoting, indexes, views, stored procedures, transactions, triggers, CTEs. It also demonstrates importing a CSV file into a database table and joining tables without conditions.

Uploaded by

josep hook
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views

Mod5 SQL

The document discusses various SQL concepts like pivoting, unpivoting, dynamic pivoting, indexes, views, stored procedures, transactions, triggers, CTEs. It also demonstrates importing a CSV file into a database table and joining tables without conditions.

Uploaded by

josep hook
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 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