SQL Class Notes
SQL Class Notes
-------------
DATA
----
DATA IS INFORMATION SUCH AS FACTS, NUMBERS WHICH IS COLLECTED TOGETHER AND
STORED IN A SEPARATE PLACE
FOR FUTURE ANALYSIS/REPORTING PURPOSE TO MAKE DECIONS OF BUSINESS.
RDBMS
1. IT IS POSSIBLE TO CREATE THE RELATIONSHIPS B/W THE TABLES
2. IT SUPPORTS NORMALIZATION
3. MORETHAN ONE USER CAN CONNECT TO THE DATABASES AT A TIME
4. IT SUPPORTS HUGE OF VOLUMES DATA
5. RETRIVING THE DATA IS SLOW
6. MORE SECURITY
7. DATA CONSISTANT
-----------------------------------------------------------------------------------
------------------------
SQL SERVER
SQL
---
SQL IS A STRUCTURED QUERY LANGUAGE WHICH IS SPECIALLY DESIGNED TO COMMUNICATE
WITH THE DATABASE
QUERY
------
RETRIVING THE DATA FROM THE DATABASES IS AN QUERYING
@----------------------------------------------------------------------------------
------------------------------------------
Open any search engine & Google it as SQL Server Software Download and click on
1st link
(or) use the url: https://www.microsoft.com/en-in/sql-server/sql-server-downloads
Scroll down the web page and proceed with: SQL Server 2022 Developer -> Download
now (It's a full featured and free edition)
Then the SQL Server Executable File: SQL2022-SSEI-Dev.exe, will be downloaded.
Double click on SQL2022-SSEI-Dev.exe - It will ask (Do you want allow the app to
make changes to your devise) click on Yes.
License Terms -> then check[tick mark] for I accept the license terms and Privacy
Statement -> Next.
// Installation Type -> Perform a new installation of SQL server 2022 -> Next
Azure Extension for SQL Server -> Uncheck Azure Extension for SQL Server -> Next
Feature Selection -> Instance feature -> Check Database Engine Services -> Next
Instance Configuration -> Named instance -> Give what ever the Name you want, but
you must remember it ( Mine is RAJUSERVER ) -> Next.
Server Configuration -> Next -> (If we get warning msgs here for restarting the
Laptop. we have to restart the laptop at the end)
Database Engine Configuration -> Mixed Mode (OR Choice for Mixed Mode is: Windows
Authentication)
-> Give your own password (or System Password) -> Click on Add Current User -> Next
-->You Must Remember (User Name is "sa" for all SQL Server "system administration"
account) ie. Remember, User Name: sa & PassWord: *******
-----------------------------------------------------------------------------------
-----------
Open any search engine & Google it as SSMS Software Download and Click on 1st
link.
(or) https://learn.microsoft.com/en-us/ssms/install/install
Scroll down the web page and proceed with: Click on Download SSMS 21
Then the SSMS Executable File: vs_SSMS.exe, will be downloaded.
Double click on vs_SSMS.exe -> Click on Install -> It will ask (Do you want allow
the app to make changes to your devise) click on Yes.
Visual Studio installer -> Continue.
Workloads -> SSMS (4) -> Select 4 items -> click on Install.
Visual Studio Installer -> Installed -> SQL Server Management Studio 21 -> Close
the window.
-----------------------------------------------------------------------------------
----------
Go to Start bar Search Menu and type SSMS: Microsoft SQL Server Management Studio
will be available, just click on it.
You can pin it to the taskbar.
Open SSMS -> Browse -> Local -> Select Your LaptopName/Server Name (You have given)
-> Encrypt -> Optional -> Connect
-----------------------------------------------------------------------------------
-----------
Right click on Database -> New Database -> Give Database Name (Your wish) -> OK
-- 7). To load CSV Files data in the created a Database
------------------------------------------------------------------------
@----------------------------------------------------------------------------------
------------------------------------------------
4.TABLE NAME SHOULD BE UNIQUE (DUPLICATE TABLE NAMES ARE NOT ALLOWED WITH IN
THE DB)
-----------------------------------------------------------------------------------
-----------------
DATA TYPES
-----------
DATA TYPES WILL DESCRIBE WHAT TYPE OF DATA , THE COLUMN WILL HANDLE
1.INTEGER
------------
INTEGER DATA TYPE WILL ALLOWS THE WHOLE NUMBERS
1.TINY INT --> 1 BYTE (storage Range (signed): -128 to 127 or Range
(un-signed): 0 to 225)
2.SMALL INT --> 2 BYTES
3.INT --> 4 BYTES
4.BIG INT --> 8 BYTES
1.SMALL DATETIME --> 4 BYTES --> 1900 JAN 01 - 2079 DEC 31 --> HH:MM:SS:MS
2.DATETIME --> 8 BYTES --> 1753 JAN 01 - 9999 DEC 31 --> HH:MM:SS:MS
3.DATETIME2 --> 8 BYTES --> 0001 JAN 01 - 9999 DEC 31 --> HH:MM:SS:MS
4.DATE --> 8 BYTES --> 0001 JAN 01 - 9999 DEC 31
5.TIME --> HH:MM:SS:MS
@----------------------------------------------------------------------------------
--------------------------------------
-- Write a query to create a Table 'Emp' with Some Columns: ENo (Int), EName
(Char(15)), Sal (Money), DeptNo (Int)
SYNTAX: Create Table Emp (ENo Int, EName Varchar(15), Sal Money, DNo int)
-- Write a Query to Change the Datatype size of the Column 'EName' to 20.
Alter Table Emp Alter Column EName Varchar(20)
--ADD: Write a Query to ADD the Column 'Job' into the Emp Table.
-- Write a Query to Drop the Column 'Job' From the Emp Table.
Alter Table Emp Drop Column Job
-- Truncate Table: STRUCTER WILL BE AVAILABLE AND ALL THE ROWS IN THE TABLE WILL BE
ELIMINATED (NO ROLLBACK/UNDO AGAIN)
Truncate Table Empl
------------------------------------------------------------------------------
WHERE --> IF WE WANT TO FECTH / RETRIVE THE FILTERED DATA FROM THE TABLES
MEANS WE USE "WHERE"
-- Write a Query to see the 20th dept employees from Emp Table.
Select * from Emp where DNo=20
-- COPY THE DATA FROM ONE TABLE TO ANOTHER TABLE WITHOUT CREATING THE TABLE
SELECT * INTO EMPTAB FROM Emp
@----------------------------------------------------------------------------------
--------------------------------------
1.ARTHMETIC OPERATORS
------------------------
-- WRITE A QUERY TO SHOW PNAME WISE COST, SALES AND ADD THE TWO COLUMNS IN A COLUMN
ADDITION
-- WRITE A QUERY TO SHOW PNAME WISE COST, SALES AND SHOW DIFFERENCE BETWEEN THE TWO
COLUMNS IN A COLUMN DIFFERENCE
-- WRITE A QUERY TO SHOW PNAME WISE COST, SALES AND TO SHOW TOTALSALES FOR EACH
PRODUCT
-----------------------------------------------------------------------------------
------------------------
-----------------------2. COMPARISION OPEARATORS :--------------------------------
= --> EQUAL TO
<>,!= --> NOT EQUAL TO
> --> TO GET THE HIGHEST VALUES BASED ON THE CONDITION
< --> TO GET THE LEAST VALUES BASED ON THE CONDITION
>= --> GREATERTHAN OR EQUAL
<= --> LESSTHAN OR EQUAL TO
-----------------------------------------------------------------------------------
---
--1. EQUAL TO
-----------------------------------------------------------------------------------
------------------------
1.AND
2.OR
3.NOT
AND
----
IF BOTH THE CONDITIONS ARE TRUE THEN O/P IS TRUE
IF ANY ONE OF THE CONDITION IS FALSE THEN THE O/P IS ALSO FALSE
C1 C2 O/P
---------------------
T T T
F T F
T F F
F F F
2.OR
-----
IF ANY OF THE CONDITIONS IS TRUE THEN O/P IS TRUE
C1 C2 O/P
---------------------
T T T
F T T
T F T
F F F
3.NOT
------
C O/P
--------------
F T
T F
-- 1. AND OPERATOR
-- 2. OR OPERATOR
-- WRITE A QUERY TO TO SEE THE EMPLOYEES WHOSE DNO=20 OR JOB=SALESMAN
-- 3. NOT OPERATOR
-----------------------------------------------------------------------------------
------------------------
--------------------------------: 4.SET
OPERATORS :-----------------------------------------------
1.UNION
2.UNION ALL
3.INTERSECT
4.EXCEPT
-- WRITE A QUERY TO CREATE SCHOOL1 & SCHOOL2 TABLES WITH 2 COLUMNS CLASS & CHILDERN
-- 1.UNION --> IT WILL COMBINES THE TWO TABLES VERTICALLY & REMOVES THE DUPLICATE
VALUES B/W TWO TABLE
SELECT * FROM SCHOOL1 UNION SELECT * FROM SCHOOL2
-- 2.UNION ALL -->IT WILL COMBINES THE TWO TABLES VERTICALLY & IT DOESN'T REMOVES
THE DUPLICATE VALUES B/W TWO TABLE
SELECT * FROM SCHOOL1 UNION ALL SELECT * FROM SCHOOL2
-- 3.INTERSECT --> IT WILL SELECTS THE MATCHING RECORDS B/W TWO TABLES
SELECT * FROM SCHOOL1 INTERSECT SELECT * FROM SCHOOL2
-- 4.EXCEPT --> IT WILL FETECHS THE NON-MATCHING RECORDS FROM THE LEFT-SIDE TABLE
SELECT * FROM SCHOOL1 EXCEPT SELECT * FROM SCHOOL2
-----------------------------------------------------------------------------------
------------------------
--------------------------------------: 5.SPECIAL
OPERATORS :--------------------------------
1.IN OPERATOR: IN ALSO KNOWN AS OR LOGICAL OPERATOR, IF ANY ONE
CONDITION IS MATCHING IT GIVES THE O/P,
IT ALLOWS US TO PASS THE MULTIPLE FILTERS
AFTER WHERE CLAUSE
2.BETWEEN AND: IT IS USED TO FIND THE VALUES BASED ON THE RANGES /
CONDITIONS
3.LIKE: IT IS USED TO IMPLIMENT CONDITIONS LIKE BEFORE, AFTER & MIDDLE
4.IS NULL: TO FIND OUT THE NULL VALUES IN A TABLE/COLUMN
--1.IN OPERATOR
--1) WRITE A QUERY TO SEE THE EMPLOYEES WHOSE DNO=20 OR DNO=30 OR DNO=50
SELECT * FROM EMPLOYEES WHERE DNO IN (20, 30, 50)
--2) WRITE A QUERY TO SEE THE EMPLOYEES WHOSE DNO=20 OR DNO=30 OR DNO=50 AND
JOB=CLERK
SELECT * FROM EMPLOYEES WHERE DNO IN (20, 30, 50) AND JOB='CLERK'
--3) WRITE A QUERY TO SEE THE EMPLOYEES WHOSE DEPT=20 OR DEPT=30 OR DEPT=50 AND
JOB=CLERK AND ESAL>20000
SELECT * FROM EMPLOYEES WHERE DNO IN (20, 30, 50) AND JOB='CLERK' AND ESAL>20000
-- 2.BETWEEN AND
--1) WRITE A QUERY TO SEE THE EMPLOYEES WHOSE SALARY BETWEEN 20000 & 50000
SELECT * FROM EMPLOYEES WHERE ESAL BETWEEN 25000 AND 50000
--2) WRITE A QUERY TO SEE THE EMPLOYEES WHOSE SALARY IS NOT BETWEEN 20000 & 50000
SELECT * FROM EMPLOYEES WHERE ESAL NOT BETWEEN 25000 AND 50000
--3) WRITE A QUERY TO SEE THE EMPLOYEES WHOSE JOB=ANALYST AND SALARY BETWEEN 20000
& 50000
SELECT * FROM EMPLOYEES WHERE JOB='ANALYST' AND ESAL BETWEEN 25000 AND 50000
--4) WRITE A QUERY TO SEE THE EMPLOYEES WHOSE HIREDATE BETWEEN 01/02/2020 AND
31/05/2020 (DD-MM-YYYY IS NOT ALLOWED)
SELECT * FROM EMPLOYEES WHERE HIREDATE BETWEEN '2020-02-01' AND '2020-05-31'
--1) WRITE A QUERY TO GET EMP DETAILS WHOSE NAME STARTS WITH 'N'
SELECT * FROM EMPLOYEES WHERE ENAME LIKE 'N%'
--2) WRITE A QUERY TO GET EMP DETAILS WHOSE NAME ENDS WITH 'U'
SELECT * FROM EMPLOYEES WHERE ENAME LIKE '%U'
--3) WRITE A QUERY TO GET EMP DETAILS WHOSE NAME HAS 'AR'
SELECT * FROM EMPLOYEES WHERE ENAME LIKE '%AR%'
--4) WRITE A QUERY TO GET EMP DETAILS WHOSE NAME HAS 'A' IN THE SECOND POSITION
SELECT * FROM EMPLOYEES WHERE ENAME LIKE '_A%'
--5) WRITE A QUERY TO GET EMP DETAILS WHOSE NAME STARTS WITH 'S' AND HAS ATLEAST
TWO CHARACTERS
SELECT * FROM EMPLOYEES WHERE ENAME LIKE 'S%__'
--6) WRITE A QUERY TO GET EMP DETAILS WHOSE NAME STARTS WITH 'S' AND HAS ATLEAST
SIX CHARACTERS
SELECT * FROM EMPLOYEES WHERE ENAME LIKE 'S%_____'
--7) WRITE A QUERY TO GET EMP DETAILS WHOSE NAME STARTS WITH 'S' AND ENDS WITH 'H'
SELECT * FROM EMPLOYEES WHERE ENAME LIKE 'S%H'
-- 4.IS NULL
--1) WRITE A QUERY TO FIND OUT THE NULL VALUES IN A COMM COLUMN OF EMPLOYEES
SELECT * FROM EMPLOYEES WHERE COMM IS NULL
--2) WRITE A QUERY TO FIND OUT NO NULL VALUES IN A COMM COLUMN OF EMPLOYEES
SELECT * FROM EMPLOYEES WHERE COMM IS NOT NULL
--3) WRITE A QUERY TO FIND OUT THE NULL VALUES IN A COMM COLUMN AND SAL>30000 OF
EMPLOYEES
SELECT * FROM EMPLOYEES WHERE COMM IS NULL AND ESAL>30000
@----------------------------------------------------------------------------------
--------------------------------------
FUNCTIONS
----------
1.SYSTEM DEFINED FUNCTIONS
---------------------------
THESE FUNCTIONS ARE DEFINED BY THE MS SQL SERVER
IT IS NOT POSSIBLE TO MODIFY THE SYSTEM DEFINED FUNCTIONS
1.SINGLE-ROW FUNCTION
----------------------
IT WILL GIVES SINGLE O/P FOR EACH AND EVERY ROW IN A TABLE
DAY (date or datetime) Returns the day of the week for a given
date Integer like 1 - 31
MONTH (date or datetime) Returns the month of a given date
Integer like 1 - 12
YEAR (date or datetime) Returns the year of a given date
Integer for year like 2021
DATEPART (date part, date or datetime) Returns the date part specified in
int format Integer like 1 – 12 for month, 1–31 for day, or yearlike 2021
DATENAME (date part, date or datetime) Returns the date part specified in
character format Character like April, May, ‘1’, ‘2’, ‘31’, ‘2020’, ‘2021’
EOMONTH (date [,months to add) Returns the last day of the month
with optional parameters to add months(+ or -)
DATEADD (date part, units, date or datetime) Return date math results
datetime
DATEDIFF (date part, start date, end date) Give the difference between 2 dates
in units specified by date part Integer of date part units
CONVERT (date type, value [ , style ] Used to convert date output to a
specified mask Typically, a character datatype is specified when converting
dates. FORMAT ( value, format [, culture ] ) Used to convert date
output to a specified mask Returns a date formatted string based on the mask
specified.
SS -->SECONDS */
-- GETDATE(): TO GET SYSTEM DATE AND TIME
-- DAY(): TO GET THE DAY OF THE DATE
-- MONTH(): TO GET THE MONTH NUMBER
-- YEAR(): TO GET THE YEAR NUMBER
-- DATEPART(): IT IS USED TO GET DATE PARTITION ON NUMBER BASED
-- DATENAME(): IT IS USED TO GET DATE PARTITION ON TEXT BASED
-- DATEDIFF(): IT IS USED TO FIND THE DIFFERENCE B/W TWO DATES
-- DATEADD(): IT USED TO PLUS OR MINUS OF DAYS, MONTHS, YEARS FOR A DATE COLUMN
-- EOMONTH(): IT IS USED TO GET ENDOFDAY PLUS OR MINUS FOR A DATE COLUMN
-- THESE FUNCTIONS ARE USED TO CONVERT ONE TYPE OF DATA INTO OTHER TYPE OF DATA
-- CAST() --> CONVERTS A VALUE OF ANY TYPE INTO SPECIFIED DATA TYPE
-- CONVERT() --> IT IS ALSO USED TO CONVERT ONE DATA TYPE TO ANOTHER DATA TYPE
----------------------------------------------------------------------------
2.COLUMN/GROUP/AGGREGATE FUNCTION
-----------------------------------
THESE FUNCTIONS ARE USED TO GET AGGREGATED DATA AND GIVES SINGLE O/P FOR
SINGLE COLUMN
5.COUNT(*) --> TO GET THE COUNT THE NO.OF RECORDS IN THE TABLE
-----------------------------------------------------------------------------------
------
USE FUNCTIONS
-- WRITE A QUERY TO SEE ENAME AND IT'S LENGHT AS ENAMELENGTH FROM EMP
SELECT ENAME, LEN(ENAME) AS ENAMELENGTH FROM EMP
-- WRITE A QUERY TO SEE ENAME AND CONVERT IT TO UPPERCASE AS ENAMEUPPER FROM EMP
SELECT ENAME, UPPER(ENAME) AS ENAMEUPPER FROM EMP
-- WRITE A QUERY TO SEE JOB AND CONVERT IT TO LOWERCASE AS JOBLOWER FROM EMP
SELECT JOB, LOWER(JOB) AS ENAMEUPPER FROM EMP
-- WRITE A QUERY TO SHOW THE POSITION OF THE CHAR 'R' OF ENAME FROM EMP.
SELECT ENAME, CHARINDEX('R', ENAME) AS RINDEX FROM EMP
-- WRITE A QUERY TO GET ENDOFMONTH, END DAY OF PM, END DAY OF NEXT MONTH.
SELECT EOMONTH(GETDATE())
SELECT EOMONTH(GETDATE(), -1)
SELECT EOMONTH(GETDATE(), 1)
-------------------------------: 2. COLUMN/GROUP/AGGREGATE
FUNCTION :--------------------------------------
-- WRITE A QUERY TO GET THE COUNT OF RECORDS FROM COMM COLUMN OF EMP TABLE
SELECT COUNT(COMM) FROM EMP
-----------------------------------------------------------------------------------
-----------------------------
SPECIAL CLAUSES
---------------
--------1. GROUP BY
-- WRITE A QUERY TO GET DNO WISE MAX SAL FROM THE EMP TABLE
SELECT DNO, MAX(ESALARY) AS MAXSAL FROM EMP GROUP BY DNO
-- WRITE A QUERY TO GET DNO WISE MIN SAL FROM THE EMP TABLE
SELECT DNO, MIN(ESALARY) AS MINSAL FROM EMP GROUP BY DNO
-- WRITE A QUERY TO GET DNO WISE SUM SAL FROM THE EMP TABLE
SELECT DNO, SUM(ESALARY) AS TOTALSAL FROM EMP GROUP BY DNO
-- WRITE A QUERY TO GET DNO WISE COUNT OF EMP FROM THE EMP TABLE
SELECT DNO, COUNT(*) AS COUNTS FROM EMP GROUP BY DNO
-- WRITE A QUERY TO GET DNO WISE AVG SAL FROM THE EMP TABLE
SELECT DNO, AVG(ESALARY) AS AVGSAL FROM EMP GROUP BY DNO
-- WRITE A QUERY TO GET JOB WISE SUM SAL FROM THE EMP TABLE
SELECT JOB, SUM(ESALARY) AS SUMOFSAL FROM EMP GROUP BY JOB
-- WRITE A QUERY TO GET JOB WISE MAX SAL FROM THE EMP TABLE
SELECT JOB, MAX(ESALARY) AS MAXSAL FROM EMP GROUP BY JOB
-- WRITE A QUERY TO GET DNO WISE MAX SAL, COUNT FROM THE EMP TABLE
SELECT DNO, MAX(ESALARY) AS MAXSAL, COUNT(*) AS COUNTS FROM EMP GROUP BY DNO
-- WRITE A QUERY TO GET DNO, JOB WISE MAX SAL, COUNT FROM THE EMP TABLE
SELECT DNO, JOB,MAX(ESALARY) AS MAXSAL, COUNT(*) AS COUNTS FROM EMP GROUP BY
DNO,JOB
--------2. HAVING
-- WRITE A QUERY TO GET DNO WISE SUM SAL WHICH IS >200000 FROM THE EMP TABLE
SELECT DNO,SUM(ESALARY) AS TOTALSAL FROM EMP GROUP BY DNO HAVING
SUM(ESALARY)>200000
-- WRITE A QUERY TO GET DNO WISE SUM SAL WHICH IS <200000 FROM THE EMP TABLE
SELECT DNO, SUM(ESALARY) AS TOTALSAL FROM EMP GROUP BY DNO HAVING
SUM(ESALARY)<200000
--------3. ORDER BY
-- WRITE A QUERY TO SEE EMP DATA IN ASCENDING ORDER BY ESALARY
SELECT * FROM EMP ORDER BY ESALARY
-- WRITE A QUERY TO GET DNO, JOB WISE COUNTS, MAX SAL FROM THE EMP TABLE IN ASC BY
DNO
SELECT DNO, JOB, COUNT(DNO) AS COUNTS, MAX(ESALARY) AS MAXSAL FROM EMP GROUP BY
DNO, JOB ORDER BY DNO
--------4. DISTINCT :
-- WRITE A QUERY TO SEE EMP DATA
SELECT * FROM EMP
-- WRITE A QUERY TO GET COUNTRY WISE TOTAL SAL WITH GRAND TOTAL VALUE
SELECT COUNTRY, SUM(ESALARY) AS TOTSAL FROM EMP GROUP BY COUNTRY WITH ROLLUP
-- WRITE A QUERY TO GET COUNTRY WISE TOTAL SAL WITH GRAND TOTAL NAME UNDER COUNTRY
COL
SELECT COALESCE(COUNTRY, 'GRAND TOTAL') AS COUNTRY, SUM(ESALARY) AS TOTALSAL FROM
EMP GROUP BY COUNTRY WITH ROLLUP
-- WRITE A QUERY TO GET COUNTRY, GENDER WISE TOTAL SAL WITH GRAND TOTAL VALUE
SELECT COUNTRY, GENDER, SUM(ESALARY) AS TOTSAL FROM EMP GROUP BY COUNTRY, GENDER
WITH ROLLUP
-- WRITE A QUERY TO GET GENDER, COUNTRY WISE TOTAL SAL WITH GRAND TOTAL VALUE
SELECT GENDER, COUNTRY, SUM(ESALARY) AS TOTSAL FROM EMP GROUP BY GENDER, COUNTRY
WITH ROLLUP
-----------------------------------------------------------------------------------
-----
RANKING FUNCTIONS
-----------------
1. ROW_NUMBER()
2. RANK()
3. DENSE_RANK()
/* RANKING FUNCTIONS --> TO ASSIGN THE RANK FOR EACH ROW AND FOR GROUP OF ROWS
I) ROW_NUMBER()
2) RANK()
3) DENSE RANK()
--ROW_NUMBER()
--UNIQUE (NO DUPLICATES)
-- WRITE A QUERY TO GIVE INDIVIDUAL RANKINGS FOR EACH ENAME BASED ON SALARY
SELECT *, ROW_NUMBER() OVER(ORDER BY SALARY) AS RANKS FROM RANKING
--RANK()
--DUPLICATES ARE ALLOWED AND GAPS ARE ALLOWED
-- WRITE A QUERY TO GIVE RANKINGS FOR EACH ENAME BASED ON SALARY by SAME RANK FOR
SAME SALARY
SELECT *, RANK() OVER( ORDER BY SALARY DESC) AS RANKS FROM RANKING -- GAPES ARE
CREATED
-- DENSE_RANK()
-- WITHOUT GAPS CONTINOUS RANKS ARE GENERATED
SELECT *, DENSE_RANK() OVER( ORDER BY SALARY DESC) AS RANKS FROM RANKING
-- PARTITION BY
-- IT IS USED TO GET THE RANKS BASED ON GROUP OF ROWS
SELECT *, DENSE_RANK() OVER(PARTITION BY DNO ORDER BY SALARY DESC) AS RANKS FROM
RANKING
SELECT * FROM
(SELECT *, DENSE_RANK() OVER (ORDER BY SALARY DESC) AS EMP_RANK FROM RANKING) AS
RANKEDEMP
WHERE EMP_RANK=3
(OR)
-----------------------------------------------------------------------------------
-------------
@----------------------------------------------------------------------------------
--------------------------------------
CONSTRAINTS
------------
CONSTRAINTS ARE THE CONDITIONS ON A TABLE NOT TO ENTER THE DUMMY VALUES
(INVALIED VALUES IN TO THE RECORDS)
TYPES OF CONSTRAINTS
---------------------
1.DOMAIN
2.ENTITY
3.REFERENTIAL
1.DOMAIN
-----------
Check --> IT CHECKS THE VALUES UNDER THE COLUMNS BASED ON THE CONDITIONS
Not null --> IT DOESN'T ALLOW NULL VALUES IN TO THE COLUMNS
Default --> IT IS USED TO GIVE THE DEFAULT ADDRESS
2.ENTITY
----------
1.PRIMARY KEY --> NO NULL , NO DUPLICATES (ONE P.K FOR ONE TABLE)
2.UNIQUE KEY --> ONE NULL , NO DUPLICATES (N UNIQUE KEYS IN A TABLE)
3.COMPOSITE KEY --> TO ASSIGN THE P.K FOR MULTIPLE COLUMNS IN A TABLE
3.REFERENTIAL
--------------
1.FOREIGN KEY --> TO MAKE THE RELATIONSHIP B/W THE TWO TABLES
2.SELF-REFERENTITAL KEY --> TO MAKE THE RELATIONSHIP B/W THE TWO COLUMNS IN A
TABLE
----------------------------------------------------------------------------
USE CONSTRAINTS
---------------------------------------------------------------------
-- PRIMARY KEY
CREATE TABLE EMP1(EID INT PRIMARY KEY,ENAME VARCHAR(20) UNIQUE)
-- UNIQUE KEY
CREATE TABLE EMP2(EID INT UNIQUE,ENAME VARCHAR(20) NOT NULL)
-- COMPOSITE KEY
JOINS
-----
JOINS ARE USED TO RETRIEVE THE DATA FROM MORE THAN ONE TABLE BASED ON THE
COMMON COLUMN
RULES
------
1.COMMON COLUMN B/W THE TWO TABLES
2.DATATYPE OF THE COLUMN SHOULD BE SAME
3.VALUES UNDER THE COLUMNS MUST AND SHOULD BE SAME
4.MUST AND SHOULD HAVE THE P.K & F.K
TYPES OF JOINS
----------------
1.INNER JOIN --> INNER JOIN IS USED TO GET THE MATCHING RECORDS /
COMMON RECORDS B/W TWO TABLES
3.RIGHT-OUTER JOIN --> (INNER JOIN) + NON-MATC HING RECORDS FROM THE
RIGHT-SIDE TABLES
5.CROSS JOIN --> PRODUCT OF TWO TABLES (NO NEED HAVE THE COMMON COLUMN
B/W TWO TABLES)
-----------------------------------------------------------------------------------
-----
1.INNER JOIN --> INNER JOIN IS USED TO GET THE MATCHING RECORDS / COMMON RECORDS
B/W TWO TABLES
EMP DEPT
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
2.LEFT-OUTER JOIN --> (INNER JOIN) + NON-MATCHING RECORDS FROM THE LEFT-SIDE TABLES
EMP DEPT
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
------------
3.RIGHT-OUTER JOIN --> (INNER JOIN) + NON-MATCHING RECORDS FROM THE RIGHT-SIDE
TABLES
EMP DEPT
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
EMP DEPT
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
-----------------------------------------------------------------------------------
------------
5.CROSS JOIN --> PRODUCT OF TWO TABLES - ALL COMBINATIONS OF DATA (NO NEED HAVE THE
COMMON COLUMN B/W TWO TABLES)
EX:- 4*3=12
EMP DEPT
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC
-----------------------------------------------------------------------------------
-------
SELF JOIN
-----------
JOINING THE TABLE BY ITSELF IS KNOWN AS SELF-JOINS
USE JOINS
--1) WRITE A QUERY TO GET MATCHING RECORDS FROM BOTH THE TABLES
SELECT * FROM EMPLOYEES INNER JOIN DEPT ON EMPLOYEES.DNO = DEPT.DNO
--2) WRITE A QUERY TO GET MATCHING RECORDS FROM BOTH THE TABLES AND ALSO THE
--NON-MATCH RECORDS FROM LEFT SIDE TABLE
SELECT * FROM EMPLOYEES LEFT OUTER JOIN DEPT ON EMPLOYEES.DNO = DEPT.DNO
-- WRITE A QUERY TO GET THE DNO DETAILS WHERE EVEN ONE EMP IS NOT WORKING UNDER ANY
DEPT DNO
SELECT * FROM EMPLOYEES LEFT OUTER JOIN DEPT ON DEPT.DNO = EMPLOYEES.DNO WHERE
EMPLOYEES.DNO IS NULL
--3) WRITE A QUERY TO GET MATCHING RECORDS FROM BOTH THE TABLES AND ALSO THE
-- NON-MATCH RECORDS FROM RIGHT SIDE TABLE
SELECT * FROM EMPLOYEES RIGHT OUTER JOIN DEPT ON DEPT.DNO=EMPLOYEES.DNO
-- WRITE A QUERY TO GET THE DEPT DETAILS WHO IS NOT WORKING UNDER ANY ONE OF THE
DNO
SELECT * FROM EMPLOYEES RIGHT OUTER JOIN DEPT ON DEPT.DNO=EMPLOYEES.DNO WHERE
EMPLOYEES.DNO IS NULL
--4) WRITE A QUERY TO GET MATCHING RECORDS FROM BOTH THE TABLES AND ALSO THE
-- NON-MATCH RECORDS FROM BOTH SIDE TABLE
SELECT * FROM EMPLOYEES FULL OUTER JOIN DEPT ON DEPT.DNO=EMPLOYEES.DNO
-- CROSS JOIN
-- SELF JOIN
/*JOIN OPTIONS
MERGE : USED TO JOIN BIG TABES. TABLES WITH MORE THAN 100m
ROWS
LOOP : USED TO JOIN SMALL TABLES. TABLES WITH LESS THAN 100m
ROWS
HASH : USED TO JOIN HEAP TABLES. TABLES WITHOUT PRIMARY KEY
OR CLUSTERED INDEX */
--
@----------------------------------------------------------------------------------
--------------------------------------------
VIEWS
------
ADVANTAGES
------------
1.HIDE THE BASE TABLES DATA
2.COLUMN LEVEL SECURITY
3.ROW LEVEL SECURITY
TYPES OF VIEWS
-----------------
1.SIMPLE VIEW
---------------
CREATING A VIEW ON A SINGLE TABLE IS KNOWN AS SIMPLE VIEW
2.COMPLEX VIEW
----------------
CREATING A VIEW ON MORE THAN ONE TABLE IS KNOWN AS COMPLEX VIEW
USE VIEWSS
-- DROP TABLE EMP
-- SIMPLE VIEW
-- WRITE A QUERY TO CREATE VIEW V3 TO GET ALL EMP DETAILS WHERE DNO=10
-- THIS IS ALSO KNOWN AS "ROW LEVEL SECURITY"
CREATE VIEW V3
AS
SELECT * FROM EMP WHERE DNO=10
-- CREATE A VIEW V4 TO SELECT ENO, ENAME, SAL, DNO WHERE DNO=10 AND SAL>=20000 FROM
EMP TABLE
-- THIS VIEW IS ALSO KNOWN AS BOTH ROW-LEVEL AND COLUMN LEVEL SECURITY
CREATE VIEW V4
AS
SELECT EID, ENAME, SAL, DNO FROM EMP WHERE DNO=10 AND SAL>=20000
-- WRITE A QUERIES TO SEE THE DATA UNDER THE VIEW V1 & EMP TABLE.
SELECT * FROM V1
SELECT * FROM EMP
-- UPDATE
-- WRITE A QUERY TO UPDATE EID=112 WHERE EID=1002 FROM THE VIEW V1
UPDATE V1 SET EID=112 WHERE EID=1002
-- DELETE
-- WRITE A QUERY TO DELETE A RECORD WHERE EID=112 FROM THE VIEW V1
DELETE FROM V1 WHERE EID=112
-- COMPLEX VIEW
-- INSERT RULE --
-- WRITE A QUERY TO INSERT VALUES(1001,'AA',12000) INTO THE VIEW 'COMVIEW' -- NOT
ALLOWED
INSERT INTO COMVIEW VALUES(1001,'AA',12000)
-- UPDATE RULE --
-- WRITE A QUERY TO UPDATE ESALARY=12000 WHERE EID=101 INTO THE VIEW 'COMVIEW' --
NOT ALLOWED
UPDATE COMVIEW SET ESALARY=12000 WHERE EID=101
-- DELETE RULE --
-- WRITE A QUERY TO DELETE A RECORD FROM COMVIEW WHERE EID=101 -- NOT ALLOWED
DELETE FROM COMVIEW WHERE EID=101
--------------------------------------------------------------------------------
-- WRITE QUERIES TO SEE THE DATA UNDER EMP & DEPT1 TABLES
SELECT * FROM EMP
SELECT * FROM DEPT
-- WRITE A QUERY TO FETCH ENAME, JOB, SAL, DNO, DNAME OF EMP & DEPT1 TABLES AS
MATCHING
SELECT ENAME, JOB, SAL, EMP.DNO, DNAME FROM EMP INNER JOIN DEPT ON
EMP.DNO=DEPT.DNO
-- DELETE RULE --
-- WRITE A QUERY TO DELETE A RECORD FROM COMPLEXVIEW1 WHERE DNO=10 -- NOT ALLOWED
DELETE FROM COMPLEXVIEW1 WHERE DNO=10 -- NOT ALLOWED
-- UPDATE RULE --
-- WRITE A QUERY TO UPDATE DNO=60 WHERE DNAME='A/C' INTO THE VIEW 'COMPLEXVIEW1' --
NOT ALLOWED
UPDATE COMPLEXVIEW1 SET DNO=60 WHERE DNAME='A/C' -- ALLOWS
@----------------------------------------------------------------------------------
---------------------------
SELECT(--------------SELECT(---------)
CREATE TABLE EMP(ENUM INT UNIQUE,ENAME VARCHAR(20) NOT NULL,JOB VARCHAR(20) NOT
NULL,
HIREDATE DATE,SAL INT,DNO INT FOREIGN KEY REFERENCES
DEPT(DNO))
INSERT INTO EMP VALUES(101,'RAJU','TRAINE','2020-02-12',50000,10)
INSERT INTO EMP VALUES(102,'VIJAY','DEV','2020-02-12',30000,10)
INSERT INTO EMP VALUES(103,'SHEWAG','PRESIDENT','2005-02-12',60000,30)
INSERT INTO EMP VALUES(104,'KOHLI','DEV','2020-03-12',40000,20)
INSERT INTO EMP VALUES(105,'WARNER','SLAESMAN','2021-02-12',25000,20)
INSERT INTO EMP VALUES(106,'SMITH','CLERK','2021-10-12',35000,20)
INSERT INTO EMP VALUES(107,'VENKY','ANALIYST','2021-02-12',25000,30)
INSERT INTO EMP VALUES(108,'STARC','SLAESMAN','2021-02-12',25000,10)
INSERT INTO EMP VALUES(109,'FINCH','CLERK','2021-02-12',12000,10)
INSERT INTO EMP VALUES(110,'PANDYA','ANALYTS','2000-02-12',25000,30)
INSERT INTO EMP VALUES(111,'MAXWELL','CLERK','2000-02-12',10000,10)
--2) WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS ABOVE AVG SAL OF DNO=10?
-- WRITE A QUERY TO SHOW DNO WISE AVG SAL FROM EMP TABLE.
SELECT DNO, AVG(SAL) AS AVGSAL FROM EMP GROUP BY DNO
SELECT * FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP WHERE DNO=10)
--3) WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS BELOW AVG SAL OF DNO=10
SELECT * FROM EMP WHERE SAL<(SELECT AVG(SAL) FROM EMP WHERE DNO=10)
--4) WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS BELOW THE AVG SAL OF 10TH DEPT
AND THOSE ARE FROM DNO=10
SELECT * FROM EMP WHERE SAL<(SELECT AVG(SAL) FROM EMP WHERE DNO=10) AND
DNO=10
--5) WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS GREATERTHAN OR EQUAL TO MAX SAL
OF DNO=20
-- WRITE A QUERY TO SHOW DEPT WISE AVG SAL FROM EMP TABLE.
SELECT DNO, MAX(SAL) AS MAXSAL FROM EMP GROUP BY DNO
SELECT * FROM EMP WHERE SAL>=(SELECT MAX(SAL) FROM EMP WHERE DNO=20)
--6)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS LESSTHAN TO MAX SAL OF 20TH DEPT
SELECT * FROM EMP WHERE SAL<(SELECT MAX(SAL) FROM EMP WHERE DNO=20)
--7)WRITE A QUERY TO GET EMP DETAILS WHO ARE NOT WORKING IN SMITH'S DNO?
SELECT * FROM EMP WHERE DNO!=(SELECT DNO FROM EMP WHERE ENAME='SMITH') ORDER
BY DNO
--8) WRITE A QUERY TO GET EMP DETAILS WHO ARE WORKING IN HR'S DNO
SELECT * FROM EMP WHERE DNO=(SELECT DNO FROM DEPT WHERE DNAME='HR')
--9) WRITE A QUERY TO GET EMP DETAILS WHO ARE NOT WORKING IN HR'S DNO
SELECT * FROM EMP WHERE DNO!=(SELECT DNO FROM DEPT WHERE DNAME='HR')
-- IN OPERATOR
--1) WRITE A QUERY TO GET EMP DETAILS WHOSE EMP SAL MATCH WITH DNO=20 EMP SAL
SELECT * FROM EMP WHERE SAL IN (SELECT SAL FROM EMP WHERE DNO=20)
--2) WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS NOT MATCH WITH DNO=20 EMP SAL
SELECT * FROM EMP WHERE SAL NOT IN(SELECT SAL FROM EMP WHERE DNO=20)
--3) WRITE A QUERY TO GET ENUM, ENAME, JOB, SAL, DNO FROM EMP, WHO ARE WORKING IN
EITHER 'HR' OR 'SALES' DNAME FROM DEPT
SELECT ENUM, ENAME, JOB, SAL, DNO FROM EMP WHERE DNO IN (SELECT DNO FROM DEPT
WHERE DNAME='HR' OR DNAME='SALES')
--1)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS GREATER THAN "ANY" ONE OF DNO=20
EMP SAL
SELECT * FROM EMP WHERE SAL > ANY (SELECT SAL FROM EMP WHERE DNO=20)
--2)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS GREATER THAN OR EQUAL TO "ANY"
ONE OF DNO=20 EMP SAL
SELECT * FROM EMP WHERE SAL >= ANY (SELECT SAL FROM EMP WHERE DNO=20)
--3)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS LESS THAN "ANY" ONE OF DNO=20 EMP
SAL
SELECT * FROM EMP WHERE SAL < ANY (SELECT SAL FROM EMP WHERE DNO=20)
--4)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS LESS THAN OR EQUAL "ANY" ONE OF
DNO=20 EMP SAL
SELECT * FROM EMP WHERE SAL <= ANY (SELECT SAL FROM EMP WHERE DNO=20)
--1)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS GREATER THAN "ALL" EMP SALARIES
OF DNO=20
SELECT * FROM EMP WHERE SAL > ALL (SELECT SAL FROM EMP WHERE DNO=20)
--2)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS GREATER THAN OR EQUAL TO "ALL"
EMP SALARIES OF DNO=20
SELECT * FROM EMP WHERE SAL >= ALL (SELECT SAL FROM EMP WHERE DNO=20)
--3)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS LESS THAN "ALL" EMP SAL OF DNO=20
SELECT * FROM EMP WHERE SAL < ALL (SELECT SAL FROM EMP WHERE DNO=20)
--4)WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS LESS THAN OR EQUAL TO "ALL" EMP
SAL OF DNO=20
SELECT * FROM EMP WHERE SAL <= ALL (SELECT SAL FROM EMP WHERE DNO=20)
-- EXISTS OPERATOR
--1) WRITE A QUERY TO GET EMP DETAILS WHO IS WORKING IN ATLEAST ONE DNO
SELECT * FROM EMP WHERE EXISTS (SELECT DNO FROM DEPT WHERE EMP.DNO=DEPT.DNO)
--2) WRITE A QUERY TO GET EMP DETAILS WHO IS WORKING IN ATLEAST ONE DNO AND
JOB='DEV'
SELECT * FROM EMP WHERE EXISTS (SELECT DNO FROM DEPT WHERE EMP.DNO=DEPT.DNO
AND JOB='DEV')
--3) WRITE A QUERY TO GET DNO DETAILS WHERE EVEN ONE EMP IS NOT WORKING IN THE DEPT
SELECT * FROM DEPT WHERE NOT EXISTS (SELECT * FROM EMP WHERE
EMP.DNO=DEPT.DNO)
-- DML SUB-QURIES
CREATE TABLE EMP1(ENUM INT UNIQUE, ENAME VARCHAR(20) NOT NULL, SAL INT, DNO INT)
INSERT INTO EMP1 VALUES(1,'A',10000,10)
INSERT INTO EMP1 VALUES(2,'B',20000,20)
INSERT INTO EMP1 VALUES(3,'C',8000,30)
INSERT INTO EMP1 VALUES(4,'D',9000,40)
INSERT INTO EMP1 VALUES(5,'E',12000,20)
-- UPDATE
-- 1)WRITE A QUERY TO UPDATE EMP 'A' SAL WITH MIN SAL IN THE EMP1 TABLE
UPDATE EMP1 SET SAL=(SELECT MIN(SAL) FROM EMP1) WHERE ENAME='A'
-- 2)WRITE A QUERY TO UPDATE EMP 'A' DNO WITH 'C' DNO IN THE EMP1 TABLE
UPDATE EMP1 SET DNO=(SELECT DNO FROM EMP1 WHERE ENAME='C') WHERE ENAME='A'
-- DELETE
--1)WRITE A QUERY TO DELETE A EMP WHO HAS MIN SAL FROM EMP1
DELETE FROM EMP1 WHERE SAL=(SELECT MIN(SAL) FROM EMP1)
-- INSERT
-- TO INSERT THE DATA INTO THE TABLE WE NEED TO HAVE THE TWO TABLES
CREATE TABLE MANAGERS(ENUM INT UNIQUE,ENAME VARCHAR(20) NOT NULL,JOB VARCHAR(20)
NOT NULL,
HIREDATE DATE,SAL INT,DNO INT FOREIGN KEY REFERENCES DEPT(DNO))
-- WRITE A QUERY TO INSERT RECORDS INTO EMP TABLE FROM MANAGERS TABLE
INSERT INTO EMP SELECT * FROM MANAGERS WHERE DNO IN (40,50)
--COREELATED SUB-QUERY
-- EXCUITION STARTS FROM OUTER QUERY TO INNER QUERY
-- WRITE A QUERY TO SEE THE DATA FROM EMP, DEPT TABLES
SELECT * FROM EMP
SELECT * FROM DEPT
--2) WRITE A QUERY TO GET EMP DETAILS WHOSE SAL IS ABOVE AVG SAL OF EACH DNO
-- WRITE A QUERY TO SHOW DNO WISE AVG SALARY
SELECT DNO, AVG(SAL) FROM EMP GROUP BY DNO
SELECT * FROM EMP E WHERE E.SAL > (SELECT AVG(SAL) FROM EMP WHERE DNO=E.DNO)
--1) WRITE A QUERY TO FIND THE EMP DETAILS WHO IS GETTING FIRST HIGHEST SALARY
SELECT * FROM EMP WHERE SAL=(SELECT MAX(SAL) FROM EMP)
--2) WRITE A QUERY TO FIND THE EMP DETAILS WHO IS GETTING SECOND HIGHEST SALARY
SELECT * FROM EMP WHERE SAL=(SELECT MAX(SAL) FROM EMP WHERE SAL <(SELECT MAX(SAL)
FROM EMP))
--SYNTAX
/*SELECT * FROM T.N <ALIAS NAME1> WHERE
N-1=(SELECT COUNT(C.N) FROM T.N <TABLE ALIAS NAME2>
WHERE <ALISA NAME2>.<COL NAME> (>) <ALIAS NAME1>.<COL NAME>)*/
-----------------------------------------------------------------------------------
----------------