Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
4 views38 pages

SQL Class Notes

The document provides an overview of data management systems, specifically DBMS and RDBMS, highlighting their differences and functionalities. It includes instructions for downloading and installing SQL Server and SQL Server Management Studio, as well as guidelines for creating databases, tables, and using various SQL sub-languages. Additionally, it covers data types, operators, and SQL statements for data manipulation and retrieval.

Uploaded by

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

SQL Class Notes

The document provides an overview of data management systems, specifically DBMS and RDBMS, highlighting their differences and functionalities. It includes instructions for downloading and installing SQL Server and SQL Server Management Studio, as well as guidelines for creating databases, tables, and using various SQL sub-languages. Additionally, it covers data types, operators, and SQL statements for data manipulation and retrieval.

Uploaded by

21q71a4428
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 38

INTRODUCTION

-------------
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.

TWO SOFTWARES TO STORE THE DATA


----------------------------------
1.DBMS
2.RDBMS

1.DBMS (DATABASE MANAGEMENT SYSTEM)


---------
DATABASE MANAGEMENT SYSTEM IS USED TO STORE THE DATA AND ALLOWS THE USERS TO
DEFINE, MAINTAIN, GIVING
ACCESS AND THEN CONTROLS THE DATA

2.RDBMS (RELATIONAL DATABASE MANAGEMENT SYSTEM)


---------
RELATIONAL DATABASE MANAGEMENT SYSTEM IS USED TO STORE THE DATA AND ALLOWS
THE USERS TO DEFINE, MAINTAIN, GIVING
ACCESS AND THEN CONTROLS THE DATA

RELATIONSHIPS B/W THE TABLES IS ALLOWED

DIFFERENCES B/W DBMS & RDBMS


-------------------------------
DBMS

1.NOT POSSIBLE TO CREATE THE RELATIONSHIPS B/W THE TABLES


2.IT DOESN'T SUPPORTS NORMALIZATION
3.IT IS POSSIBLE TO CONNECT TO THE DATABASES ONLY ONE USER AT A TIME
4.IT DOESN'T SUPPORTS HUGE VOLUMES OF DATA
5.RETRIVING THE DATA IS FAST
6.THIS IS LESS SECURIED
7.DATA INCONSISTANCY

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

DEVELOPED --> IBM --> 1972 --> DBMS


M.S SQL SERVER
---------------
SQL IS A STRUCTURED QUERY LANGUAGE WHICH IS SPECIALLY DESIGNED TO COMMUNICATE
WITH THE DATABASE
SQL SERVER IS A BACKEND TOOL WHICH IS USED TO DEVELOPE THE BACKEND
APPLICATIONS AND USED TO STORE
THE DATA

DEVELOPED --> M.S -->1989 -- RDBMS

SQL IS NOT A PROGRAMMING

SQL IS QUERY LANGUAGE

QUERY
------
RETRIVING THE DATA FROM THE DATABASES IS AN QUERYING

@----------------------------------------------------------------------------------
------------------------------------------

-- 1). To Download SQL Server

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.

-- 2). To Install SQL Server

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.

Select an installation type -> Select Custom -> Click Install

SQL Server 2022 Developer Edition-> install

SQL Server Installation Center -> Go to Installation ->


Click on the 1st link: New SQL Server stand - alone installation or add features to
an existing installation.

Edition-> Go with Specify a free addition -> Developer -> Next

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

Install Rules (Ignore the warnings)-> 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: *******

Ready to Install -> Install


Installation Progress -> Microsoft SQL Server 2022 Setup -> OK -> Next

Complete -> Close.

-----------------------------------------------------------------------------------
-----------

-- 3). To Download vs_SSMS (SQL Server Management Studio)

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.

-- 4). To Install SSMS

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.

-----------------------------------------------------------------------------------
----------

-- 5). To Work on SQL Server:

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

-----------------------------------------------------------------------------------
-----------

-- 6). To create a Database

Right click on Database -> New Database -> Give Database Name (Your wish) -> OK
-- 7). To load CSV Files data in the created a Database

- in SSMS in Object Explorer under 'Databases', right-click on the destination


database (Your Database),
And select Tasks -> Import Data -> Import Flat File

- Introduction -> Next


- Specify Input File -> Brose the CSV File -> New Table Name (Default/ Your Choice)
->Next
- Preview Data -> Next
- Modify Columns -> Choose Primary Columns( If Applicable) -> Next
- Summary -> Finish
- Results -> Operation Complete -> Close

CSV File will be loaded to the required Database.

------------------------------------------------------------------------

@----------------------------------------------------------------------------------
------------------------------------------------

RULES TO CREATE THE DATABASE OR TABLE


--------------------------------------

1.TABLE NAME STARTS WITH AN ALPHABET OR "_"

2.MINIMUM LENGTH OF THE TABLE IS ATLEAST ONE CHAR

3.SPECIAL CHAR ARE NOT ALLOWED AS TABLE NAMES EXCEPT "_"

4.TABLE NAME SHOULD BE UNIQUE (DUPLICATE TABLE NAMES ARE NOT ALLOWED WITH IN
THE DB)

5.TABLE SHOULD BE MEANINGFULL / LOGICAL

6.KEYWORDS ARE NOT ALLOWED AS TABLE NAMES (DATABASE,CREATE,TABLE,DROP,,,,,,,)

-----------------------------------------------------------------------------------
-----------------

DATA TYPES
-----------
DATA TYPES WILL DESCRIBE WHAT TYPE OF DATA , THE COLUMN WILL HANDLE

TYPE OF DATA TYPES


----------------------
1.INTEGER DATA TYPES
2.DECIMAL DATA TYPES
3.STRING DATA TYPES
4.MONEY DATA TYPES
5.DATE AND TIME DATA TYPES

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 BYTE --> 8 BITS


2 BYTE --> 16 BITS
3 BYTE --> 24 BITS

1 BIT --> 0.2500 BYTES

2.DECIMAL DATA TYPES


----------------------
DECIMAL DATA TYPES WILL ALLOWS DECIMAL VALUES

1.FLOAT --> 4 BYTES (7 DECIMAL VALUES)


2.DECIMAL --> 8 BYTES (15 DECIMAL VALUES)

3.STRING DATA TYPES


----------------------
IT WILL ALLOWS TEXT/STRING IN TO THE COLUMNS

1.CHAR --> 1 BYTE


2.VARCHAR --> 2 BYTES
3.NCHAR (10) --> 2 BYTES
4.NVARCHAR (20) --> 2 BYTES
5.TEXT --> 4 BYTES
6.NTEXT --> 4 BYTES

4.MONEY DATA TYPES


----------------------
SMALL MONEY --> 4 BYTES
MONEY --> 8 BYTES

5.DATE AND TIME DATA TYPES


------------------------------
IF WE WANT TO SAVE THE DATE AND TIME UNDER THE COLUMN MEANS WE WILL
MAKE USE OF DATE & TIME
DATA TYPES

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

@----------------------------------------------------------------------------------
--------------------------------------

SQL SUB-LANGUAGES (STATEMENTS) IN SQL SERVER


-----------------------------

DIFFERENT TYPES OF SUB-LANGUAGES


---------------------------------
1.DDL (DATA DEFINATION LANGUAGE)
2.DML (DATA MANUPLIATION LANGUAGE)
3.DRL (DATA RETRIVAL LANGUAGE)
4.TCL (TRANSACTION CONTROL LANGUAGE)
5.DCL (DATA CONTROL LANGUAGE)

1.DDL (DATA DEFINATION LANGUAGE)


-----------------------------------
DATA DEFINATION LANGUAGE IS USED TO CREATE,ALTER,ADD,DROP,TRUNCATE OF TABLES
OR DBs.

-- CREATE - It is used to create the database and It's objects (Tables)

-- Write a query to create a Database Sublanguages


SYNTAX: Create Database Sublanguages

-- Write a query To Work on the Database Sublanguages


Use Sublanguages

-- 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 INSERT some rows in to the Table 'Emp'


Insert into Emp Values(101, 'Vijay', 1600, 10)
Insert into Emp Values(102, 'Nandu', 1200, 20)
Insert into Emp Values(103, 'Nikki', 1400, 30)
Insert into Emp Values(104, 'Varun', 1500, 40)
Insert into Emp Values(105, 'Lucky', 1300, 50)

-- Write a query to see the data under Emp Table


Select * From Emp

-- WRITE A QUERY TO SEE THE STRUCTURE OF A TABLE (SP: Stored Procedure)


SP_HELP Emp

-- ALTER: It is used to alter(Modify) the structure of table

-- Write a Query to Change the Datatype of the Column 'EID' to Bigint.


Alter Table Emp Alter Column Sal BIGINT

-- 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.

Alter Table Emp Add Job Varchar(10)

-- Drop: IT IS USED TO DROP THE COLUMNS,TABLES,DB PARMENTELLY (NO ROLLBACK / NO GET


BACK)

-- Write a Query to Drop the Column 'Job' From the Emp Table.
Alter Table Emp Drop Column Job

-- Rename: It is used to rename the Column Name


-- Write a Query to Rename the Column 'Sal' to 'Salary'.
SP_Rename 'Emp.Sal', 'Salary'

-- Write a Query to Rename the Table 'Emp' to 'Empl'.


SP_Rename Emp, Empl
-- Rename a New Database 'Hyderabad' to Hyd
Create Database Hyderabad
Exec sp_renamedb Hyderabad, Hyd

Select * From Empl

-- Truncate Table: STRUCTER WILL BE AVAILABLE AND ALL THE ROWS IN THE TABLE WILL BE
ELIMINATED (NO ROLLBACK/UNDO AGAIN)
Truncate Table Empl

-- Write a Query To Drop Complete Table: Empl

Drop Table Empl

-- Write a Query To Drop the Database SQLSTATEMENTS

Drop Database SQLSTATEMENTS

------------------------------------------------------------------------------

2.DML (DATA MANUPLIATION LANGUAGE)


--------------------------------------
DATA MANUPLIATION LANGUAGE IS USED TO INSERT , UPDATE , DELETE THE DATA IN A
TABLE

-- a) Insert- It is used to insert the data into table.


-- Write a query to create Students Table with some columns.
Create Table Students(SNo Int, Name Char(20), Marks Int)
Insert into Students Values (1, 'Raju', 565)
Insert into Students Values (2, 'Rani', 570)
Insert into Students Values (3, 'Atlee', 550)

-- Write a Query to ADD the Column 'Gender' to the Students Table.


Alter Table Students Add Gender char(10)
Select * From Students
-- b) Update - It is used to update the data in a table.
-- Write a Query to Update the Gender Values
Update Students Set Gender='Male' where Sno=1
Update Students Set Gender='Female' where Sno=2

-- c) Delete- It is used to delete the data in a table.


-- Write a Query to Delete a record where SNo=3
Delete From Students where SNo=3

3.DRL (DATA RETRIVAL LANGUAGE)


---------------------------------
DATA RETRIVAL LANGUAGE IS USED TO RETRIVE / FETCH THE DATA FROM TABLES

SELECT --> TO FETCH THE DATA FROM THE TABLES

WHERE --> IF WE WANT TO FECTH / RETRIVE THE FILTERED DATA FROM THE TABLES
MEANS WE USE "WHERE"

-- Write a Query to see the complete data under Emp Table.


Select * from Emp
-- DIFFERENT WAYS OF SELECTING THE DATA FROM THE DATABASE

SELECT * FROM [DBO].[EmpDML]


SELECT * FROM [SQLSTATEMENTS].[DBO].[Emp]

-- Write a Query to see the EName, Sal from Emp Table.


Select EName, Sal from Emp

-- 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

SELECT * FROM EMPTAB

4.TCL (TRANSACTION CONTROL LANGUAGE)


------------------------------------------
TRANSACTION CONTROL LANGUAGE

1.COMMIT --> INSERT,UPDATE,DELETE OPERATIONS


2.ROLLBACK -->INSERT,UPDATE,DELETE OPERATIONS
3.SAVEPOINT

5.DCL (DATA CONTROL LANGUAGE)


-------------------------------------
1.GRANT --> GIVING PERMESSIONS TO THE USERS
2.REVOKE --> TO CANCLE THE ACCESS TO DATABASES

@----------------------------------------------------------------------------------
--------------------------------------

OPERATORS IN SQL SERVER


-----------------------
TYPES OF OPERATORS
---------------------
1.ARTHMETIC OPERATORS
2.COMPARISION OPERATORS
3.LOGICAL OPERATORS
4.SET OPERATORS
5.SPECIAL OPERATORS

1.ARTHMETIC OPERATORS
------------------------

1.ADDITION --> ADD TWO COLUMNS

2.SUBSTRACTION --> DIFF OF TWO COLUMN

3.MULTIPLICATION --> MUL OF TWO COLUMNS

4.DIVISION --> DIV OF TWO COLUMN

5.MODULES --> MODULES OF TWO COLUMN

-- WRITE A QUERY TO CREATE THE DATABASE OPERATORS


CREATE DATABASE OPERATORS
-- WRITE A QUERY TO USE THE DATABASE OPERATORS
USE OPERATORS

-- WRITE A QUERY TO CREATE THE TABLE PRODUCTS

CREATE TABLE PRODUCTS(PID INT,PNAME VARCHAR(20),UNITS INT,COST INT,SALES INT)

-- WRITE A QUERY TO INSERT VALUES INTO THE TABLE PRODUCTS

INSERT INTO PRODUCTS VALUES(1,'MOBILES',3,300,500)


INSERT INTO PRODUCTS VALUES(2,'LAPTOPS',5,500,700)
INSERT INTO PRODUCTS VALUES(3,'MOUSES',2,200,350)
INSERT INTO PRODUCTS VALUES(4,'PENDRIVES',4,150,200)
INSERT INTO PRODUCTS VALUES(6,'CHARGERS',3,400,600)

-- WRITE A QUERY TO SEE THE DATA UNDER THE TABLE PRODUCTS

SELECT * FROM PRODUCTS

---------------: 1. ARITHMETIC OPERATORS :--------------------------------

-- 1.ADDITION --> ADD TWO COLUMNS

-- WRITE A QUERY TO SHOW PNAME WISE COST, SALES AND ADD THE TWO COLUMNS IN A COLUMN
ADDITION

SELECT PNAME,COST,SALES, ADDITION=COST+SALES FROM PRODUCTS

-- 2.SUBSTRACTION --> DIFF OF TWO COLUMN

-- WRITE A QUERY TO SHOW PNAME WISE COST, SALES AND SHOW DIFFERENCE BETWEEN THE TWO
COLUMNS IN A COLUMN DIFFERENCE

SELECT PNAME,COST,SALES,SUB=SALES-COST FROM PRODUCTS

--3.MULTIPLICATION --> MUL OF TWO COLUMNS

-- WRITE A QUERY TO SHOW PNAME WISE COST, SALES AND TO SHOW TOTALSALES FOR EACH
PRODUCT

SELECT PNAME,UNITS,SALES,TOTALSALES=UNITS*SALES FROM PRODUCTS

--4.DIVISION --> DIV OF TWO COLUMN

-- WRITE A QUERY TO GET SALES / COST WITH EACH PRODUCT

SELECT PNAME,COST,SALES,DIVIDE=SALES/COST FROM PRODUCTS

--5.MODULES --> MODULES OF TWO COLUMN

-- WRITE A QUERY TO GET MODULES WITH EACH PRODUCT

SELECT PNAME,COST,SALES,MODULES=SALES%COST FROM PRODUCTS

-----------------------------------------------------------------------------------
------------------------
-----------------------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

-- WRITE A QUERY TO FIND THE PRODUCT NAME=MOBILES

SELECT * FROM PRODUCTS WHERE PNAME='MOBILES'

--2. NOT EQUAL TO


-- WRITE A QUERY TO FIND THE PRODUCT NAME IS NOT MOBILES
SELECT * FROM PRODUCTS WHERE PNAME<>'MOBILES'

-- WRITE A QUERY TO FIND THE PRODUCT NAME IS NOT LAPTOPS


SELECT * FROM PRODUCTS WHERE PNAME!='LAPTOPS'

--3. GREATER THAN

-- WRITE A QUERY TO FIND THE PRODUCTS WHERE COST>300


SELECT * FROM PRODUCTS WHERE COST>300

--4. LESS THAN

-- WRITE A QUERY TO FIND THE PRODUCTS WHERE COST<300


SELECT * FROM PRODUCTS WHERE COST<300

--5. GREATER THAN OR EUAL TO

-- WRITE A QUERY TO FIND THE PRODUCTS WHERE COST>=300


SELECT * FROM PRODUCTS WHERE COST>=300

--6. LESS THAN OR EUAL TO

-- WRITE A QUERY TO FIND THE PRODUCTS WHERE COST<=300


SELECT * FROM PRODUCTS WHERE COST<=300

-----------------------------------------------------------------------------------
------------------------

--------------------------: 3. LOGICAL OPERATORS :--------------------------------

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

-- WRITE A QUERY TO CREATE THE TABLE EMPLOYEES

CREATE TABLE EMPLOYEES(ENUM INT,ENAME VARCHAR(20),JOB VARCHAR(20),HIREDATE


DATE,ESAL INT,DNO INT)

-- WRITE A QUERY TO INSERT VALUES INTO THE TABLE EMPLOYEES

INSERT INTO EMPLOYEES VALUES(101,'NAGARAJU','TRAINE','2020-02-12',50000,10)


INSERT INTO EMPLOYEES VALUES(102,'RAJU','DEV','2020-03-13',20000,10)
INSERT INTO EMPLOYEES VALUES(103,'SHEWAG','PRESIDENT','2005-04-14',60000,10)
INSERT INTO EMPLOYEES VALUES(104,'KOHLI','ANALYST','2020-03-18',40000,20)
INSERT INTO EMPLOYEES VALUES(105,'WARNER','SALESMAN','2021-05-25',25000,20)
INSERT INTO EMPLOYEES VALUES(106,'SMITH','CLERK','2021-10-30',35000,20)
INSERT INTO EMPLOYEES VALUES(107,'ROHIT','ANALYST','2021-04-17',25000,20)
INSERT INTO EMPLOYEES VALUES(108,'STARC','SALESMAN','2021-09-29',25000,30)
INSERT INTO EMPLOYEES VALUES(109,'FINCH','CLERK','2021-07-06',12000,30)
INSERT INTO EMPLOYEES VALUES(110,'PANDYA','ANALYST','2000-08-26',25000,40)
INSERT INTO EMPLOYEES VALUES(111,'MAXWELL','CLERK','2000-12-23',10000,50)

-- WRITE A QUERY TO ADD COMM COLUMN TO EMPLOYEE


ALTER TABLE EMPLOYEES ADD COMM INT

-- WRITE A QUERY TO UPDATE COMM 5000 FOR ANALYSTS IN EMPLOYEES


UPDATE EMPLOYEES SET COMM=5000 WHERE JOB='ANALYST'

-- 1. AND OPERATOR

-- WRITE A QUERY TO TO SEE THE EMPLOYEES WHOSE DNO=20 AND JOB=SALESMAN

SELECT * FROM EMPLOYEES WHERE DNO=20 AND JOB='ANALYST'

-- 2. OR OPERATOR
-- WRITE A QUERY TO TO SEE THE EMPLOYEES WHOSE DNO=20 OR JOB=SALESMAN

SELECT * FROM EMPLOYEES WHERE DNO=20 OR JOB='ANALYST'

-- 3. NOT OPERATOR

-- WRITE A QUERY TO TO SEE THE EMPLOYEES WHOSE COMM IS NOT NULL

SELECT * FROM EMPLOYEES WHERE COMM IS NOT NULL

-----------------------------------------------------------------------------------
------------------------

--------------------------------: 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

CREATE TABLE SCHOOL1(CLASS CHAR(10), CHILDERN INT)

INSERT INTO SCHOOL1 VALUES ('FIRST', 45)


INSERT INTO SCHOOL1 VALUES ('SECOND', 43)
INSERT INTO SCHOOL1 VALUES ('THIRD', 40)
INSERT INTO SCHOOL1 VALUES ('FOURTH', 41)
INSERT INTO SCHOOL1 VALUES ('SIXTH', 46)

CREATE TABLE SCHOOL2(CLASS CHAR(10), CHILDERN INT)

INSERT INTO SCHOOL2 VALUES ('FIFTH', 38)


INSERT INTO SCHOOL2 VALUES ('SIXTH', 35)
INSERT INTO SCHOOL2 VALUES ('SEVENTH', 30)
INSERT INTO SCHOOL2 VALUES ('EIGHTH', 33)
INSERT INTO SCHOOL2 VALUES ('NINTH', 36)

-- 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'

SELECT * FROM EMPLOYEES WHERE HIREDATE BETWEEN '02-01-2020' AND '05-31-2020'

SELECT * FROM EMPLOYEES WHERE HIREDATE BETWEEN '01-02-2020' AND '31-05-2020'

-- 3.LIKE (WHERE CLAUSE IS MANDATORY)

--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

2.USER DEFINED FUNCTIONS


-------------------------
THESE FUNCTIONS ARE DEFINED BY THE USERS OR DEV
IT IS POSSIBLE TO MODIFY THE USER DEFINED FUNCTIONS

1.SYSTEM DEFINED FUNCTIONS


----------------------------
1.SINGLE-ROW FUNCTION
2.COLUMN/GROUP/AGGREGATE FUNCTION

1.SINGLE-ROW FUNCTION
----------------------
IT WILL GIVES SINGLE O/P FOR EACH AND EVERY ROW IN A TABLE

------------------: 1.CHAR/STRING FUNCTIONS :-----------------------


-- LENGTH( ): It is used to display the number of characters in a given string.
-- UPPER( ): It is used to convert the string into upper characters.
-- LOWER( ): It is used to convert the string into upper characters.
-- SUBSTRING(): TO EXTRACT A STRING AT ONE POSITION TO SOME LETTERS OF A STRING.
-- CHARINDEX(): IT GIVES THE POSITION OF THE CHAR OF STRINGS.
-- REVERSE(): IT WILL REVERSE THE STRING.
-- REPLICATE(): IT REPEATE A STRING FOR MULTIPLE TIMES
-- LEFT(): TO GET THE NO.OF CHARCTERS FROM LEFT SIDE OF THE COLUMN
-- RIGHT(): TO GET THE NO.OF CHARCTERS FROM RIGHT SIDE OF THE COLUMN
-- CONCATENATE() OR '+': IT COMBINES MULTIPLE COLUMNS TO SINGLE COLUMN
-- TRIM( ): IT IS USED TO REMOVE THE BLANKS(white spaces) FROM A STRING.

------------------: 2.NUMBER FUNCTIONS :-----------------------


-- ABS(): IT GIVES ABSOLUTE VALUE (POSITIVE VALUE).
-- SIGN(): IT WILL SELECT ONLY THE SIGN OF THE VALUE
-- CEILING(): REMOVES THE DECIMAL VAUES AND PROMOTED TO NEXT NUMBER
--FLOOR(): IT IS USED TO GET FLOOR DOWN TO INTEGER VALUE
-- ROUND(): IT IS USED TO GET NO DECIMAL PLACES OF A NONINTEGER VALUE
-- SQRT(): TO GET THE SQRT OF THE NUMBER
-- POWER(): TO GET THE POWER OF THE NUMBER
-- LOG(): TO GET LOGARTHIMIC VALUES (LOG10(2))
-- EXP(): TO GET THE EXPONENTIAL VALUE (e2)

------------------: 3.DATE & TIME FUNCTION :-----------------------


List of SQL DATE Functions

Date Functions Description


Return Value Date Type

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.

/* INTERVALS --> DD -->DATE VALUE


DW -->WEEK OF DAY
DY -->DAY OF YEAR
WW -->WEEK OF YEAR
MM -->MONTH
QQ -->QUARTER
YY -->YEAR VALUE LAST TWO DIGITS
YYY -->YEAR VALUE LAST 3 DIGITS
YYYY -->YEAR VALUE LAST 4 DIGITS
HH -->HOURS
MI -->MINUTES
MS -->MILLI SECOND

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

------------------: 4.CONVERSION FUNCTION :-----------------------

-- 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

TYPES OF AGGREGATE FUNCTIONS


------------------------------

1.MAX() --> TO GET THE MAX VALUE IN THE COLUMN


2.MIN() --> TO GET THE MIN VALUE IN THE COLUMN
3.SUM() --> TO GET THE SUM OF TOTALS IN THE COLUMN
4.AVG() --> TO GET THE AVG VALUE IN THE COLUMN
5.COUNT(ESALARY) --> TO GET THE COUNT THE NO.OF RECORDS IN THE COLUMN

5.COUNT(*) --> TO GET THE COUNT THE NO.OF RECORDS IN THE TABLE

-----------------------------------------------------------------------------------
------

-- WRITE A QUERY TO CREATE DATABASE FUNCTIONS

CREATE DATABASE FUNCTIONS

USE FUNCTIONS

CREATE TABLE EMP(ENUM INT,ENAME VARCHAR(20),JOB VARCHAR(20),


HIREDATE DATE,ESALARY INT,DNO INT)

INSERT INTO EMP VALUES(101,'Raju','TRAINE','2020-02-12',50000,10)


INSERT INTO EMP VALUES(102,'Ravi',' DEV','2020-02-11',20000,10)
INSERT INTO EMP VALUES(103,'Shewag','PRESIDENT','2005-02-01',60000,10)
INSERT INTO EMP VALUES(104,'Virat',' DEV','2020-03-12',40000,10)
INSERT INTO EMP VALUES(105,'Warner','SALESMAN','2021-02-10',25000,20)
INSERT INTO EMP VALUES(106,'Smith',' CLERK','2021-10-02',25000,20)
INSERT INTO EMP VALUES(107,'Sachin','ANALYST','2021-02-12',30000,20)
INSERT INTO EMP VALUES(108,'Starc','SALESMAN','2021-02-13',25000,20)
INSERT INTO EMP VALUES(109,'Finch',' CLERK','2021-02-15',-12000,30)
INSERT INTO EMP VALUES(110,'Pandya','ANALYST','2000-02-16',25000,30)
INSERT INTO EMP VALUES(111,'Maxwell',' CLERK','2000-02-19',-10000,30)

SELECT * FROM EMP


-------------------------------: 1. SINGLE-ROW
FUNCTIONS :--------------------------------------
-- THESE FUNCTIONS EXCUITED ON STRING COLUMN OR CHAR COLUMN

-------------------------------: 1.1 CHAR/STRING FUNCTIONS 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 EXTRACT 2ND LETTER TO 3LETTERS OF ENAME.


SELECT ENAME, SUBSTRING(ENAME, 2, 3 ) ENAME2TO3 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 REVERSE THE STRING ENAME


SELECT ENAME, REVERSE(ENAME) AS REVERSE FROM EMP

-- WRITE A QUERY TO REPLICATE THE STRING ENAME FOR 4 TIMES


SELECT ENAME, REPLICATE(ENAME, 4) AS ENAME4TIMES FROM EMP

-- WRITE A QUERY TO EXTRACT 1ST 2 LETTERS OF ENAME


SELECT ENAME, LEFT(ENAME, 2) AS F2 FROM EMP

-- WRITE A QUERY TO EXTRACT LAST 2 LETTERS OF ENAME


SELECT ENAME, RIGHT(ENAME, 3) AS L3 FROM EMP

-- WRITE A QUERY TO CONCAT ENAME, JOB FROM EMP


SELECT ENAME, JOB, ENAME + ' ' + JOB AS COMBI FROM EMP
SELECT ENAME, JOB, CONCAT(ENAME, ' ', JOB) AS COMBI FROM EMP

-- WRITE A QUERY TO REMOVE BLANKS OF JOB FROM EMP


SELECT JOB, TRIM(JOB) AS JOB_TRIM FROM EMP

-------------------------------: 1.2 MATHEMATICAL/ NUMERICAL FUNCTIONS :


----------------------------------
-- THESE FUNCTIONS WILL BE WORKED ON NUMBER DATA TYPES

-- WRITE A QUERY TO SHOW ESALARY AND IT'S ABSOLUTE VALUE.


SELECT ESALARY, ABS(ESALARY) AS ABS_ESAL FROM EMP

-- WRITE A QUERY TO SHOW SIGN OF ESALARY FROM EMP.


SELECT ESALARY, SIGN(ESALARY) AS SIGN_ESAL FROM EMP

-- WRITE A QUERY TO CONVERT A GIVEN INT 34.4 TO NEXT INT 35


SELECT CEILING(34.2)

-- WRITE A QUERY TO CONVERT A GIVEN INT 34.9 TO IT'S INT VALUE 34


SELECT FLOOR(34.9)
-- WRITE A QUERY TO CONVERT A GIVEN INT 23.3456 TO 1 DECIMAL & 2 DECIMAL PLACES.
SELECT ROUND(23.3456,1)
SELECT ROUND(23.3456,2)

-- WRITE A QUERY TO FIND SQRT OF GIVEN INT 64


SELECT SQRT(64)

-- WRITE A QUERY TO FIND DNO POWER 2


SELECT DNO, POWER(DNO, 2) AS DNO_POWER2 FROM EMP

-- WRITE A QUERY TO FIND LOG 10 BASE 2


SELECT LOG10(2)

-- WRITE A QUERY TO GET THE EXPONENTIAL VALUE (e2)


SELECT EXP(2)

-------------------------------: 1.3 DATE AND TIME


FUNCTIONS :-----------------------------------------
-- THESE FUNCTIONS ARE EXCUITED ON DATE COLUMN OR TIME COLUMN

-- WRITE A QUERY TO GET TODAY'S DATE AND TIME


SELECT GETDATE()

-- WRITE A QUERY TO GET ONLY TODAY'S DATE


SELECT CAST(GETDATE() AS DATE)

-- WRITE A QUERY TO EXTRACT DAY OF HIREDATE FROM EMP


SELECT HIREDATE, DAY(HIREDATE) AS HIREDATE_DAY FROM EMP

-- WRITE A QUERY TO EXTRACT MONTH OF HIREDATE FROM EMP


SELECT HIREDATE, MONTH(HIREDATE) AS HIREDATE_MON FROM EMP

-- WRITE A QUERY TO EXTRACT YEAR OF HIREDATE FROM EMP


SELECT HIREDATE, YEAR(HIREDATE) AS HIREDATE_YEAR FROM EMP

-- WRITE A QUERY TO EXTRACT WEEKDAY OF HIREDATE FROM EMP


SELECT HIREDATE, DATENAME(DW, HIREDATE) AS HIREDATE_DOW FROM EMP

-- WRITE A QUERY TO EXTRACT MONTHNAME OF HIREDATE FROM EMP


SELECT HIREDATE, DATENAME(MM, HIREDATE) AS HIREDATE_MON 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)

-- WRITE A QUERY TO ADD 10DAYS+, 1MONTH-, 1YEAR+ TO HIREDATE FROM EMP.


SELECT HIREDATE, DATEADD(DD, 10, HIREDATE) AS DAYS10, DATEADD(MM, -1, HIREDATE) AS
MONTH_, DATEADD(YYYY, 1, HIREDATE) AS YEAR1 FROM EMP

-- WRITE A QUERY TO SHOW EXPERIENCE OF EACH EMPLOYEE FROM EMP.


SELECT ENAME, HIREDATE, DATEDIFF(YYYY, HIREDATE, GETDATE()) AS EXP FROM EMP

-------------------------------: 1.4 CONVERSION


FUNCTIONS :-----------------------------------------

-- WRITE A QUERY TO CONVERT A NONINT 12.3 TO INT 12


SELECT CAST(12.3 AS INT)

-- WRITE A QUERY TO CONVERT A TEXT '123' TO INT 123


SELECT CAST('123' AS INT)

-- WRITE A QUERY TO CONVERT TODAY'S DATETIME TO TEXT CHAR


SELECT CAST(GETDATE() AS CHAR)

-- WRITE A QUERY TO CONVERT A NONINT 12.3 TO INT 12


SELECT CONVERT(INT, 12.3)

-- WRITE A QUERY TO CONVERT A TEXT '123' TO INT 123


SELECT CONVERT(INT, '123')

-- WRITE A QUERY TO CONVERT TODAY'S DATETIME TO TEXT CHAR


SELECT CONVERT(CHAR, GETDATE())

-------------------------------: 2. COLUMN/GROUP/AGGREGATE
FUNCTION :--------------------------------------

-- WRITE A QUERY TO GET THE MAX SAL FROM EMP TABLE


SELECT MAX(ESALARY) FROM EMP

-- WRITE A QUERY TO GET THE MIN SAL FROM EMP TABLE


SELECT MIN(ESALARY) FROM EMP

-- WRITE A QUERY TO GET THE SUM SAL FROM EMP TABLE


SELECT SUM(ESALARY) FROM EMP

-- WRITE A QUERY TO GET THE AVG SAL FROM EMP TABLE


SELECT AVG(ESALARY) FROM EMP

-- WRITE A QUERY TO GET THE COUNT OF RECORDS FROM EMP TABLE


SELECT COUNT(*) FROM EMP

-- WRITE A QUERY TO ADD COMM COLUMN TO EMP TABLE


ALTER TABLE EMP ADD COMM INT

-- WRITE A QUERY TO UPDATE COMM=1500 FOR SALESMAN OF EMP TABLE


UPDATE EMP SET COMM=1500 WHERE JOB='SALESMAN'

-- 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 : IT WILL BE USED TO GROUPING THE DATA / SUMMARIZE THE DATA


2.HAVING : IT WILL BE USED TO FILTER THE DATA
3.ORDER BY : IT WILL BE USED TO SORT THE DATA EITHER IN ASCENDING OR
DESCENDING ORDER (DEFAULT IS ASCENDING)
4.DISTINCT : IT IS USED TO IDENTIFY THE UNIQUE/DISTINCT VALUES IN A COLUMN
5.ROLLUP : IT IS USED TO FIND THE SUB AND GRAND TOTALS OF A COLUMN
6.TOP(SQL)/LIMIT(MY SQL)/ROWNUM(ORACLE) : IT IS USED TO FETCH REQUIRED TOP
COLUMNS
-----------------: SPECIAL CLAUSES :---------------------
-- WRITE A QUERY TO CREATE A DATABASE CLAUSES_RANKS
CREATE DATABASE CLAUSES_RANKS
-- WRITE A QUERY TO USE DATABASE CLAUSES_RANKS
USE CLAUSES_RANKS

CREATE TABLE EMP(


EID INT IDENTITY,
DNO INT,
ENAME VARCHAR(65),
JOB VARCHAR(45),
GENDER VARCHAR(30),
ESALARY INT,
COUNTRY VARCHAR(55)
)

-- WRITE A QUERY TO INSERT SOME VALUES INTO EMP


INSERT INTO EMP(DNO, ENAME, JOB, GENDER, ESALARY, COUNTRY)
VALUES (10, 'John Doe', 'Writer', 'Male', 62000, 'USA'),
(10, 'Mary Greenspan', 'Freelancer', 'Female', 55000, 'INDIA'),
(10, 'Grace Smith', 'Scientist', 'Male', 85000, 'USA'),
(20, 'Mike Johnson', 'Manager', 'Male', 250000, 'INDIA'),
(20, 'Todd Astel', 'Business Analyst', 'Male', 42000, 'INDIA'),
(20, 'Sara Jackson', 'Engineer', 'Female', 65000, 'UK'),
(20, 'Nancy Jackson', 'Writer', 'Female', 55000, 'UK'),
(30, 'Rose Dell', 'Engineer', 'Female', 58000, 'USA'),
(30, 'Elizabeth Smith', 'HR', 'Female', 55000, 'UK'),
(30, 'Peter Bush', 'Engineer', 'Male', 42000, 'USA');

--------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 SEE EMP DATA IN DESCENDING ORDER BY ESALARY


SELECT * FROM EMP ORDER BY ESALARY DESC

-- WRITE A QUERY TO SEE EMP DATA IN ASCENDING ORDER BY ENAME


SELECT * FROM EMP ORDER BY ENAME

-- 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 SEE ESALARY UNIQUE VALUES FROM EMP


SELECT DISTINCT(ESALARY) AS SAL_DIST FROM EMP

-- WRITE A QUERY TO SEE JOB UNIQUE VALUES FROM EMP


SELECT DISTINCT(JOB) AS SAL_DIST FROM EMP

--------5. WITH ROLLUP:


-- WRITE A QUERY TO GET COUNTRY WISE TOTAL SAL
SELECT COUNTRY, SUM(ESALARY) AS TOTSAL FROM EMP GROUP BY COUNTRY

-- 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

--------6. TOP FUNCTION:


-- WRITE A QUERY TO FETCH TOP4 ROWS FROM EMP
SELECT TOP 4 * FROM EMP

-----------------------------------------------------------------------------------
-----

RANKING FUNCTIONS
-----------------

1. ROW_NUMBER()
2. RANK()
3. DENSE_RANK()

SALARY ROW_NUMBER RANK DENSE_RANK


------------------------------------------------------------------------
10000 ---> 1 ---> 1 ---> 1

20000 ---> 2 ---> 2 ---> 2

30000 ---> 3 ---> 3 ---> 3

30000 ---> 4 ---> 3 ---> 3

40000 ---> 5 ---> 5 ---> 4

50000 ---> 6 ---> 6 ---> 5

50000 ---> 7 ---> 6 ---> 5

60000 ---> 8 ---> 8 ---> 6

-- WRITE A QUERY TO CRAETE TABLE RANKING WITH SOME DATA


CREATE TABLE RANKING(ENO INT, ENAME VARCHAR(10), DNO INT, SALARY INT)

INSERT INTO RANKING VALUES(10,'LAXMAN',10,10000)


INSERT INTO RANKING VALUES(11,'VIRAT',20,20000)
INSERT INTO RANKING VALUES(12,'ROHITH',30,12000)
INSERT INTO RANKING VALUES(13,'SACHIN',20,12000)
INSERT INTO RANKING VALUES(14,'SHEHWAG',30,18000)
INSERT INTO RANKING VALUES(15,'GAMBIR',10,19000)
INSERT INTO RANKING VALUES(16,'YUVI',20,19000)
INSERT INTO RANKING VALUES(17,'DHONI',30,21000)

SELECT * FROM RANKING

/* RANKING FUNCTIONS --> TO ASSIGN THE RANK FOR EACH ROW AND FOR GROUP OF ROWS
I) ROW_NUMBER()
2) RANK()
3) DENSE RANK()

TO PERFORM RANKING FUNCTION *(ORDER BY CLAUSE) IS MANDATORY

ORDER BY-->MANDATORY CLAUSE


PARTITION BY--> OPTIONAL ON GROUP OF ROWS */

--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

-- IF SAME SALARY IS REPEATING 2 TIMES IT GIVES CONTINOUS RANKING (PROBLEM)

--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

-- WRITE A QUERY TO GET 3RD HIGHEST SALARIED EMP DETAILS

SELECT * FROM
(SELECT *, DENSE_RANK() OVER (ORDER BY SALARY DESC) AS EMP_RANK FROM RANKING) AS
RANKEDEMP
WHERE EMP_RANK=3

(OR)

SELECT * FROM RANKING ORDER BY SALARY DESC LIMIT 1 OFFSET 2

-----------------------------------------------------------------------------------
-------------

@----------------------------------------------------------------------------------
--------------------------------------
CONSTRAINTS
------------
CONSTRAINTS ARE THE CONDITIONS ON A TABLE NOT TO ENTER THE DUMMY VALUES
(INVALIED VALUES IN TO THE RECORDS)

CREATE TABLE T.N (ENO INT CONSTRAINT,ENAME VARCHAR(10))

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

----------------------------------------------------------------------------

CREATE DATABASE CONSTRAINTS

USE CONSTRAINTS

CREATE TABLE EMP(EID INT NOT NULL,ENAME VARCHAR(20) NOT NULL,


SALARY INT CHECK(SALARY>10000),ADDRESS VARCHAR(50) DEFAULT 'SRN')

INSERT INTO EMP VALUES(101,'WARNER',12000,'KP')


INSERT INTO EMP VALUES(102,'SMITH',15000,'AMP')

SELECT * FROM EMP

INSERT INTO EMP (ENAME,SALARY,ADDRESS) VALUES('SCOOT',16000,'ERG') -- NOT ALLOWS


-- CHECK
INSERT INTO EMP VALUES(103,'STARCH',8000,'KBPH')
-- DEFAULT
INSERT INTO EMP (EID,ENAME,SALARY) VALUES(104,'MAXWEEL',11000)

---------------------------------------------------------------------

-- PRIMARY KEY
CREATE TABLE EMP1(EID INT PRIMARY KEY,ENAME VARCHAR(20) UNIQUE)

INSERT INTO EMP1 VALUES(101,'WARNER')


INSERT INTO EMP1 VALUES(102,'SMITH')

INSERT INTO EMP1 (ENAME) VALUES('SCOOT') -- NOT ALLOWS

INSERT INTO EMP1 VALUES(102,'AA') -- NOT ALLOWS

SELECT * FROM EMP1

-- UNIQUE KEY
CREATE TABLE EMP2(EID INT UNIQUE,ENAME VARCHAR(20) NOT NULL)

INSERT INTO EMP2 VALUES(101,'WARNER')


INSERT INTO EMP2 VALUES(102,'SMITH')

SELECT * FROM EMP2

INSERT INTO EMP2(ENAME) VALUES('SCOOT')

INSERT INTO EMP2(ENAME) VALUES('AA')

-- COMPOSITE KEY

CREATE TABLE EMP3(EID INT,ENAME VARCHAR(20),PRIMARY KEY(EID,ENAME))


@----------------------------------------------------------------------------------
------------------------------

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

2.LEFT-OUTER JOIN --> (INNER JOIN) + NON-MATCHING RECORDS FROM THE


LEFT-SIDE TABLES

3.RIGHT-OUTER JOIN --> (INNER JOIN) + NON-MATC HING RECORDS FROM THE
RIGHT-SIDE TABLES

4.FULL-OUTER JOIN --> (INNER JOIN) + (LEFT-OUTER JOIN) +(RIGHT-OUTER


JOIN)

5.CROSS JOIN --> PRODUCT OF TWO TABLES (NO NEED HAVE THE COMMON COLUMN
B/W TWO TABLES)

6.SELF JOIN --> JOINING THE TABLE BY ITSELF IS KNOWN AS SELF-JOINS

-----------------------------------------------------------------------------------
-----

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

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 30 FIN PUNE
104 LAKI 4000 50

----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 10 SALES HYD
------------------

2.LEFT-OUTER JOIN --> (INNER JOIN) + NON-MATCHING RECORDS FROM THE LEFT-SIDE TABLES

EMP DEPT
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 30 FIN PUNE
104 LAKI 4000 50

----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 10 SALES HYD
104 LAKI 4000 50 NULL NULL NULL

------------

3.RIGHT-OUTER JOIN --> (INNER JOIN) + NON-MATCHING RECORDS FROM THE RIGHT-SIDE
TABLES

EMP DEPT
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 30 FIN PUNE
104 LAKI 4000 50

----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 10 SALES HYD
NULL NULL NULL NULL 30 FIN PUNE
----------

4.FULL-OUTER JOIN --> (INNER JOIN) + (LEFT-OUTER JOIN) +(RIGHT-OUTER JOIN)

EMP DEPT
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 30 FIN PUNE
104 LAKI 4000 50

----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 10 SALES HYD
104 LAKI 4000 50 NULL NULL NULL
NULL NULL NULL NULL 30 FIN PUNE

-----------------------------------------------------------------------------------
------------

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

101 RAM 1000 10 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
103 NIKI 3000 10 30 FIN PUNE
104 LAKI 4000 50

----Result:
EMPNO ENAME SAL DEPTNO DEPTNO DNAME
LOC

101 RAM 1000 10 10 SALES HYD


101 RAM 1000 10 20 HR BANG
101 RAM 1000 10 30 FIN PUNE

102 RAJ 2000 20 10 SALES HYD


102 RAJ 2000 20 20 HR BANG
102 RAJ 2000 20 30 FIN PUNE

103 NIKI 3000 10 10 SALES HYD


103 NIKI 3000 10 20 HR BANG
103 NIKI 3000 10 30 FIN PUNE

104 LAKI 4000 50 10 SALES HYD


104 LAKI 4000 50 20 HR BANG
104 LAKI 4000 50 30 FIN PUNE

-----------------------------------------------------------------------------------
-------
SELF JOIN
-----------
JOINING THE TABLE BY ITSELF IS KNOWN AS SELF-JOINS

ALIS NAMES IS COMPULSARY EMP AS E --> EMP DETAILS, AS M -->MANG DETAILS


-----------------------------------------------------------------------------------
-----------------

-- WRITE A QUERY TO CREATE A DATABASE JOINS


CREATE DATABASE JOINS

USE JOINS

CREATE TABLE DEPT


(
DNO INT PRIMARY KEY,
DNAME VARCHAR(30) NOT NULL,
LOCATION VARCHAR(20)
)

INSERT INTO DEPT VALUES (10, 'ACCOUNTING','HYD' )


INSERT INTO DEPT VALUES (20, 'RESEARCH','BANG')
INSERT INTO DEPT VALUES (30, 'SALES','CHENNAI' )
INSERT INTO DEPT VALUES (40, 'OPERATIONS','PUNE')

CREATE TABLE EMPLOYEES


(
EID INT UNIQUE,
ENAME VARCHAR(20),
SALARY INT,
DNO INT
)

INSERT INTO EMPLOYEES VALUES(101,'VIRAT',12000,10)


INSERT INTO EMPLOYEES VALUES(102,'ROHITH',15000,10)
INSERT INTO EMPLOYEES VALUES(103,'DHONI',16000,20)
INSERT INTO EMPLOYEES VALUES(104,'SACHIN',18000,20)
INSERT INTO EMPLOYEES VALUES(105,'YUVARAJ',20000,30)
INSERT INTO EMPLOYEES (EID,ENAME,SALARY) VALUES(106,'LAXMN',21000)

SELECT * FROM EMPLOYEES


SELECT * FROM DEPT

-- DROP TABLE DEPT

--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

SELECT * FROM EMPLOYEES CROSS JOIN DEPT

-- SELF JOIN

CREATE TABLE EMP(ENUM INT,ENAME VARCHAR(20),MGRID INT,ESALARY INT)


INSERT INTO EMP VALUES(101,'VIRAT',105,50000)
INSERT INTO EMP VALUES(102,'ROHITH',103,20000)
INSERT INTO EMP VALUES(103,'RAINA',102,60000)
INSERT INTO EMP VALUES(104,'DINESH',101,40000)
INSERT INTO EMP VALUES(105,'SACHIN',103,25000)

SELECT * FROM EMP

-- WRITE A QUERY TO DO SELF JOIN FOR EMP TABLE


SELECT * FROM EMP E INNER JOIN EMP M ON E.MGRID = M.ENUM

--WRITE A QUERY TO GET ENAME & MNAME


SELECT E.ENAME AS EMPLOYEE, M.ENAME AS MANAGER FROM EMP E INNER JOIN EMP M ON
E.MGRID=M.ENUM

-- TO GET THE EID,ENAME,MGRID,MGRNAME


SELECT E.ENUM, E.ENAME AS EMPLOYEE, E.MGRID, M.ENAME AS MANAGER FROM EMP E INNER
JOIN EMP M ON E.MGRID = M.ENUM

/*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
------

VIEW IS AN INTERFACE B/W THE USER AND BASE TABLES


VIEW IS A VIRTUAL TABLE OR LOGICAL TABLE
VIEW TABLES WILL NOT EXIST PHYSICALLY IN DATABASES
VIEW DOESN'T OCCUPY ANY SPACE TO STORE THE DATA

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

-- SIMPLE VIEW CAN BE CREATED ON SINGLE TABLE


-- SIMPLE VIEW CAN SUPPORT DML OPERATIONS
-- SIMPLE VIEW IS ALSO CALLED AS UPDATABLE VIEW
-- IF WE CHANGE THE VALUES IN VIEW TABLE THEN BASE TABLE IS ALSO UPDATED

2.COMPLEX VIEW
----------------
CREATING A VIEW ON MORE THAN ONE TABLE IS KNOWN AS COMPLEX VIEW

-- COMPLEX VIEW IS CREATED ON MORETHAN ONE TABLE


-- TO CREATE A COMPLEX VIEW WE NEED TO HAVE ATLEAST TWO TABLES
-- ALL DML OPERATIONS ARE NOT ALLOWED

CREATE DATABASE VIEWSS

USE VIEWSS
-- DROP TABLE EMP

CREATE TABLE EMP(EID INT, ENAME VARCHAR(20), JOB VARCHAR(10),


SAL MONEY, DNO INT)

INSERT INTO EMP VALUES(101,'KAPIL','TRAINE',50000,10)


INSERT INTO EMP VALUES(102,'DHONI','DEV',20000,10)
INSERT INTO EMP VALUES(103,'SHEWAG','PRESIDENT',60000,30)
INSERT INTO EMP VALUES(104,'KOHLI','DEV',40000,20)
INSERT INTO EMP VALUES(105,'ROHIT','SLAESMAN',25000,20)
INSERT INTO EMP VALUES(106,'LAXMAN','CLERK',35000,20)
INSERT INTO EMP VALUES(107,'BHUVI','ANALIYST',25000,30)
INSERT INTO EMP VALUES(108,'CHAHAL','SLAESMAN',25000,10)
INSERT INTO EMP VALUES(109,'BHUMRAH','CLERK',12000,10)
INSERT INTO EMP VALUES(110,'HARDHIK','ANALYTS',25000,30)
INSERT INTO EMP VALUES(111,'RISHAB','CLERK',10000,10)

SELECT * FROM EMP

-- DROP TABLE DEPT

CREATE TABLE DEPT(DNO INT, DNAME VARCHAR(10), LOC VARCHAR(10))

INSERT INTO DEPT VALUES(10,'A/C','NEW YORK')


INSERT INTO DEPT VALUES(20,'RESEARCH','DELLAS')
INSERT INTO DEPT VALUES(30,'SALES','CHICAGO')

SELECT * FROM DEPT

-- SIMPLE VIEW

-- SIMPLE VIEW CAN BE CREATED ON SINGLE TABLE


-- SIMPLE VIEW CAN SUPPORT DML OPERATIONS
-- SIMPLE VIEW IS ALSO CALLED AS UPDATABLE VIEW
-- IF WE CHANGE THE VALUES IN VIEW TABLE THEN BASE TABLE IS ALSO UPDATED
-- WRITE A QUERY TO CREATE A VIEW V1 FROM THE SOURCE TABE EMP
CREATE VIEW V1
AS
SELECT * FROM EMP

-- WRITE A QUERY TO SEE THE DATA UNDER THE VIEW V1


SELECT * FROM V1

-- CREATE VIEW V2 TO SELECT EID, ENAME, JOB FROM EMP TABLE


-- THIS IS ALSO KNOWN AS CLOUMN LEVEL SECURITY
-- (WE ARE HIDING THE SAL, DNO COLUMNS FROM THE BASE TABLE EMP)
CREATE VIEW V2
AS
SELECT EID, ENAME, JOB FROM EMP

-- WRITE A QUERY TO SEE THE DATA UNDER THE VIEW V2


SELECT * FROM V2

-- 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

-- WRITE A QUERY TO SEE THE DATA UNDER THE VIEW V3


SELECT * FROM V3

-- 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 QUERY TO SEE THE DATA UNDER THE VIEW V4


SELECT * FROM V4

-- WRITE A QUERY TO DROP THE VIEW V4


DROP VIEW V4

-- WRITE A QUERIES TO SEE THE DATA UNDER THE VIEW V1 & EMP TABLE.
SELECT * FROM V1
SELECT * FROM EMP

-- SIMPLE VIEW ALLOWS THE DML OPERATIONS


-- IF WE PERFORM INSERT,UPDATE,DELETE ON VIEW TABLE THE BASE TABLE IS ALSO UPDATED
-- INSERT
-- WRITE A QUERY TO INSERT A ROWS INTO VIEW TABLE WITH SOME VALUES(1002,
'RAJU','TRAINER', 50000, 20)
INSERT INTO V1 VALUES(1002, 'RAJU','TRAINER', 50000, 20)

-- 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

-- COMPLEX VIEW IS CREATED ON MORETHAN ONE TABLE


-- TO CREATE A COMPLEX VIEW WE NEED TO HAVE ATLEAST TWO TABLES
-- ALL DML OPERATIONS ARE NOT ALLOWED

CREATE TABLE EMP_HYD(EID INT,ENAME VARCHAR(10),ESALARY INT)


INSERT INTO EMP_HYD VALUES(101,'SURYA',85000),
(102,'RISHAB',76000),
(103,'VIRAT',45000),
(104,'DHONI',46000)
SELECT * FROM EMP_HYD

CREATE TABLE EMP_CHENNAI(EID INT,ENAME VARCHAR(10),ESALARY INT)


INSERT INTO EMP_CHENNAI VALUES(101,'SURYA',85000)
INSERT INTO EMP_CHENNAI VALUES(105,'GANGOOLI',35000)
INSERT INTO EMP_CHENNAI VALUES(106,'SACHIN',56000)

SELECT * FROM EMP_CHENNAI


-- DROP TABLE EMP_CHENNAI
-- RITE A QUERY TO CREATE THE VIEW COMVIEW WITH UNION OF EMP_HYD TO EMP_CHENNAI
CREATE VIEW COMVIEW
AS
SELECT * FROM EMP_HYD
UNION
SELECT * FROM EMP_CHENNAI

-- WRITE A QUERY TO SELECT THE DATA FROM THE COMVIEW


SELECT * FROM COMVIEW

-- 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

-- WRITE A QUERY TO CREATE A 'COMPLEXVIEW1' FROM THE ABOVE SELECT STATEMENT AS A


VIEW
CREATE VIEW COMPLEXVIEW1
AS
SELECT ENAME, JOB, SAL, EMP.DNO, DNAME FROM EMP INNER JOIN DEPT ON
EMP.DNO=DEPT.DNO

-- WRITE A QUERY TO SEE THE DATA UNDER 'COMPLEXVIEW1'


SELECT * FROM COMPLEXVIEW1

-- DROP VIEW COMPLEXVIEW1


-- INSERT RULE --
-- WRITE A QUERY TO INSERT VALUES('AA','BB',10000,10,'A/C') INTO THE VIEW
'COMPLEXVIEW1' -- NOT ALLOWED
INSERT INTO COMPLEXVIEW1 VALUES('AA','BB',10000,10,'A/C') -- NOT ALLOWED

-- 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
@----------------------------------------------------------------------------------
---------------------------

---------------------------- : SUB-QUERIES : ------------------------------------

A QUERY INSIDE ANOTHER QUERY IS KNOWN AS SUB QUERIES

SELECT(--------------SELECT(---------)

TYPES OF SUB QUERIES


---------------------

1.NON-CORELATED SUB QUERIES (EXCUITION WILL STARTS FROM INNER - OUTER)

2.CORELATED SUB QUERIES (EXCUITION WILL STARTS FROM OUTER - INNER)

1.NON-CORELATED SUB QUERIES (EXCUITION WILL STARTS FROM INNER - OUTER)


------------------------------

1.SINGLE ROW SUB QUERIES


---------------------------
O/P OF THE INNER QUERY IS ONLY ONE RECORD
O/P OF INNER QUERY WILL BE I/P FOR OUTER QUERY

2.MULTI ROW SUB QUERIES


------------------------
O/P OF THE INNER QUERY IS MULTIPLE RECORDS
O/P OF INNER QUERY WILL BE I/P FOR OUTER QUERY
------------------------------------------------------------

2.CORELATED SUB QUERIES (EXCUITION WILL STARTS FROM OUTER - INNER)


------------------------------

CREATE DATABASE SUBQUERIES


USE SUBQUERIES

CREATE TABLE DEPT(DNO INT PRIMARY KEY,DNAME VARCHAR(20))


INSERT INTO DEPT VALUES(10,'HR')
INSERT INTO DEPT VALUES(20,'ADMIN')
INSERT INTO DEPT VALUES(30,'SALES')
INSERT INTO DEPT VALUES(40,'DEV')
INSERT INTO DEPT VALUES(50,'TESTING')

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)

SELECT * FROM EMP


SELECT * FROM DEPT
--DROP TABLE EMP

/* NON-CORRELATED SUB QUERY


1.SINGLE ROW SUB QUERIES
---------------------------
O/P OF THE INNER QUERY IS ONLY ONE RECORD
O/P OF INNER QUERY WILL BE I/P FOR OUTER QUERY */

--1) WRITE A QUERY TO GET MAX SAL EMP DETAILS?


SELECT * FROM EMP WHERE SAL=(SELECT MAX(SAL) FROM EMP)

--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')

/* 2.MULTI ROW SUB QUERIES


------------------------
O/P OF THE INNER QUERY IS MULTIPLE RECORDS
O/P OF INNER QUERY WILL BE I/P FOR OUTER QUERY */

-- 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')

-- ANY OPERATOR -- (OR OPERATOR)

--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)

-- ALL OPERATOR -- (AND OPERATOR)

--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)

SELECT * FROM EMP1

-- 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)

--2) WRITE A QUERY TO DELETE EMPLOYEES WHOSE DNO IS OF ENAME='B'


DELETE FROM EMP1 WHERE DNO=(SELECT DNO FROM EMP1 WHERE ENAME='B')

-- 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))

INSERT INTO MANAGERS VALUES(120,'BUTTLER','ANALYTS','2016-02-12',25000,40)


INSERT INTO MANAGERS VALUES(121,'ABD','CLERK','2000-02-12',10000,50)
INSERT INTO MANAGERS VALUES(122,'SMITHG','ANALYTS','2016-02-12',25000,10)

SELECT * FROM MANAGERS


SELECT * FROM EMP

-- 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

--1) WRITE A QUERY TO GET DNAME WISE COUNT OF EMP


SELECT DNAME,
(SELECT COUNT(DNO) FROM EMP WHERE DNO=DEPT.DNO) AS EMPCOUNT 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)

--------------------------Nth HIGHEST SALARY

--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))

--HOW TO FIND THE Nth HIGHEST SALARY

--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>)*/

--WRITE A QUERY TO SHOW EMP DATA IN DESC ORDER BY SAL COLUMN


SELECT * FROM EMP ORDER BY SAL DESC

--FIRST HIGHEST SALARY


SELECT * FROM EMP E1 WHERE 0=(SELECT COUNT(SAL) FROM EMP E2 WHERE E2.SAL > E1.SAL)

--SECOND HIGHEST SALARY


SELECT * FROM EMP E1 WHERE 1=(SELECT COUNT(SAL) FROM EMP E2 WHERE E2.SAL > E1.SAL)

--THIRD HIGHEST SALARY


SELECT * FROM EMP E1 WHERE 2=(SELECT COUNT(SAL) FROM EMP E2 WHERE E2.SAL > E1.SAL)

--5th HIGHEST SALARY


SELECT * FROM EMP E1 WHERE 4=(SELECT COUNT(SAL) FROM EMP E2 WHERE E2.SAL > E1.SAL)

-----------------------------------------------------------------------------------
----------------

You might also like