Ash
Ash
==============
DBMS------Database Management System
FLIPKART---AMAZON ----MANTRA....
EVERY BUSINESS WILL HAVE SOME OBJECTS OR ENTITIES ---- EMPLOYEES, CUSTOMERS, PRODUCTS
======================================================================================
====================
DATABASE --- A PLACE TO STORE THE DATA ---DIRECTLY WE CAN NOT STORE DATA INSIDE
DATABASE ---WE NEED AN
INTERFACE------WHICH IS DBMS SOFTWARE
SQL SERVER ----A DBMS SOFTWARE----WE WILL CREATE AND MANAGE THE DATABASE WITH HELP OF
DBMS
SQL SERVER -- RELATIONAL DATABASE MANAGEMENT SYSTEM ---MR. CODD ----DATA IS STORED IN
FORM OF RELATIONS
RELATION ---TABLE
======================================================================================
========================
CLIENT SERVER ARCHITECTURE
1. SERVER
2. CLIENT
SERVER:
=========
1. SERVER IS A SYSTEM WHERE SQL SERVER IS INSTALLED AND RUNNING
2. INSIDE THE SERVER, SQL SERVER MANAGES THE DATABASES
3. SQL SERVER RECEIVES REQUESTS FROM CLIENT AND PROCESS THE REQUEST
CLIENT:
========
CLIENT IS A SYSTEM WHERE USER CAN:
1. CONNECT TO THE SERVER
2. SUBMIT YOUR REQUESTS TO SERVER SELECT * FROM EMPLOYEE
3.RECEIVES RESPONSE FROM SERVER
TYPES OF DATABASES
1. OLTP DB(ONLINE TRANSACTION PROCESSING)
2.OLAP DB(ONLINE ANALYTICAL PROCESSING)
30-03-2022
===============================================================================
CRUD: DAY TO DAY OPERATIONS ON DB INCLUDES ---CREATE, READ, UPDATE , DELETE
===============================================================================
RDBMS --E.F.CODD
ORDBMS --- OBJECT RELATIONAL DBMS (ADDED THE CONCEPTS OF OOPS + RDBMS)
OOPS --REUSABILITY ------INHERITANCE, CLASSES, OBJECTS.......
GOD DECIDED TO CREATE HUMAN ----CLASS ----A BLUE PRINT -------TWO EYES ---TWO LEGS ---
WALK ..TALK ....LEARN
OBJECT-----
PRAVEER, NARAYAN. SANTOSH...TARUN
RDBMS --------
ORACLE----ORACLE SQL
SQL SERVER -----MICROSOFT SQL
DB2 -------------IBM SQL
MYSQL ---------ORACLE SQL
POSTGRESQL----POSTGRESSQL FORUM DEVELOPMENT ---OPEN SOURCE SQL
ORDBMS--
ORACLE
SQL SERVER
POSTGRESQL
==============================================================================
RDBMS FEATURES:
1. Easy to access and manipulate data
2. less redundancy ---less duplicate data
3. More security
4. supports data integrity-- data quality.. the term data integrity referes to the
accuracy and consistancy of the data
domain integrity--colum data types , range of values are acceptable
entity integrity-- in each table there should be no duplicate row
referential integrity----for every entry in fk there should be matching entry in pk
5. supports data sharing
6. supports transaction
transaction ----- a logical unit of work----an action or series of action carried out
by an user or an application program which
reads or updates
the content of database
======================================================================================
========
PRODUCTS
PRODUCTKEY PRODUCTNAME FLAVOR WEIGHT
1 BOURNVITA CHOCKLATE 1KG
2. BOURNVITA CHOCKLATE 500GM
3. BOURNVITA VANILLA 1KG
4. HORLICKS CHOCKLATE 1KG
CUSTOMER
CUSTOMERKEY CUSTOMERNAME CUSTOMERMOBILE CUSTOMERADD
1 PRAVEER 87XX
NOIDA
2. NARAYAN 98XX
BHUV
3. SANTOSH 94XX
HYD
SALES
DATE CUSTOMERKEY PRODUCTKEY QTY UNITCOST
22FEB 2 4
1 500
22FEB 1 1
2 300
22FEB 5 1
3 100
======================================================================================
============
PRODUCTS
PRODUCTKEY PRODUCTNAME FLAVOR WEIGHT
1 BOURNVITA CHOCKLATE 1KG
2. BOURNVITA CHOCKLATE 500GM
3. BOURNVITA VANILLA 1KG
4. HORLICKS CHOCKLATE 1KG
OUT OF 50 ----ONLY 1 CAN BE DEFUALT INSTANCE AND REST 49 HAS TO BE NAMED INSTANCE
OUT OF 50 ----I CAN MAKE ALL 50 TO BE NAMED INSTANCE
DEFAULT INSTANCE ---COMPUTER'S NAME--- YOU CAN HAVE ONLY 1 DEFAULT INSTANCE ----
PRAVEER(COMPUTER NAME)---IPADDRESS
NAMED INSTANCE ------YOU WILL GIVE NAME TO THE INSTANCE-----------
PRAVEER\AMAZON,,,,,PRAVEER\FLIPKART
======================================================================================
========================================
AUTHENTICATION
======================================================================================
=================================
WE CAN HAVE SEVERAL DATA FILES AS WELL SEVERAL FILE GROUPS AS WELL SEVERAL LOG FILES
IT IS RECOMMENDED TO HAVE JUST ONE LOG FILE WE CAN HAVE MULTIPLE DATA FILES
MULTIPLE DATA FILES ---- PERFORMANCE AND BACK UP
SECONDARY DATA FILES HAVE EXTENSION (.ndf)==> n means no master data files
.mdf
.ndf
.ldf
PRIMARY FILE GROUP MAY CONTAIN --PRIMARY DATA FILE AND ALSO SECONDARY DATA FILES IF
CREATED
WE CAN HAVE SEVERAL FILE GROUPS----EVERY FILE GROUP CAN STORE DATA FILES
PAGE ------SIZE 8 KB
EXTENT ----8 CONTIGUOUS PAGES FORM A EXTENT------64KB
UNIFORM EXTENT-----ALL PAGES OF AN EXTENT ARE ASSIGNED TO SINGLE OBJECT
MIXED EXTENT(RARE)-------ONE PAGE FOR ONE OBJECT
======================================================================================
============================
COLUMN OF A TABLE , VARIABLE OR ANY EXPRESSION WILL HAVE SOME KIND OF DATA TYPE
1. BY SPECIFYING DATA TYPE ----WE CAN SPECIFY WHAT KIND OF DATA IS TO BE STORED
2. BY SPECIFYING DATA TYPE --- WE ALSO SPECIFY ACTUALLY HOW MEMORY WILL BE OCCUPIED
EVERY DATA TYPE MAY OCCUPY DIFFERENT MEMORY SIZE
======================================================================================
===============================
STRING/CHARACTER DATA TYPE
1. NON UNICODE / STANDARD DATA ---A-Z, a-z 0-9 , special characters (256 characters)
2 UNICODE CHARACTERS--- 65536 characters ---WE CAN HAVE CHARACTERS OF OTHER LANGUAGES
AS WELL
======================================================================================
==============================
1.NON UNICODE / STANDARD DATA -
=> SO IF CHAR(10) IS CHOSEN FOR LET SAY NAME --- NAME CHAR (10) THEN 10 BYTES WILL
BE REASERVED
=>> NOW IF NAME IS 'PRAVEER' THEN STILL 10 BYTES ARE USED..THAT MEANS 3 BYTES ARE
WAISTED
=> SIMILARLY IF NAME IS 'ANU' THEN STILL 10 BYTES ARE USED THAT MEANS 7 BYTES ARE
WAISTED
=>
=> MAXIMUM CHARACTERS CHAR CAN HAVE IS 8000 AS MAX IT CAN HAVE 8000 BYTES
=> IF YOU PASS MORE THAN N CHARACTERS WHILE INSERTING DATA YOU WILL GET AN ERROR
POSTALCODE CHAR(6)
MOBILE CHAR(10)
GENDER CHAR(1)
CHAR(50)
======================================================================================
===============================
VARCHAR(n)
=> IT IS VARIABLE LENGTH DATA TYPE
=>NUMBER OF TOTAL BYTES USED, DEPENDS ON ACTUAL NUMBER OF CHARACTERS INSERTED RATHAR
THEN
MAX LENGTH SPECIFIED AS n IN VARCHAR(n)
=>EXTRA BYTES ARE RELEASED..SO BETTER UTILIZATION OF MEMORY
=>TWO BYTES ARE NEEDED IN VARCHAR FOR OVERHEAD
EXAMPLE2:
NAME VARCHAR(8) ==> SO MAX CHARACTERS IT CAN HAVE IS 8 AS
USES 1 BYTE FOR EACH CHARACTER
NOW SUPPOSE ACTUAL NAME STORED IS 'RAMA' , SO TOTAL BYTES
USED WILL BE:
4 BYTES FOR NAME + 2 BYTES OF OVERHEAD =6 BYTES
=>MAXIMUM CHARACTERS VARCHAR CAN HAVE IS 8000 AS MAX IT CAN HAVE 8000 BYTES
=> IF YOU PASS MORE THAN N CHARACTERS YOU WILL GET AN ERROR
=> DONT USE VARCHAR FOR THE COLUMN WHICH TENDS TO UPDATE OR CHANGE FREQUENTLY
ADDRESS VARCHAR(40)
170 MMIG AGRA 13 HNO .43, GALI NO 43, AREA - NEAR CHOWS,
BORIWALI, MUMBAI PRAVEER SHARMA
DRESS CHAR(100) HNO .43, GALI NO 43, AREA - NEAR CHOWS,
BORIWALI, MUMBAI
PRAVEER
=============================================================================
======================
04-04-2022
VARCHAR(MAX) ---- WHEN THE CHARACTER LIMIT EXCEEDS 8000 USE VARCHAR(MAX)
IT CAN STORE CHARACTERS DATA UPTO 2GB
======================================================================================
=================
UNICODE CHARACTERS-- 65536 CHARACTERS--WE CAN HAVE CHARACTERS OF OTHER LANGUAGES AS
WELL
=>NCHAR(N), NVARCHAR(N) AND NVARCHAR(MAX) ARE USED FOR UNICODE DATA
NCHAR(5)--- -5 UNICODE CHARACTERS ---5 BYTE PAIRS ----10 BYTES WILL BE RESEARVED
=> LIKE CHAR(N) EXTRA MEMORY IS WAISTED IN NCHAR(N)
--------------------------------------------------------------------------------------
----------------------------------------------
--------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
========================================================================
Binary Types :-
---------------
=> binary types allows binary data that includes audio,video,images etc
They describe data objects being represented in the internal format of the system.
They are used to store bit strings. For this
reason, the values are entered using hexadecimal numbers.
BINARY
VARBINARY
VARBINARY(MAX)
binary :-
---------
BINARY(N)
varbinary :-
-------------
VARBINARY(N)
varbinary(max) :-
-----------------
VARBINARY(MAX)
=> allows binary data upto 2GB
ex :- photo varbinary(max)
======================================================================================
=======
Integer: Integer data types hold numbers that are whole, or without a decimal point.
SQL Server optimizes storage of BIT columns. If a table has 8 or fewer bit columns,
SQL Server stores them as 1 byte.
If a table has 9 up to 16 bit columns, SQL Server stores them as 2 bytes, and so on.
ex :- age TINYINT
empid SMALLINT
aadharno BIGINT
======================================================================================
==================
Currency--
money 8 bytes Monetary values with four
decimal places from
-922,337,203,685,477.5808
through
922,337,203,685,477.5807.
EX : SALARY SMALLMONEY
BAL MONEY
======================================================================================
=========================
DECIMAL(p,s) :-
----------------
=> Allows real numbers i.e. numbers with decimal part
p => precision => total no of digits allowed.The default precision is 18 and maximum
38.
s => scale => no of digits allowed after decimal. The default value of scale is 0.
Ex of Precision: 3457.78543 ---------- Precision =9
Ex of Scale: 3457.78543 ---------- Scale = 5
======================================================================================
=========
======================================================================================
==============
SQL_VARIANT :
This Data type can be used to store values of various data types at the same time,
such as numeric values, strings, and date values.
The sql_variant data type allows a table column or a variable to hold values of any
data type with a maximum length of 8000 bytes
Example :
value SQL_VARIANT ,
======================================================================================
===========
Xml:
Xml Stores XML formatted data. Maximum 2GB
======================================================================================
============
ROWVERSION
You can use timestamp columns to build custom data replication and synchronization
solutions.
If you update a row, the ROWVERSION column gets a new value:
============================================================================
large value data types:
varchar(max)
nvarchar(max)
varbinary(max)
========================================================================
CREATING A TABLE
===============
RULES:
ALWAYS RECOMMENDED TO START TABLE NAME WITH ALPHABET
128 CHARS CAN BE USED FOR TABLE NAME
128 CHARS CAN BE USED FOR COLUMN NAME
WE CAN HAVE 1024 COLUMN IN A TABLE
EXAMPLE:
CREATE A TABLE WITH FOLLOWING STRUCTURE
--------------------------------------------------------------------------------------
--------------------------------------------------------------
--------------------------------------------------------------------------------------
-------------------------------------------------------------
SP_HELP
METHOD1
INSERT INTO emp VALUES(104, 'AJAY', NULL,NULL,30, GETDATE());
METHOD2
INSERT INTO emp(empid, ename, age,hiredate) VALUES(105, 'RAMA', 28, '2019-10-05');
=> REMAINING TWO FIELDS FILLED WITH NULLS
======================================================================================
=====
06-04-2022
OPERATORS IN SQL SERVER
1. ARITHMATIC OPERATORS => + , -. *, / , %(REMAINDER)
2. RELATIONAL OPERATORS => >,<,>=,<=, =, <>(NOT EQUAL)
3. LOGICAL OPERATORS => AND, OR , NOT
4. SPECIAL OPERATORS => BETWEEN, IN, LIKE, IS, ANY, ALL, EXISTS, PIVOT
5. SET OPERATORS=> UNION, UNION ALL, INTERSECT, EXCEPT
======================================================================================
======
=> DISPLAY EMPLOYEE NAMES AND THEIR SALARIES FROM EMP TABLE.
=> DISPLAY EMPLOYEE NAMES AND THEIR AGE FROM EMP TABLE.
WHERE CLAUSE
=> IT IS USED TO GET SPECIFIC ROW OR ROWS FROM THE TABLE BASED ON A CERTAIN CONDITION
=> CONDITION SHOULD BE SOME EXPRESSION/RELATION WHICH SHOULD RESULT IN TRUE OR FALSE
=> FOR EVERY ROW OF TABLE, CONDITION WILL BE EVALUATED, NOW IF CONDITION IS TRUE,
CORRESPONDING ROW IS SELECTED
BUT IF CONDITION IS FALSE THAT ROW IS NOT SELECTED
======================================================================================
=========
COMPOUND CONDITIONS
=> DISPLAY DETAILS OF EMPLOYEES WHO ARE WORKING AS CLERK AND EARNING MORE THAN 4000?
=> DISPLAY DETAILS OF EMPLOYEES WORKING AS CLERK, MANAGER
OR OPERATOR
WHERE COND1 OR COND2 OR COND3 OR COND4
AND OPERATORS
WHERE COND1 AND COND2 AND COND3 AND COND4
=> DISPLAY DETAILS OF EMPLOYEES WHO ARE WORKING AS CLERK AND EARNING MORE THAN 4000?
AS BOTH CONIDITION THAT JOB = CLERK AND SALARY > 4000 HAS TO BE MEET SIMULTANEOUSLY --
--> AND OPERATOR WILL BE USED
SELECT * FROM emp WHERE job = 'CLERK' AND SAL > 4000;
======================================================================================
============================
======================================================================================
================================
=> DISPLAY THE EMPLOYEE DETAILS WHOSE empid = 100,103, 105
SELECT * FROM emp WHERE empid =100 OR empid = 103 OR empid =105;
======================================================================================
===============================
=> DISPLAY EMPLOYEE DETAILS EARNING MORE THAN 5000 AND LESS THAN 10000
SELECT * FROM emp WHERE sal > 5000 AND sal < 10000;
======================================================================================
==================================
=>DISPLAY EMPOYEE DETAILS WHO JOINED IN 2020
SELECT * FROM emp WHERE HIREDATE >= '2020-01-01' AND HIREDATE <= '2020-12-31';
======================================================================================
=================================
IN OPERATOR
=> WE USE IN OPERATOR FOR LIST COMPARISION
=> WE USE IN OPERATOR FOR '=' COMPARISION WITH MULTIPLE VALUES
SELECT * FROM emp WHERE empid =100 OR empid = 103 OR empid =105;
NOT IN
=======
BETWEEN OPERATOR
SELECT * FROM emp WHERE HIREDATE >= '2020-01-01' AND HIREDATE <= '2020-12-31';
SELECT * FROM emp WHERE HIREDATE NOT BETWEEN '2020-01-01' AND '2020-12-31';
======================================================================================
=============================
07 -04-2022
PRODUCTS TABLE
=============================================
========================================================================
CREATE TABLE PRODUCTS(PID TINYINT, PNAME VARCHAR(20), PRICE SMALLMONEY, CATEGORY
VARCHAR(20), BRAND VARCHAR(20))
======================================================================================
============================
======================================================================================
=======================
=> DISPLAY THE LIST OF MOBILE PHONES WHOSE PRICE RANGE BETWEEN 10000 AND 15000
--AND BRAND SHOULD BE REALME, SAMSUNG, REDMI
======================================================================================
==========================
SELECT * FROM PRODUCTS WHERE CATEGORY = 'MOBILE'
AND PRICE BETWEEN 10000 AND 15000
AND BRAND IN ('REALME', 'SAMSUNG', 'REDMI')
======================================================================================
==============================
=> DISPLAY EMPLOYEE DETAILS WORKINGS AS CLERK , MANAGER AND EARNING BETWEEN 5000 AND
10000 AND JOINED IN 2021.
SNO SNAME S1 S2 S3
1 A 80 90 70
2 B 30 70 60
3 C 45 25 70
==============================================================================
=> DISPLAY THE DETAILS OF THE EMPLOYEES WHOSE NAME STARTS WITH 'S'?
SELECT * FROM emp WHERE ename LIKE 'S%';
==============================================================================
=> DISPLAY THE DETAILS OF THE EMPLOYEES WHOSE NAME ENDS WITH 'S'?
SELECT * FROM emp WHERE ename LIKE '%S';
==============================================================================
=> DISPLAY THE DETAILS OF THE EMPLOYEES WHO NAME CONTAINS 'S'.
==============================================================================
=> DISPLAY THE DETAILS OF THE EMPLOYEES WHERE 3RD CHARACTERS IN THEIR NAME SHOULD BE
'a'
==============================================================================
=> DISPLAY THE DETAILS OF THE EMPLOYEES WHERE 'a' IS 3rd CHARACTER FROM THE LAST IN
THEIR NAME
SELECT * FROM emp WHERE HIREDATE >= '2020-01-01' AND HIREDATE <= '2020-12-31';
=====================================================================================
IS OPERATOR
It is not possible to test for NULL values with comparison operators, such as =, <, or
<>.
FROM EMP1 TABLE SHOW ME THE RECORDS WHOSE MANAGER IS NOT YET DECIDED
FROM EMP1 TABLE DISPLAY THE RECORDS OF EMPLOYEES WHOSE COMMISSION IS NULL
FROM EMP1 TABLE DISPLAY THE RECORDS OF EMPLOYEES WHO TAKE COMMISION
=>IF WE FETCH SOME RECORDS FROM THE TABLE WITHOUT ANY SORTING THEN THERE ORDER IS NOT
GUARRANTEED
=> ORDER BY CLAUSE IS USED TO SORT THE DATA BASED ON ONE OR MORE COLUMS OR BY AN
EXPRESSION
COMPLETE SELECT STATEMENT MAY HAVE ==> SELECT FROM WHERE GROUP BY HAVING ORDER BY
BUT THE ACTUAL EXECUTION WILL BE => FROM WHERE GROUP BY HAVING SELECT ORDER BY
SELECT COLUMNS FROM TABLE NAME ORDER BY COL1 [ASC/DESC], [COL2] [ASC/DESC].........
===> DISPLAY THE EMPLOYEE LIST NAME WISE IN ASCENDING ORDER from EMP1 TABLE
===> DISPLAY THE EMPLOYEE LIST SALARY WISE IN DESCENDING ORDER from EMP1 TABLE AND
ONLY SHOW THEIR NAME AND SALARY
===> DISPLAY THE EMPLOYEE LIST AS PER THEIR SENIORITY LEVEL from EMP1 IN DESCENDING
ORDER
=--> DISPLAY THE EMPLOYEE LIST DEPT WISE ASC AND WITH IN THE DEPARTMENT SALARY WISE
DESC
======================================================================================
========================
=> IN FROM EVERY STUDENT IN STUDENT1 TABLE ALSO SHOW THEIR TOTAL MARKS
=> DISPLAY THE DETAILS OF THE STUDENTS IN ORDER OF THEIR TOTAL MARKS IN DESCENDING
ORDER
SELECT *, MATH + PHY + CHEM AS TOTAL FROM STUDENT1 ORDER BY MATH + PHY + CHEM DESC
SELECT *, MATH + PHY + CHEM AS TOTAL FROM STUDENT1 ORDER BY TOTAL DESC
======================================================================================
======================
DISPLAY THE DETAILS OF THE STUDENTS IN ORDER OF THEIR TOTAL MARKS IN DESCENDING
ORDER, INCASE THERE IS TIE THEN SORT BY
MATHS IN DESC, IN CASE OF FURTHER TIE SORT BY PHY DESC
SELECT *, MATH + PHY + CHEM AS TOTAL FROM STUDENT1 ORDER BY TOTAL DESC,math DESC,phy
DESC
======================================================================================
========================
DISPLAY AVERAGE MARKS OF EACH STUDENT IN FRONT OF HIM/HER AND ALSO SORT THE RESULT AS
PER THEIR AVERAGE MARKS DESC
SELECT *, (MATH + PHY + CHEM)/3 AS 'AVG' FROM STUDENT1 ORDER BY 'AVG' DESC
======================================================================================
===========================
=> DISPLAY EMPLOYEES WORKING AS CLERK, MANAGER AND ARRANGE THE LIST SAL WISE DESC
ORDER
SELECT * FROM emp1 WHERE job IN ('CLERK', 'MANAGER') ORDER BY SAL DESC
======================================================================================
==============================
11-04-2022
DISTINCT
===========
=> USED TO ELIMINATE THE DUPLICATES FROM THE SELECT STATEMENT OUTPUT
=>=> DISPLAY THE COUNTRY AND CITIES WHERE ASIANPAINTS IS OPERATING..ENSURING THAT
THERE IS NO DUPLICATE
=> IT WILL DISPLAY THE DISTINCT EXISITING COMBINATION OF COUNTRY AND CITY
=> DISPLAY THE DIFFERENT CITIES IN INDIA WHERE ASIAN PAINTS IS OPERATING
SELECT DISTINCT CITY FROM ASIANPAINTS WHERE COUNTRY = 'INDIA';
======================================================================================
=====================
=> ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
NOT ALLOWED=>SELECT DISTINCT COUNTRY, CITY FROM ASIANPAINTS ORDER BY ENAME
=> ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
ALLOWED =>
SELECT DISTINCT COUNTRY, CITY FROM ASIANPAINTS ORDER BY CITY
======================================================================================
================
TOP CLAUSE
=> IT WILL GIVE ME 5 ROWS FROM EMP1 DEPENDING ON ACCESS OF SQL SERVER
=> TO GUARRANTY UR RESULT ..YOU SHOULD SORT THEM AND FOR SORTING WE USE ORDER BY
=> DISPLAY THE TOP 5 SALARIES AND THE CORRESPONDING EMPLOYEE NAMES FROM EMP1 TABLE
=> => DISPLAY THE TOP 10 PERCENT SALARIES AND THE CORRESPONDING EMPLOYEE NAMES FROM
EMP1 TABLE
SELECT TOP 10 PERCENT ENAME, SAL FROM EMP1 ORDER BY SAL DESC
===============================================================================
RETURNS TWO OR MORE ROWS THAT TIES FOR LAST PLACE IN LIMITED RESULT SET
SELECT TOP 2 WITH TIES ENAME, SAL FROM EMP1 ORDER BY SAL DESC;
======================================================================================
=====
OFFESET -FETCH
================
OFFSET ---HOW MANY ROWS TO SKIP -----FOR OFFEST FETCH IS NOT MANDATORY
FETCH ---HOW MANY ROWS TO FETCH AFTER OFFSET----- BUT FOR FETCH OFFSET IS MANDATORY
=> WITHOUT FETCH === SELECT ENAME, SAL, JOB FROM EMP1 ORDER BY SAL DESC OFFSET 1 ROWS
=> WITH FETCH = > SELECT ENAME, SAL, JOB FROM EMP1 ORDER BY SAL DESC OFFSET 1 ROWS
FETCH NEXT 2 ROWS ONLY
=> I WANT TO SEE THE RECORD OF THE PERSON HAVING TOP SALARY USING OFFSET -FETCH
SELECT ENAME, SAL, JOB FROM EMP1 ORDER BY SAL DESC OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY
======================================================================================
========================
SQL COMMANDS HAVE BEEN CATEGORISED IN TO DIFFERENT CATEGORIES BASED ON THE OPERATION
THEY PERFORM
1. DDL(DATA DEFINITION LANGUAGE)----CREATE, ALTER, DROP, TRUNCATE
2. DML(DATA MANIPULATION LANGUAGE) ---INSERT, UPDATE, DELETE
3. DRL/DQL (DATA RETRIEVAL LANGUAGE/ DATA QUERY LANGUAGE) ---------SELECT
4. TCL(TRANSACTION CONTROL LANGUAGE)------COMMIT , ROLLBACK, SAVETRANSACTION
5. DCL(DATA CONTROL LANGUAGE) ---GRANT, REVOKE
======================================================================================
=======================
12-04-2022
4. RETRIEVE THE DATA FROM TABLES-----> SELECT ---> AS PER MICROSOFT OFFICAL BOOK--
--> DML
---------------------------------------------------------------------------------
INSERT INTO EMP VALUES(1, 'PRAVEER', 3000), (2, 'RAMA', 4000)
-----------------------------------------------------------------------------------
=>ALREADY HAVE A TABLE KNOWN AS EMP1 ---> CREATE A TABLE FOR DEPT 10 HAVING NAME JOB
SAL
INSERT- SELECT
================
=>INSERT INTO DEPT10 SELECT ENAME, JOB, SAL FROM EMP1 WHERE DEPTNO =10
=>ALSO INSERT DEPT 20 DATA INTO SAME DEPTNO10 TABLE ---NAME AND JOB
INSERT INTO DEPT10(ENAME, JOB) SELECT ENAME, JOB FROM EMP1 WHERE DEPTNO =20
======================================================================================
====================
CAN YOU CREATE A TABLE WITHOUT GUI OPTION OR WITHOUT CREATE STATEMENT
CREATE A CLONE OF THE TABLE EMP1 WITHOUT USING CREATE STATEMENT OR GUI OPTION
SELECT - INTO
---------------
SELECT * INTO EMP2 FROM EMP1
=> JUST CREATE STRUCTURE OF TABLE EMP1 AS A NEW TABLE WITHOUT CREATE COMMAND
======================================================================================
============
UPDATE COMMAND
=> USED TO MODIFY THE TABLE DATA
=> USING UPDATE COMMAND WE CAN UPDATE ALL THE ROWS OR SPECIFIC ROWS
=> USING UPDATE COMMAND WE CAN UPDATE SINGLE COLUMN OR MULTIPLE COLUMNS
SYNTAX :
UPDATE <TABLENAME>
SET COLNAME1 = VALUE1, COLNAME2 = VALUE2, COLNAME3 = VALUE3.........
[WHERE]
=> UPDATE THE EMPLOYEE COMMISION TO 2000 WHOSE COMMISION IS NULL FROM EMP2
=> INCREMENT SALARY BY 20% AND COMMISION BY 10% FOR THOSE WORKING AS SALESMAN AND
JOINED IN 2021. IN EMP2
UPDATE EMP2
SET SAL = SAL + (SAL*0.2),
COMM = COMM + (COMM*0.1)
WHERE JOB = 'SALESMAN'
AND
HIREDATE LIKE '2021%'
======================================================================================
==============================
13-04-2022
ONE WAY IS TO UPDATE ONE BY ONE EACH DEPARTMENT SALARY LIKE FOLLOWING
UPDATE EMP2
SET SAL = 1.1*SAL WHERE DEPTNO = 10
1. SIMPLE CASE
2. SEARCHED CASE
SYNTAX=>
CASE EXPR/COLNAME
WHEN VALUE1 THEN RETURN EXPR1
WHEN VALUE2 THEN RETURN EXPR2
WHEN VALUE3 THEN RETURN EXPR3
======================================================
DEPTNO INCREMENT IN SALARY
10 10%
20 15%
30 20%
OTHERS 5%
UPDATE EMP2
SET SAL = CASE DEPTNO
WHEN 10 THEN 1.1*SAL
WHEN 20 THEN 1.15*SAL
WHEN 30 THEN 1.2*SAL
ELSE 1.05*SAL
END
=================================================================================
2. SEARCHED CASE
=> USE SEARCHED CASE WHEN CONDITION IS OTHER THAN EQUALITY CHECK
CASE
WHEN BOOLEAN CONDITION THEN RETURN EXPR1
WHEN BOOLEAN CONDITION THEN RETURN EXPR2
[ELSE RETURN EXPR]
END
=================================================================================
DISPLAY ENAME , SAL AND SALRANGE FROM EMP2--ACCORDING TO FOLLOWING CONDITION
==================>
SELECT ENAME, SAL, CASE
WHEN SAL > 3000 THEN 'HISAL'
WHEN SAL < 3000 THEN 'LOWSAL'
ELSE 'AVGSAL'
END AS SALRANGE
FROM EMP2
======================================================================================
========================
=>STUDENTS 2 --- S1, S2, S3 --------PASSING MARKS IN EVERY SUBJECT IS 35
REQUIREMENT IS IF STUDENT IS FAIL IN S1 ----INSTEAD OF HIS MARKS IN S1 NULL SHOULD BE
DISPLAYED
-----IF HE
IS PASS THEN HIS ORIGINAL MARKS SHOULD BE DISPLAY
CASE
WHEN S2 < 35 THEN NULL
ELSE S2
END AS S2,
CASE
WHEN S3 < 35 THEN NULL
ELSE S3
END AS S3
FROM STUDENTSNEW
==================================================================================
UPDATE EMPUPDATED
SET COMM = (SELECT MIN(SAL) FROM EMPUPDATED)
=====================================================================================
14-04-2022
SORT THE RESULT IN EMP1 TABLE SUCH THAT WHEN IT IS DEPT NO 10 THEN SORT BY SAL ASC AND
IF DEPTNO 20 THEN SORT BY SAL DESC
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
--------
IN OUR STUDENTS NEW ..WE HAVE STUDENTS LIST ALONG WITH THEIR MARKS..
IN SUBJECT S1 IF STUDENT SECURED ATLEAST 35 MARKS MARKS HIM 'PASS' ELSE 'FAIL'
SELECT SNO, SNAME, CASE WHEN S1>=35 THEN 'PASS' ELSE 'FAIL' END AS S1 FROM STUDENTSNEW
=>WHEN ALL THE CONDITIONS ARE FALSE OR NOT MET AND ELSE CLAUSE IS NOT MENTIONED THEN
CASE WILL RETURN NULL
SELECT SNO, SNAME, CASE WHEN S1>=35 THEN 'PASS' END AS S1 FROM STUDENTSNEW
=>IN ABOVE COMMAND WHERE EVER S1<35, CASE WILL RETURN NULL
======================================================================================
=======================================
DELETE COMMAND
===================
=> USED TO DELETE RECORDS
=> WE CAN DELETE SPECIFIC RECORDS OR ROWS -----> WITH THE HELP OF WHERE CLAUSE
=> WE CAN DELETE ENTIRE RECORDS OR ALL ROWS
=> SUPOSSE I DELETE ALL THE RECORDS OF THE TABLE IN THAT CASE ONLY DATA WILL BE
DELETED BUT STRUCTURE OF TABLE WILL REMAIN
=> IT DELETES RECORD ROW BY ROW AND WHEN EVER IT WILL DELETE ONE ROW IT WILL LOG
THAT INFORMATION
=> IT DOES NOT RESET IDENTITY
SYNTAX ---> DELETE FROM <TABLE NAME> [WHERE CLAUSE]
===============================================
=> DELETE ALL THE RECORDS/ROWS FROM EMP TABLE
=> ALL THE RECORDS OR ROWS OF EMP TABLE WILL BE DELETED BUT STRUCTURE OF EMP TABLE
WILL REMAIN
===================================
INSTEAD OF USING ENAME BETTER USING SOME THING WHICH UNIQUELY IDENTIFIES THE ALLEN----
-> EMP ID
=========================================
======================================================================================
===========
DDL ---> DATA DEFINITION LANGUAGE
CREATE
ALTER
DROP
TRUNCATE
-------------------------------------------------------------------------------
ALTER COMMAND
ADDING COLUMN
----------------
IN EMP1 TABLE ADD A COLUMN KNOWN DISTT WHICH INDICATES DISTANCE TRAVELLED IN KM IN
WHOLE NUMBERS
ALTER TABLE EMP1
ADD DISTT TINYINT;
=> AFTER ADDING COLUM THE COLUM IS FILLED WITH NULL BY DEFAULT
=> NOW WE HAVE TO INSERT THE DATA IN NEW COLUM USING UPDATE COMMAND
=> UPDATE THE DOB OF EMPNO 7521 WITH DATE OF BIRTH = '2000-05-10'
DROPING A COLUM
=====================>
ALTER TABLE <TABLENAME>
DROP COLUMN COLNAME1, COLNAME2...........
----------------------------------------------------------
DROP COLUMNS DOB AND DISTT FROM EMP1 TABLE
================================================================
MODIFYING A COLUMN
1. CHANGE SIZE
2 . CHANGE DATATYPE
=> FOR NOW IN SQL SERVER WE CAN MODIFY ONLY COLUMN AT A TIME
ERROR=> Arithmetic overflow error for data type tinyint, value = 7521.
ERROR = > Conversion failed when converting the varchar value 'WARD' to data type
tinyint.
15-04-2022
DROP COMMAND
---------------------
TRUNCATE COMMAND
-----------------------------
=> DELETES ALL THE DATA FROM THE TABLE BUT KEEPS STRUCTURE
=> WILL EMPTY THE TABLE
=> CAN NOT DELETE SPECIFIC RECORDS----THAT MEANS WHERE CLAUSE IS NOT ALLOWED
=> WHEN TRUNCATE COMMAND IS EXECUTED THEN SQL SERVER GOES TO MEMORY AND RELEASES ALL
THE PAGES ALLOCATED FOR THE
TABLE AND WHEN PAGES WILL BE RELEASED THEN DATA STORED INSIDE PAGES WILL ALSO BE
DELETED
=> IT RESETS THE IDENTITY
DROP DELETE
TRUNCATE
DELETED DATA AS IT DELETES BUT IT DELETES
BUT
WELL AS STRUCTURE KEEPS STRUCTURE KEEPS STRUCTURE
------------------------------------------------------------------------
DELETE VS TRUNCATE
DELETE TRUNCATE
---------- ---
----------------------------------------
DML DDL
WHERE CONDITION
CAN BE USED WITH DELETE WHERE CONDITION CAN NOT BE USED WITH
TRUNCATE
SP_RENAME 'EMP3.COMM','BONUS'
======================================================================================
=================
IDENTITY
-----------
=> IDENTITY IS USED TO GENERATE SEQUENCE NUMBERS
=> USED TO AUTO INCREMENT COLUMN VALUE
=> USED FOR NUMERIC COLUMNS
=> WE CAN HAVE ONLY ONE IDENTITY COLUMN PER TABLE
EXAMPLE:
cid cname
1 A
2 b
3 c
4 d
5 e
========================================
cid cname
100 A
102 b
104 c
106 d
108 e
=========================================
======================================================================================
===============
18-04-2022
=>An explicit value for the identity column in table 'CUSTOMER2' can only be specified
when a column list is used and IDENTITY_INSERT is ON
=> IF WE WANT TO MANUALLY OR EXPLICITLY PASS THE VALUE FOR IDENTITY COLUM THEN
FOLLOWING TWO CONDITIONS SHOULD BE
SATISFIED:
cid cname
100 A
101 b
102 c
103 d
104 e
125 F
cid cname
100 A
101 b
102 c
103 d
104 e
125 F
150 G
151 H
152 I
25 j
153 k
1 L
2 M
3 N
4 O
--------------------------------------------------------------------------------------
-----------------------------------------------------------------------
BUILT IN FUNCTIONS IN SQL SERVER
=> FUNCTION --> FUNCTIONS ARE DESIGNED TO PERFORM SOME SPECIFIC TASK
---> SOME FUNCTIONS TAKES ARGUMENT --SUM(COLNAME)---AN
ARGUMENT HERE IS A COLNAME
TYPES OF FUNCTIONS:
1.DATE/DATETIME FUNCTIONS
2. STRING
3. MATHEMATICAL
4. CONVERSION
5. SPECIAL
6. ANALYTICAL
7. AGGREGATION FUNCTION
1. DATE/DATETIME FUNCTIONS:
------------------------------------------
------
# DISPLAY THE LIST OF EMPLOYEES JOINED IN YEAR 2021
=> DISPLAY THE LIST OF EMPLOYEE WHO JOINED IN 2021 AND APRIL MONTH
SELECT SYSDATETIME();
currentdatetime
2022-04-18 08:29:56.9610096
currentdatetime
2022-04-18 08:30:16.840
CURRENTDATETIME
2022-04-18 08:31:54.750
7. SYSUTCDATETIME()---- CURRENT UTC DATE AND TIME FROM SYSTEM---- HIGH PRECISION
8. GETUTCDATE()----> CURRENT UTC DATE AND TIME FROM SYSTEM---- LOW PRECISION
GETUTCDATETIME
2022-04-18 03:06:37.190
--------------------------------------------------------------------------------------
------------------------------
9. DATEPART()-----> USED TO EXTRACT THE PART OF DATE OR DATE TIME
SYNTAXT--> DATEPART(DATEPART,DATE/DATETIME)
--------------------------------------------------------------------------------------
--------------------------------------------------
# DISPLAY THE LIST OF EMPLOYEES JOINED IN YEAR 2021
=> DISPLAY THE LIST OF EMPLOYEE WHO JOINED IN 2021 AND APRIL MONTH
SELECT * FROM EMP1 WHERE DATEPART(YEAR, hiredate) = 2021 AND DATEPART(MONTH, hiredate)
= 04;
--------------------------------------------------------------------------------------
-----------------------------------------------------
19-04-2022
DATEPART 04(INTEGER) 07
=> WRITE A QUERY TO DISPLAY THE DAY OF THE WEEK ON WHICH INDIA GOT INDEPENDANCE------
DAY OF THE WEEK SHOULD BE
LIKE SUNDAY, MONDAY...ETC
SELECT '23' + '1' ===> 231 BECAUSE ITS DOING CONCATENATION AS BOTH OPERANDS OF THE +
OPERATOR ARE STRING DATA SO CONCATENATION
WILL HAPPEN
SELECT '23' + 1 = > 24 => '23' WILL BE CONVERTED TO INTEGER AND ADDITION WILL HAPPEN
SELECT 'A' + 1==> Conversion failed when converting the varchar value 'A' to data type
int.
=> DISPLAY A MESSAGE IN EMP1 TABLE IN FRONT OF EVERY EMPLOYEE FOR EXAMPLE :
SELECT *, ENAME+' '+'JOINED ON'+ ' '+ DATENAME(WEEKDAY, HIREDATE) AS MESSAGE FROM EMP1
======================================================================================
====================================
11 DATEDIFF() ----> USED TO FIND DIFFERENCE BETWEEN TWO DATES
=> SELECT DATEDIFF(YEAR, '2020-12-10', '2021-01-01') WILL RETURN 1 --> NOTICE THAT
THE GIVEN FUNCTION WILL RETURN 1 YEAR EVEN THOUGH DIFFERENCE
BETWEEN TWO DATES IS NOT EVEN 1 MONTH. ITS RETURNING 1 YEAR AS YEAR PART HAS CHANGED
FROM 2020 TO 2021 ---> HENCE DIFFERENCE
IN TERMS OF YEAR IS 1.
--------------------------------------------------------------
DISPLAY EACH EMPLOYEE DETAILS AND THEIR EXPERIENCE IN YEARS TILL DATE FROM EMP1
-----------------------------------------------------------------------------
DISPLAY EACH EMPLOYEE DETAILS AND THEIR EXPERIENCE IN YEARS AND MONTHS TILL DATE
FROM EMP1
M YEARS N MONTHS
=> EXTRACT MONTHS FROM TOTAL EXPERIENCE
=> 40 MONTHS AS EXPERIENCE ===> 40/12 ----> 3 YEARS
===> 40%12------> 4 MONTHS
======================================================================================
====================
DATEADD()---> IT ADDS A NUMBER TO DATEPART OF INPUT DATE AND RETURNS MODIFIED DATE
/DATE TIME
--------------------------------------------------------------------------------------
-------------------------
EOMONTH()==> IT RETURNS LAST DAY OF THE MONTH
-----------------------------------------------------------
======================================================================================
============
20-04-2022
==================
STRING FUNCTIONS
SYNTAX : UPPER(STRING/COLNAME)
SYNTAX : LOWER(STRING/COLNAME)
=> DISPLAY EMPNO, ENAME AND SAL FROM EMP1 TABLE ..ENSURE THAT THE NAMES SHOULD BE IN
LOWER CASE
==> IN EMP1 TABLE ENAMES ARE GIVEN IN CAPITAL LETTERS ..SAVE OR UPDATE THE RESULT IN
EMP1 TABLE AS LOWER CASE
SYNTAX--> LEN(STRING)
SELECT LEN(' HELLO ')----> 8 BECAUSE IT CONSIDERS LEADING SPACE BUT NOT TRAILING
SPACE
IF WE WANT TO CAPTURE TRAILING SPACE THEN DATALENGTH FUNCTION SHOULD BE USED WHICH
REPRESENTES NUMBER OF BYTES USED
===================================
DISPLAY THE DETAILS OF EMPLOYEES WHO NAME CONTAINS EXACTLY 5 CHARACTERS WITHOUT USE
OF LEN FUNCTION/DATALENGTH
DISPLAY THE DETAILS OF EMPLOYEES WHO NAME CONTAINS EXACTLY 5 CHARACTERS WITH USE OF
LEN FUNCTION
================================
LEFT()----> IT RETURNS THE SPECIFIED NUMBER OF CHARCTERS FROM LEFT SIDE OR START OF
THE STRING
===========================================================
RIGHT() ---> IT RETURNS THE SPECIFIED NUMBER OF CHARACTERS FROM RIGHT OR END OF THE
STRING
=> DISPLAY THE EMPLOYEE DETAILS WHOSE NAME ENDS WITH 'S'
=> DISPLAY THE DETAILS OF EMPLOYEES WHOSE NAME STARTS AND END WITH SAME CHARACTER
=================
GENERATE EMAID FOR THE EMPLOYEES
GENERATE EMAID FOR THE EMPLOYEES AND SAVE THE RESULT IN THE TABLE
UPDATE EMP1
SET EMAILID = LEFT(ENAME,3) + LEFT(EMPN0,3) + '@MICROSOFT.COM';
======================================================================================
==============
21-04-2022
SUBSTRING()
----------------
=> USED TO EXTRACT THE PART OF THE STRING FROM SPECIFIC POSITION
IT SEARCHES FOR A SUBSTRING IN A STRING AND RETURNS ITS POSITION. IT SUBSTRING IS NOT
FOUND IT RETURNS 0.
=> IT WILL RETURN THE POSITION OF FIRST OCCURENCE AS PER SPECIFIED START LOCATION
====================================================================
EXTRACT CHARACTERS BEFORE A SYMBOL(-)
STRING1 EXTRACT
IDAA-123 IDAA
IDB-2345678 IDB
IDCCC-34 IDCCC
STRING2 EXTRACT
123-IDAA IDAA
2345678-IDB IDB
34-IDCCC IDCCC
==================================================================================
FETCH THE CHARCTERS BETWEEN THE SYMBOLS IN STRING 3 COLUMN
===================================================================================
LTRIM()
RTRIM()
TRIM([CHARACTERS], STRING)
IF WE DONT SPECIFY THE CHARCTERS THEN IT REMOVES LEADING AND TRAILING SPACE
TRIM CAN ALSO BE USED TO REMOVE SPACE OR ANY OTHER CHARACTER FROM BEGINING OR END OF
THE STRING
I WANT TO REMOVE ANY NUMBER FROM 1 TO 6 APPEARING AT START OR END OF THE STRING THEN I
CAN USE:
SELECT TRIM('#1@$-A ' FROM '#1@HEL LOA-$ ') AS RESULT; =>'HEL LO'
======================================================================================
=============
22-04-2022
ACCOUNT
A/C NO --- 123456789456 -----------> 12******9456
126878956820-----------> 12******6820
REPLACE() ----> REPLACES ALL OCCURANCES OF SPECIFIED STRING VALUES WITH ANOTHER
VALUE
SELECT REPLACE( ' HI HOPE YOU ARE DOING GOOD ...I AM ALSO GOOD', 'GOOD', 'AWESOME');=>
======================================================================================
================
TRANSLATE()-----> USED TO TRANSLATE ONE CHARACTER TO ANOTHER CHARACTER
WE USE TRANSLATE NORMALLY FOR ENCRYPTING THE DATA --- CHANING PLAIN TEXT TO CIPHER
TEXT
1 --------S
2----A
3-----I
7 ------D
8----E
9 ----Q
A--------7
B------4
C---Z
E--->A
L--> B
O--> C
========================================================
MATHEMATICAL FUNCTIONS
1. ABS() ----> RETURNS ABSOLUTE VALUE
2. POWER()-->
POWER(BASE, EXPONENT)
SQRT(NUMBER) -
SYNTAX : SQUARE(NUMBER)
5. ROUND()
SELECT ROUND(38.4785,2);------>38.48
SELECT ROUND(38.4735,2);------>38.47
SELECT ROUND(38.5735,0);----> 39
--------------------------------------------------------------------------------------
-----------------------
CEILING() ---> IT RETURNS SMALLEST INTEGER VALUE GREATER THAN OR EQUAL TO THE GIVEN
NUMBER
SYNTAX: CEILING(NUMBER)
SELECT CEILING(3.1);===>4
SELECT CEILING(3.5);===>4
FLOOR()----> IT RETURNS LARGEST INTEGER VALUE LESS THAN OR EQUAL TO THE GIVEN NUMBER
SYNTAX : FLOOR(NUMBER)
SELECT FLOOR(3.1);====> 3
SELECT FLOOR(3.9);====> 3
-------------------------------------
IN WHICH CASES FLOOR AND CEILING MAY GIVE SAME RESULTS
FLOOR(INT) OR CEILING(INT)
SELECT FLOOR(3);------> 3
SELECT CEILING(3);----->3
====================================================================
=============================================
25-04-2022
CONVERSION FUNCTIONS----BASICALLY THERY ARE USED TO CONVERT ONE DATA TYPE INTO ANOTHER
DATA TYPE
1. CAST
2. CONVERT
3 PARSE **** SOME PERFORMANCE GAPS IN COMPARISON TO CAST OR CONVERT
SELECT ENAME + ' ' + 'EARNS' + ' ' + SAL AS [MESSAGE] FROM EMP1 ===> ERROR
ERROR=> Cannot convert a char value to money. The char value has incorrect syntax.
SELECT CAST('10.5' AS INT); ---> ERROR --Conversion failed when converting the varchar
value '10.5' to data type int.
SELECT CAST('10.00' AS INT);--->ERROR -Conversion failed when converting the varchar
value '10.00' to data type int.
SELECT CAST('10' AS INT);--> RETURNS INTEGER 10
SELECT CAST('10.25' AS DECIMAL(7,2));--> RETURNS DECIMAL NUMBER 10.25
SELECT *,ENAME + ' ' + 'EARNS' + ' ' + CAST(SAL AS VARCHAR(20)) AS [MESSAGE] FROM EMP1
===================================================================================
CONCAT() ----- CONCAT(STR1, STR2.............) -----? IT CONVERTS OTHER DATA TYPES
INTO STRING
SELECT *,CONCAT(ENAME, ' ', 'EARNS', ' ', SAL) AS [MESSAGE] FROM EMP1
=================================================================================
CONCAT_WS()-------> IT CONVERTS OTHER DATA TYPES INTO STRING
SELECT UPPER(ENAME) + ' JOINED ON ' + CAST(HIREDATE AS VARCHAR(20)) + ' AS ' + JOB AS
MESSAGE
FROM EMP1 WHERE EMPNO = 7566;
======================================================================================
=====
CONVERT()
SELECT * , ENAME + ' EARNS ' + CONVERT(VARCHAR, SAL) AS MESSAGE FROM EMP1;
============================================
--- DD/MM/YYYY-----103------ RESULT ------2016-12-02
SELECT CONVERT(DATE, '02/12/2016',103);
ENAME HIREDATE
NAVIN 13.08.2017
ASHA 23.09.2017
ward 22.02.2021
jones 02.04.2021
martin 28.09.2021
blake 01.05.2021
clark 09.06.2021
turner 08.09.2021
adams 12.01.2019
james 03.12.2019
miller 23.01.2018
====================================================
SELECT ENAME, CONVERT(VARCHAR, HIREDATE, 106) AS HIREDATE FROM EMP1;
ENAME HIREDATE
NAVIN 13 Aug 2017
ASHA 23 Sep 2017
ward 22 Feb 2021
jones 02 Apr 2021
martin 28 Sep 2021
blake 01 May 2021
clark 09 Jun 2021
turner 08 Sep 2021
adams 12 Jan 2019
james 03 Dec 2019
miller 23 Jan 2018
========================================================
MONEY AND SMALLMONEY STYLES
14523625.5681----- 14523625.57----0
14523625.5681---- 14523625.5681
Value Output
0 (default) No commas every three digits to the left of the decimal point,
and two digits to the right of the decimal point
Example: 4235.98.
1 Commas every three digits to the left of the decimal point, and two digits to
the right of the decimal point
Example: 3,510.92.
2 No commas every three digits to the left of the decimal point, and four digits
to the right of the decimal point
Example: 4235.9819.
SAL SAL1
3000.00 3,000.00
4000.00 4,000.00
1250.00 1,250.00
2975.00 2,975.00
1250.00 1,250.00
2850.00 2,850.00
2450.00 2,450.00
45678915.479 45,678,915.48
1500.00 1,500.00
1100.00 1,100.00
950.00 950.00
SAL SAL1
3000.00 3000.0000
4000.00 4000.0000
1250.00 1250.0000
2975.00 2975.0000
1250.00 1250.0000
2850.00 2850.0000
2450.00 2450.0000
45678915.479 45678915.4790
1500.00 1500.0000
1100.00 1100.0000
950.00 950.0000
1300.00 1300.0000
PARSE()
The SQL PARSE function is a SQL Conversions Function used to convert the String data
to the requested data type
.CAN TAKE ONLY STRING AS FIRST ARGUMENT
SELECT PARSE('10.5' AS INT); ---> ERROR--Error converting string value '10.5' into
data type int using culture ''.
SELECT PARSE('10' AS INT);--> RETURNS INTEGER 10
SELECT PARSE('10.5' AS DECIMAL(7,2));--> RETURNS DECIMAL NUMBER 10.50
SELECT PARSE('10.00' AS INT);----> RETURNS INTEGER 10
SELECT PARSE('2022-10-12' AS DATE); --> RETURNS DATE -- 2022-10-12
SELECT PARSE('THURSDAY. DECEMBER 05 2019' AS DATETIME USING 'en-US');---> RETURNS --
DATE TIME --2019-12-05 00:00:00.000
NOTE --> PREFER USING CAST AND CONVERT
=======================================
SELECT PARSE('10.5'AS INT); --> Error converting string value '10.5' into data type
int using culture ''
SELECT TRY_PARSE('10.5' AS INT);---> RETURNS NULL
SELECT TRY_PARSE('10' AS INT); ----> RETURNS INTEGER 10
SELECT CAST('A' AS INT);-->Conversion failed when converting the varchar value 'A' to
data type int.
SELECT TRY_CAST('A' AS INT);-----> RETURNS NULL
SELECT CONVERT( INT, 'A');-->Conversion failed when converting the varchar value 'A'
to data type int
SELECT TRY_CONVERT( INT, 'A');---> RETURNS NULL
======================================================================================
==============
26-04-2022
SELECT *,FIRSTNAME + ' ' + MIDDLENAME + ' ' + LASTNAME AS FULLNAME FROM CUSTOMERS;
EMPNO
7999
EMPNO ENAME JOB MGR HIREDATESAL COMM DEPTNO EMAILID
TOTALEXP
7999 NAVIN CLERK 7566 2017-08-13 3000.00 400.00 20
[email protected] 3400.00
7899 ASHA SALESMAN7521 2017-09-23 4000.00 800.00 30
[email protected] 4800.00
7521 ward SALESMAN7698 2021-02-22 1250.00 500.00 30
[email protected] 1750.00
7566 jones MANAGER 7839 2021-04-02 2975.00 NULL 20
[email protected] NULL
7654 martin SALESMAN7698 2021-09-28 1250.00 1400.00 30
[email protected] 2650.00
7698 blake MANAGER 7839 2021-05-01 2850.00 NULL 30
[email protected] NULL
7782 clark MANAGER 7839 2021-06-09 2450.00 NULL 10
[email protected] NULL
7844 turner SALESMAN7698 2021-09-08 1500.00 0.00 30
[email protected] 1500.00
7876 adams CLERK 7788 2019-01-12 1100.00 NULL 20
[email protected] NULL
7900 james CLERK 7698 2019-12-03 950.00 NULL 30
[email protected] NULL
7934 miller CLERK 7782 2018-01-23 1300.00 NULL 10
[email protected] NULL
WHEN EVER WE PERFORM SOME ARITHMATIC OPERATION WITH NULL OR DO CONCATENATION OPERATION
WITH NULL THEN
IT RETURNS NULL..
SELECT *,CONCAT(FIRSTNAME,' ', MIDDLENAME, ' ', LASTNAME) AS FULLNAME FROM CUSTOMERS;
ISNULL(ARG1, ARG2) ---> ARG1 SHOULD BE THE ONE WHICH MAY HAVE NULL VALUES
---> ARG2 SHOULD BE THE ONE WHICH YOU WANT IF ARG1
IS NULL
COALESCE EVALUATES THE ARGUMENTS IN ORDER AND ALWAYS RETURN FIRST NON NULL VALUE FROM
ARGUMENT LIST
======================================================================================
======================================
NULLIF()---->
SELECT 5/NULLIF(0, 0) -----> WILL RETURN NULL --- CAN BE USED TO HANDLE DIVIDE BY ZERO
ERROR BY PASSING FIRST EXPR TO BE DENOMINATOR
AVG([ALL | DISTINCT] ARG1) -------- ARG1 CAN BE A COLUMN ...ALSO CAN BE EXPRESSION
DEFAULT VALUE IS ALL
NULL WILL BE IGNORED
--------------------------------------------------------------------------------------
------------------------
MAX() --works with NUMERIC, STRING, DATE
MAX([ALL | DISTINCT] ARG1) -------- ARG1 CAN BE A COLUMN ...ALSO CAN BE EXPRESSION
DEFAULT VALUE IS ALL
NULL WILL BE IGNORED
--------------------------------------------------------------------------------------
---------------------------
MIN()----MAX() --works with NUMERIC, STRING, DATE
MIN([ALL | DISTINCT] ARG1) -------- ARG1 CAN BE A COLUMN ...ALSO CAN BE EXPRESSION
DEFAULT VALUE IS ALL
NULL WILL BE IGNORED
--------------------------------------------------------------------------------------
----------------------------
COUNT(COLUMN) ----> IT RETURNS NUMBER OF VALUES PRESENT IN A COLUMN
COUNT ( ALL|DISTINCT COLUMN) ---- DEFAULT VALUE IS ALL
NULL WILL BE
IGNORED
--------------------------------------------------------------------------------------
-----------------
COUNT(*) ----> IT RETURNS THE NUMBER OF ROWS IN A TABLE
-----> IT CONSIDER NULLS
COUNT FUNCTION WHEN TAKING COLUMN OR EXPR AS AN ARGUMENT IGNORE NULLS BUT COUNT(*)
DOES NOT IGNORE NULLS
SELECT * FROM AGGREGATION;
VAL
10
20
10
20
30
NULL
SELECT COUNT(VAL) AS COUNTFN FROM AGGREGATION;--NUMBER OF VALUES INSIDE A COLUMN ---->
5
SELECT COUNT(*) AS COUNTROW FROM AGGREGATION; --NUMBER OF ROWS INSIDE A TABLE----->6
--------------------------------------------------------------------------------------
----------------------------------------------------
DISPLAY THE MAXIMUM SALARY PAID TO ANY EMPLOYEE IN EMP1 TABLE
--------------------------------------------------------------------------------------
---------------------------------
DISPLAY THE NUMBER OF EMPLOYEES JOINED IN YEAR 2021
--------------------------------------------------------------------------------------
-----------------------------
DISPLAY THE NUMBER OF EMPLOYEES JOINED ON SUNDAY
SELECT COUNT(*) FROM EMP1 WHERE DATENAME(DW,HIREDATE) = 'SUNDAY';
--------------------------------------------------------------------------------------
----------------------------
GROUP BY
------------
SELECT FROM [WHERE] GROUP BY [HAVING] [ORDER BY]
GROUP BY CLAUSE IS USED TO CONVERT THE DETAILED DATA INTO SUMMARIZED DATA
FOR EVERY GROUP GROUP BY WILL RETURN ONLY ONE ROW
=> DISPLAY THE DEPARTMENT WISE TOTAL SALARIES
DEPTNO TOTAL_SALARY
10 3750.00
20 7075.00
30 11800.00
-------------------------------------------------------------------
DISPLAY JOB WISE NUMBER OF EMPLOYEES
SELECT JOB, COUNT(*) AS CNT FROM EMP1 GROUP BY JOB;
JOB CNT
CLERK 4
MANAGER 3
SALESMAN4
---------------------------------------------------------------------------
DISPLAY YEAR WISE NUMBER OF EMPLOYEES JOINED
YEAR CNT
2017 2
2018 1
2019 2
2021 6
--------------------------------------------------------------------------------
DISPLAY THE DEPTT IN WHICH MORE THAN 3 EMPLOYEES ARE WORKING
DEPTNO CNT
30 6
TO FILTER THE GROUPS CREATIED BY GROUP BY ---WE WILL USE HAVING CLAUSE
HAVING CLAUSE FILTER THE GROUPS
HAVING CLAUSE CAN HAVE AGGREGATE FUNCTION
==> IN CLAUSES AFTER GROUP BY, ELEMENT THAT DO NOT PARTICIPATE IN GROUP BY CLAUSE
ALLOWED ONLY AS INPUT TO AGGREGATE FUNCTIONS
=>DISPLAY THE DEPTT AND THE NUMBER OF EMPLOYEES IN EACH DEPARTMENT BUT ONLY THOSE
DEPARTMENTS
WHOSE TOTAL SALARY IS ABOVE 10000
SELECT DEPTNO, COUNT(*) AS CNT FROM EMP1 GROUP BY DEPTNO HAVING SUM(SAL) >10000;
DEPTNO CNT
30 6
======================================================================================
===========
=>DISPLAY JOB WISE NUMBER OF EMPLOYEES WHO ARE WORKING A CLERK, MANAGER
SELECT JOB, COUNT(*) FROM EMP1 WHERE JOB IN ('CLERK', 'MANAGER') GROUP BY JOB;
SELECT DEPTNO,JOB, SUM(SAL) AS TOTALSAL FROM EMP1 GROUP BY DEPTNO, JOB ORDER BY
DEPTNO;
=>DISPLAY YEAR WISE NUMBER OF EMPLOYEES JOINED IN EACH DEPARTMENT BUT ONLY THOSE
RESULTS WHERE MINIMUM 2 EMPLOYEES JOINED
SELECT YEAR(HIREDATE) AS YEAR, DEPTNO, COUNT(*) AS NUM FROM EMP1 GROUP BY YEAR(
HIREDATE), DEPTNO HAVING COUNT(*)>=2;
WHERE VS HAVING
WHERE
HAVING
SELECTS SPECIFIC ROWS
SELECTS SPECIFIC GROUPS
CONDITION APPLIED BEFORE GROUP BY
CONDITION APPLIED AFTER GROUP BY
WE CANT USE AGGREGATION FUNCTION
WE CAN USE AGGREGATION FUNCTION
GROUPING IS NOT REQUIRED FOR WHERE CONDITION GROUPING IS REQUIRED
TO APPLY HAVING CONDITION
======================================================================================
=============================
ROLLUP AND CUBE : THESE ARE USED CALCULATE TOTALS AND SUB TOTALS
ROLLUP:
=> DISPLAY THE DEPARTMENT WISE TOTAL SALARY AS WELL AS CUMMULATIVE SALARY:
DEPT TOTALSAL
10 3750.00
20 7075.00
30 11800.00
ALL 22625.00
SELECT DEPTNO, JOB, SUM(SAL) AS TOTALSAL FROM EMP1 GROUP BY ROLLUP(DEPTNO, JOB);
======================================================================================
=============
CUBE: ALL USED FOR CALCULATING TOTALS AND SUBTOTALS
A B
0 0
0 1
1 0
1 1
A B C
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
CUBE
DEPTNO JOB
NULL NULL 1
NULL JOB 3
DEPTNO NULL 3
DEPTNO JOB 7
ROLL UP
DEPTNO JOB -
DEPTNO JOB
DEPTNO NULL
NULL NULL
SELECT DEPTNO, JOB, SUM(SAL) AS TOTALSAL FROM EMP1 GROUP BY CUBE(DEPTNO, JOB);
=> DISPLAY DEPARTMENT WISE MAXIMUM SALARY ALONG WITH THE NAME OF CORRESPONDING PERSON
SELECT ENAME, DEPTNO, SAL FROM EMP1 WHERE SAL IN (SELECT MAX(SAL) FROM EMP1 GROUP
BY DEPTNO);
======================================================================================
===============================================
29-04-2022
WINDOWS FUNCTIONS --- WINDOW ---- A SET OF ROWS--- A WINDOW OF ROWS ------> OVER()
RANKING FUNCTIONS ARE USED TO RANK EACH ROW WITH RESPECT TO OTHERS IN THE WINDOW.
RANK()
======
=>Returns the rank of each row within the partition of a result set.
=>The rank of a row is one plus the number of ranks that come before the row in
question.
=>DISPLAY THE RANKS OF EMPLOYEES BASED ON SALARY.....AND HIGHEST PAID EMPLOYEE SHOULD
GET 1ST RANK
RANK() DOES SKIP RANKING ---- IN CASE OF TIE WE WILL NOT GET ALL THE RANKS ...
IF THEIR ARE 3 PERSONS HAVING SAME SALARY AT 8TH
POSITION THEN THEY WILL BE ASSIGNED
SAME 8TH RANK BUT NEXT PERSON WILL BE ASSIGNED 11TH
RANK..SO IN RESULT YOU WILL NOT SEE
9TH AND 10TH RANK
====================
=>DISPLAY THE RANKS OF EMPLOYEES BASED ON SALARY.....AND HIGHEST PAID EMPLOYEE SHOULD
GET 1ST RANK
======================================
DISPLAY THE RANK OF EMPLOYEES BASED ON SALARY? THE PERSON HAVING HIGHEST SALARY SHOULD
BE RANK 1 BUT IN CASE OF TIE
RANKING SHOULD BE BASED ON EXPERIENCE IN OUR ORGANIZATION.
SELECT *, RANK() OVER(PARTITION BY DEPTNO ORDER BY SAL DESC) AS RNK FROM EMP1;
EMPNO
7782
EMPNO ENAME JOB MGR HIREDATESAL COMM DEPTNO
EMAILID RNK
7782 clark MANAGER 7839 2021-06-09 2450.00 NULL 10
[email protected] 1
7934 miller CLERK 7782 2018-01-23 1300.00 NULL 10
[email protected] 2
7999 NAVIN CLERK 7566 2017-08-13 3000.00 400.00 20
[email protected] 1
7566 jones MANAGER 7839 2021-04-02 2975.00 NULL 20
[email protected] 2
7876 adams CLERK 7788 2019-01-12 1100.00 NULL 20
[email protected] 3
7899 ASHA SALESMAN7521 2017-09-23 4000.00 800.00 30
[email protected] 1
7698 blake MANAGER 7839 2021-05-01 2850.00 NULL 30
[email protected] 2
7844 turner SALESMAN7698 2021-09-08 1500.00 0.00 30
[email protected] 3
7521 ward SALESMAN7698 2021-02-22 1250.00 500.00 30
[email protected] 4
7654 martin SALESMAN7698 2021-09-28 1250.00 1400.00 30
[email protected] 4
7900 james CLERK 7698 2019-12-03 950.00 NULL 30
[email protected] 6
======================================================================================
===========================
ROW_NUMBER()
NTILE()
=> IT IS USED TO DIVIDE THE RESULT SET INTO BUCKETS OF EQUAL SIZE
=> SUPPOSE WE USE NTILE(3) THEN NTILE TRIES TO DIVIDE THE RESULT SET INTO 3 GROUPS
HAVING SAME NUMBER OF ROWS BASED ON
ORDERING.
=> SUPPOSE WE USE NTILE(3) AND WE HAVE 09 ROWS IN RESULT SET THEN WE WILL GET 3
GROUPS EACH WITH 3 ROWS
AND TILE NUMBER IS ASSIGNED SEQUENTIALLY TO EACH GROUP . ALL THE ROWS IN A
PARTICULAR GROUP WILL HAVE SAME TILE NUMBER
LIKE GROUP1 ----- TILE NUMBER 1
GROUP2 -----TILE NUMBER 2
GROUP3 -----TILE NUMBER 3
=> BUT SUPPOSE WE USE NTILE(3) AND WE HAVE 11 ROWS SO 3 GROUPS WITH EQUAL NUMBER OF
ROWS CAN NOT BE CREATED..IN THAT CASE
IT WILL CREATE 3 GROUPS -- FIRST GROUP WILL HAVE 4 ROWS,
SECOND GROUP WILL ALSO HAVE 4 ROWS
BUT THIRD GROUP WILL BE ASSIGNED 3 ROWS AS IT ASSIGNS
GROUP1 3 ROWS + 1 ROW OUT OF REMAINDER
GROUP2 3 ROWS + 1 ROW OUT OF REMAINDER
GROUP3 3 ROWS
02-05-2022
=>FROM THE PRODUCTS TABLE DISPLAY THE COMPLETE DETAILS OF THE MOST EXPENSIVE PRODUCT
OF EACH CATEGORY
SELECT PRODUCT_CATEGORY, BRAND, PRODUCT_NAME, PRICE FROM
======================================================================================
=================================
WINDOWS AGGREGATE FUNCTION ------> YTD, MTD, WTD, RUNNING TOTALS , PERCENTAGE OUT OF
TOTAL
IN WINDOWS AGGREGATE FUNCTION WE CAN HAVE ALL 3 CLAUSES IN OVER(), BUT NOTHING IS
MANDATORY
SUM(SAL) OVER() ----> IT EXPOSES ALL THE ROWS IN RESULT SET AND GIVES GRAND TOTAL OF
ALL THE ROWS
===
SALARY PERCENTAGE WITH RESPECT TO TOTAL AND SALARY PERCENETAGE WITH RESPECT TO
INDIVIDUAL DEPARTMENT
SELECT *,
100*SAL/SUM(SAL) OVER() AS PERCTOTAL,
100*SAL/SUM(SAL) OVER(PARTITION BY DEPTNO) AS PERCDEPTT
FROM EMP1;
EMPNO
7782
EMPNO ENAME JOB MGR HIREDATESAL COMM DEPTNO
EMAILID PERCTOTAL PERCDEPTT
7782 clark MANAGER 7839 2021-06-09 2450.00 NULL 10
[email protected] 10.8287 65.3333
7934 miller CLERK 7782 2018-01-23 1300.00 NULL 10
[email protected] 5.7458 34.6666
7876 adams CLERK 7788 2019-01-12 1100.00 NULL 20
[email protected] 4.8618 15.5477
7999 NAVIN CLERK 7566 2017-08-13 3000.00 400.00 20
[email protected] 13.2596 42.4028
7566 jones MANAGER 7839 2021-04-02 2975.00 NULL 20
[email protected] 13.1491 42.0494
7654 martin SALESMAN7698 2021-09-28 1250.00 1400.00 30
[email protected] 5.5248 10.5932
7698 blake MANAGER 7839 2021-05-01 2850.00 NULL 30
[email protected] 12.5966 24.1525
7899 ASHA SALESMAN7521 2017-09-23 4000.00 800.00 30
[email protected] 17.6795 33.8983
7521 ward SALESMAN7698 2021-02-22 1250.00 500.00 30
[email protected] 5.5248 10.5932
7900 james CLERK 7698 2019-12-03 950.00 NULL 30
[email protected] 4.1988 8.0508
7844 turner SALESMAN7698 2021-09-08 1500.00 0.00 30
[email protected] 6.6298 12.7118
========================================================
SUM(SAL) OVER(ORDER BY SAL) ===== SUM(SAL) OVER(ORDER BY SAL RANGE BETWEEN UNBOUNDED
PRECEDING AND CURRENT ROW)
FROM EMP1;
SHOW MTD
SELECT DATE, [OPEN], SUM([OPEN]) OVER(PARTITION BY YEAR([DATE]),MONTH([DATE]) ORDER BY
[DATE]) AS MTD FROM STOCK;
======================================================================================
===============================
03-05-2022
FROM EMP1;
ENAME
james
ENAME SAL RT1 RT2
james 950.00 22625.00950.00
adams 1100.00 21675.002050.00
martin 1250.00 19325.003300.00
ward 1250.00 20575.004550.00
miller 1300.00 18075.005850.00
turner 1500.00 16775.007350.00
clark 2450.00 15275.009800.00
blake 2850.00 12825.0012650.00
jones 2975.00 9975.00 15625.00
NAVIN 3000.00 7000.00 18625.00
ASHA 4000.00 4000.00 22625.00
FROM EMP1;
ENAME
james
ENAME SAL RT1
james 950.00 950.00
adams 1100.00 2050.00
ward 1250.00 2350.00
martin 1250.00 2500.00
miller 1300.00 2550.00
turner 1500.00 2800.00
clark 2450.00 3950.00
blake 2850.00 5300.00
jones 2975.00 5825.00
NAVIN 3000.00 5975.00
ASHA 4000.00 7000.00
===================================
LAG()/LEAD()----------------- ARE USED TO RETURN AN ELEMENT FROM A ROW THAT IS AT A
CERTAIN OFFSET FROM THE CURRENT ROW
FIRST_VALUE()/ LAST_VALUE()------ARE USED TO RETURN AN ELEMENT FROM A ROW THAT IS AT
THE BEGINING OR END OF WINDOWS FRAME
=>LAG AND LEAD SUPPORTS [PARTITION BY] AND ORDER BY CLAUSE(Mandatory) BUT DOES NOT
SUPPORT FRAMING CLAUSE
=>LAG FUNCTION LOOK BEFORE THE CURRENT ROW BASED ON INDICATED ORDERING
=>LEAD FUNCTION LOOK AFTER THE CURRENT ROW BASED ON INDICATED ORDERING
=> SELECT ENAME, SAL, LAG(SAL) OVER(ORDER BY SAL) AS LAGG FROM EMP1;
=> SELECT ENAME, SAL, LAG(SAL,2) OVER(ORDER BY SAL) AS LAGG FROM EMP1;
=> SELECT ENAME, SAL, LEAD(SAL) OVER(ORDER BY SAL) AS LAGG FROM EMP1;
=>SELECT ENAME, SAL, SUM(SAL) OVER(ORDER BY SAL ROWS BETWEEN 2 FOLLOWING AND 2
FOLLOWING) FROM EMP1;
FIRST_VALUE---> THEY RETURN AN ELEMENT FROM FIRST ROW OF CORRESPONDING WINDOW FRAME
product_category
Earphone
product_categorybrand product_name price MOSTEXP
Earphone Apple AirPods Pro 280 AirPods Pro
Earphone Sony WF-1000XM4 250 AirPods Pro
Earphone Samsung Galaxy Buds Pro 220 AirPods Pro
Earphone Samsung Galaxy Buds Live170 AirPods Pro
Headphone Apple AirPods Max 550 AirPods Max
Headphone Sony WH-1000XM4 400 AirPods Max
Headphone Microsoft Surface Headphones 2 250 AirPods Max
Laptop Dell XPS 17 2500 XPS 17
Laptop Dell XPS 15 2300 XPS 17
Laptop Microsoft Surface Laptop 42100 XPS 17
Laptop Dell XPS 13 2000 XPS 17
Laptop Apple MacBook Pro 13 2000 XPS 17
Laptop Apple MacBook Air 1200 XPS 17
Phone Samsung Galaxy Z Fold 3 1800 Galaxy Z Fold
3
Phone Apple iPhone 12 Pro Max 1300 Galaxy Z Fold
3
Phone Samsung Galaxy Note 20 1200 Galaxy Z Fold
3
Phone Apple iPhone 12 Pro 1100 Galaxy Z Fold
3
Phone Apple iPhone 12 1000 Galaxy Z Fold
3
Phone Samsung Galaxy Z Flip 3 1000 Galaxy Z Fold
3
Phone Samsung Galaxy S21 1000 Galaxy Z Fold
3
Phone OnePlus OnePlus 9 800 Galaxy Z Fold
3
Phone Google Pixel 5 600 Galaxy Z Fold
3
Phone OnePlus OnePlus Nord 300 Galaxy Z Fold
3
Smartwatch Apple Apple Watch Series 6 1000 Apple Watch
Series 6
Smartwatch Samsung Galaxy Watch 4 600 Apple Watch
Series 6
Smartwatch Apple Apple Watch SE 400 Apple Watch
Series 6
Smartwatch OnePlus OnePlus Watch 220 Apple Watch
Series 6
======================================================================================
==================================
CUME_DIST() ---> IT CALCULATES THE RELATIVE POSITION OF A SPECIFIED VALUE IN A GROUP
OF VALUES, BY DETERMINING THE
PERCENTAGE OF VALUES WHICH ARE LESS THAN OR EQUAL TO THAT VALUE.
=> PERCENTAGE OF SALARIES LESS THAN OR EQUAL TO THE CURRENT SALARY IN ENTIRE
ORGANIZATION
SAL CUMDIST
950.00 0.0909090909090909
1100.00 0.181818181818182
1250.00 0.363636363636364
1250.00 0.363636363636364
1300.00 0.454545454545455
1500.00 0.545454545454545
2450.00 0.636363636363636
2850.00 0.727272727272727
2975.00 0.818181818181818
3000.00 0.909090909090909
4000.00 1
=> PERCENTAGE OF SALARIES LESS THAN OR EQUAL TO THE CURRENT SALARY WITH IN EACH
DEPARTMENT
SELECT DEPTNO, SAL, CUME_DIST() OVER(PARTITION BY DEPTNO ORDER BY SAL ASC) AS CUMDIST
FROM EMP1;
======================================================================================
====
PERCENT_RANK()-----CALCULATES THE RANKING OF ROW RELATIVE TO THE ROW SET.. THE
PERCENTAGE IS BASED ON THE NUMBER OF ROWS
IN THE GROUP THAT HAVE A LOWER VALUE THAN CURRENT ROW.
-- IN DENOMINATOR IT WILL USE (NUMBER OF ROWS IN GROUP - 1)
SAL PERCRNK
950.00 0
1100.00 0.1
1250.00 0.2
1250.00 0.2
1300.00 0.4
1500.00 0.5
2450.00 0.6
2850.00 0.7
2975.00 0.8
3000.00 0.9
4000.00 1
=> PERCENTAGE OF SALARY VALUES LESS THAN THE CURRENT VALUE IN EACH DEPARTMENT
1 NOT NULL
2 UNIQUE
3 PRIMARY KEY
4 CHECK
5 FOREIGN KEY
6 DEFAULT
COLUMN LEVEL:
-------------
IF CONSTRAINTS ARE DECLARED IMMEDIATELY AFTER DECLARING COLUMN THEN IT IS CALLED
COLUMN LEVEL CONSTRAINT
CREATE TABLE <TABLENAME> (
COL1 DATATYPE(SIZE) CONSTRAINT,
COL2 DATATYPE(SIZE)........)
1. NOT NULL
2. UNIQUE
3. PRIMARY KEY
=> THIS CONSTRAINTS IS A COMBINATION OF NOT NULL & UNIQUE
=> IT DOES NOT ALLOWS DUPLICATES AND NULLS
=> IN RDBMS IN THE TABLES THERE MUST A COLUMN WHICH UNIQUELY IDENTIFY THE RECORDS AND
THAT COLUMN
MUST BE DECLARED WITH PRIMARY KEY
=> ONLY ONE PRIMARY KEY IS ALLOWED PER TABLE. IF WE WANT TWO PRIMARY KEYS I .E YOU
WANT THE FEATURES OF PRIMARY KEY IN MORE THAN
ONE COLUMN THEN THOSE COLUMNS CAN BE DECLARED WITH UNIQUE AND NOT NULL
4. CHECK
=> THE CHECK CONSTRAINT IS USED WHEN RULE IS BASED ON SOME CONDITION
SYN: CHECK(CONDITION)
=> PUT A CONSTRAIN IN GENDER COLUMN THAT GENDER CAN BE ONLY 'M' OR 'F'
======================================================================================
====================================
06-05-2022
FOREIGN KEY = > IT IS USED TO CREATE OR ESTABLISH THE RELATIOSNHIP BETWEEN TWO TABLES
=> TO ESTABLISH THE RELATIONSHIP B/W TWO TABLES TAKE PRIMARY KEY OF ONE
TABLE AND ADD IT TO ANOTHER TABLE AS FOREIGN KEY
AND DECLARE WITH REFERENCES CONSTRAINT
PRODUCT
PID(PK) PNAME WGHT
1 A 1KG
2 A 2KG
3 B 1KG
4 B 2KG
CUSTOMER
CID(PK) CNAME MOB ADD
1 PRAVEER 87XX 123
2 SHIVA 95XX 345
3 NAVI 79XX 456
4 PRAVEER 88XX 986
ORDER
OID(PK) DATE CID(FK) PID(FK) QTY
1 XX 1 2 5
2 XX 1 3 1
3 XX 3 4 2
4 XX 5 ----NOT ALLOWED
5 XX 1 7(NOT ALLOWED)
6 XX 1 2 5
=> VALUES ENTERED IN FOREIGN KEY COLUMN SHOULD MATCH WITH THE VALUES ENTERED IN
CORRESPONDING PRIMARY KEY COLUMN
=> FOREIGN ALLOWS DUPLICATES
=> FOREIGN ALLOWS NULLS
=> AFTER DECLARING THE FOREIGN KEY A RELATIONSHIP IS ESTABLISHED BETWEEN TWO TABLES
CALLED PARENT/CHILD RELATIONSHIP
=> PRIMARY KEY TABLE IS PARENT AND FOREIGN KEY TABLE IS CHILD
=========================================================================
ACCOUNTS
ACNO ACTYPE BAL
1. ACNO SHOULD NOT BE DUPLICATE AND NULL
2. ACTYPE MUST BE 'S' OR 'C'
3. BAL SHOULD BE MINIMUM OF 1000
TRANSACTIONS
TRID TTYPE TDATE TAMT ACCNO
1. TRID SHOULD BE AUTOMATICALLY GENERATED
2. TTYPE SHOULD BE 'W' OR 'D'
3. TAMT MUST BE MULTIPLE OF 500
4. ACCNO SHOULD MATCH WITH ACCNO AVAILABLE IN ACCOUNTS TABLE
========================================================================
DEFAULT
--------
=> WHILE INSTERTING THE DATA IF WE SKIP HIREDATE THEN SQL SERVER WILL INSERT DEFAULT
VALUE
======================================================================================
=====
TABLE LEVEL CONSTRAINT--
=> IF CONSTRAINTS ARE DECLARED AFTER DECLARING ALL THE COLUMNS THEN IT IS CALLED TABLE
LEVEL CONSTRAINTS
=> WE USE TABLE LEVEL CONSTRAINTS FOR MULTIPLE COMBINATION OF COLUMNS
-------------------------------------
CONSTRAINT)
PRODUCT
PRODID PNAME MFD_DATE EXP_DATE
100 ABC 2022-01-01 2021-10-01 ---- INVALID
======================================================================================
====================
09-05-2022
NOT NULL, PRIMARY KEY, CHECK, FOREIGN KEY, UNIQUE ----->> OUT OF THESE WHICH
CONSTRAINT CAN NOT BE DECLARED AT TABLE LEVEL
-----> NOT NULL CONTRAINTS CAN NOT
BE DECLARED AT TABLE LEVEL
DECLARING UNIQUE AT TABLE LEVEL
==========================
CREATE TABLE EMP100( ID INT,
ENAME VARCHAR(20),
MOB BIGINT,
EMAIL VARCHAR(20),
UNIQUE(MOB, EMAIL));
=> IF PRIMARY KEY IS DECLARED FOR COMBINATION OF COLUMNS THEN IT IS CALLED COMPOSITE
PRIMARY KEY
=> IN COMPOSITE KEY THE RULES SHOULD BE SATISFIED AT COMBINATION OF COLUMNS USED IN
PRIMARY KEY
ORDERS PRODUCTS
ORDER DETAILS
ORDERID PRODID QTY
1000 100 1
1000 101 2
1001 100 2
1001 101 1
REGISTRATION
SID CID DOR FEE
1 10 X X
1 11 X X
2 10 X X
2 11 X X
3 12 X X
IN REGISTRATION TABLE WE WILL CREATE PRIMARY KEY ON SID AND CID COMBINATION TO
UNIQUELY IDENTIFY THE RECORDS
CERTIFICATE
============================================================
NAMING THE CONSTRAINTS
==================================================================================
10-05-2022
INSERT INTO EMP501 VALUES(100, 'A', 4000, 10), (101, 'B', 2500, 10),
(102, 'C', 5000, 20), (103, 'D', 6000,20);
=======================================
ADD CHECK CONSTRAINT
=> THE ABOVE COMMAND FAILS BECAUSE IN EMP501 TABLE SOME OF THE SALARIES ARE LESS
THAN 3000. SO WHILE ADDING CONSTRAINT THE SQL SERVER ALSO VALIDATES EXISTING DATA
WITH NOCHECK
============
=> IF CONSTRAINT IS ADDED WITH "WITH NOCHECK" THEN SQL SERVER DOES NOT VALIDATE
EXISTING
DATA..IT VALIDATES ONLY NEW DATA
==============================================
ADDING UNIQUE
============
==============================================
========================================
ADDING PRIMARY KEY
=> ADD FK TO COLUMN DNO THAT REFERS DEPTT TABLE PRIMARY KEY
ALTER TABLE EMP501
ADD FOREIGN KEY(DNO) REFERENCES DEPTT(DNO)
============================================================
DEPT
DEPTNO(PK) STOREID(UNIQUE+NOTNULL) DEPTNAME STORENAME
10 101 IT CONS
20 102 MKT GOODS
30 103 HR STATION
40 104 FIN LEASURE
EMP
EMPID ENAME DEPTNO(FK)
DISTRIBUTORS
DISTID DISTNAME STOREID(FK)
=====================================================
DROPING CONSTRAINTS
CREATE TABLE STAFF11( EID INT, ENAME VARCHAR(20), DEPTNO INT REFERENCES
DEPT11(DEPTNO));
SP_HELP DEPT11
NOTE==>
1. ON DELETE NO ACTION:
=======================
=> PARENT ROW CAN NOT BE DELETED IF ASSOCIATED WITH CHILD ROWS
DELETE FROM DEPT79 WHERE DNO = 20;--ALLOWED AS IT IS NOT REFERENCED BY CHILD ROW
SCENARIO
ACCOUNTS
ACCNO ACTYPE BAL
100 S 10000
101 C 20000
LOANS
ID TYPE AMT ACCNO
1 H 10L 100
2 C 5L 100
==================================================================
2. ON DELETE CASCADE
====================
DNO DNAME
20 IT
IF THERE ARE TWO TABLES ONE IS ACCOUNTS AND OTHER IS TRANSACTIONS TABLE
THEN AT THE CLOSING TIME OF ACCOUNT CORRESPONDING TRANSACTIONS SHOULD ALSO BE DELETED
==================================================================
=> IF PARENT ROW IS DELETED THEN CHILD ROWS ARE NOT DELETED BUT FK WILL BE SET
TO DEFAULT VALUE
=> WHILE CHOSING THE DEFAULT VALUE ENSURE THAT REFERENCIAL INTEGRITY IS NOT VIOLATED
UPDATE DEPT84
SET DNO = 30 WHERE DNO = 10; ---error
CREATE TABLE EMP85
( EMPNO INT PRIMARY KEY,
ENAME VARCHAR(20),
DNO INT REFERENCES DEPT84(DNO) ON DELETE SET NULL ON UPDATE CASCADE);
UPDATE DEPT84
SET DNO = 30 WHERE DNO = 10;
DNO DNAME
20 IT
30 HR
Products
PID PNAME VID
1 LUX 1
2 REXONA 1
3 DOVE 1
4 HAMAM 1
5 BOURNVITA 2
6 HORLICKS2
7 COMPLAN 2
8 CLASSMATE 3
9 NATRAJ 3
10 MATECLASS 3
VENDORS
VID VENNAME VENLOC VENMOB
1 RAM AGRA 8745
2 SHYAM MUMBAI 9845
3 DAVID DELHI 7455
4 RAM AGRA 7499
TYPES OF JOINS
1. INNER JOIN/EQUI JOIN
2. OUTER JOINS
1. LEFT OUTER JOIN
2. FULL OUTER JOIN
3. RIGHT OUTER JOIN
3.NON EQUI JOIN
4. CROSS JOIN
5. SELF JOIN
1. INNER JOIN
==============
WHEN WE WANT ONLY THE MATCHING RECORDS FROM JOINING TABLES THEN WE GO FOR INNER JOIN
TO PERFORM THE INNER JOIN BTW TWO TABLES THERE MUST BE A MATCHING FIELD
AND NAME IS NOT MANDATORY TO BE SAME.. PK - FK IS ALSO NOT MANDATORY
=> INNER JOIN IS FORMED BASED ON MATCHING FIELD WITH SAME DATA TYPE
ANSI /SQL 89
ANSI/ SQL 92 (Recommended)
ANSI/SQL 92
JOIN CONDITION
==============
BASED ON GIVEN JOIN CONDITION SQL SERVER JOINS THE RECORDS OF TWO TABLES
JOIN CONDITION DECIDES WHICH RECORD OF 1ST TABLE IS JOINED WITH WHICH RECORD OF 2ND
TABLE
TABLE1.MATCHINGFIELD = TABLE.MATCHINGFIELD
SELECT PID, PNAME, VNAME, VLOC FROM PRODUCTSV INNER JOIN VENDORS
ON PRODUCTSV.VID = VENDORS.VID;
SELECT PID, PNAME, VNAME, VLOC,VID FROM PRODUCTSV INNER JOIN VENDORS
ON PRODUCTSV.VID = VENDORS.VID;
ERROR - Ambiguous column name 'VID'.
SELECT PID, PNAME, VNAME, VLOC,PRODUCTSV.VID FROM PRODUCTSV INNER JOIN VENDORS
ON PRODUCTSV.VID = VENDORS.VID; ---NO ERROR
SELECT P.PID, P.PNAME, V.VNAME, V.VLOC,P.VID FROM PRODUCTSV AS P INNER JOIN VENDORS
AS V
ON P.VID = V.VID;-- IMPROVED PERFORMANCE
=> IN JOINING THE QUERIES DECLARE TABLE ALIAS AND PREFIX COLUMN NAMES WITH TABLE
ALIAS FOR TWO REASONS:
1. TO REMOVE AMBIGUITY
2. FOR FASTER EXECUTION
ANSI /SQL 89
===============================================================================
SELECT COLUMNS
FROM TABLE1 INNER JOIN TABLE2
ON JOIN CONDITION
INNER JOIN TABLE3
ON JOIN CONDITION
INNER JOIN TABLE4
ON JOIN CONDITION
ANSI 89--
SELECT O.OID, O.PID,P.PNAME,O.QTY,V.VNAME,V.VID FROM ORDERSV AS O, PRODUCTSV AS P,
VENDORS AS V
WHERE O.PID = P.PID
AND P.VID = V.VID;
====================================================================
13-05-2022
INNER JOIN --- TO GET MATCHING RECORDS FROM BOTH THE TABLES
ACTUAL PROCESS OF INNER JOIN ===> CROSS JOIN + FILTERING AS PER JOIN CONDITION
TABLE 1 TABLE2
TID TANME T2ID T2ID TNAME
1 A 1 1 AX
2 B 1 2 BX
3 C 2 3 CX
4 D 2 4 DX
CROSS JOIN
TID TANME T2ID T2ID TNAME
1 A 1 1 AX
1 A 1 2 BX
1 A 1 3 CX
1 A 1 4 DX
2 B 1 1 AX
2 B 1 2 BX
2 B 1 3 CX
2 B 1 4 DX
3 C 2 1 AX
3 C 2 2 BX
3 C 2 3 CX
3 C 2 4 DX
4 D 2 1 AX
4 D 2 2 BX
4 D 2 3 CX
4 D 2 4 DX
INNER JOIN
TID TANME T2ID T2ID TNAME
1 A 1 1 AX
2 B 1 1 AX
3 C 2 2 BX
4 D 2 2 BX
SHOW ME THE LIST OF PRODUCTS SOLD AND ALSO THEIR QUANTITY SOLD
=> IN THE ABOVE RESULT SET I WANT TO SEE EACH PRODUCT ONLY ONCE AND THEIR TOTAL QTY
=> DISPLAY THE PID, PNAME AND TOTAL QTY SOLD OF ONLY THOSE PRODUCTS WHICH HAVE MINIMUM
QTY SOLD OF 10.
TABLE 1 TABLE2
TID TANME T2ID T2ID TNAME
1 A 1 1 AX
2 B 1 2 BX
3 C 2 3 CX
4 D 2 4 DX
CROSS JOIN
TID TANME T2ID T2ID TNAME
1 A 1 1 AX
1 A 1 2 BX
1 A 1 3 CX
1 A 1 4 DX
2 B 1 1 AX
2 B 1 2 BX
2 B 1 3 CX
2 B 1 4 DX
3 C 2 1 AX
3 C 2 2 BX
3 C 2 3 CX
3 C 2 4 DX
4 D 2 1 AX
4 D 2 2 BX
4 D 2 3 CX
4 D 2 4 DX
OUTER JOIN:
=---------
=> INNER JOIN GIVES ONLY MATCHING RECORDS BUT CAN NOT RETURN UNMATCHED RECORDS
=> TO GET UNMATCHED RECORDS AS WELL WE NEED OUTER JOIN
=> OUTER JOIN IS OF 3 TYPES
1. LEFT OUTER JOIN
2. RIGHT OUTER JOIN
3. FULL OUTER JOIN
=>LEFT JOIN WILL GIVE MATCHING RECORDS FROM BOTH THE TABLE PLUS NON MATCHING RECORDS
FROM LEFT TABLE
=> RETURNS ALL ROWS(MATCHING + NON MATCHING ) FROM LEFT TABLE AND MATCHING ROWS FROM
RIGHT TABLE
CROSS JOIN + FILTERING ON JOIN CONDITION + ADD NONMATCHING RECORDS OF LEFT TABLE
=> DISPLAY THE PID, PNAME ALONG WITH THE QTY SOLD...YOU HAVE TO SHOW EVEN UNSOLD
PRODUCTS
SELECT P.PID,P.PNAME,O.QTY,O.OID FROM PRODUCTSV AS P LEFT OUTER JOIN ORDERSV AS O
ON P.PID = O.PID;
=>=>RIGHT JOIN WILL GIVE MATCHING RECORDS FROM BOTH THE TABLE PLUS NON MATCHING
RECORDS
FROM RIGHT TABLE
=> RETURNS ALL ROWS(MATCHING + NON MATCHING ) FROM RIGHT TABLE AND MATCHING ROWS FROM
LEFT TABLE
CROSS JOIN + FILTERING BASED ON JOIN CONDITION + ADD NON MATCHING ROWS OF RIGHT TABLE
-- DISPLAY ME THE PRODUCTS ALONG WITH THIER QTY SOLD INCLUDING THE PRODUCTS UNSOLD
--------------------------------
DISPLAY ONLY THE PRODUCTS UNSOLD
========================================================
CROSS JOIN + FILTERING BASED ON JOIN CONDITION + UNMATCH RECORDS FROM BOTH
=> DISPLAY ONLY NON MATCHING RECORDS FROM BOTH THE TABLES
SELECT * FROM ORDERSV AS O FULL OUTER JOIN PRODUCTSV AS P ON O.PID = P.PID
===================================================
SELF JOIN
=> THIS TABLE CONSTAINS MANAGER ID BUT WE NEED TO DISPLAY MANAGER NAME..FOR THE
SAME PURPOSE WE CAN USE SELF JOIN
=> TO PERFORM THE SELF JOIN, THE SAME TABLE MUST BE DECLARED TWO TIMES WITH DIFFERENT
ALIASES IN THE FROM CLAUSE
ENAME ENAME
SMITH FORD
ALLEN BLAKE
WARD BLAKE
JONES KING
MARTIN BLAKE
BLAKE KING
FORD JONES
=============================================
ENAME ENAME
ALLEN BLAKE
WARD BLAKE
MARTIN BLAKE
EMP SALGRADE
EMPNO ENAME ESAL GRADE LOSAL HISAL
1 A 5000 1 700 1000
2 B 2500 2 1001 2000
3 C 1000 3 2001 3000
4 D 3000 4 3001 4000
5 E 1500 5 4001 9999
=> DISPLAY
EMPNO ENAME ESAL GRADE
=========================================================
17-05-2022
=> ASSIGN A NEW COLUMN WITH ROW NUMBER TO EACH ROW IN EMPN TABLE
=> IN SQL SERVER THE SET OPERATIONS ARE PERFORMED BETWEEN SET OF ROWS RETURNED BY TWO
SELECT STATEMENTS.
SELECT STATEMENT1
UNION/UNION ALL/INTERSECT/EXCEPT
SELECT STATEMENT2
JOB
MANAGER
Manager
CLERK
JOB
SALESMAN
SALESMAN
SALESMAN
MANAGER
SALESMAN
CLERK
UNION:
-------
=> IT COMBINES THE ROWS RETURNED BY TWO SELECT STATEMENTS
=> REMOVE DUPLICATES
=> SORT THE RESULT
CLERK
MANAGER
SALESMAN
ERROR= > All queries combined using a UNION, INTERSECT or EXCEPT operator
must have an equal number of expressions in their target lists.
=> ERROR - Cannot convert a char value to money. The char value has incorrect syntax.
- CORRESPONDING DATA TYPES ARE NOT MATCHING
JOB SAL
CLERK 950.00
CLERK 1300.00
MANAGER 2450.00
MANAGER 2850.00
Manager 4000.00
SALESMAN1250.00
SALESMAN1500.00
SALESMAN4000.00
=> DIFFERENTIATE BETWEEN UNION AND JOIN
UNION JOIN
COMBINES ROWS COMBINES COLUMNS
PERFORMED BW SIMILAR STRUCTURE SIMILAR STRUCTURE IS NOT
MANDATORY
UNION ALL
--------
JOB
MANAGER
Manager
CLERK
SALESMAN
SALESMAN
SALESMAN
MANAGER
SALESMAN
CLERK
DEPTNO JOB
10 MANAGER
10 Manager
10 CLERK
30 SALESMAN
30 SALESMAN
30 SALESMAN
30 MANAGER
30 SALESMAN
30 CLERK
=> INTERSECT
=============
=> RETURNS COMMON VALUES FROM THE OUTPUT OF TWO SELECT STATEMENTS
JOB
CLERK
MANAGER
=> DISPLAY EMPNO AND ENAME WHO ARE WORKING IN DEPTNO 10 AS WELL DEPTNO 20
=> EXCEPT
---------
RETURNS VALUES FROM THE 1ST QUERY OUTPUT WHICH ARE NOT PRESENT IN 2ND QUERY OUTPUT
=> DISPLAY THE JOBS IN DEPTNO 30 WHICH ARE NOT AVAILABLE IN DEPTNO 20
=> DISPLAY THE JOBS IN DEPTNO 30 WHICH ARE NOT COMMON TO DEPTNO 20
JOB
SALESMAN
==================================================================
SUBQUERIES OR NESTED QUERIES
=> A QUERY WITH IN ANOTHER QUERY IS KNOWN AS SUBQUERY OR NESTED QUERY
=> ONE QUERY IS KNOWN AS INNER QUERY/ CHILD/SUBQUERY
=> OTHER QUERY IS KNOWN AS OUTER QUERY/ PARENT QUERY
=> OUTERMOST QUERY WHOSE RESULT SET IS RETURNED TO THE CALLER IS KNOWN AS OUTER QUERY
=> THE INNER QUERY WHOSE RESULT SET IS USED BY OUTER QUERY IS KNOWN AS SUBQUERY
CUSTOMER TABLE
CID CNAME
1 A
2 B
3 C
ORDERS
OID CID PID QTYSOLD
1 2 2 5
2 1 1 10
3 1 2 15
4 3 4 2
=>SELECT TOP 1 C.CNAME FROM CUSTOMER10 AS C LEFT JOIN ORDERS10 AS O ON C.CID = O.CID
ORDER BY O.QTY DESC
======================================================================================
====================
19-05-2022
=> SUBQUERY IS A SELECT STATEMENT INSIDE ANOTHER SELECT , INSERT , UPDATE OR DELETE
STATEMENT.
=> OUTER QUERY CAN BE SELECT, INSERT, UPDATE , DELETE BUT INNER QUERY MUST ALWAYS BE
SELECT STATEMENT
KIND OF SUBQUERIES:
=> SELECT * FROM EMP1 WHERE DEPNTO = (SELECT DEPTNO FROM EMP1 WHERE ENAME = 'BLAKE')
2. CORRELATED SUBQUERY --- IN THIS CASE INNER QUERY IS DEPENDANT OF OUTER QUERY
IT IS DIFFICULT TO DEBUG
=> DISPLAY THE DETAILS OF EMPLOYEES EARNING MORE THEN AVERAGE SALARY OF ORGANIZATION
1. AVERAGE SALARY OF ORGANIZATION --SELECT AVG(SAL) FROM EMP1;
2. FILTER MY RESULT ON BASIS OF ABOVE RESULT -
SELECT * FROM EMP1 WHERE SAL > (SELECT AVG(SAL) FROM
EMP1);
SELECT * FROM EMP1 WHERE SAL > AVG(SAL); ---ERROR -- AGGREGATION NOT ALLOWED IN WHERE
SELECT * FROM EMP1 WHERE SAL > (SELECT SAL FROM EMP1 WHERE ENAME ='BLAKE');
======================
-- DISPLAY THE EMPLOYEE DETAILS WHO ARE SENIOR TO KING
-- GET THE HIREDATE OF KING
-- FILTER EMP1 TABLE AS PER ABOVE RESULT
SELECT * FROM EMP1 WHERE HIREDATE < (SELECT HIREDATE FROM EMP1 WHERE ENAME = 'KING');
==============================
-- DISPLAY EMPLOYEE NAME AND SALARY EARNING MAXIMUM SALARY
-- OBTAIN MAXIMUM SALARY
--FILTER EMP1 TABLE AS PER ABOVE RESULT
SELECT ENAME,SAL FROM EMP1 WHERE SAL = (SELECT MAX(SAL) FROM EMP1);
==================================
- DISPLAY EMPLOYEE NAME AND HIREDATE HAVING MAXIMUM EXPERIENCE
-- OBTAIN MINIUM HIREDATE
--FILTER EMP1 TABLE AS PER ABOVE RESULT
SELECT ENAME,HIREDATE FROM EMP1 WHERE HIREDATE = (SELECT MIN(HIREDATE) FROM EMP1);
=====================================
MULTIVALUED SUBQUERIES
SELECT * FROM EMP1 WHERE JOB IN (SELECT JOB FROM EMP1 WHERE ENAME IN
('BLAKE','ADAMS'));
X = 800 --X > ALL(1000,2000, 3000) FALSE X>1000 AND X>2000 AND X>3000
X = 1500 --X > ALL(1000,2000, 3000) FALSE
X = 4500 --X > ALL(1000,2000, 3000) TRUE
=> DISPLAY EMPLOYEE DETAILS WHO ARE EARNING MORE THAN ALL THE MANAGERS
=> GET THE SALARY OF ALL THE MANAGERS
=> FILTER THE EMP1 TABLE AS PER ABOVE RESULT
SELECT ENAME,SAL FROM EMP1 WHERE SAL > ALL(SELECT SAL FROM EMP1 WHERE JOB =
'MANAGER');
SELECT ENAME,SAL FROM EMP1 WHERE SAL > ANY(SELECT SAL FROM EMP1 WHERE JOB =
'MANAGER');
==========================================================================
20-05-2022
CO-RELATED SUBQUERY:
====================
=> INNER QUERY WILL REFERENCE THE OUTER QUERY
=> INNER QUERY IS NOT INDEPENDANT OF OUTER QUERY
=> INNER QUERY IS DEPENDANT ON OUTER QUERY
=> EXECUTION WILL START FROM OUTER QUERY AND INNER QUERY WILL EXECUTED NUMBER OF TIMES
DEPENDANT ON NUMBER OF ROWS RETURNED BY OUTER QUERY
=> SUBQUERY GETS EXECUTED FOR EACH ROW RETURN BY OUTER QUERY
=> DISPLAY EMPLOYEES EARNING MORE THAN THE AVEGERAGE SALARY OF THEIR DEPARTMENT
SELECT * FROM EMP1 AS E WHERE SAL > (SELECT AVG(SAL) FROM EMP1 WHERE DEPTNO =
E.DEPTNO);
=> DISPLAY EMPLOYEES EARNING LESS THAN THE AVEGERAGE SALARY OF THEIR DEPARTMENT
SELECT * FROM EMP1 AS E WHERE SAL < (SELECT AVG(SAL) FROM EMP1 WHERE DEPTNO =
E.DEPTNO);
=>
DISPLAY EMPLOYEE DETAILS EARNING MAX SALARY IN THEIR DEPARTMENTS
SELECT * FROM EMP1 AS E WHERE SAL = (SELECT MAX(SAL) FROM EMP1 WHERE DEPTNO =
E.DEPTNO);
=>
EXISTS and NOT EXISTS OPERATORS
-------------------------------
=> THESE OPERATORS CHECKS WHETEHR THE RECORDS EXISTS OR DOES NOT EXISTS
=> DISPLAY THE PRODUCT DETAILS FROM PRODUCTSV BUT FOR ONLY THOSE PRODUCTS WHICH
HAVE BEEN SOLD..SELLING INFORMATION IS AVAILABLE IN ORDERSV TABLE
SELECT * FROM PRODUCTSV WHERE PID IN (SELECT DISTINCT PID FROM ORDERSV) ;
SELECT * FROM PRODUCTSV AS P WHERE EXISTS(SELECT * FROM ORDERSV WHERE PID = P.PID);
------------------------------------
NOT EXISTS
----------
SELECT * FROM TABLENAME WHERE NOT EXISTS(SELECT STATEMENT);
=> DISPLAY THE PRODUCTS DETAILS OF ONLY THOSE PRODUCTS WHICH HAVE NOT BEEN SOLD
SELECT * FROM PRODUCTSV WHERE PID NOT IN (SELECT DISTINCT PID FROM ORDERSV) ;
SELECT * FROM PRODUCTSV AS P WHERE NOT EXISTS(SELECT * FROM ORDERSV WHERE PID =
P.PID);
=> PERFORMANCE WISE SQL SERVER RECOMMENDS TO USE NOT EXISTS OPERATOR
---------------------------------------------------------------------
DERIVED TABLES:(SUBQUERY INSIDE FROM CLAUSE)
----------------
----------------
=> DISPLAY RANKS OF ALL THE EMPLOYEES BASED ON THEIR SALARY AND HIGHEST
PAID EMPLOYEE SHOULD GET 1ST RANK
SELECT *, DENSE_RANK() OVER(ORDER BY SAL DESC) AS RNK FROM EMP1;
=> DISPLAY ONLY THE EMPLOYEE HAVING RANK LESS THEN OR EQUAL TO 5
SELECT *, DENSE_RANK() OVER(ORDER BY SAL DESC) AS RNK FROM EMP1 WHERE RNK<= 5; ERROR
BECAUSE OF EXECUTION ORDER
SELECT * FROM (SELECT *, DENSE_RANK() OVER(ORDER BY SAL DESC) AS RNK FROM EMP1) AS E
WHERE RNK <=5;
=> DISPLAY ONLY FIRST 5 RECORDS FROM EMP TABLE AS PER ROW NUMBER
SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY EMPNO ASC) AS RN FROM EMP1) AS E
WHERE RN <=5;
================================================================================
23-05-2022
=> DISPLAY PERCENT CONTRIBUTION IN TERMS OF SALARY WITHDRAWN OUT OF TOTAL SALARY
=> DISPLAY PERCENT CONTRIBUTION IN TERMS OF SALARY WITHDRAWN OUT OF TOTAL SALARY
FOR THE DEPARTMENT
===================================================================
====================================================================
SELECT * FROM (SELECT DEPTNO, ENAME FROM EMP1 ORDER BY DEPTNO) AS E => ERROR
=> INSERT INTO THIS TABLE EMPTEST THE DATA FROM EMP1 TABLE WHERE SAL IS MORE THAN
AVERAGE SALARY OF THE ORGANIZATION
=> FROM EMP1 TABLE SELECT ONLY THOSE RECORDS WHOSE RANK IS <= 5. RANKING HAS TO BE
DONE ON BASIS OF SALARY COLUMN. THE PERSON HAVING MAXIMUM SALARY SHOULD HAVE RANK 1
SELECT * FROM (SELECT *, DENSE_RANK() OVER(ORDER BY SAL DESC) AS RNK FROM EMP1)
AS E
WHERE E.RNK <=5;
===============================
USING CTE
==========
WITH E AS
(
SELECT *, DENSE_RANK() OVER(ORDER BY SAL DESC) AS RNK FROM EMP1
)
SELECT * FROM E WHERE RNK <=5;
/*FROM APPLE STORE DISPLAY THE STORE NAMES WHOSE TOTAL SALES IS MORE THAN
AVERAGE SALES OF ALL STORES*/
-- TOTAL SALES PER STORE
-- AVERAGE SALES
-- FILTERING ---TOTAL SALES PER STORE ----- AVERAGE SALES
SELECT * FROM
(SELECT STORE_NAME, SUM(SALES) AS TOTAL FROM applestore GROUP BY store_name) AS E1
WHERE TOTAL > (SELECT AVG(TOTAL) FROM
(SELECT STORE_NAME, SUM(SALES) AS TOTAL FROM applestore GROUP BY store_name) AS E);
======================================================================
HOW TO OBTAIN SAME RESULT WITH CTE
=====================
WITH E(STORE,TOTAL) AS
(
SELECT STORE_NAME, SUM(SALES) FROM applestore GROUP BY store_name
)
SELECT * FROM E WHERE TOTAL > (SELECT AVG(TOTAL) FROM E);
=>
==========================================================
DELETE DUPLICATE RECORDS FROM A TABLE
NAME COUNTRY
RAJ INDIA
RAJ INDIA
PAVAN USA
ROHIT UK
ROHIT UK
ROHIT UK
RAJ FRANCE
PAVAN INDIA
STEP1 ==
NAME COUNTRY RN
RAJ INDIA 1
RAJ INDIA 2
PAVAN USA 1
ROHIT UK 1
ROHIT UK 2
ROHIT UK 3
RAJ FRANCE 1
PAVAN INDIA 1
STEP2 ==>
DELETE THE RECORDS WHOSE RN>1
NAME COUNTRY RN
RAJ INDIA 1
PAVAN USA 1
ROHIT UK 1
RAJ FRANCE 1
PAVAN INDIA 1
===============================
WITH E AS
(
SELECT * , ROW_NUMBER() OVER (PARTITION BY NAME, COUNTRY ORDER BY NAME) AS RN FROM
DUPLICATES
)
DELETE FROM E WHERE RN>1;
==================================
MULTIPLE CTEs
===========
WITH E1 AS
(
QUERY 1
),
E2 AS
(
QUERY 2
)
STATEMENT USING E1 AND E2
=============================================
RECURSIVE CTES
WITH E AS
(
SELECT EMPID, FIRSTNAME, LASTNAME, 1 AS RNK FROM HR.Employees WHERE mgrid is NULL
UNION ALL
SELECT H.EMPID,H.FIRSTNAME, H.LASTNAME, RNK+1 FROM E
INNER JOIN HR.Employees AS H
ON H.MGRID = E.EMPID
)
SELECT * FROM E;
===================
EMPID FIRSTNAME LASTNAMERNK
1 Sara Davis 1
2 Don Funk 2
3 Judy Lew 3
5 Sven Mortensen 3
6 Paul Suurs 4
7 Russell King 4
9 PatriciaDoyle 4
4 Yael Peled 4
8 Maria Cameron 4
===========================================================
25-05-2022
WITH DATES AS
(
SELECT DATEFROMPARTS(YEAR(GETDATE()),MONTH(GETDATE()),1) AS [DATE]
UNION ALL
SELECT DATEADD(DAY,1,[DATE]) FROM DATES WHERE [DATE] < EOMONTH(GETDATE())
)
SELECT * FROM DATES;
===========================================================
TRANSACTIONS IN SQL SERVER
=> A TRANSACTION IS A SET OF OPERATIONS SO THAT ALL THE OPERATIONS ARE GUARRANTEED TO
SUCCEED OR FAIL AS ONE UNIT.
(
DEBIT
CREDIT)
DEBITED AND CREDIT BOTH SHOULD BE SUCCESFUL
A--> ATOMICITY --- ALL OR NONE... ALL OPERATIONS IN WITHIN TRANSACTION SHOULD BE
COMPLETED OR NONE
C--> CONSISTENCY -----IF THE TRANSACTION IS GETTING SUCCESFUL THAN IT SHOULD MAINTAIN
RULES, CONSTRAINTS SET BEFORE
I---> ISOLATION ---- TRANSACTIONS SHOULD BE ISOLATED FROM OTHER TRANSACTION
D---> DURABILITY ------THE MODIFICATIONS OF THE COMMITTED TRANSACTION BECOMES
PERSISTANT
IN DATABASE
EVERY TRANSACTION SHOULD HAVE A BEGINING AND END.. IF IT BEGIN BUT NOT END IT WILL BE
CALLED AS OPEN TRANSACTION
1. AUTOCOMMIT TRANSACTION:
THIS IS DEFUALT AVAIALABLE IN SQL SERVER. IN THIS MODE EVERY SQL STATEMENT IS
TREATED AS ONE TRANSACTION. SO IT WILL SAVE THE CHANGES PERMANENTLY USING COMMIT
IF NO ERROR OCCURS OR IT WILL ROLLBACK THE CHANGES.
==========================================================
27-05-2022
2.IMPLICIT TRANSACTION:
IN sql SERVER , AN IMPLICIT TRANSACTION IS WHEN A NEW TRANSACTION IS IMPLICITLY
STARTED
WHEN THE PRIOR TRANSACTION COMPLETES BUT EACH TRANSACTION IS EXPLICITLY COMPLETED WITH
A COMMIT OR ROLLBACK.
SET IMPLICIT_TRANSACTIONS ON
a
10
20
30
40
==========================================
BEGIN TRANSACTION
INSERT INTO A VALUES(40)
INSERT INTO A VALUES(50)
=>WE CAN DECLARE SAVE TRANSACTION AND WE CAN ROLLBACK UPTO THE SAVE TRANSACTION
=> THEY ARE DROPPED WHEN THE SESSION THAT CREATED THEM IS CLOSED
=> THEY CAN ALSO BE DROPPED EXPLICITLY BY USER USING DROP STATEMENT
THE LOCAL TEMP TABLE CAN BE CREATE USING CREATE STATEMENT BUT WE HAVE TO USE A #
SYMBOL
IN FRONT OF TEMP TABLE NAME ---
=======================================================
2. GLOBAL TEMPORARY TABLES
WE CAN CREATE GLOBAL TEMP TABLES LIKE LOCAL TEMP TABLES BUT THE TABLENAME WILL
BE PREFIXED BY ##
=> THESE TABLES CAN BE ACCESSED BY ALL OTHER SESSIONS UNLIKE LOCAL ONES.
=> WE CAN DROP THE GLOBAL TEMP TABLE WITH DROP STATEMENT IN ANY OF SESSION AND ALSO
IT IS AUTOMATICALLY DROPPED WHEN THE SESSION IS CLOSES THAT CREATED THIS GLOBAL TEMP
TABLE.
IF IT IS IN USE BY OTHER SESSION AND WE ARE CLOSING THE SESSION WHICH CREATED IT THEN
SQL SERVER WAITS UNTIL THE COMPLETION OF THE LAST SQL STATEMENT ACTIVITY THAT USED THE
GLOBAL TEMP TABLE. ONCE DONE GLOBAL TEMP TABLE WILL BE DROPPED.
=> VIEWS CAN BE USED LIKE NORMAL TABLES. WE CAN SELECT, FILTER , SORT , JOIN VIEWS
WITH
OTHER VIEWS OR TABLES AND EVEN WE CAN UPDATE BASE TABLES WITH THE HELP OF VIEW(
WITH
SOME RESTRICTIONS)
=> VIEWS CAN BE NESTED.
=> OTHER VIEWS CAN BE BUILT FROM FROM A VIEW
=> SQL SERVER CREATES THE VIEW VIEW_EMP BUT DOES NOT STORE QUERY OUTPUT
=>AFTER CREATING OF THE VIEW THE USER CAN ACCESS IT LIKE A NORMAL TABLE:
=> WHEN ABOVE QUERY IS SUBMITTED--THEN SQL SERVER ACTUALLY EXECUTES THE QUERY AS
FOLLOWS
============================================================================
01-06-2022
Complex Views
===========
=>IF A VIEW CONSISTS OF MULTIPLE BASE TABLES,JOINS, GROUP BY, SUBQUERIES, UNION,
AGGREGATE FUNCTIONS, DISTINCT, DERIVED TABLES..IN SUCH CASES SQL SERVER IS NOT ABLE
TO
UPDATE THE BASE TABLES BECAUSE OF AMBIQUITY. SUCH VIEWS ARE KNOWN AS COMPLEX VIEWS OR
NON UPDATABLE VIEWS
=>
SELECT * FROM CV1 WHERE DEPTNAME = 'HR'
=>
IN EMP1 TABLE , DEPARTMENT NAME, MIN SAL IN THE DEPARTMENT, MAX SAL IN THE DEPARTMENT
TOTAL SAL OF THE DEPARTMENT, COUNT OF EMPLOYEES IN THE DEPARTMENT
=>
SELECT * FROM DEPT_SUMMARY
DROP VIEW V1
================================
WITH ENCRYPTION:
================
WITH ENCRYPTION WILL NOT ALLOW USER TO SEE THE SQL CODE THAT DEFINES THE VIEW
WITH SCHEMABINDING
===================
STEP1=> CREATE THE VIEW=>
=> VIEW IS STILL THERE BUT WE WILL NOT BE ABLE TO ACCESS THE VIEW
=> IF A VIEW IS CREATED WITH SCHEMABINDING OPTION THEN SQL SERVER WILL NOT ALLOW
THE USER TO DROP THE BASE TABLE IF ANY VIEW EXISTS ON THE BASE TABLE.
=> TO DROP THE TABLE FIRST WE NEED TO DROP THE VIEW
drop table vendorsnew; ==> error ---Cannot DROP TABLE 'vendorsnew' because it is
being referenced by object 'VEND'
===================================================
INLINE TABLE-VALUED FUNCTIONS:
=============================
IN SQL SERVER WE CAN USE THESE FUNCTIONS TO ACHIVE THE FUNCTIONALITY OF PARAMETERIZED
VIEWS
THESE ARE LIKE VIEWS BUT WITH ABILITY TO ACCEPT THE PARAMETER.
IN INLINE TABEL -VALUED FUNCTION THE BODY OF THE FUNCTION WILL HAVE ONLY
A SINGLE SELECT STATEMENT.
-- CREATE A FUNCTION THAT RETURNS STUDENT NAME, DOB BY GENDER
CREATE FUNCTION FN_STUDENT_DETAILSBYGENDER
(
@GENDER VARCHAR(10)
)
RETURNS TABLE
AS
RETURN (SELECT [NAME],DOB FROM STUDENT WHERE GENDER = @GENDER);
SYNTAX:
CREATE SYNONYM <NAME> FOR <TABLENAME>
AFTER CREATING SYNONYM INSTEAD OF USING COMPLETE TABLE NAME WE CAN USE SYNONYM IN
SELECT/INSERT/UPDATE/DELETE QUERIES:
SELECT * FROM E;
DELETE FROM E WHERE EMPNO = 556;
SEQUENCES:
=> SEQUENCES ARE CREATED TO GENERATE SEQUENCE NUMBERS
=> USING SEQUENCE WE CAN AUTO INCREMENT COLUMN VALUES
SYNTAX:
CREATE SEQUENCE <NAME>
[START WITH <VALUE>]
[INCREMENT BY <VALUE>]
[MAXVALUE <VALUE>]
[MINVALUE <VALUE>]
[CYCLE/NOCYLE]
[CACHE <VALUE> |NO CACHE]
CREATE SEQUENCE S2
START WITH 1
INCREMENT BY 1
MAXVALUE 5;
=================================
USING SEQUENCE IN UPDATE COMMAND
CREATE SEQUENCE S3
START WITH 100
INCREMENT BY 1
MAXVALUE 999;
REQUIREMENT:
=============
INVOICENO INVOICEDATE
FKT/0622/1
FKT/0622/2
FKT/0622/3
FKT/0722/4
FKT/0722/5
=============================
================================================================
HOW TO RESET THE SEQUENCE
---------------------------
CREATE SEQUENCE S7
START WITH 1
INCREMENT BY 1
MAXVALUE 5
MINVALUE -5
CYCLE
==============================================================================
INDEXES:
-> INDEX IS A DB OBJECT WHICH IS CREATED TO IMPROVE THE PERFORMANCE OF DATA ACCESSING
OR DATA SEARCHING
--> INDEX IN DB IS SIMILAR TO INDEX IN TEXT BOOK. IN TEXT BOOK WITH THE HELP OF INDEX
WE CAN QUICKLY SEARCH FOR A PARTICULAR TOPIC
=> WHEN WE WRITE A QUERY LIKE SELECT * FROM EMP1 WHERE DEPTNO = 30 THEN SQL SERVER
MAY USE FOLLOWING METHODS TO LOCATE THE RECORD
1. TABLE SCAN -- WHERE EACH AND EVERY ROW OF THE TABLE IS SCANNED FOR THE RECORD
2. INDEX SCAN----IT WILL IMPROVE THE PERFORMANCE IN LOCATING THE RECORD-- THE RECORD
WILL BE LOCATED QUICKLY
=======================================================
=> SO IF NEED SEARCH ON THE BASIS OF ANY OTHER COLUMN THEN WE HAVE TO USE NONCLUSTERED
INDEX---- WE CAN HAVE 999 NON CLUSTERED INDEXES PER TABLE
=> IN CLUSTERED INDEX WE HAVE DATA PAGES IN THE LEAF NODE(LAST NODE) OF B-TREE
=> BUT IN NON CLUSTERED INDEX WE HAVE INDEX PAGE IN THE LEAF NODE(LAST NODE) OF B-TREE
3. INDEX SEEK--IT IS FASTEST MODE OF SCANNING WHEN WE WANT TO SELECT FEW ROWS FROM
TABLE
==============================================================
07-6-2022
--clustered index
--we will create a primary key
--- when we create primary key clustered index is automatically created
---on the pk unique clustered index is created
/* BECAUSE OF THE CLUSTERED INDEX THE TABLE
DATA WILL BE STORED IN CLUSTERED TABLE FORMAT-- SORTED*/
--SP_HELPINDEX T100
index_name index_description
index_keys
PK__T100__3214EC272B8AF133 clustered, unique, primary key located on PRIMARY
ID
SP_HELPINDEX T200;
====
CREATING NON CLUSTERED INDEX:
WHEN WE CREATE NON CLUSTERED INDEX TO FETCH RESULTS OF PARTICULAR QUERY, SQL SERVER
USES KEY LOOKUP TO RETRIEVE NON KEY DATA.
COVERING INDEX IS AN INDEX THAT CONTAINS ALL INFORMATION TO RESOLVE QUERY.
=> BY INCLUDING NON KEY COLUMNS IN NON CLUSTERED INDEXES WE CAN DRAMATICALLY IMPROVE
THE
PERFORMANCE.
SYNTAX:
SELECT * FROM (SELECT STATEMENT) AS ALIAS
PIVOT
(
AGGR EXPRESSION FOR COLNAME IN ([V1],[V2]...)
)
AS ALIAS
ORDER BY CLAUSE
10 20 30
SALESMANSUM(SAL)SUM(SAL)SUM(SAL)
MANAGER SUM(SAL)SUM(SAL)SUM(SAL)
CLERK SUM(SAL)SUM(SAL)SUM(SAL)
CEO SUM(SAL)SUM(SAL)SUM(SAL)
JOB 10 20 30
CEO 4000.00 NULL NULL
CLERK 1300.00 1100.00 950.00
MANAGER 2450.00 4000.00 2850.00
SALESMANNULL NULL 8000.00
=> IN DERIVED TABLE USE ONLY THE COLUMN OR EXPRESSION WHICH ARE NEEDED AS A PART OF
PIVOT TABLE.
==============================================================================
08-06-2022
===============================
UNPIVOT OPERATOR:
SELECT.....
FROM INPUT TABLE
UNPIVOT
(VALUE COLUMN FOR NAME COLUMN IN (SOURCE COLUMNS)
AS ALIAS;
=>
SELECT sid, sname,subject,marks
FROM student_mas
UNPIVOT
(marks FOR subject IN (MAT,PHY,CHE))
AS A;
=====================================================================
MERGE COMMAND
================
=> MERGE COMMAND IS USED TO MERGE DATA FROM A SOURCE INTO TARGET APPLYING
DIFFERENT ACTIONS(INSERT, UPDATE, DELETE) BASED ON CONDITIONAL LOGIC
=> USED TO MERGE DATA INTO A TABLE
=> DELETE IS USED TO DELETE RECORDS FROM TARGET IF CORRESPONDING RECORD IS NOT PRESENT
IN SOURCE
=> INSERT IS USED TO INSERT RECORDS INTO TARGET IF CORRESPONDING RECORD IS
NOT PRESENT IN TARGET TABLE
=>UPDATE IS USED TO UPDATE THE RECORDS OF TARGET AS PER SOURCE
==< NOTE ---ITS NOT MANDATORY TO USE ALL when staement --WE CAN SKIP ANY CONDITION
AS PER OUR REQUIREMENT. LIKE IN FOLLOWING CODE WE ARE USING WHEN MATCHED STATEMENT.
========================================================
09-06-2022
TSQL PROGRAMMING
VARIABLE----VARIABLES ARE USED TO STORE THE DATA TEMPORARILY FOR LATER USE IN THE
SAME BATCH IN WHICH THEY ARE DECLARED.
=============
DECLARE @x as int;
GO
SELECT @x as x;
ERROR--Must declare the scalar variable "@x". BECAUSE WE USING VARIABLE OUTSIDE OF
ITS SCOPE
=================================
SET STATEMENT:
=> IT IS USED TO ASSIGN VALUE TO A VARIABLE
=> ONLY ONE VARIABLE IS ALLOWED AT A TIME
==============================================
WE CAN ALSO ASSIGN THE VALUES TO VARIABLES USING SELECT STATEMENT(ASSIGNMENT SELECT)
DECLARE @EMPNAME AS VARCHAR(20);
DECLARE @JOB AS VARCHAR(20);
DECLARE @SALARY AS MONEY;
==========================================
IF MULTIPLE ROWS QUALIFY, THEN WHEN ASSIGNMENT SELECT IS FINISHED, THE VALUES IN THE
VARIABLES ARE THOSE FROM THE LAST ROW THE SQL SERVER HAPPENED TO ACCESS
RESULT:
miller CLERK 1300.00
===========================================
DECLARE @SAL MONEY;
SET @SAL = (SELECT SAL FROM EMP1 WHERE EMPNO=100);
SELECT @SAL AS SALARY;
==================================
===========================================
PRINT STATEMENT:
==============
IT IS USED TO RETURN A USER DEFINED MESSAGE TO THE CLIENT
PRINT 'HELLO'
PRINT @X
PRINT GETDATE()
============================================================
1. WRITE A PROGRAM TO ADD TWO NUMBERS
2. WRITE A PROGRAM TO TAKE INPUT DATE AND PRINT DAY OF THE WEEK
DECLARE @D DATE;
SET @D = '1947-08-15'
PRINT DATENAME(DW,@D);
3. WRITE A PROGRAM TO TAKE EMPNO AND PRINT CORRESPONDING NAME AND SALARY FROM EMP1
DECLARE @ENO INT, @ENME VARCHAR(20),@SAL MONEY;
SET @ENO = 100;
SET @ENME = (SELECT ENAME FROM EMP1 WHERE EMPNO = @ENO);
SET @SAL = (SELECT SAL FROM EMP1 WHERE EMPNO = @ENO);
PRINT @ENME + ' '+ CAST(@SAL AS VARCHAR);
===========================================================================
10-06-2022
4 . WRITE A PROGRAM TO INPUT EMPNO AND PRINT EMPLOYEE EXPERIENCE IN EMP1 TABLE
DECLARE @EMPNO INT, @DOJ DATE, @EXP INT;
SET @EMPNO = 100
SELECT @DOJ=HIREDATE FROM EMP1 WHERE EMPNO = @EMPNO
SET @EXP = DATEDIFF(YEAR,@DOJ,GETDATE())
PRINT 'EXPERIENCE = ' + CAST(@EXP AS VARCHAR) + ' YEARS';
====================================================================================
CONDITIONAL STATEMENT:
IF-ELSE
MULTI IF
NESTED IF
IF ELSE:
========
IF CONDITION
BEGIN
S1
S2
S3
END
[ELSE
BEGIN
S4
S5
S6
END]
MULTI IF
=========
IF COND1
BEGIN
STATEMENTS
END
ELSE IF COND2
BEGIN
STATEMENTS
END
ELSE IF COND3
BEGIN
STATEMENTS
END
ELSE
BEGIN
STATEMENTS
END
=========
NESTED IF
=======
IF CONDITION
BEGIN
IF CONDITIONN
BEGIN
STATEMENTS
END
ELSE
BEGIN
STATEMENTS
END
END
ELSE
BEGIN
STATEMENTS
END
========================================================================
WRITE A PROGRAM TO INPUT EMPNO AND INCREMENT THE SALARY BY SPECIFIC AMOUNT.
AFTER THE INCREMENT IF SALARY EXCEEDS 5000 THAN CANCEL THE INCREMENT IN EMP1
===========================================================================
WRITE A PROGRAM TO INPUT EMPNO AND INCREMENT HIS/HER SALARY AS FOLLOWS
=================================================================================
WRITE A PROGRAM TO PROCESS BANK TRANSACTION(W/D) --W -- WITHDRAWL -- D --DEPOSIT
WHILE LOOP
==========
NOTE ===> ENSURE TO MENTION A STATEMENT WHICH CAN CAUSE CONDITION TO BECOME FALSE
AS PER YOUR REQUIREMENT. IF CONDITION NEVER BECOMES FALSE THEN IT WILL BECOME
AN INFINITE LOOP AND WILL NEVER TERMINATE.
DECLARE @I INT = 1
WHILE @I<=10
BEGIN
PRINT @I
SET @I = @I+1
END;
CONTINUE --- THIS STATEMENT IS USED TO SKIP CURRENT ITERATION OR TO SKIP THE
STATEMENTS
MENTIONED AFTER THE CONTINUE FOR THE CURRENT ITERATION.
=================================================
CORRECT------------
DECLARE @I INT = 0
WHILE @I<10
BEGIN
SET @I = @I+1
IF @I=6
BEGIN
CONTINUE
END
print @I
END
=======================================================
BREAK STATEMENT -- THIS STATEMENT IS USED TO GET OUT OF LOOP AS PER OUR REQUIREMENT
-- THIS STATEMENT EXIT THE WHILE LOOP IMMEDIATELY WHEN BREAK STATEMENT
IS ENCOUNTERED.
===RESULT:
1
2
3
4
5
==================================================================
WRITE A PROGRAM TO INPUT STRING AND PRINT IN FOLLOWING PATTERN
NAME --'PRAVEER'
EXPECTED --OUTPUT
P
R
A
V
E
E
R
CURSOR
======
=>CURSOR PROCESS ROWS FROM A RESULTSET ONE AT A TIME.
=>RESULTSET IS STORED IN SQL SERVER
=> CURSOR IS A DATABASE OBJECT THAT ALLOWS US TO RETRIEVE EACH ROW AT A TIME AND
MANIPULATE ITS DATA.
=> IT IS LIKE A POINTER TO A ROW.
=> CURSOR ARE USED TO ACCESS THE RESULT SET ROW BY ROW
=> FROM TSQL PROGRAM IF WE SUBMIT A QUERY TO SQL SERVER IT GOES TO THE DATABASE
AND GETS THE DATA FROM THE TABLE AND COPIES IT INTO TEMPORARY MEMORY.
USING CURSOR WE CAN GIVE NAME TO THAT MEMORY AND ACCESS THE RESULT SET ROW BY ROW AND
DO THE PROCESSING AS PER NEED.
1. DECLARE A CURSOR
2. OPEN THE CURSOR
3. FETCH RECORDS FROM THE CURSOR
4. CLOSE THE CURSOR
5. DEALLOCATE CURSOR
1. DECLARE A CURSOR
==================
OPEN C1
@@FETCH_STATUS
===============
=> IT IS A SYSTEM VARIABLE THAT TELLS STATUS OF FETCH
=> USING THIS WE CAN FIND THE WHETHER THE FETCH STATEMENT IS SUCCESFULL OR NOT
=> @@FETCH_STATUS RETURNS===>
0 => FETCH IS SUCCESFULL
-1=> FETCH IS UNSUCCESFULL
==============================================================================
=> WRITE A PROGRAM TO PRINT ALL EMPLOYEES NAMES AND SALARIES FROM EMP1 TABLE USING
CURSOR
OPEN C1
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @NAME + ' ' + CAST(@SALARY AS VARCHAR)
FETCH NEXT FROM C1 INTO @NAME,@SALARY
END
CLOSE C1
DEALLOCATE C1
=====================================================
WRITE A PROGRAM TO BACK UP SELECTED DATABASES
OPEN DBLIST
WHILE @@FETCH_STATUS = 0
BEGIN
SET @QPATH = 'C:\dbbackup\'+ @DBNAME +'.BAK'
BACKUP DATABASE @DBNAME TO DISK = @QPATH
FETCH NEXT FROM DBLIST INTO @DBNAME
END
CLOSE DBLIST
DEALLOCATE DBLIST
=====
BACKING UP DATABASE OTHER THEN SYSTEM DATABASES
=============================================
DECLARE @DBNAME VARCHAR(20)
DECLARE @QPATH VARCHAR(250)
OPEN DBLIST
WHILE @@FETCH_STATUS = 0
BEGIN
SET @QPATH = 'C:\dbbackup\'+ @DBNAME +'.BAK'
BACKUP DATABASE @DBNAME TO DISK = @QPATH
FETCH NEXT FROM DBLIST INTO @DBNAME
END
CLOSE DBLIST
DEALLOCATE DBLIST
===============================================================
15-06-2022
WRITE A PROGRAM USING CURSOR TO INCREMENT THE SALARIES BASED ON PCT IN RAISE_SALARY
TABLE.
RAISE_SALARY
========
EMPNO PCT
100 15
101 20
102 12
103 15
SNO SNAME S1 S2 S3
1 A 80 90 70
2 B 30 60 50
3 C 45 73 65
RESULT
SNO STOT SAVG SRES
=> WRITE A PROG TO CALCULATE ALL THE STUDENTS TOTAL, AVG, RESULT AND INSERT THE
RECORDS
INTO RESULT TABLE..PASSING MARKS IN ANY SUBJECT SHOULD BE MINIMUM 35. A STUDENT
WILL BE CONSIDERED AS PASS ONLY WHEN HE/SHE IS PASS IN ALL THE SUBJECTS
=> FORWARD ONLY CURSOR SUPPORTS ONLY FETCH NEXT STATEMENT BUT SCROLLABLE CURSOR
SUPPORTS FOLLOWING FETCH STATEMENTS
===================================
WRITE A PROG TO PRINT EVERY 5TH RECORD
===========================================
EXCEPTION HANDLING----
BEGIN TRY
STATEMENT1 ---THOSE STATEMENTS WHICH MAY RAISE EXCEPTION OR CAUSE RUNTIME ERRORS
STATEMENT2
STATEMENT3
END TRY
BEGIN CATCH
STATEMENTS ---WHICH HANDLES EXCEPTION --STATEMENTS WHICH YOU WANT TO EXECUTE IF
EXCEPTION
IS RAISED
END CATCH
=> IN TRY BLOCK IF STATEMENTS CAUSES RUNTIME ERROR THEN CONTROL IS TRANSFERED TO CATCH
BLOCK AND EXECUTES THE STATEMENTS IN CATCH BLOCK
OUTPUT:
TRY BLOCK
ERROR
I THINK UR DENOMINATOR IS ZERO
=======================================
DECLARE @A INT, @B INT, @C INT
SET @A = 100
SET @B = 10
BEGIN TRY
PRINT 'TRY BLOCK'
SET @C = @A/@B
PRINT @C
END TRY
BEGIN CATCH
PRINT 'ERROR'
PRINT 'I THINK UR DENOMINATOR IS ZERO'
END CATCH
OUTPUT:
TRY BLOCK
10
=====================================================
NOTE ---> SELECT * FROM SYSMESSAGES
TO SEE THE ERROR NUMBERS
OUTPUT:
DIVISOR CAN NOT BE ZERO
=========================================================
CREATE TABLE EMP250
(EMPNO INT PRIMARY KEY,
ENAME VARCHAR(10) NOT NULL,
SAL MONEY CHECK(SAL >= 3000)
);
============================================================
DECLARE @A INT, @B INT, @C INT
SET @A = 100
SET @B = 0
BEGIN TRY
SET @C = @A/@B
PRINT @C
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
PRINT 'I THINK UR DENOMINATOR IS ZERO'
END CATCH
======================================================================================
16-06-2022
OUTPUT:
======
8134
8134
5
I THINK UR DENOMINATOR IS ZERO
=> WRITE A PROGRAM TO INPUT EMPNO AND INCREMENT SALARY BY SPECIFIC AMOUNT BUT
ON SUNDAY UPDATES ARE NOT ALLOWED
IF DATENAME(DW,GETDATE()) = 'SUNDAY'
RAISERROR('ON SUNDAYS UPDATES ARE NOT ALLOWED', 15,1)
ELSE
UPDATE EMP1 SET SAL = SAL + @AMT WHERE EMPNO = @ENO
==========================================================================
STORED PROCEDURES
==================
=> IT IS A COLLECTION OF ONE OR MORE T-SQL STATEMENTS SAVED IN DATABASE FOR FUTURE USE
CHECK UR STOCK
EXECUTE P1 3245
def add(a,b):
return a+b
add(3,4)---7
=============================================================================
17-6-2022
STORED PROCEDURES---
=================
=> A STORED PROCEDURE IS AN EXECUTABLE DATABASE OBJECT WHICH CONTAINS ONE OR MORE
SQL STATEMENTS.
1. TAKE A KEY --- 2. INSERT THE KEY IN LOCK ---3. ROTATE THE KEY IN PROEPER DIRECTION
TASK :
=> THESE PROGRAMS ARE STORED IN THE DATABASE THAT'S WHY THEY ARE KNOWN AS STORED
PROCEDURE
ADVANTAGES:
===========
1.REUSABILITY :
===========
=>AS STORED PROCEDURES ARE SAVED IN DB THEY CAN BE REUSED BY USER OR AN
APPLICATION PROGRAM CONNECTED TO DB.
2.SECURITY
==========
BECAUSE STORED PROC ARE STORED IN DB SO ONLY AUTHORIZED PERSON/APPLICATION CAN EXECUTE
THESE
STORED PROCEDURES CAN BE CALLED FROM FRONT END APPLICATIONS LIKE JAVA, .NET..
4. IMPROVES PERFORMANCE
============================
FIRST TIME STORED PROC WILL BE EXECUTED, EACH SQL STATEMENT WILL BE COMPILED
AND EXECUTED TO CREATE AN EXECUTION PLAN. THEN THE PROCEDURE IS STORED IN COMPILED
FORM WITH IN THE DATABASE.
FOR EACH SUBSEQUENT EXECUTION, THE ALREADY COMPILED SQL STATEMENTS ARE EXECUTED.
1.COMPILATION
2.EXECUTION
=> THEN THE PROCEDURE IS STORED IN COMPILED FORM WITH IN THE DATABASE.
SYNTAX:
=======
INPUT PARAMETER: USED TO PASS VALUES FROM CALLING PROGRAM TO STORED PROC.
IT ALWAYS RECEIVES THE VALUE
IT IS DEFAULT
EXAMPLE : @CATEGORY VARCHAR(20)
OUTPUT PARAMETER: USED TO PASS VALUES FROM STORED PROC TO CALLING PROGRAM
IT RETURNS THE VALUE OR SENDS THE VALUE
EXAMPLE : @SAL MONEY OUTPUT
===================================================================
CREATE A STORED PROCEDURE WHICH DISPLAYS INFORMATION ABOUT DEPTNO 30 IN EMP1
EXEC SPEMP1_1
===========================================================
CREATE A STORED PROCEDURE WHICH TAKES FROM USER EMPNO AND DISPLAY HIS DETAILS EMPNO,
NAME,SALARY
========================================
EXECUTION OF STORE PROC
=>TO MAKE THE CHANGES IN EXISTING STORED PROCEDURE WE CAN USE ALTER COMMAND
=> THE SYNTAX OF CREATING STORED PROC AND ALTERING STORED PROC IS VERY MUCH SIMILAR
WITH ONLY DIFFERENCE IS OF THE WORD CREATE/ALTER
SUPPLYING PARAMTERS VALUES BY NAME: IN THIS CASE ORDER OF PARAMETERS DOES NOT MATTER
WHILE CALLING THE STORED PROC
=================================================
=> BUT IF USER SUPPLIES THE VALUES OF THESE PARAMETERS THEN THE DEFAULT VALUES WILL BE
OVER WRITTEN WHICH MEANS THE DEFAULT VALUE WILL BE REPLACED BY THE VALUES THE CALLER
HAS
SUPPLIED.
=======================================
EXEC SPEMP1_1 @DEPTNO = 30
THE DEFAULT VALUE OF @DEPTNO WILL BE OVERWRITTEN AND DEFAULT VALUES OF @JOB WILL BE
USED
==========================================
=> ITS A GOOD PRACTISE TO HAVE DEFAULT OR OPTIONAL ARGUMENTS AT LAST WHILE DECLARING
PARAMTERS....
WHERE SP_HELPTEXT IS SYSTEM STORED PROCEDURE AND SPEMP1_1 IS USER DEFINED STORED
PROCEDURE
AND SP_HELPTEXT CAN BE USED TO SEE THE CODE OF VIEW,STORED PROC, USER DEFINED
FUNCTIONS ETC
===========================================
ENCRYPTING THE EXISTING STORED PROCEDURE
AS
SELECT * FROM EMP1 WHERE DEPTNO = @DEPTNO AND JOB = @JOB;
=========================================
ENCRYPTING THE STORED PROCEDURE WHILE CREATING STORED PROC
AS
SELECT * FROM EMP1 WHERE DEPTNO = @DEPTNO AND JOB = @JOB;
======================================================================================
=========
24-06-2022
1. RETURN STATEMENT:
BY DEFAULT WHEN WE EXECUTE A STORED PROCEDURE THEN IT RETURNS AN INTEGER VALUE AND
THIS
VALUE INDICATES EXECUTION STATUS OF STORED PROCEDURE. THE VALUE 0 INDICATES THE
PROCEDURE
IS COMPLETED SUCCESFULLY AND NON ZERO VALUE INDICATES AN ERROR.
=> TO USE THE RETURN VALUE IN THE CALLING PROGRAM, YOU MUST DECLARE A VARIABLE TO
STORE
ITS VALUE.
=> THE RETURN STATEMENT IMMEDIATELY EXITS THE PROCEDURE AND RETURNS AN OPTIONAL
INTEGER VALUE TO THE CALLING PROGRAM. IF YOU DONT SPECIFY A VALUE IN THIS STATEMENT
THE RETURN VALUE IS ZERO.
DECLARE @T INT
EXEC @T = SPEMP1_3
PRINT @T
===============================
WHEN WE WANT TO RETURN SINGLE INTEGER VALUE--- BETTER TO GO WITH RETURN STATEMENT
BUT WHEN WE WANT TO RETURN MULTIPLE VALUES OR VALUES OF DIFFERENT DATA TYPES
THEN CHOOSE OUTPUT PARAMETER.
WE WANT TO TAKE JOB FROM CALLING PROGRAM AND RETURN CORRESPODING DEPTNO TO THE CALLING
PROGRAM
CREATE PROC SPEMP1_6
@DEPT INT OUTPUT,
@JOB VARCHAR(20)
AS
SELECT @DEPT = DEPTNO FROM EMP1 WHERE JOB = @JOB
DECLARE @D INT
EXEC SPEMP1_6 @D OUTPUT, 'CEO'
SELECT @D
PRINT @D
DECLARE @D INT
EXEC SPEMP1_6 @JOB = 'CEO',@DEPT = @D OUTPUT
SELECT @D
=============================================================================
ARCHIVED TABLES:
CREATE A STORED PROCEDURE TO DELETE RECORD FROM A TABLE AND SAVE THE DELETED RECORDS
IN ANOTHER TABLE SO THAT ANY TIME WRONG DATA IS DELETED WE CAN RECOVER.
1. DELETE THE RECORD A FROM A TABLE 1
2. INSERT THE DELETED RECORD INTO TABLE 2
=======================================
CREATE A PROCEDURE TO INCREMENT SPECIFIC EMPLOYEE SALARY BY A SPECIFIC AMOUNT
IN EMP1 TABLE
=======================================
DECLARE @S MONEY
EXEC SP_INC1 107,1000,@S OUTPUT
PRINT @S
=============================================================================
25-06-2022
CREATE A PROCEDURE FOR MONEY WITHDRAWL
ACCOUNTS
ACN ACT BAL
100 S 10000
101 S 20000
102 S 5000
=> WE CAN CREATE STORED PROCEDURE WHICH IS REFERENCING SOME TABLES EVEN WITHOUT
EXISTENCE
OF TABLES IN DB. BECAUSE IT USES DEFERRED NAME RESOLUTION.
DECLARE @B MONEY
EXEC DEBIT 100, 1000,@B OUTPUT
PRINT @B
============================================================
TEMPORARY STORED PROCEDURES
1. SCALAR UDF:
===============
IT RETURNS A SCALAR VALUE
SYNTAX:
=======
CREATE FUNCTION [SCHEMANAME.]FUNCTIONNAME
([PARAMETERNAME DATA_TYPE [=DEFAULT],......)
RETURNS DATA_TYPE
[WITH [ENCRYPTION] [,SCHEMABINDING] [,EXECUTE_AS_CLAUSE]]
AS
BEGIN
[SQL STATEMENTS]
RETURN SCALAR_EXPRESSION
END
ENCRYPTION --- PREVENTS USERS FROM VIEWING THE CODE IN THE FUNCTION
SCHEMABINDING ---BINDS THE FUNCTION TO THE DATABASE SCHEMA. THIS PREVENTS YOU FROM
DROPPING
OR ALTERING TABLES OR VIEWS THAT ARE USED BY THE FUNCTION
EXECUTE_AS_CLAUSE -- THIS OPTION SPECIFIES THE SECURITY CONTEXT UNDER WHICH THE
FUNCTION
IS EXECUTED
===================================================================
CREATE A UDF WHICH ACCEPTS TWO SCALAR INTEGER INPUT AND ONE CHAR INPUT WHICH SPECIFIES
THE
OPERATION TO BE PERFORMED. AND RETURNS THE RESULT OF THE OPERATION
ADDITION(A,B,OPERATION) --->
IF OPERATION = '+' ----> RETURN A + B
IF OPERATION = '-' ----> RETURN A - B
IF OPERATION = '*' ----> RETURN A * B
1. INLINE TABLE VALUED FUNCTION : IT RETURNS A TABLE BASED ON SINGLE SELECT STATEMENT
=================================
IN SQL SERVER WE CAN USE THESE FUNCTIONS TO ACHIVE THE FUNCTIONALITY OF PARAMETERIZED
VIEWS
THESE ARE LIKE VIEWS BUT WITH ABILITY TO ACCEPT THE PARAMETER.
IN INLINE TABLE -VALUED FUNCTION THE BODY OF THE FUNCTION WILL HAVE ONLY
A SINGLE SELECT STATEMENT.
==========================================================
CREATE A FUNCTION WHICH RETURNS DETAILS OF EMPLOYEE AS PER JOB AND DEPTNO SUPPLIED
==============================================================
28-06-2022
2. MULTISTATEMENT TABLE VALUED FUNCTION
SYNTAX:
CREATE A FUNCTION WHICH RETURNS A TABLE HAVING EMPNO AND EMPNAME FROM EMP1
TABLE CORRESPONDING TO DEPARTMENT NUMBER SUPPLIED BY USER.
=====================
INVOKING FUNCTION ---> SELECT * FROM DBO.FN_MERGED()
==========================================================================
3. FUNCTION CAN HAVE ONLY INPUT PARAMETERS SP CAN HAVE BOTH INPUT AND OUTPUT
PARAMETERS
4. FUNCTION CAN NOT MAKE CHANGES IN DB OBJECTS SP CAN MAKE CHANGES IN DB OBJECTS
FUNCTON CAN NOT ISSUE INSERT, UPDATE, DELETE SP CAN ISSUE INSERT, UPDATE DELETED
AGAINST DB OBJECTS
STATEMENTS AGAINST TABLES OR VIEWS IN DB
5.FUNCTIONS DOES NOT SUPPORT TRY/CATCH BLOCKS SP SUPPORT TRY CATCH BLOCK
7. A PROCEDURE CAN NOT BE CALLED FROM UDF A FUNCTION CAN BE CALLED FROM A
PROCEDURE
8. FUNCTION DOES NOT SUPPORT DEFERRED NAME SP SUPPORTS DEFERRED NAME RESOULTION
RESOLUTION
====================================================
DROPPING A FUNCTION:
TABLE VARIABLE:
=================
THE TABLE VARIABLE IS A SPECIAL TYPE OF THE LOCAL VARIABLE WHICH HELPS TO STORE
THE DATA TEMPORARILY SIMILAR TO TEMP TABLES IN SQL SERVER.
TRIGGERS:
=========
A TRIGGER IS A DATABASE OBJECT THAT IS "EXECUTED AUTOMATICALLY" WHEN AN EVENT OCCURS
IN DB.
A TRIGGER IS A SPECIAL TYPE OF STORED PROCEDURE THAT "AUTOMATICALLY EXECUTES" OR RUNS
WHEN
AN EVENT OCCURS IN DATABASE SERVER.
1. DML TRIGGERS: IT RUNS/FIRES WHEN A USER TRIES TO MODIFY DATA THROUGH A DML EVENT
LIKE
INSERT, UPDATE, DELETE ON A TABLE/VIEW.
2.DDL TRIGGERS: IT RUNS/FIRES IN RESPONSE TO DDL EVENTS LIKE CREATE, ALTER , DROP AND
SOME STORED PROCEDURES THAT PERFORMS DDL
3.LOGON TRIGGERS: IT FIRES/RUNS IN RESPONSE TO THE LOGON EVENT THAT IS RAISED WHEN A
USER SESSION IS ESTABLISHED.
DML TRIGGERS:
-----------
IT RUNS/FIRES WHEN A USER TRIES TO MODIFY DATA THROUGH A DML EVENT LIKE
INSERT, UPDATE, DELETE ON A TABLE/VIEW. UPDATE EMP1
=> IF THE TRIGGER IS AFTER TRIGGER THEN SQL SERVER EXECUTES THE TRIGGER AFTER
EXECUTING DML.
OBJECTIVE -- FIRE A TRIGGER WHEN EVER SOME BODY ISSUE A INSERT COMMAND ON EMP1 TABLE
STEPS:
1. CREATED A AFTER TRIGGER FOR INSERT COMMAND ON EMP1 -- TRIGGER SAVED IN DB
INSTEAD OF TRIGGER:
===================
IF THE TRIGGER IS INSTEAD OF TRIGGER, THEN SQL SERVER EXECUTES THE TRIGGER INSTEAD OF
EXECUTING DML.
OBJECTIVE --- WHEN EVER SOME BODY ISSUE A INSERT COMMAND ON EMP1 THEN INSTEAD OF
COMMAND ISSUED WE WANT SOME OTHER COMMANDS TO BE EXECUTED
=> CREATE A TRIGGER TO NOT TO ALLOW ANY DML ON EMP1 TABLE ON SUNDAY
CREATE TRIGGER T1
ON EMP1
AFTER INSERT, UPDATE, DELETE
AS
IF DATENAME(DW,GETDATE()) = 'SUNDAY'
BEGIN
ROLLBACK TRANSACTION
RAISERROR('ON SUNDAY IT IS NOT ALLOWED',15,1)
END
ON Msg 50000, Level 15, State 1, Procedure T1, Line 8 [Batch Start Line 11]
SUNDAY IT IS NOT ALLOWED
Msg 3609, Level 16, State 1, Line 12
The transaction ended in the trigger. The batch has been aborted.
CREATE TRIGGER T3
ON EMP510
AFTER UPDATE
AS
IF UPDATE(EMPNO)
BEGIN
ROLLBACK TRANSACTION
RAISERROR('EMPNO COLUMN CAN NOT BE UPDATED', 15,1)
END
===========================================================
MAGIC TABLES--- THESE ARE TEMPORARY LOGICAL TABLES WHICH ARE CREATED BY SQL SERVER
WHEN WE EXECUTE ANY DML COMMAND --INSERT, UPDATE , DELETE
1. INSERTED
2. DELETED
WITH IN THE TRIGGER, WE CAN REFER TO THESE TWO TABLES CREATED BY SQL SERVER.
1.INSERTED --> IT CONTAINS NEW ROWS FOR INSERT AND UPDATE OPERATIONS
2. DELETED---> CONTAINS ORIGINAL ROW FOR DELETE AND UPDATE OPERATIONS
==========================================================
CREATE A TRIGGER NOT TO ALLOW DECREMENT OF SALARY IN EMP511
CREATE TRIGGER T4
ON EMP511
AFTER UPDATE
AS
DECLARE @NEWSAL MONEY, @OLDSAL MONEY
SELECT @NEWSAL = SAL FROM INSERTED
SELECT @OLDSAL = SAL FROM DELETED
IF @NEWSAL < @OLDSAL
BEGIN
ROLLBACK TRANSACTION
RAISERROR('DECREMENT OF SALARY IS NOT ALLOWED', 15,1)
END
UPDATE EMP511 SET SAL = 3000 WHERE EMPNO = 1---> ERROR --Y IS NOT ALLOWED
==============================================================================
CREATE TRIGGER TO INSERT EMPLOYEE DETAILS INTO EMP_RESIGN TABLE WHENEVER EMPLOYEE
RESIGNS FROM ORGANIZATION.
EMP_RESIGN
CREATE TABLE EMP_RESIGN
(EMPNO INT,
ENAME VARCHAR(10),
DEPT VARCHAR(10),
SAL MONEY);
CREATE TRIGGER T5
ON EMP511
AFTER DELETE
AS
DECLARE @EMP INT, @ENME VARCHAR(10),@D VARCHAR(10),@SAL MONEY
SELECT @EMP = EMPNO,
@ENME = ENAME,
@D = DEPT,
@SAL = SAL FROM DELETED
INSERT INTO EMP_RESIGN VALUES(@EMP,@ENME,@D,@SAL)
=====================================================
=>IT ALLOWS YOU TO SKIP AN INSERT , UPDATE , DELETE STATEMENT ON TABLES OR VIEWS AND
EXECUTE
OTHER STATEMENTS DEFINED IN THE TRIGGER.
=> ORIGINAL INSERT, UPDATE, DELETE OPERATION DOES NOT OCCUR AT ALL.
=>The INSTEAD OF triggers are the DML triggers that are fired instead of the
triggering event such as the INSERT, UPDATE or DELETE events.
So, when you fire any DML statements such as Insert, Update, and Delete,
then on behalf of the DML statement, the instead of trigger is going to execute.
In real-time applications, Instead Of Triggers are used to correctly update a
complex view.
SET NOCOUNT ON
DELETE FROM TBLEMPLOYEE WHERE ID = 6
====================================================================================
------------------------------------------------------------------
INSERT INTO VWEMPLOYEEDETAILS VALUES(8, 'DANNY','MALE','IT') --->DATA SUCCESFULLY
INSERTED
============================================================================
DDL TRIGGERS:
===========
DDL TRIGGERS FIRE IN RESPONSE TO A VARIETY OF DDL EVENTS. CREATE, ALTER, DROP,GRANT,
DENY, REVOKE..EVEN CERTAIN STORED PROCEDURES THAT PERFORM DDL OPERATIONS.
WE CAN USE DDL TRIGGERS WHEN WE WANT TO DO THE FOLLOWING:
THE DDL TRIGGERS CAN BE CREATED IN A SPECIFIC DATABASE OR AT THE SERVER LEVEL.
IF WE SET THE SCOPE TO SERVER LEVELE THEN IT IS APPLIED TO ALL THE DATABASES OF
THAT SERVER.
=========================================================================
CREATE A TRIGGER THAT WILL RESTRICT CREATING A NEW TABLE ON SPECIFIC DATABASE
USE NARAYAN
GO
CREATE TRIGGER TR_TABLEPREV
ON DATABASE
FOR CREATE_TABLE
AS
PRINT 'YOU CAN NOT CREATE A TABLE ON THIS DATABASE'
ROLLBACK TRANSACTION
==================================
CREATE TABLE T450 (ID INT, NAME VARCHAR(10)) ---> ERROR
=====================================================
CREATE A TRIGGER THAT WILL RESTRICT ALTER OPERATIONS ON A SPECIFIC DATABASE
USE NARAYAN
GO
CREATE TRIGGER TR_ALTERPREV
ON DATABASE
FOR ALTER_TABLE
AS
PRINT 'YOU CAN NOT ALTER A TABLE ON THIS DATABASE'
ROLLBACK TRANSACTION
==================================
ALTER TABLE DEPT
ADD LASTNAME VARCHAR(10) ----ERROR
==========================================
CREATE A TRIGGER THAT WILL RESTRICT DROP OPERATIONS ON A SPECIFIC DATABASE
USE NARAYAN
GO
CREATE TRIGGER TR_DROPPREV
ON DATABASE
FOR DROP_TABLE
AS
PRINT 'YOU CAN NOT DROP A TABLE ON THIS DATABASE'
ROLLBACK TRANSACTION
=======================
DROP TABLE DEPT --- ERROR
==============================================
CREATE A TRIGGER WHICH PREVENTS USERS FROM CREATING, ALTERING, DROPING TABLES FROM
A SPECIFIC DATABASE USING SINGLE TRIGGER
USE NARAYAN
GO
CREATE TRIGGER TR_ANYMOD
ON DATABASE
FOR DROP_TABLE,CREATE_TABLE,ALTER_TABLE
AS
PRINT 'YOU CAN NOT RUN DDL COMMAND ON THIS DATABASE'
ROLLBACK TRANSACTION
===================================================
DROPPINNG THE DATABASE SCOPPED TRIGGERS
===================================
ENABLING THE DATABASE SCOPPED TRIGGERS
===============================================================
HOW TO CREATED SERVER SCOPPED TRIGGER
WHEN WE CREATE A SERVER SCOPPED DDL TRIGGER, THEN IT WILL BE FIRED IN RESPONSE TO
DDL EVENTS HAPPENING IN ALL OF THE DATABASES ON THAT PARTICULAR SERVER
=> CREATE TRIGGER FOR NOT ALLOWING CREATION, ALTERING AND DELETING ANY TABLE IN ALL OF
THE DATABASES IN SERVER
=======================================
DISABLE TRIGGER TR_SERVER ON ALL SERVER
ENABLE TRIGGER TR_SERVER ON ALL SERVER
DROP TRIGGER TR_SERVER ON ALL SERVER
===================================================================
04-07-2022
=> WHEN EVER SOME ONE ISSUES COMMAND CREATE TABLE, ALTER TABLE, DROP TABLES
WE WANT TO SAVE HIS INFORMATION --DATABASE NAME, TABLENAME, EVENTTYPE,LOGINNAME,
SQL COMMAND, AUDITDATETIME
=================================================================
LOGON TRIGGER:
SQL SERVER AUTOMATICALLY EXECUTES THE LOGON TRIGGERS ONCE A LOGON EVENT OCCURS.
IT GETS EXECUTED BEFORE A USER SESSION IS ESTABLISHED AND AUTHENTICATION IS
SUCCESFULL.
IF USER IS UNABLE TO AUTHENTICATE TO SQL SERVER( WRONG CREDENTIALS) SQL SERVER DOES
NOT
EXECUTE LOGON TRIGGER.
==> CREATE A TRIGGER TO RESTRICT TOTAL NUMBER OF SQL SERVER CONNECTIONS USING
LOGON TRIGGER
==================================================
DISABLE TRIGGER tr_LogonSessionRestriction ON ALL SERVER
ENABLE TRIGGER tr_LogonSessionRestriction ON ALL SERVER
DROP TRIGGER tr_LogonSessionRestriction ON ALL SERVER
05-07-2022
==============
===> LIMIT SESSION UPTO 2 ONLY FOR ALL USERS EXCEPT 'sa' USER
The following logon trigger will limit the maximum number of open connections for a
user to 2
except the sa user. That means the following logon trigger will limit the open
connections for
all Logins except the ‘sa’ user once the open connection limit is reached to 2,
then the user will
not be able to create a new connection. Instead, the user will get an error message.
================================================================================
ALTERING OF TRIGGERS
ALTER THE TRIGGER TO RESTRICT TOTAL NUMBER OF SQL SERVER CONNECTIONS NOT MORE THAN 5
USING LOGON TRIGGER
SET @STMT = 'SELECT '+ @COL1 + ',' + @COL2 + ' FROM ' + @TNAME
PRINT @STMT
=========
===================================
CREATE PROC P_D
@TABLE VARCHAR(50)
AS
DECLARE @CMD VARCHAR(200)
SET @CMD = 'SELECT * FROM ' + @TABLE
EXEC(@CMD)
----------------------------------------------------
=> SELECT * FROM SYS.TABLES WHERE NAME = 'EMP1' ---> GET OBJECT_ID OF EMP1---
>997578592
=> SELECT * FROM SYS.COLUMNS WHERE OBJECT_ID = 997578592 ---> COLUMNS OF EMP1 TABLE
=> COUNT OF NUMBER OF COLUMNS IN EMP1 TABLE
=>SELECT COUNT(*) AS NUMBER_COLS FROM SYS.COLUMNS WHERE OBJECT_ID = 997578592
====>
SELECT T.NAME AS TABLE_NAME, C.NAME AS COL_NAME FROM SYS.TABLES AS T
INNER JOIN
SYS.COLUMNS AS C
ON T.object_id = C.object_id
====>
SHOW TABLE NAMES AND NUMBER OF COLS IN EACH TABLE
TABLE NAME NUMBEROFCOLS
EMP1 9
ORDERS 5
=====================>
DATABASE SECURITY--->
======================>
CREATE NEW USER IN NARAYAN DB
USE [NARAYAN]
GO
CREATE USER [NARAYAN1] FOR LOGIN [NARAYAN]
GO
================================================================================
08-07-2022
----------
GRANT --SELECT PERMISSION ON EMP1 TO NARAYAN1
USE NARAYAN
GO
GRANT SELECT ON DBO.EMP1 TO NARAYAN1
USE NARAYAN
GO
GRANT DELETE ON DBO.EMP1 TO NARAYAN1
==========================================
REVOKE DELETE PERMISSION ON EMP1 FROM NARAYAN1
----------------------------
USE NARAYAN
GO
REVOKE DELETE ON DBO.EMP1 FROM NARAYAN1
-----------------------------------------------------------
NOW NARAYAN1 WILL BE ABLE TO INSERT DATA, UPDATE DATA AND DELETE DATA FROM EMP1
EXAMPLE:
USE NARAYAN
GO
UPDATE EMP1
SET MGR = 7900 WHERE ENAME = 'CLARK'
=============================================================================
REVOKE MULTIPLE PERMISSIONS BACK
USE NARAYAN
GO
REVOKE DELETE,UPDATE ON EMP1 FROM NARAYAN1
===========================================================================
GRANT PERMISSION TO CREATE A SCHEMA
----------------------------------------
USE NARAYAN
GO
GRANT CREATE SCHEMA TO NARAYAN1
==============================
CREATE TABLE HR.T100199(ID INT)
============================================