SlideShare uma empresa Scribd logo
1 de 78
Suresh
Data: Data is the most important component in any work that we do; Data means collection of
information or collection of raw facts.
Ex:
1. Text files
2. Facts
3. Figures (photos)
4. Audios
5. Videos etc...
Database: collection of related data.
DBMS :( Database Management System)
Data Base Management System is the management system or maintenance system on
databases. (Or)
It is a suit of software program for creating, maintaining & manipulating the data in database.
(Or)
It allows the users to insert the data, to retrieve the data, to modify the data and to delete the
data.
Properties:
1. Create
2. Insert
3. Update
4. Delete
5. Select (query)
6. Low level security etc...
Ex: FoxPro, ims (information management system)
The first databases of kind existed in the form of files.
A file is nothing but collection of records.
A Record is nothing but collection of information or data.
But the file system was not very efficient .it was crippled by slow data search speed. It
includes the following Drawbacks.
1.Security
2.Data Redundancy
3.Data Integrity
4.Concurrency Control
5.Slow in Process
6. File system: in a dbms database, data must be stored in the form of files only
Note: basic property of file system is independent and individual, means each and every file is
unique AND relation is not possible between data files
7. Low level security, No Login name No Password.
RDBMS (Relational Database Management System):
1
Suresh
• Data must be stored in the form of tables only
• Relation between Tables is possible
Table: It is collection of columns and rows, X axis directions are rows and Y axis directions are
columns
Relation: Creating internal dependencies between Database Tables
Ex of RDBMS:
1. Sqlserver
2. Oracle
3. Db2 (Database 2000, IBM)
4. Mysql (open source)
5. ms-access
6. Postgresql (open source)
7. Sybase
8. Tera data
Etc.....
Terminology:
1. Table -- Entity
2. Column (field) -- Attribute
3. Row (record) -- Tupple
4. Duplicate data (Repeated data) – Data Redundancy
Metadata: Data about data, it describes characteristics of data
Ex: Description of a table
Syn: sp_help <TN>
Ex: sp_help EMP
Note: <TN> stands for Table name
Data models:
1. Hierarchy data model
2. Network data model
3. Relational data model
Note: Currently all RDBMS Databases following RELATIONAL DATA MODEL
Adv of Relational Data model:
• Relation
• Perfect solution for duplicate data and null values
• Normalization
Normalization: It is a process of eliminating duplicate data from the database.
EF CODD RULES:
2
Suresh
Sqlserver 2005:
1. It is RDBMS database
2. It is a product of Microsoft
3. It is case insensitive
4. It is platform dependant-- it is compatible for windows OS
5. User friendly
History: Introduced in 1994
• Sqlserver 4.0
• Sqlserver 5.0
• Sqlserver 6.0
• Sqlserver 6.5
• Sqlserver 7.0
• Sqlserver 8.0(2000)
• Sqlserver 9.0(2005)
• Sqlserver 10.0(2008)
Editions (flavors):
1. Enterprise edition
2. Standard edition
3. Developer edition
4. Mobile edition
5. Personal edition (express edition)  free
Software Requirements:
1. OS
• Windows xp sp2 or sp3
• Windows server 2000
• Windows server 2003
• Windows server 2008
• Windows Vista
• Windows 7
2. Windows installer: It is a default component of Windows; we can download it from
www.microsoft.com
3
Suresh
3. IIS (internet information services):
• It is an application server from MICROSOFT
Hardware requirements:
1. Processor:
It supports both 32 bit, 64 bit
Ex:
1. Pentium 4
2. Amd athlon
2. Hard disk:
• 500 mb (MICROSOFT)
• 1 GB (Mine)
3. Ram:
• 512mb(MICROSOFT)
• 1 GB(Mine)
SQL -- structured query language
Sequel-- structured English query language
FEATURES OF SQL SERVER:
1. Security: Provides login and password to interact with data in database
2. Data Redundancy: Less Data reputation
3. Data Integrity: Data validation/Data Checking Process facility
4. Backup and Recovery(Restore)
5. Introducing support for XML
6. User defined function are introduced.
7. OLAP (online analytical process) services available in SQL server 7.0 are now called as SQL
server 2005 analysis services
Things to Observe:
1. While writing the Queries using T-SQL in SQL Server Management Studio we need not
to follow any particular case. Because T-SQL is case insensitive language.
2. After writing the Query, we need to select that query using either mouse or keyboard.
3. Now Press F5 (Execute Key).
4. Then the results are displayed in a separate window called Result window or Result
Pane.
5. Use Ctrl+R to Hide/Show the Result window or Result Pane.
6. Use F8 for Object Explorer
Note:
4
Suresh
1. SQL SERVER can handle nearly 32767 Databases
2. Each Database can handle nearly 2 billion Database Objects.
3. Each Table can handle nearly 1024 columns
4. Each Table can handle nearly 1 million Rows
 SQLSERVER is two parts, they are
1. Tsql :( Transact sql)
2. Tsql programs
Tool:
1. Management studio: It contains two parts, they are
1. Cui (Character user interface):
• Sqlscripting can be written in *newqury* option
• By using execute button or f5 we can execute the script
2. Gui (Graphical user interface):
• It is Navigations part of the management Studio.
• We can connect to GUI by using *summary* option.
Path: start programs sqlserver 2005 Management Studio (click)
Inside management studio window provide following information
1. Server type-- database engine
2. servername-- database server name
3. authentication--
A. Windows’s authentication
• This user must be an OS user
B. Sqlserver authentication
UN: sa (sysadmin-- DBA)
Pw: ******** (Depends Upon Installation)
Databases:
1. System databases:
• These are inbuilt or default databases
• Along with installation of Sqlserver 2005 we can get system databases
• System databases monitors entire database engine
Note: User can’t create and delete a system database
5
Suresh
A. master
B. model
C. msdb
D. tempdb
E. MS resources
Description
master
Database
Records all the system-level information for an instance of SQL Server.
msdb
Database
It is used by SQL Server Agent for scheduling alerts and jobs.
model
Database Template database
Resource
Database
It is a read-only database that contains system objects that are included with SQL
Server 2005. System objects are physically persisted in the Resource database,
but they logically appear in the sys schema of every database.
tempdb
Database
It is a workspace for holding temporary objects or intermediate result sets.
2. User databases:
• These database created and maintained by the users explicitly
Ex:
CREATE DATABASE suresh
ON PRIMARY
(NAME=suresh,
FILENAME="C:MSSQLvaddesuresh.mdf",
SIZE=100,
MAXSIZE=200,
FILEGROWTH=25%)
Log on
(
NAME=suresh_log,
FILENAME="C:MSSQLvaddesuresh_log.ldf",
SIZE=100,
MAXSIZE=200,
FILEGROWTH=25%)
6
Suresh
SQL Server Data Types:
Character strings:
Data type Description Storage
char(n) Fixed-length character string. Maximum 8,000 characters n
varchar(n) Variable-length character string. Maximum 8,000 characters
varchar(max) Variable-length character string. Maximum 1,073,741,824
characters
text Variable-length character string. Maximum 2GB of text data
Unicode strings:
Data type Description Storage
nchar(n) Fixed-length Unicode data. Maximum 4,000 characters
nvarchar(n) Variable-length Unicode data. Maximum 4,000 characters
nvarchar(max) Variable-length Unicode data. Maximum 536,870,912 characters
ntext Variable-length Unicode data. Maximum 2GB of text data
Binary types:
Data type Description Storage
bit Allows 0, 1, or NULL
binary(n) Fixed-length binary data. Maximum 8,000 bytes
varbinary(n) Variable-length binary data. Maximum 8,000 bytes
varbinary(max) Variable-length binary data. Maximum 2GB
image Variable-length binary data. Maximum 2GB
Number types:
Data type Description Storage
tinyint Allows whole numbers from 0 to 255 1 byte
smallint Allows whole numbers between -32,768 and 32,767 2 bytes
int Allows whole numbers between -2,147,483,648 and 2,147,483,647 4 bytes
bigint Allows whole numbers between -9,223,372,036,854,775,808 and
9,223,372,036,854,775,807
8 bytes
decimal(p,s) Fixed precision and scale numbers.
Allows numbers from -10^38 +1 to 10^38 –1.
The p parameter indicates the maximum total number of digits that
can be stored (both to the left and to the right of the decimal point). p
5-17
bytes
7
Suresh
must be a value from 1 to 38. Default is 18.
The s parameter indicates the maximum number of digits stored to
the right of the decimal point. s must be a value from 0 to p. Default
value is 0
numeric(p,s) Fixed precision and scale numbers.
Allows numbers from -10^38 +1 to 10^38 –1.
The p parameter indicates the maximum total number of digits that
can be stored (both to the left and to the right of the decimal point). p
must be a value from 1 to 38. Default is 18.
The s parameter indicates the maximum number of digits stored to
the right of the decimal point. s must be a value from 0 to p. Default
value is 0
5-17
bytes
small money Monetary data from -214,748.3648 to 214,748.3647 4 bytes
money Monetary data from -922,337,203,685,477.5808 to
922,337,203,685,477.5807
8 bytes
float(n) Floating precision number data from -1.79E + 308 to 1.79E + 308.
The n parameter indicates whether the field should hold 4 or 8
bytes. Float (24) holds a 4-byte field and float (53) holds an 8-byte
field. Default value of n is 53.
4 or 8
bytes
real Floating precision number data from -3.40E + 38 to 3.40E + 38 4 bytes
Date types:
Data type Description Storage
datetime From January 1, 1753 to December 31, 9999 with an accuracy of
3.33 milliseconds
8 bytes
datetime2 From January 1, 0001 to December 31, 9999 with an accuracy of
100 nanoseconds
6-8 bytes
smalldatetime From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute 4 bytes
date Store a date only. From January 1, 0001 to December 31, 9999 3 bytes
time Store a time only to an accuracy of 100 nanoseconds 3-5 bytes
datetimeoffset The same as datetime2 with the addition of a time zone offset 8-10
bytes
timestamp Stores a unique number that gets updated every time a row gets
created or modified. The timestamp value is based upon an internal
clock and does not correspond to real time. Each table may have
only one timestamp variable
Other data types:
Data type Description
sql_variant Stores up to 8,000 bytes of data of various data types, except text, ntext, and
8
Suresh
timestamp
uniqueidentifier Stores a globally unique identifier (GUID)
xml Stores XML formatted data. Maximum 2GB
cursor Stores a reference to a cursor used for database operations
table Stores a result-set for later processing
TSQL:
This is a 4th
generated intermediate language between user and SQL Server. Whenever
user wants to interact with SQL Server, he has to interact with SQL Server through T-SQL. It
includes the following Sub Languages
Sublanguages:
1. DDL (data definition language)
2. DML (data manipulation language)
3. DRL (data retrieval language) or QL (query language)
4. TCL (transaction control language)
5. DCL (data control language) -- DBA
1. DDL:
Commands:
1. Create
2. Truncate
3. Drop
4. Alter
1. Create: used to create database, tables and other database objects
syn: create table <tn>(col1 dt(l),col2 dt(l),col3 dt(l))
Ex: create table tab1 (id int, ename varchar (20), DOB datetime)
Note:
• Max length of a table name and column name is 30; it may include alphabets, digits 0 to
9 and special character '_' (Underscore).
• It is known as "naming conventions".
• Max of 1024 columns can be included into a table.
2. Truncate: used to delete entire data from a table and its not possible to delete selected or
specific rows from a table by using truncate command.
Ex:
Assume that Tab1 is a table, contains 10 rows of data, now
Entire data of Tab1 table= 10rows
Selected or specific data of Tab1 table<entire data
1 to 9 rows are known as selected or specific data
9
Suresh
Syn: truncate table <TN>
Ex: truncate table tab1
3. Drop: used delete a table from the database
Syn: drop table <TN>
Ex: drop table tab1
4. Alter:
Alter+add: used to add a column to the table
Syn: alter table <TN> add column_name DT (l), column_name DT (l)
Ex: alter table tab1 add sal numeric (7, 2), comm Numeric (5, 2), address varchar (50)
Alter+drop: used delete columns from the table
Syn: alter table <TN> drop column column_name
Ex: alter table tab1 drop column address
Alter+alter: used change the data type and length of data type of a column
Note: Column is empty then only we can change data type
Syn: alter table <TN> alter column column_name DT (l)
Ex: alter table tab1 alter column id varchar (20)
Miscellaneous:
System stored procedures: Directly we can execute them when ever required
1. Getting description of a table (metadata)
Syn: sp_help <TN>
Ex: sp_help tab1
2. Getting description of a database:
Syn: sp_helpdb <dbname>
Ex: sp_helpdb Suresh
3. Displaying list of tables in a database
Syn: sp_tables
10
Suresh
Ex: sp_tables
4. Changing name of a table
Syn: sp_rename <TN>, <new_name>
Ex: sp_rename tab1, employ
5. Retrieving list of Databases
Syn: sp_databases
DML:
Commands:
1. Insert
2. Update
3. Delete
1. Insert: Used to insert (add) data into tables
Syn: insert into <TN> values (col1, col2, col3)
Ex: insert into employ values ('a12','ramesh','12-apr-07', 3000, 30)
Id name DOB sal comm
Note: while working with char and date time data we should use single quotes
Inserting null values into table:
Student table contains 5 columns; now insert null value into comm column
Ex: insert into employ (id, name, DOB) values ('a13','ravi','21-jul-06', 2000)
Ex: insert into employ values ('a14','ramesh','12-apr-06', 5000, null)
2. Update: used to update (replace) old data with new data, it is two types they are
A. Updating entire data in a column:
Syn: update <TN> set column_name=new_value
Ex: update employ set sal=5000
B. Updating selected data in a column:
Syn: update <TN> set column_name=new_value where <condition>
Ex: update employ set sal=3000 where id='a12'
3. Delete: used to delete entire data and selected data from a table
11
Suresh
A. Deleting entire data from a table:
Syn: delete from <TN>
Ex: delete from employ
B. Deleting selected data from a table:
Syn: delete from <TN> where <condition>
Ex: delete from employ where id='a14'
DRL:
Commands:
1. Select: used to retrieve or display data from table or tables
Note: Retrieving data from single table is 4 types
1. Retrieving entire data (all columns and all rows) from a table
Syn: select*from <TN>
Ex: select*from employ
Note: * stands for entire columns of the table
2. Retrieving all columns and selected rows from a table
Syn: select*from <TN> where <condition>
Ex: select*from employ where id='a12'
3. Retrieving entire data from selected columns
Syn: select col1, col2 from <TN>
Ex: select ename, fees from employ
4. Retrieving selected rows from selected columns
Syn: select col1, col2 from <TN> where <condition>
Ex: select name, fees from employ where id='a13'
DCL: It is used to control the data between different user accounts. It includes the following
statements.
1. GRANT Statement
2. REVOKE Statement
12
Suresh
Grant Statement: This statement is used to grant the permissions (INSERT, SELECT, UPDATE,
DELETE) on a specific table to different user accounts.
Syntax:
GRANT {ALL/SPECIFIC PERMISSIONS} ON TABLENAME
TO USER ACCOUNT (S) [WITH GRANT OPTION]
WITH GRANT OPTION: When any user got the permissions on a specific table from other user
with this option, then that user can grant the permissions on that same table to another user
account. At that time sub user acts as owner.
Ex:
GRANT ALL ON EMP TO RAMESH WITH GRANT OPTION
From the above statement RAMESH user account got all permissions on EMP table from SA user
account. Mean time RAMESH can give the permissions on EMP to another user account
because he got the permissions WITH GRANT OPTION.
Ex:
GRANT INSERT, SELECT ON EMP TO SURESH
Now SURESH can perform select and insert operations on EMP table.
But SURESH cannot perform update and delete operations on EMP table because he does not
have the corresponding permissions.
Revoke Statement: This statement is used to revoke the permissions (INSERT, SELECT,
UPDATE, DELETE) on a specific table from different user accounts.
Syntax:
REVOKE {ALL/SPECIFIC PERMISSIONS} ON TABLENAME
FROM USER ACCOUNT (S) [CASCADE]
CASCADE: Using this option we can destroy the communication link between user accounts
more over from the main user it self we can revoke the permissions from all sub users.
Ex:
REVOKE ALL ON EMP FROM SUBBU CASCADE
The above statement revokes the permissions on EMP table from SUBBU and SURESH. Now
SUBBU and SURESH users cannot access EMP table.
TCL:
Transaction is nothing but a unit of work. We can control these transactions using the following
statements
ROLLBACK Statement
COMMIT Statement
13
Suresh
SAVE TRAN [SACTION]
ROLLBACK Statement: This statement is used to cancel a particular performed transaction. To
perform this statement in SQL Server we have to follow any one of the below 2 approaches.
Approach 1: SET IMPLICIT_TRANSATIONS ON
This approach is only to cancel a single recently performed operation.
Ex:
SET IMPLICIT_TRANSATIONS ON
SELECT * FROM EMP
DELETE FROM EMP
SELECT * FROM EMP
ROLLBACK
SELECT * FROM EMP
Approach 2: Explicit Transactions
To approach is to cancel recently performed multiple operations.
Syntax: BEGIN TRAN
-------------
GO
-------------
GO
-------------
ROLLBACK TRAN
Note: GO is query separator
Ex:
BEGIN TRAN
INSERT INTO DEPT VALUES (50,’TRA’,’AUS’)
GO
UPDATE EMP SET SAL=SAL+1000 WHERE EMPNO=11
GO
DELETE FROM STUDENT WHERE SNO=101
Select the entire transaction and press F5 for one time
ROLLBACK TRAN
The ROLLBACK statement cancels INSERT on Dept, UPDATE on EMP and DELETE on Student
tables.
COMMIT Statement: This statement makes a transaction permanent. It is not possible to rollback
the committed transaction.
Ex:
SELECT * FROM EMP
DELETE FROM EMP
14
Suresh
SELECT * FROM EMP
COMMIT
SELECT * FROM EMP
The COMMIT statement deletes the data from EMP permanently. It is not possible to ROLLBACK
the delete operation.
Ex:
BEGIN TRAN
INSERT INTO DEPT VALUES (50,’TRA’,’AUS’)
GO
UPDATE EMP SET SAL=SAL+1000 WHERE EMPNO=11
GO
DELETE FROM STUDENT WHERE SNO=101
Select the entire transaction and press F5 for one time
COMMIT TRAN
The above COMMIT TRAN makes all three transactions permanent. We cannot ROLLBACK the
transactions.
SAVE TRAN Statement: This statement is used to COMMIT/ROLLBACK a particular performed
transaction from the set of transactions. It is associated with alphabets in order to save the
transactions.
BEGIN TRAN
SAVE TRAN A
INSERT INTO DEPT VALUES (50,’TRA’,’AUS’)
SAVE TRAN B
UPDATE EMP SET SAL=SAL+1000 WHERE EMPNO=11
SAVE TRAN C
DELETE FROM STUDENT WHERE SNO=101
ROLLBACK TRAN C (The delete operation will be cancelled)
COMMIT TRAN B (The update operation performed permanently we cannot rollback)
TABLES FOR PRACTICALS:
1.CREATE TABLE EMP
(EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR NUMERIC(4),
HIREDATE DATETIME,
SAL NUMERIC(7, 2),
15
Suresh
COMM NUMERIC(7, 2),
DEPTNO NUMERIC(2));
DATA:
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK',
7902,'17-DEC-1980', 800, NULL, 20);
INSERT INTO EMP VALUES
(7499, 'ALLEN', 'SALESMAN',
7698,'20-FEB-1981', 1600, 300, 30);
INSERT INTO EMP VALUES
(7521, 'WARD', 'SALESMAN',
7698,'22-FEB-1981', 1250, 500, 30);
INSERT INTO EMP VALUES
(7566, 'JONES', 'MANAGER',
7839,'2-APR-1981', 2975, NULL, 20);
INSERT INTO EMP VALUES
(7654, 'MARTIN', 'SALESMAN',
7698,'28-SEP-1981', 1250, 1400, 30);
INSERT INTO EMP VALUES
(7698, 'BLAKE', 'MANAGER',
7839,'1-MAY-1981', 2850, NULL, 30);
INSERT INTO EMP VALUES
(7782, 'CLARK', 'MANAGER',
7839,'9-JUN-1981', 2450, NULL, 10);
INSERT INTO EMP VALUES
(7788, 'SCOTT', 'ANALYST',
7566,'09-DEC-1982', 3000, NULL, 20);
INSERT INTO EMP VALUES
16
Suresh
(7839, 'KING', 'PRESIDENT',
NULL,'17-NOV-1981', 5000, NULL, 10);
INSERT INTO EMP VALUES
(7844, 'TURNER', 'SALESMAN',
7698,'8-SEP-1981',1500, 0, 30);
INSERT INTO EMP VALUES
(7876, 'ADAMS', 'CLERK',
7788,'12-JAN-1983', 1100, NULL, 20);
INSERT INTO EMP VALUES
(7900, 'JAMES', 'CLERK',
7698,'3-DEC-1981', 950, NULL, 30);
INSERT INTO EMP VALUES
(7902, 'FORD', 'ANALYST',
7566,'3-DEC-1981', 3000, NULL, 20);
INSERT INTO EMP VALUES
(7934, 'MILLER', 'CLERK',
7782,'23-JAN-1982', 1300, NULL, 10);
2.CREATE TABLE DEPT
(DEPTNO NUMERIC(2),
DNAME VARCHAR(14),
LOC VARCHAR(13) );
DATA:
INSERT INTO DEPT VALUES (10,
'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH',
'DALLAS');
INSERT INTO DEPT VALUES (30,
'SALES', 'CHICAGO');
17
Suresh
INSERT INTO DEPT VALUES (40,
'OPERATIONS', 'BOSTON');
3.CREATE TABLE SALGRADE
(GRADE NUMERIC,
LOSAL NUMERIC,
HISAL NUMERIC);
DATA:
INSERT INTO SALGRADE VALUES (1, 700,
1200);
INSERT INTO SALGRADE VALUES (2, 1201,
1400);
INSERT INTO SALGRADE VALUES (3, 1401,
2000);
INSERT INTO SALGRADE VALUES (4, 2001,
3000);
INSERT INTO SALGRADE VALUES (5, 3001,
9999);
Operators:
1. Arithmetic operators: +, -,*, /
1. +:
Select sal, sal+1000 from EMP
2.-:
Select sal, sal-100 from EMP
3.*:
Select sal, sal*12 from EMP
4. /:
Select sal, sal/2 from EMP
18
Suresh
2. Assignment operator’s :( relational operators)
=, <> or ! =,>,>=,<,<=
1. =:
Select*from EMP where deptno=20
2. <> or! =:
Select*from EMP where deptno<>20
3.>:
Select*from EMP where sal>3000
4.>=:
Select*from EMP where sal>=3000
5. <:
Select*from EMP where sal<3000
6. <=:
Select*from EMP where sal<=3000
3. Logical operators: and, or, not
Ex: in maths two conditions are there, condition A and condition B
A and B-- both conditions must be satisfied
A or B-- if anyone satisfied then we can get output
1. And:
Select*from EMP where sal>3000 and deptno=20
2. Or:
Select*from EMP where sal>3000 or deptno=20
Between operator :( Range operator)
Ex: select*from EMP where sal between 2000 and 5000
Not between:
Ex: select*from EMP where sal not between 2000 and 5000
19
Suresh
In operator :( Minimizes searching time)
Select*from EMP where ename in ('Scott', 'Turner’, ‘Suresh')
Not in:
Select*from EMP where ename not in ('scott','turner','suresh')
Like operator :( Pattern matching)
Ex: select*from EMP where ename like’s%'
S%-- ename starts with s
%s-- ename ends with s
%s%-- somewhere s in ename
_s%-- second character is s from beginning
%s_ -- second from ending is s in ename
Note: _ (underscore) denotes one character
Not like operator:
Select*from EMP where ename not like’s%'
Alias:
• Second or duplicate name, can be assigned to a table or column
• Alias is temporary
Ex:
• Select sal*12 from EMP
• Select sal*12 annual Sal from EMP
Note: annual Sal is alias for sal*12
Inbuilt functions:
1. Aggregate functions :( Group functions)
1. Sum ():
Select sum (sal) from EMP
2. Average ():
Select avg (sal) from EMP
3. Max ():
Select max (sal) from EMP
20
Suresh
4. Min ():
Select min (sal) from EMP
5. Count (): it counts number of rows
Select count (*) from EMP
Select count (ename) from EMP
Select count (comm) from EMP
Note:
1. Count Function doesn’t consider null as a value.
2. COUNT function does not count the rows of the column whose data type is BIGINT, In
such situations we have to use COUNT_BIG function
6. Standard deviation ():
Select stdev (sal) from EMP
7. Variance ():
Select var (sal) from EMP
DISTINCT ( ): This function displays the different values available for a specific column. It
considers one NULL value.
Ex: SELECT DISTINCT (DEPTNO) AS DIFF_VALUES FROM EMP
DIFF_VALUES
10
20
Ex: SELECT COUNT (DISTINCT( DEPTNO)) AS NO_OF_ROWS FROM EMP
NO_OF_ROWS
2
2. Numeric functions:
1. Absolute:
Select abs (-9.5)
O/p: 9.5
2. Ceiling:
Select ceiling (9.01)
O/p: 10
3. Floor:
21
Suresh
Select floor (9.9)
O/p: 9
4. Square root:
Select sqrt (144)
O/p: 12
5. Power:
Select power (3, 3)
O/p: 27(3*3*3)
6. Square:
Select square (3)
O/p: 9(3*3)
7. Pi ():
Select pi ()
O/p: 3.14(22/7)
8. Log:
Select log (2)
O/p: 0.693147180559945
9. Exp:
Select exp (2)
O/p: 7.38905609893065
10. ROUND (M, N):
IT WILL ROUND THE VALUE OF M TO NEAREST WHOLE NUMBER OF IT WILL
AROUND.
 SELECT ROUND (15.143)
 SELECT ROUND (16.513)
15
16
22
Suresh
 SELECT ROUND (16.816)
 SELECT ROUND (21.132,1)
 SELECT ROUND (25.143)
3. Character functions :( String functions)
1. Length:
Select Len ('Hyderabad')
O/p: 9
2. Upper:
Select upper ('Hyderabad')
O/p: HYDERABAD
3. Lower:
Select lower ('HYDERABAD')
O/P: hyderabad
4. Reverse:
Select reverse ('Malayalam')
O/p: Malayalam
Select reverse ('school')
O/p: loohcs
5. Replace:
Select replace ('hyderabad','hyd','cyb')
O/p: cyberabad
6. Substring:
Select substring ('hyderabad', 3, 5)
O/p: derab
7. ASCII (Character): It gives ASCII value of a character
17
21.1
25
23
Suresh
Select ASCII (‘A’)
O/p: 65
Select ASCII (‘a’)
O/p: 97
8. Char (n): It gives character for given ASCII value
Select char (98)
O/p: b
Date time functions:
1. Getdate ():
Select getdate ()
O/p: 2009-07-17 18:11:20.000
2. Getutcdate ():
Select getutcdate ()
O/p: 2009-07-17 12:42:09.263
3. Dateadd:
Select dateadd (dd, 7, getdate ())
O/p: 2010-04-27 15:24:15.827
4. Datediff:
Select datediff (mm,'03/26/04', getdate ())
O/p: 73
5. Date part:
Select datepart (yy, getdate ())
O/p: 2010
Select datepart (mm, getdate ())
O/p: 4
Select datepart (dd, getdate ())
O/p: 20
24
Suresh
6. Date name:
Select datename (DW, getdate ())
O/p: Tuesday
Set operators:
a= {1, 2, 3}
b= {3, 4, 5}
1. A union B= {1, 2, 3, 4, 5}
2. A union all B= {1, 2, 3, 3, 4, 5}
Note: union all retrieves duplicate data
3. A intersect B= {3}
4. A except B = A minus B= {1, 2}
1. Union:
SELECT EMPNO FROM EMP
UNION
SELECT DEPTNO FROM DEPT
2. Union all:
SELECT EMPNO FROM EMP
UNION ALL
SELECT DEPTNO FROM DEPT
3. Intersect:
SELECT EMPNO FROM EMP
INTERSECT
SELECT DEPTNO FROM DEPT
4. Except:
SELECT EMPNO FROM EMP
EXCEPT
SELECT DEPTNO FROM DEPT
Group by clause:
• Used to group similar data in the output
• Conjunction of the similar data
• Used to divide the table into number of subgroups based on a specific column.
• Minimum single group or aggregate function is mandatory
25
Suresh
• If column contains similar data then only we can use it into group by clause
 Display the number of employee working in different jobs of EMP table
Ex: Select job, count (job) from EMP
Group by job
 Display max and min salaries of employees who are working in different deptno's of EMP
table
Ex: Select deptno, max (sal), min (sal) from EMP
Group by (deptno)
Ex: SELECT DEPTNO, MAX (SAL) AS HISAL, MIN (SAL) AS LOSAL, SUM (SAL) AS TOTSAL,
AVG (SAL) AS AVGSAL FROM EMP
GROUP BY DEPTNO
Having clause:
• It is an arithmetical expression
• It can be used as an extension of group by clause and we can’t use where clause after
group by clause
• This clause is used to evaluate a condition with group by clause. Generally for evaluating
conditions we will use WHERE clause, but where clause does not support by group by
clause.
Ex: Select job, count (deptno) from EMP
Group by job
Having count (deptno)>2
Ex: SELECT DEPTNO, MAX (SAL) AS HISAL, MIN (SAL) AS LOSAL,
SUM (SAL) AS TOTSAL, AVG (SAL) AS AVGSAL FROM EMP
GROUP BY DEPTNO HAVING AVG (SAL)>10000
Order by clause:
• It is temporary sorting of the data either in ascending order or in Descending order
• Default is ascending order
Ascending:
Ex: Select*from EMP order by sal
Descending:
26
Suresh
Ex: Select*from EMP order by sal desc
Clause precedence:
1. Where clause
2. Group by clause
3. Having clause
4. order by clause
Joins:
• Used to retrieve data from multiple tables
• Joins plays major role in performance tuning
• Joins comes under temporary relations
• We need a common column or common data column in multiple tables
• Two tables are there, they are EMP and DEPT am creating joins between them
• Both tables contains a common column i.e. deptno, so that we can create Joins between
EMP, DEPT tables
• Formula: no. of joins=no. of tables-1
Types of JOINS:
1. Inner join :( Equi join)
We are retrieving data from EMP, DEPT tables
Ex:
Select empno, ename, sal, d.deptno, dname, loc from EMP e
Inner join DEPT d on e.deptno=d.deptno
Note: Query retrieves equal number of rows from both tables
2. Outer join: This is three types
1. Left outer join:
Select empno, ename, sal, d.deptno, dname, loc from EMP e
Left outer join DEPT d on e.deptno=d.deptno
It retrieves condition satisfies and non satisfied data from left side table of the condition i.e. EMP,
it retrieves only condition satisfied data from right side table of the condition i.e. DEPT
2. Right outer join:
Select empno, ename, sal, d.deptno, dname, loc from EMP e
Right outer join DEPT d on e.deptno=d.deptno
27
Suresh
It retrieves condition satisfied from left side table of the condition i.e. EMP, it retrieves condition
satisfied data and non satisfied data from right side table of the condition i.e. DEPT
3. Full outer join:
This is combination of both right and left outer joins.
Select empno, ename, sal, d.deptno, dname, loc from EMP e
Full outer join DEPT d on e.deptno=d.deptno
It retrieves condition satisfied and non satisfied data from both tables.
3. Non-equi join: EMP table contains a column sal, in SALGRADE table, we got two columns
losal and hisal so that we can define a join condition.
Select empno, ename, sal, grade from EMP e, SALGRADE s where
e.sal between s.losal and s.hisal
By using above query we can map employees and their grades.
4. Cross join :( Cartesian product)
a= (1, 2, 3)
b= (4, 5, 6)
A*B=3*3=9
EMP table contains 14 rows
Dept table contains 4 rows
Cross join of EMP, DEPT tables produces 56 rows
Ex:
Select*from EMP cross join DEPT
Creating a table by copying data and structure from another table:
Syn:
Select*into <TN> from <existing_table>
Ex:
Select*into EMP1 from EMP
Ex: (Oracle)
Create table EMP1 as select*from EMP;
Creating a table by copying sturucture from another table:
In this by defining false condition we can avoid copying of data.
28
Suresh
Syn:
Select*into <TN> from <existing_tabel> where <false_condition>
Ex:
Select*into EMP2 from EMP where 1=2
SUB-QUERIES:
• It is a Combination of multiple queries or select statements.
• Query with in a query is known as Sub-Query
Syn:
Select statement (Select statement)
Outer query inner query
Types:
1. Simple or single row sub query:
• It returns only single row to the user
Ex: Retrieve second highest sal from EMP table
Select max (sal) from EMP where sal< (select max (sal) from EMP)
2. Nested sub query:
• It is also simple sub query
• It returns single row
Ex: Retrieve third highest sal from EMP table
Select max (sal) from EMP where sal< (select max (sal) from EMP where
Sal< (select max (sal) from EMP))
Distinct: It eliminates duplications temporarily.
Ex:
A. Select sal from EMP
29
Suresh
B. Select distinct (sal) from EMP
 Formula for retrieving n highest salaries from EMP table:
Select max (sal) from EMP e where n= (select count (distinct (sal)) from EMP b
where e.sal<b.sal)
 N is a number which indicates position of the sal
 N starts from zero
 n=n-1
 Formula for Min sal:
Select min (sal) from EMP e where n= (select count (distinct (sal)) from
EMP b where e.sal>b.sal)
3. Co-related sub query:
 It can return single and multiple rows to the user
I want to retrieve deptno 20 data from EMP table, for that I want Satisfy the condition in dept table
Ex:
Select*from EMP where deptno= (select deptno from DEPT where dname='accounting')
Note: If a sub query sends multiple values to its nearest main query then we have to use IN
operator between Main query and Sub query.
Ex: WAQ to display employee details, who are working under RAM dept.
SELECT * FROM EMP WHERE DEPTNO= (SELECT DEPTNO FROM EMP WHERE
ENAME=’RAM’)
Ex: WAQ To display employee details, whose salary is greater than highest salary of 10th
department
SELECT * FROM EMP WHERE SAL> (SELECT MAX (SAL) FROM EMP WHERE
DEPTNO=10)
Ex: WAQ To display employee details, whose salary is greater than average salary of RAM
department
SELECT * FROM EMP WHERE SAL> (SELECT AVG (SAL) FROM EMP WHERE DEPTNO=
SELECT DEPTNO FROM EMP WHERE ENAME=’RAM’)
Constraints:
 Set of rules which are used to improve functionality of tables
30
Suresh
 These are inbuilt rules
 We can impose constraints on columns
Adv:
1. Creating permanent relations between tables
2. We can avoid duplications and null values
3. We can create permanent conditions
Note: We can create a constraint along with table creation this is of two types:
1. Column level Constraint: It can be created on single column
2. Table level Constraint: It can be created on multiple columns
Note: We can add a constraint to the existing table
Types:
1. Primary key
2. Unique constraint
3. Check constraint
4. Not null
5. Foreign key (Referential integrity)
1. Primary key:
Properties:
• It is unique
• It is not null
 Column level Primary Key:
Syn: create table <TN> (col1 DT (l) constraint con_name primary key, col2 DT (l), col3 DT (l))
Ex: create table t1 (id int constraint p_key primary key, name varchar (20), DOB datetime)
• In this we can create a constraint on single column only
 Table level Primary key:
syn: create table <tn>(col1 dt(l),col2 dt(l),col3 dt(l), constraint con_name primary key(col1,col2))
Ex: create table t2 (id int, name varchar (20), DOB datetime, constraint p_key3 primary key (id,
name))
• We can create single constraint on multiple columns
31
Suresh
• Max of single primary key can be created on a table
• If single primary key is working on multiple columns then it is known as "composite
primary key"
2. Unique constraint:
Properties:
• Unique
• It accepts single null value
Syn: create table <TN> (col1 DT (l) constraint con_name unique, col2 DT (l), col3 DT (l))
Ex: create table t3 (id int constraint u_con unique, dname varchar (20), loc varchar (20))
3. Check constraint: used to impose permanent conditions on columns
Syn: create table <tn>(col1 dt(l),col2 dt(l) constraint con_name check(condition),col3 dt(l))
Ex: create table t4 (id int, sal numeric (7, 2) constraint check_con check (sal>3000), commission
numeric (5, 2))
4. Not null: it doesn’t accept null values
Syn: create table <TN> (col1 DT (l) constraint con_name not null)
Ex: create table t5 (id int constraint n_null not null)
5. Foreign key:
• It always references values from either primary key or unique constraint and there are no
properties for foreign key.
• It also known as referential integrity
• This reference will be stored into database permanently, so that
• It is comes under permanent relation
• Generally primary key and foreign are a part of different tables
• Primary key table is known as parent or master table
• Foreign key table is known as child or detail table
• We can create primary key and foreign key in single table, that is known as "self
referential integrity"
Note:
1. Primary key and foreign key columns data types must be same.
32
Suresh
2. If the value existing in primary key then only we can insert same value into foreign key.
3. Foreign key accepts null values when it is referencing from unique constraint
syn: create table <tn>(col1 dt(l),col2 dt(l),col3 dt(l), constraint con_name foreign
key(col1)references <tn2>(col1))
Ex: create table t6 (id int, address varchar (50), job varchar (20), constraint f_key foreign key (id)
references t1 (id))
Adding constraint to a table:
Syn: alter table <TN> add constraint con_name type_constraint (col_list)
Ex: alter table t2 add constraint p_key3 primary key (id)
Dropping constraint:
Syn: alter table <TN> drop constraint con_name
Ex: alter table t2 drop constraint p_key3
Information regarding constraints of a table:
Syn: sp_helpconstraint <TN>
Ex: sp_helpconstraint t1
Normalization:
Normalization is process of splitting the base table into multiple tables based on the theory of
Functional Dependency.
OR
Normalization is repetitive process in order to identify the functional dependencies among the
columns and to remove them. If any functional dependency is occurred after the normalization
process again we have to start the same process until all functional dependencies have been
removed.
To do this Normalization we have to follow rules or conditions called Normal Forms.
Un-Normalized Table
EMPNO PROJNO ENAME PNAME SAL BUD DEPTNO DNAME LOC
11 (P1, P2) ---- (Pn1, Pn2) ----- ----- 10 -------- -----
22 (P2, P3) ---- (Pn2, Pn3) ----- ----- 10 -------- -----
33 (P1, P3) ---- (Pn1, Pn3) ----- ----- 20 -------- -----
33
Suresh
EMPNO and PROJNO are Primary Keys called ‘COMPOSITE PRIMARY KEY’
FIRST NORMAL FORM (1NF): According to first normal form table should contain only single
values columns. But in the above un-normalized table the columns PROJNO and PNAME
contains multiple values.
To make the table into first normal form we should have to split the multiple values into single
values.
EMPNO PROJNO ENAME PNAME SAL BUD DEPTNO DNAME LOC
11 P1 ---- Pn1 ----- ----- 10 -------- -----
11 P2 ---- Pn2 ----- ----- 10 -------- -----
22 P2 ---- Pn2 ----- ----- 10 -------- -----
22 P3 ---- Pn3 ----- ----- 10 -------- -----
33 P1 ---- Pn1 ----- ----- 20 -------- -----
33 P3 ---- Pn3 ----- ----- 20 -------- -----
SECOND NORMAL FORM (2NF):
According to second normal form table should be in 1NF and we should have to remove Partial
Functional Dependency.
In the above table DEPTNO non-key column dependent part of the Primary key column i.e.
EMPNO. It means there existed Partial functional dependency.
To make the table into second normal form we have to divide the table into multiple tables.
PROJ-INFO
PROJNO PNAMEBUD
P1 Pn1 ------
P2 Pn2 ------
P3 Pn3 ------
EMP-INFO
EMPNO ENAME SAL DEPTNO DNAME LOC
11 ---- ---- 10 ------ -----
22 ---- ---- 10 ------ -----
33 ---- ---- 20 ------ -----
THIRD NORMAL FORM (3NF):
34
Suresh
According to second normal form table should be in 2NF and we should have to remove
Transitive Functional Dependency.
In the above EMP-INFO table non-key column DNAME dependent part on the other non- key
column i.e.DEPTNO. It means there existed Transitive functional dependency.
To make the table into third normal form we have to divide the table into multiple tables.
PROJ-INFO
PROJNO PNAMEBUD
P1 Pn1 ------
P2 Pn2 ------
P3 Pn3 ------
EMP-INFO DEPT-INFO
EMPNO ENAME SAL DEPTNO DNAME LOC
11 ---- ---- 10 ------ -----
22 ---- ---- 20 ------ -----
33 ---- ----
Views:
A View is nothing but an image table or virtual table, which is created for a base table. A view can
be created by taking all values from the base table or by taking only selected values from base
table. There are two types’ views available in SQL Server.
1. Simple Views
2. Complex Views
Note: If we perform any modifications in base table, then those modifications automatically
effected in view and vice-versa.
1. Simple Views: Creating View by taking only one single base table.
Syntax:
CREATE VIEW VIEWNAME [WITH ENCRYPTION]
AS SELECT * FROM TABLENAME [WHERE CONDITION]
[WITH CHECK OPTION]
Ex:
CREATE VIEW V1 AS SELECT * FROM EMP
INSERT INTO V1 VALUES (55,’RAVI’, 10000, 10)
The above insert statement inserts the values into base table EMP as well as into view V1.
Ex:
35
Suresh
CREATE VIEW V2 AS SELECT * FROM EMP WHERE DEPTNO=10
INSERT INTO V2 VALUES (66,’BABBU’, 25000, 10)
The above insert statement inserts the values into base table EMP as well as into view
V2.
INSERT INTO V2 VALUES (77,’AMAR’, 15000, 20)
The above insert statement inserts the values into only base table EMP but not into view
V2 because according to the definition of V2 user supplied values are invalid values. It means
invalid values are inserting into base table EMP. To stop this kind of operations we have to create
the view with ‘WITH CHECK OPTION’.
Ex:
CREATE VIEW V3 AS SELECT * FROM EMP WHERE DEPTNO=10
WITH CHECK OPTION
INSERT INTO V3 VALUES (88,’TEJA’, 25000, 20)
The above insert statement cannot insert the values into base table EMP as well as into view V3.
SP_HELPTEXT: This stored procedure is used to display the definition of a specific view.
Syntax:
SP_HELPTEXT VIEWNAME
Ex: SP_HELPTEXT V1
Output: CREATE VIEW V1 AS SELECT * FROM EMP
WITH ENCRYPTION: Once we create any view with ‘WITH ENCRYPTION’ then we cannot find
the definition of that particular view using SP_HELPTEXT stored procedure because this
encryption option hides the definition.
Ex:
CREATE VIEW V4 WITH ENCRYPTION
AS SELECT * FROM EMP WHERE DEPTNO=20
SP_HELPTEXT V4
Output: The text for object v4 is encrypted
To decrypt the definition of view V4 we have to follow the below approach
1. Replace CREATE with ALTER
2. Remove WITH ENCRYPTION keyword
Ex:
36
Suresh
ALTER VIEW V4 AS SELECT * FROM EMP WHERE DEPTNO=20
SP_HELPTEXT V4
CREATE VIEW V4 AS SELECT * FROM EMP WHERE DEPTNO=20
2. Complex Views:
Creating View by taking multiple base tables.
Ex:
CREATE VIEW EMP_DEPT_VIEW AS SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO,
DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO
Syntax to create view based on another views:
SQL SERVER enables users to create views based on another view. We can create view based
on another view up to 32 levels
Syntax:
CREATE VIEW VIEWNAME [WITH ENCRYPTION] AS SELECT * FROM VIEWNAME [WHERE
CONDITION] [WITH CHECK OPTION]
Ex:
CREATE VIEW V5 AS SELECT * FROM V1 WHERE DEPTNO=10
Syntax to Drop the Views:
DROP VIEW VIEWNAME […N]
Ex: DROP VIEW V1, V2, V3, V4, V5
Indexes:
Indexes in SQL server is similar to index in text book... Indexes are used to improve the
performance of queries.
• INDEXES ARE GENERALLY CREATED FOR FOLLOWING COLUMNS
1. Primary key column
2. Foreign key column: frequently used in join conditions.
3. Column which are frequently used in where clause
4. Columns, which are used to retrieve the data in sorting order.
• INDEXED CANNOT BE CREATED FOR FOLLOWING COLUMNS
1. The columns which are not used frequently used in where
clause.
2. Columns containing the duplicate and null values
3. Columns containing images, binary information, and text
information.
TYPES OF INDEXES:
37
Suresh
• CLUSTERED INDEX
• NON-CLUSTERED INDEX
CLUSTERED INDEX: only one clustered index is allowed per table. The order of values in a
table order of values in index is also same. When cluster index is created on table data is
arranged in ascending order cluster index will occupy 5% of the table.
Syntax:
CREATE [UNIQUE] CLUSTERED INDEX INDEXNAME ON TABLENAME (COLUMN)
Ex:
CREATE CLUSTERED INDEX CI ON EMP (EMPNO)
Note: If we want to maintain unique values in clustered/non clustered indexed column then
specify UNIQUE keyword along with CLUSTERED INDEX/NONCLUSTERD INDEX
NONCLUSTERED INDEX: It is the default index created by the server the physical order of
the data in the table is different from the order of the values in index. Max no. Of non-
clustered indexed allowed for table is 249
Syntax:
CREATE [UNIQUE] NONCLUSTERED INDEX INDEXNAME
ON TABLENAME (COLUMN1…)
Ex:
CREATE NONCLUSTERED INDEX NCI ON EMP (ENAME, SAL)
Ex:
CREATE UNIQUE NONCLUSTERED INDEX UI ON DEPT (DNAME)
COMPOSITE INDEX: If a Unique NonClustered index is created on more than one column
then that concept is called composite index.
CREATE UNIQUE NONCLUSTERED INDEX COI ON DEPT (DEPTNO, DNAME)
DEPTNO DNAME
10 SALES
20 HR
30 IR
10 HR (Accepted)
20 SALES (Accepted)
30 IR (Repeated, Not accepted)
SP_HELPINDEX: This stored procedure is used to display the list of indexes, which have been
placed on different columns of a specific table.
Ex: SP_HELPINDEX EMP
Syntax to drop the index:
38
Suresh
DROP INDEX TABLENAME.INDEXNAME
Ex:
DROP INDEX DEPT.UI
Synonym:
• It is a database object
• It is a second or duplicate name which can be assigned to a table
• It will not occupies any space, just it is a second name of the table
• Trough synonyms we can impose securities i.e. we can hide actual table names
Syn: create synonym syn_name for <TN>
Ex: create synonym syn_1 for EMP
Retrieving data:
Syn: select*from syn_name
Ex: select*from syn_1
Dropping:
Syn: drop synonym <TN>
Ex: drop synonym syn_1
RULES AND DEFAULTS:
CREATING DEFAULT: Default is one of the database objects used to declare default values
globally.
Syntax:
CREATE DEFAULT DEFAULTNAME AS NUMERICVALUE/STRING VALUE
Ex:
CREATE DEFAULT D1 AS ‘UNKNOWN’
BINDING THE DEFAULT TO COLUMN:
Syntax:
SP_BINDDEFAULT DEFAULTNAME, ‘TABLENAME.COLUMN’
Ex:
SP_BINDDEFAULT D1, ‘DEPT.LOC’
SP_BINDEFAULT D1, ‘EMP.ENAME’
39
Suresh
INSERT INTO DEPT (DEPTNO, DNAME) VALUES (10,ACCOUNTING’)
SELECT * FROM DEPT WHERE DEPTNO =10
DEPTNO DNAME LOC
10 ACCOUNTING UNKNOWN
INSERT INTO EMP (EMPNO, SAL, DEPTNO) VALUES (100, 5000,20)
SELECT EMPNO, ENAME, DEPTNO FROM EMP WHERE EMPNO =100
EMPNO ENAME DEPTNO
100 UNKNOWN 20
UNBINDING THE DEFAULT FROM THE BINDING COLUMN:
Syntax:
SP_UNBINDEFAULT ‘TABLENAME...COLUMN’
SP_UNBINDEFAULT ‘ DEPT.LOC’
SP_UNBINDEFAULT ‘ EMP.ENAME’
DROPPING THE DEFAULT:
Syntax:
DROP DEFAULT DEFAULTNAME
DROP DEFAULT D1
CREATING RULES: Rule is just check constraint but it is placed on columns globally.
Syntax:
CREATE RULE RULENAME AS EXPRESSION
Ex:
CREATE RULE R1 AS @ X >=10 AND @ X <= 60
BINDING THE RULE:
SP_BINDEFAULT RULENAME, ‘ TABLE.COLUMN’
SP_BINDEFAULT R1, ‘DEPT.DEPTNO’
INSERT INTO DEPT (DEPTNO) VALUES (70)
ERROR
40
Suresh
UNBINDING THE RULES:
SP_UNBIND RULE ‘DEPT.DEPTNO’
DROPPING THE RULES:
DROP RULE RULENAME
DROP RULE R1
TSQL Programs:
Variable: whose can be varied is known as a variable
Types:
1. Local variable: once we declared local variable then it can be used into single program
Ex: @x int
2. Global variable: once we declared global variable then it can be used into many no. of
programs
Ex: @@y int
Constant: whose value can’t be varied
Ex: 1, 2,3,4,5
Note: tsql programs also known as tsql batches, these are two types
1. Named batches
2. Unnamed batches
Structure:
Declare
Declaration and initiation of variables
Begin
Body of the program
End
1. Declare:
User can declare variables according to the requirement of the batch and can assign initial
values to variables
41
Suresh
Ex: declare @x int
Set @x=10
2. Begin:
It contains actual code i.e.
Logic
Exceptions
Conditional statements
Output
Output: print 'output'
3. End: Ending of the batch
 WAP to display the word 'welcome to database'
Begin
Print 'welcome to database'
End
 WAP to calculate sum of two numbers
Declare @x int
Set @x=20
Declare @y int
Set @y=10
Declare @z int
Begin
Set @z=@x+@y
Print @z
End
Conditional Statements:
1. If. Else:
Syn:
Declare
Variable declaration and initiation
Begin
If condition
Output
Else
Output
End
 WAP to find out greatest number among two numbers
Declare @x int
Set @x=20
Declare @y int
42
Suresh
Set @y=10
Begin
If @x>@y
Print 'x is greatest'
Else
Print 'y is greatest'
End
2. If. Elseif... Else:
Syn:
Declare
Variable declaration and initiation
Begin
If condition
Output
Else if condition
Output
Else
Output
End
 WAP to find out greatest number among three numbers
Declare @x int
Set @x=20
Declare @y int
Set @y=10
Declare @z int
Set @z=5
Begin
If @x>@y and @x>@z
Print 'x is greatest'
Else if @y>@x and @y>@z
Print 'y is greatest'
Else
Print 'z is greatest'
End
3. While:
Syn:
Declare
Variable declaration and initiation
While condition
Begin
Body of the program
End
 WAP to display numbers from 1 to 10 with increment of 1
DECLARE @counter INT
SET @counter=1
43
Suresh
WHILE @counter <= 10
BEGIN
PRINT @counter
SET @counter=@counter+1
END
Cursors:
Cursor is a logical area, which is used to retrieve a particular nth record. Selecting a particular nth
record is not possible through physical area (Table). In such situations one logical area (Cursor)
we can create and then we can select a particular nth record. Cursors are used to store
transaction information temporarily.
Types of Cursors:
1. STATIC CURSOR
2. DYNAMIC CURSOR
3. KEYSET CURSOR
4. FORWARD_ONLY CURSOR
DEPT_TABLE:
DEPTNO DNAME LOC
10 SALES HYD
20 HR CHE
30 IR BAN
40 A/C MUM
Syntax:
Syntax to declare the Cursor:
DECLARE CURSORNAME CURSOR CURSORTYPE
FOR SELECT * FROM TABLENAME
Syntax to open the Cursor:
OPEN CURSORNAME
Syntax to fetch the records from Cursor:
FETCH {FIRST/NEXT/PRIOR/LAST/ABSOLUTE N/RELATIVE N}
FROM CURSORNAME
Syntax to close the Cursor:
CLOSE CURSORNAME
Syntax to de allocates the Cursor:
DEALLOCATE CURSORNAME
FIRST: Fetches first record from the cursor
44
Suresh
NEXT: Fetches next record from the current position of the cursor
PRIOR: Fetches previous record from the current position of the cursor
LAST: Fetches last record from the cursor
ABSOLUTE N: Fetches nth record from the top of the cursor if n is positive fetches the nth record
from bottom of the cursor if n is negative. Where n is an integer
RELATIVE N: Fetches nth next record from current position of the cursor if n is positive fetches
nth previous record from the current position of the cursor if n is negative where n is an integer.
1. STATIC CURSOR:
This is the logical area in which dynamic updations not possible. If we want those updations in
logical area we close the cursor and we need to reopen it.
1.
DECLARE SC CURSOR STATIC FOR SELECT * FROM DEPT
OPEN SC
FETCH FIRST FROM SC
10 SALES HYD
UPDATE DEPT SET DEPTNO=15 WHERE DEPTNO=10
FETCH FIRST FROM SC
10 SALES HYD
CLOSE SC
OPEN SC
FETCH FIRST FROM SC
15 SALES HYD
FETCH NEXT FROM SC
20 HR CHE
FETCH PRIOR FROM SC
15 SALES HYD
FETCH LAST FROMSC
40 A/C MUM
FETCH ABSOLUTE 2 FROM SC
20 HR CHE
FETCH ABSOLUTE –2 FROM SC
30 IR BAN
FETCH FIRST FROM SC
15 SALES HYD
FETCH RELATIVE 2 FROM SC
30 IR BAN
45
Suresh
FETCH RELATIVE –2 FROM SC
15 SALES HYD
CLOSE SC
DEALLOCATE SC
2. DYNAMIC CURSOR:
This is the logical area in which dynamic updations possible. We need to close and reopen the
cursor for the modified values
Ex:
DECLARE DC CURSOR DYNAMIC FOR SELECT * FROM DEPT
OPEN SC
FETCH FIRST FROM DC
15 SALES HYD
UPDATE DEPT SET DEPTNO=10 WHERE DEPTNO=15
FETCH FIRST FROM DC
10 SALES HYD
CLOSE DC
DEALLOCATE DC
Note: ABSOLUTE N will not be supported by the dynamic cursor because dynamic updations are
possible.
3. KEYSET CURSOR:
This is the logical area, which is useful only when there is a primary key in the table. This logical
area holds only Primary key column values. Based on the key column values in the logical area
(Cursor) the rest column values are coming from physical area (Table).
Ex:
DECLARE KC CURSOR KEYSET FOR SELECT * FROM DEPT
OPEN KC
FETCH FIRST FROM KC
10 SALES HYD
UPDATE DEPT SET LOC=’SRNAGAR’ WHERE LOC=’HYD’
FETCH FIRST FROM KC
10 SALES SRNAGAR
UPDATE DEPT SET DEPTNO=15 WHERE DEPTNO=10
FETCH FIRST FROM KC
0 NULL NULL
CLOSE KC
46
Suresh
OPEN KC
FETCH FIRST FROM KC
15 SALES HYD
CLOSE KC
DEALLOCATE KC
Note: Dynamic updations are not possible on key column of the keyset cursor, we have to close
the cursor and we need to reopen it for the modified values.
4. FORWARD_ONLY CURSOR:
This is the most unused logical area because it supports only NEXT operation.
Ex:
DECLARE FC CURSOR FORWARD_ONLY FOR SELECT * FROM DEPT
OPEN FC
FETCH FIRST FROM FC
Error Message
FETCH NEXT FROM FC
15 SALES HYD
CLOSE SC
DEALLOCATE FC
NOTE:
If the cursor does not found any value in its searching process then it will display the
corresponding column values.
1. BATCH TO FETCH MULTIPLE RECORDS FROM STATIC CURSOR
Step1: DECLARE SC CURSOR STATIC FOR SELECT * FROM DEPT
Step2:
DECLARE @N INT
OPEN SC
SET @N=2
WHILE (@N<=4)
BEGIN
FETCH ABSOLUTE @N FROM SC
SET @N=@N+1
END
Step3: CLOSE SC
DEALLOCATE SC
OUTPUT:
47
Suresh
DEPTNO DNAME LOC
20 HR CHE
DEPTNO DNAME LOC
30 IR BAN
DEPTNO DNAME LOC
40 A/C MUM
Stored Procedures:
• It is a database object
• After successful compilation it will be stored into a precompiled programming unit
• So that with out compilation we can use same stored procedure any number of times
• User can get reusability
• It is major part performance tuning
• Used complete a task in database
Types:
1. System stored procedures:
Ex:
sp_tables
sp_helptable <TN>
sp_helpdb <database name>
sp_rename
sp_addumpdevice
2. User stored procedure:
• defined by the users explicitly
• variable are known as "parameters"
• parameters are two types
1. In :( default) used to pass the values
2. Output: used to get the values
Note: stored procedure can return multiple values through its output parameter
Syntax:
CREATE PROC [EDURE] PROCEDURENAME
[@PARA 1 DATATYPE (SIZE)[=DEFAULT_VALUE][OUTPUT]
48
Suresh
@PARA 2 DATATYPE (SIZE)[=DEFAULT_VALUE][VALUE],….]
AS
BEGIN
SELECT STATEMENT
END
Syntax to execute the user defined stored procedure:
EXEC [UTE] PROCEDURENAME [VALUE1, VALUE2…]
Drop:
Drop procedure pro_name
Programs:
 Create a stored procedure to insert data into dept table
Create procedure insert_dept @dno int,@name varchar (20),
@loc varchar (20)
As
Begin
Insert into dept (deptno, dname, loc) values (@dno, @name, @loc)
End
Execution:
Exec insert_dept 50,'csc','hyderabad'
Result:
Select*from dept
 Create a stored procedure to update dname, loc according to the given deptno of dept
table
Create procedure update_dept @dno int, @name varchar (20),
@loc varchar (20)
As
Begin
Update dept set dname=@name,loc=@loc where deptno=@dno
End
Execution:
Exec update_dept 50,'eee','india'
Result:
Select*from dept
Note: The number of values supplied through EXEC statement must be equal to the
number parameters.
49
Suresh
 Write a procedure to select the data from EMP table.
CREATE PROCEDURE P1
AS
BEGIN
SELECT * FROM EMP
END
EXEC P1
 Write a procedure to select the data from EMP table based on user supplied DEPTNO.
CREATE PROCEDURE P2 @X INT
AS
BEGIN
SELECT * FROM EMP WHERE DEPTNO=@X
END
EXEC P2 20
 Write a procedure to add two numbers
CREATE PROCEDURE P3 @A INT=10,@B INT=20
AS
BEGIN
DECLARE @C INT
SET @C=@A+@B
PRINT @C
END
EXEC P3
Output: 30
EXEC P3 25, 45
Output: 70
Note: Server will give highest priority to the user supplied values rather than default values.
User Defined Functions :( UDF’S)
• It is a database object
• Used to complete calculations in database
• It is like stored procedure after successful compilation it will stored into database as a pre
• compiled programming unit
• User’s gets reusability facility i.e. without compilation users can go for execution
• It contains only one parameter
In parameter: used to pass the values
50
Suresh
1. Through return statement it can send value to the user
2. Udf’s can return single value with data type
Functions created by user are called user defined functions
Types of user defined functions:
1. SCALAR VALUED FUNCTIONS
2. TABLE VALUED FUNCTIONS
1. Scalar valued functions: These functions will return a scalar value to the calling
environment
Syntax:
CREATE FUNCTION < FUNCTION_NAME> (@PARA 1 DATA TYPE ,
@ PARA 2 DATATYPE…)
RETURNS <DATATYPE>
AS
BEGIN
DECLARE @VARIABLE DATATYPE
--------
----------
RETURN @VARIABLE
END
Syntax to execute the user defined function:
SELECT/PRINT DBO.FUNCTIONNAME (VALUE1, VALUE2…)
Note: The number of values supplied through PRINT/SELECT statement must be equal to
the number parameters.
 Write a function to find the product of two numbers
CREATE FUNCTION F1 (@ A INT, @B INT)
RETURNS INT
AS
BEGIN
DECLARE @ C INT
SET @C = @A * @B
RETURN @C
END
SELECT/PRINT DBO.F1 (3,5)
 Write function to find the net salary of an employee read EMPNO though parameter and
display the net to return value
CREATE FUNCTION F2 (@ VNO INT)
RETURNS INT
AS
BEGIN
DECLARE @ VSAL INT, @VCOM INT, @NET INT
SELECT @VSAL = SAL, @VCOM=COM
51
Suresh
FROM EMP WHERE EMPNO =@VNO
IF @ VCOM IS NULL
BEGIN
PRINT ‘COMMISION IS NULL’
SET @NET = @VSAL
END
ELSE
BEGIN
SET @ NET = @VSAL + @VCOM
END
RETURN (@NET)
END
PRINT/SELECT DBO.F2(22)
2. Table valued function: These functions will return entire table to the calling environment.
Syntax:
CREATE FUNCTION <FUNCTION_NAME> (PARA 1 DATA TYPE ……….)
RETURNS TABLE
AS
BEGIN
<FUNCTION BODY>
RETURN (SELECT STATEMENT)
END
 Write a function to return entire dept table
CREATE FUNCTION F3()
RETURNS TABLE
AS
BEGIN
RETURN (SELECT * FROM DEPT)
END
SELECT * FROM F3()
DEPT DNAME LOC

CREATE FUNCTION F4()
RETURN TABLE
AS BEGIN
RETURN(SELECT ENAME, DNAME FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO)
END
SELECT * FROM F4()
52
Suresh
ENAME DNAME
SMITH RESEARCH
MILLER ACCOUNTING
 Create function to convert datetime data into char
Default datetime format: 'yyyy-mm-dd HH: MI: SS: MS’
 2009-07-31 -- is it datetime data in sqlserver 2005?
No
CREATE FUNCTION DateOnly (@InDateTime date time)
RETURNS varchar (10)
AS
BEGIN
DECLARE @MyOutput varchar (10)
SET @MyOutput = CONVERT (varchar (10), @InDateTime, 101)
RETURN @MyOutput
END
Note: Convert is inbuilt function used to convert data from one data type to another
To call our function, execute: SELECT dbo.DateOnly (GETDATE ())
Drop:
Syn:
Drop function fun_name
TRIGGERS:
Two types of Triggers are there in SQLSERVER 2005, they are
1. DDL TRIGGERS: Can be created on database Servers and databases.
2. DML TRIGGERS: Can be created on Tables and Views.
DML Triggers:
DML triggers respond to user INSERT, UPDATE, DELETE operations against a table or a view.
When a data modification event occurs, the trigger performs a set of actions defined within the
trigger. Similar to stored procedures, triggers are defined in Transact-SQL and allow a full range
of activities to be performed.
A DML trigger can be defined specifically as FOR UPDATE, FOR INSERT, FOR DELETE, or any
combination of the three. UPDATE triggers respond to modifications against one or more
columns within the table, INSERT triggers respond to new data being added to the database, and
DELETE triggers respond to data being deleted from the database.
There are two types of DML triggers: AFTER and INSTEAD OF.
53
Suresh
AFTER triggers are only allowed for tables, and they execute after the data modification has
been completed against the table.
INSTEAD OF triggers execute instead of the original data modification and can be created for
both tables and views.
DML triggers allow you to perform actions in response to data modifications in a table.
For example, you can create a trigger that populates an audit table based on the operation
performed, or perhaps use the trigger to decrement the value of a quantity. Although this ability to
trigger actions automatically is a powerful feature, there are a few things to keep in mind before
your use of triggers proliferates:
• Triggers can often become a hidden and hence forgotten problem. When troubleshooting
Performance or logical issues, DBAs can forget that triggers are executing in the background.
Make sure that your use of triggers is “visible” in your data documentation.
• If you can ensure that all your data modifications flow through a stored procedure, I would
strongly recommend you perform all activities within the stored procedure, rather than use a
Trigger. For example, if you need to update a quantity in a related table, after inserting a sales
record; why not put this logic in the stored procedure instead? The advantages are manageability
(One place to look) and supportability (one place to troubleshoot), when the Procedure needs
modifications or performs unexpected actions.
• Always keep performance in mind and this means writing triggers that execute quickly.
Long-running triggers can significantly slow down data modification operations. Take particular
care in putting triggers into databases with frequent data modifications.
• Non-logged updates do not cause a DML trigger to fire (for example WRITETEXT, TRUNCATE
TABLE and bulk insert operations).
• Constraints usually run faster than a DML trigger, so if your business requirements can be
fulfilled by a constraint, use constraints instead. AFTER triggers run after the data modification
has already occurred, so they cannot be used to prevent a constraint violation.
• Don’t allow result sets from a SELECT statement to be returned within your trigger. Most
applications can’t consume these in an elegant fashion, and embedded queries can hurt the
Trigger’s performance.
Parts of Trigger:
1. Triggering Statement
2. Triggering Restriction
3. Triggering Action
Note: Triggering Action is different from remaining parts, because Trigger fires implicitly
whenever an event occurs against to the Triggering Condition.
Things to Observe:
• When user creates an after Trigger on any table for INSERT operation then server
arranges a temporary table “INSERTED” for holding recently inserted values.
• When user creates an after Trigger on any table for DELETE operation then server
arranges a temporary table “DELETED” for holding recently deleted values.
54
Suresh
• When user creates an after Trigger on any table for UPDATE operation then server
arranges two temporary tables “INSERTED, DELETED” for holding old and new values of
UPDATE operation.
Syntax of After Trigger:
CREATE TRIGGER TRIGGERNAME ON TABLE NAME
FOR/ AFTER {INSERT/ UPDATE/ DELETE}
AS
BEGIN
SQL STATEMENT
END
Syntax for Instead of Trigger:
Create trigger <Trigger_name> on <TN> or <View_name> instead of INSERT OR UPDATE OR
DELETE
As
Begin
Body of the program
End
Drop:
Syntax: Drop trigger <Trigger_name>
Retrieve list of Triggers on a Table:
Syn: sp_helptrigger <TN>
Ex: sp_helptrigger EMP
To view the SQL behind a specific trigger
Syn: sp_helptext <Trigger_name>
Create a trigger for generate alert
Create trigger tri_emp on EMP after insert
As
Begin
Print 'one row inserted'
End
Result:
Insert into EMP (empno) values (1)
Create a trigger for copying data from Temp table to Original table
CREATE TRIGGER deleteorder_trigger ON orders
AFTER DELETE
AS
BEGIN
INSERT INTO orders_archive (order_id, order_date, cust_id)
SELECT order_id, order_date, cust_id FROM DELETED
55
Suresh
End
Note:
1. Create Orders, Orders_archive tables before running above program.
2. Orders, Orders_archive tables contain same structure.
3. DELETED is a temporary table
Ex:
CREATE TRIGGER vendor_trigger ON EMP
AFTER INSERT, UPDATE
AS
BEGIN
UPDATE EMP SET ename=Upper (ename)
WHERE empno IN (SELECT empno FROM INSERTED)
END
Instead of Trigger:
Ex:
CREATE TRIGGER T4 ON DEPT INSTEAD OF INSERT,UPDATE, DELETE
AS
BEGIN
PRINT ‘THESE OPERATIONS ARE NOT ALLOWED’
END
The above trigger fires automatically and shows a message THESE OPERATIONS ARE
NOT ALLOWED, when user try to perform INSERT, UPDATE, DELETE operations on DEPT
table.
DDL TRIGGERS (2005 Triggers):
These triggers are fired when user performs DDL operations in the database and these
triggers belong to database. It means we can define triggers on the current database.
Syntax:
CREATE TRIGGER TRIGGERNAME ON DATABASE
FOR/ AFTER {DROP,/ALTER/ CREATE}
AS
BEGIN
SQL STATEMENT.
END
1.
USE PUBS
CREATE TRIGGER DROP_TRG ON DATABASE FOR DROP_TABLE
AS
BEGIN
PRINT ‘TABLE DROPPED’
END
56
Suresh
2.
USE PUBS
CREATE TRIGGER DROP_TRG ON DATABASE INSTEAD OF DROP_TABLE
AS
BEGIN
PRINT ‘U CANNOT DROP THE TABLE’
END
DIFFERENCE BETWEEN ORACLE & SQL Server:
ORACLE
%TYPE data type
SQL Server
No equivalent
DESCRIPTION
The %TYPE data type of Oracle lets you create a variable and
have that variable's data type be defined by a table or view
column or a PL/SQL package variable.
There is no equivalent for Oracle's %TYPE datatype in T-SQL,
but it can be simulated (not very conveniently though) using
User Defined Data types (UDT). Here is an example:
EXEC sp_addtype 'MyType', 'smallint', NULL
CREATE TABLE MyTable (i MyType)
CREATE PROC MyProc
AS
BEGIN
DECLARE @i MyType
END
BEFORE triggers INSTEAD OF
triggers Use INSTEAD OF trigger in SQL Server as an equivalent to
Oracle's BEFORE trigger.
For more information on INSTEAD OF triggers, see SQL Server
Books Online
DECODE()
function
CASE
expression DECODE can be conveniently simulated using the T-SQL CASE
expression. Here's an example:
SELECT Sport,
CASE Sport
WHEN 'Cricket' THEN 'England'
WHEN 'Hockey' THEN 'India'
WHEN 'Base Ball' THEN 'America'
ELSE NULL
END AS 'Originating Country'
57
Suresh
FROM Sports
DESCRIBE sp_help or
sp_columns There are a lot of alternatives for Oracle's DESCRIBE, in SQL
Server. You could use the system stored procedure sp_help for
detailed information about a table's columns and other
properties.
If sp_help is providing you with too much information, then try
the ODBC catalog stored procedure, sp_columns.
There are a bunch of other useful sp_help* stored procedures
available in SQL Server. You can find more information about
those in SQL Server Books Online.
If none of those procedures are suitable for your requirements,
then you could query the system view
INFORMATION_SCHEMA.COLUMNS, to get the desired
information. You could wrap your code inside a stored
procedure named DESCRIBE, if you wish.
As a last resort, you could even query system tables like
sysobjects and syscolumns, but this is not a recommended
approach.
DUAL table No equivalent
There is no DUAL table in SQL Server. In fact, you don't need
one in SQL Server, as you can have a SELECT statement
without a FROM clause.
For example, consider the following SELECT statement in
Oracle:
SELECT 'Something'
FROM DUAL
In SQL Server, the same result can be obtained by the following
command:
SELECT 'Something'
If you are porting some code from Oracle into SQL Server and if
you don't want to remove all references to DUAL table, then just
create a DUAL table in your database using the following
commands:
CREATE TABLE DUAL
(
DUMMY varchar(1)
)
INSERT INTO DUAL (DUMMY) VALUES ('X')
58
Suresh
INTERSECT
operator
Not supported
Use EXISTS clause to generate the same result.
The following example illustrates the simulation of Oracle's
INTERSECT operator:
SELECT OrderID, OrderDate
FROM Orders O
WHERE EXISTS
(
SELECT 1
FROM RefundsTable R
WHERE O.OrderID = R.OrderID
)
MINUS operator Not supported
Use NOT EXISTS clause in your SELECT statement to
generate the same result.
The following example illustrates the simulation of Oracle's
MINUS operator:
SELECT OrderID, OrderDate
FROM Orders O
WHERE NOT EXISTS
(
SELECT 1
FROM RefundsTable R
WHERE O.OrderID = R.OrderID
)
Nested tables Not supported
Oracle 8i and prior versions didn't support this feature and is
introduced in Oracle 9i. This feature basically enables you to
store a table, within a column. It is like having an array of
records in your database columns.
SQL Server has no concept of nested tables.
As a workaround, You could store your sub-tables or child
tables in the form of XML inside a char, nchar, varchar,
nvarchar, text or ntext type column, and parse it as needed, at
runtime. See OPENXML, sp_xml_preparedocument,
sp_xml_removedocument in SQL Server 2000 Books Online.
Another possible workaround would be to store comma
separated values (CSV).
Note that this is against the basic rules of normalization.
Columns are nomore atomic, with nested tables.
From a design point of view, best thing to do would be, to create
different tables for representing different entities and link them
with primary and foreign key relationships. This will also make
59
Suresh
searching easier.
Packages Not supported
No equivalent in SQL Server for Oracle's Packages and
Package variables concept
PL/SQL T-SQL
PROGRAMMING Every database product implements and extends the standard
SQL. Oracle's implementation of SQL is called PL/SQL, while
Microsoft's is called T-SQL (Transact-SQL)
Row level security No equivalent
Though there is no inbuilt support in SQL Server for row level
permissions, you can implement it using view and system
functions.
For more information and a working example, read this article:
Implementing row level permissions/security in SQL Server
databases
rownum pseudo
column
No equivalent
Though there is no rownum or rowid in SQL Server, there are
several ways in which a row number can be generated.
For some examples, read this article:
Q186133 INF: How to Dynamically Number Rows in a Select
Statement
SELECT...FOR
UPDATE
UPDLOCK hint
Use the locking hint UPDLOCK in your SELECT statement.
See SQL Server Books Online for more information.
Sequences IDENTITY
It is much simpler in SQL Server to generate a sequence value
for a primary key or a non-key column.
You just need to turn on the IDENTITY property of column.
IDENTITY property can be set to columns of the following data
types: tinyint, smallint, int, bigint, decimal, numeric
Try this example to see how it works:
CREATE TABLE foo
(
i int IDENTITY(1, 1)
j int
)
60
Suresh
INSERT INTO foo (j) VALUES (911)
INSERT INTO foo (j) VALUES (999)
SQL *Plus Query Analyzer/
SSMS For connecting to SQL Server and executing queries and
modifying data, use the built-in Query Analyzer. It is much more
powerful and friendlier than Oracle's SQL *Plus
START
WITH...CONNECT
BY clause
No equivalent
Though there's no direct equivalent in T-SQL for Oracle's
START WITH...CONNECT BY, there are several ways and
efficient techniques for processing and querying hierarcical data.
For more information, read this article:
Working with hierarchical data in SQL Server databases
Synonym Views
You can simulate Oracle Synonyms in SQL Server using Views.
For example, the following creates a view that returns the
OrderID and OrderDate from Orders table.
CREATE VIEW vOrders
AS
SELECT OrderID, OrderDate
FROM Orders
Now you can select data from the view, using the following
SELECT statement:
SELECT * FROM vOrders
The following example will create a view which is equivalent to
Oracles TABS synonym or USER_TABLES data dictionary view
(For simplicity, I am only including the table name in the view
definition):
CREATE VIEW TABS
AS
SELECT name AS table_name
FROM sysobjects
WHERE type = 'U'
Now you can execute the following SELECT statement to return
all user table names:
SELECT table_name
FROM TABS
T-SQL Enhancements in 2008:
61
Suresh
Every new version of SQL Server comes with several T-SQL features and enhancements.
SQL Server 2008 is no exception. In the newest version of SQL Server, Microsoft has responded
to developer requests in a big way. SQL Server 2008 supports brand new developer convenience
features like single statement declaration and initialization, new data types to manipulate and
query date-based and spatial data, new statements like MERGE that add much needed
functionality to T-SQL and a whole lot more. Once you’ve made the move to SQL Server 2008,
you’ll undoubtedly want to take advantage of the new features and functionality to solve common
problems.
1. Separate Variable Declaration and Initialization
The first of these new features is single statement variable declaration and initialization. In the
past, developers had to declare new variables in one or more DECLARE statements and
assign values to the variables in one or more SET or SELECT statements as shown in below
Listing.
DECLARE @x int, @y int, @z int
SET @x=1
SET @y=2
SET @z=3
With single statement declaration and initialization, you can combine these two steps into a
single step as shown in below Listing
DECLARE @x int =1,@y int=2, @z int =3
2. Calculating and Assigning Values with C-Style Assignment
T-SQL has further improved with the addition of several C-Style assignment operators.
Operator Description
+= Addition with assignment, or string
concatenation with assignment
-= Subtraction with assignment
*= Multiplication with assignment
/= Division with assignment
%= Modulo with assignment
Ex:
DECLARE @x int=4, @y int=25, @s1 varchar(20)=’Sql’
SET @x *= @y
SET @s1+= ‘SERVER’
SELECT @x, @s1
3. NEW INSERT STATEMENT
SYNTAX:
INSERT INTO TABLE_NAME
62
Suresh
VALUES
(VALUE1, VALUE2,……),
(VALUE1, VALUE2,…..),
(VALUE1,VALU2,……..)
EX:
INSERT INTO EMP
VALUES
(11,’RAM’, 30000, 10),
(22,’RAJ’, 20000, 20)
Like in SQL Server 2005 we need not to write multiple INSERT statements for multiple records.
With in single INSERT statement we can insert multiple records into the table at a time
4. MERGE Statement
It is one of the DML statement placed newly in SQL Server 2008
Merge Statement is a combination statement that can perform INSERT, UPDATE, DELETE
statements based on whether rows that match the selection criteria exist in the target table or
not.
This Merge statement takes Target and Source Tables, When Source rows are matched with
Target it will update the rows of source table into target table otherwise it will insert the rows
of source table into target table. Always merge statement takes a temp table as its source
and base table as its target table. Using this Merge statement we can combine the rows of a
source table to target table.
Syntax:
MERGE Target_Table as target
USING Source_table as source
ON condition
WHEN MATCHED THEN
UPDATE
SET column=source.column,………..
WHEN TARGET NOT MATCHED THEN
INSERT VALUES (source.column1, source.column2,)
4. New Data Types In 2008
SQL Server 2008 provides new data types that support storage, manipulation and querying of
new forms of data. Some, like the date data type which stores a simple date with out the time
component. Others like the geometry data type, which allows storage and querying of spatial
data, have only recently addressed.
Date and Time Data Types
SQL Server supports four brand new date and time data types, which includes
1. date
2. time
3. datetime2
4. datetimeoffset
63
Suresh
The date data type finally allows us to store date only without the time component. It can
also store a much larger range of dates than datetime and smalldatetime data types.
The date data type can handle dates from January 1, 1 CE (0001-01-01) to December 31,
9999 CE (9999-12-31)
Ex:
DECLARE @d1 date=’0014-08-19’
DECLARE @d2 date=’1983-02-26’
SELECT @d1 as DATE1,@d2 as DATE2
DATEDIFF (YEAR, @d1, @d2) as YEARDIFFERENCE
In contrast to the date data type, the time data type lets you to store time only data.
The range for the time data type is defined on 24 hour clock, from 00:00:00.0000000
through 23:59:59.9999999 with user defined fractional second precision of up to seven
digits.
Ex:
DECLARE @start_time time (1) =’06:25:19.1’ --1 digit fractional precision
DECLARE @end_time time=’18:25:19.1234567’ --default fractional precision
SELECT @start_time as STARTTIME, @end_time as ENDTIME
DATEADD (HOUR, 6, @start_time) as STARTTIMEPLUS,
DATEDIFF (HOUR,@start_time,@end_time) as ENDSTARTDIFF
The cleverly named datetime2 data type is an extension to the standard datetime data
type. The datetime2 combines the benefits of the new date and time data types, giving
you the wide date range of the date data type and the greater fractional second
precision of the time data type.
Ex:
DECLARE @start_dt2 datetime2=’1972-07-06T07:13:28.8235670’
DECLARE @end_dt2 datetime2=’2009-12-14T03:14:13.2349872’
SELECT @start_dt2 as start_dt2, @end_dt2 as end_dt2
The new datetimeoffset data type builds on datetime2 by adding the ability to store
offsets relative to the International Telecommunication Union(ITU) standard for
Coordinated Universal Time(UTC) with your date and time data type.
5. The Hierarchyid Data Type
The hierarchyid data type offers to represent hierarchical data in the database. This new data
type offers built-in support for representing your hierarchical data using one of the simplest
models available: materialized paths
Hierarchyid Data Type Methods
64
Suresh
Method Description
GetAncestor(n) Retrieves the nth ancestor of the hierarchyid
node instance
GetDescendent(n) Retrieves the nth descendent of the hierarchyid
node instance
GetLevel() Gets the level of the hierarchyid node instance
in the hierarchy
GetRoot() Gets the root node of the hierarchyid instance
in the hierarchy
IsDescendent(node) Returns 1 if a specified node is descendent
Parse(String) Converts the given canonical string, in forward
slash- separated format to a hierarchyid path.
Reparent(old_root,new_root) Reparents a node by moving nodes from
old_root to new_root
ToString() Converts a hierarchyid instance to a canonical
forward slash-separated string representation
5. The Spatial Data Type
SQL Server 2008 includes two new data types for storing, querying, and manipulating spatial
data.
• Geometry
• Geography
Geometry data type is designed to represent flat-earth, or Euclidean, spatial data.
Geography data type supports round earth or ellipsoidal, spatial data.
QUERIES:
1. Display the dept information from department table.
Select * from DEPT;
2. Display the details of all employees.
Select * from EMP;
3. Display the name and job for all employees.
Select ename, job from EMP;
4. Display name and salary for all employees.
Select ename, sal from EMP;
5. Display employee number and total salary for each employee.
Select empno, sal+comm from EMP;
6. Display the names of all employees who are working in department number 10.
Select ename from EMP where deptno=10;
7. Display the names of all employees working as clerks and drawing a salary
more than 3000.
select ename from EMP where job=’CLERK’ and sal>3000;
65
Suresh
8. Display employee number and names for employees who earn commission.
Select empno, ename from EMP where comm is not null and comm>0;
9. Display names of employees who do not earn any commission.
Select empno, ename from EMP where comm is null and comm=0;
10. Display the names of employees who are working as clerk, salesman or analyst
and drawing a salary more than 3000.
Select ename from EMP where (job=’CLERK’ or job=’SALESMAN’ or
job=’ANALYST’) and sal>3000;
(Or)
Select ename from EMP where job in (‘CLERK’,’SALESMAN’,’ANALYST’)
and sal>3000;
11. Display the names of employees who are working in the company for the past
5 years.
Select ename from EMP where sysdate-hiredate>5*365;
12. Display the list of employees who have joined the company before 30th
June 90
or after 31st
dec 90.
Select * from EMP where hiredate between ‘30-jun-1990’ and ‘31-dec-
1990’;
13. Display the names of employees working in department number 10 or 20 or 40
or employees working as clerks, salesman or analyst.
Select ename from EMP where deptno in (10, 20, 40) or job in
(‘CLERK’,’SALESMAN’,’ANALYST’);
14. Display the names of employees whose name starts with alphabet S.
Select ename from EMP where ename like ‘S%’;
15. Display employee names for employees whose name ends with alphabet.
Select ename from EMP where ename like ‘%S’;
16. Display the names of employees whose names have second alphabet A in their
names.
Select ename from EMP where ename like ‘_S%’;
17. Display the names of employees whose name is exactly five characters in
length.
Select ename from EMP where length (ename) =5;
(Or)
Select ename from EMP where ename like '_____';
18. Display the names of employees who are not working as SALESMAN or CLERK
or ANALYST.
Select ename from EMP where job not in
(‘CLERK’,’SALESMAN’,’ANALYST’);
19. Display the total number of employees working in the company.
Select count (*) from EMP;
66
Suresh
20. Display the maximum salary from EMP table.
Select max (sal) from EMP;
21. Display the minimum salary from EMP table.
Select min (sal) from EMP;
22. Display the average salary from EMP table.
Select avg (sal) from EMP;
23. Display the maximum salary being paid to CLERK.
select max (sal) from EMP where job=’CLERK’;
24. Display the maximum salary being paid in dept no 20.
Select max (sal) from EMP where deptno=20;
25. Display the min Sal being paid to any SALESMAN.
select min (sal) from EMP where job=’SALESMAN’;
26. Display the average salary drawn by managers.
select avg (sal) from EMP where job=’MANAGER’;
27. Display the names of employees in order of salary i.e. the name of the
employee earning lowest salary should appear first.
Select ename from EMP order by sal;
28. Display the names of employees in descending order of salary.
Select ename from EMP order by sal desc;
29. Display the details from EMP table in order of EMP name.
Select ename from EMP order by ename;
30. Display empno, ename, deptno, and sal. Sort the output first based on name
and within name by deptno and within deptno by Sal;
Select * from EMP order by ename, deptno, sal;
31. Display name, Sal, hra, pf, da, total Sal for each employee. The output should
be in the order of total Sal, hra 15% of Sal, da 10% of sal, pf 5% of sal total
salary will be (sal*hra*da)-pf.
select ename,sal,sal*15/100 HRA, sal*5/100 PF, sal*10/100
DA,sal+sal*15/100-sal*5/100+sal*10/100 TOTAL_SALARY from emp
32. Display dept numbers and total number of employees within each group.
select deptno,count(*) from emp group by deptno;
33. Display the various jobs and total number of employees with each job group.
select job, count(*) from emp group by job;
34. Display department numbers and total salary for each department.
select deptno, sum(sal) from emp group by deptno;
35. Display department numbers and maximum salary for each department.
select deptno, max(sal),min(sal) from emp group by deptno;
67
Suresh
36. Display the various jobs and total salary for each job.
select job, sum(sal) from emp group by job;
37. Display each job along with minimum sal being paid in each job group.
select job, min(sal) from emp group by job;
38. Display the department numbers with more than three employees in each dept.
select deptno, count(*) from emp group by deptno having count(*)>3;
39. Display the various jobs along with total sal for each of the jobs where total sal
is greater than 40000.
select job, sum(sal) from emp group by job having sum(sal)>40000;
40. Display the various jobs along with total number of employees in each job. The
output should contain only those jobs with more than three employees.
select job, count(*) from emp group by job having count(*)>3;
41. Display the name of emp who earns highest sal.
select ename from emp where sal=(select max(sal) from emp);
42. Display the employee number and name of employee working as CLERK and
earning highest salary among CLERKS.
select empno, ename from emp where job='CLERK' and sal=(select
max(sal) from emp where job='CLERK');
43. Display the names of the salesman who earns a salary more than the highest
salary of any clerk.
select ename from emp where job=’SALESMAN’ and sal >
(select max(sal) from emp where job='CLERK');
44. Display the names of clerks who earn salary more than that of James of that of
sal lesser than that of Scott.
select ename from emp where job='CLERK' and sal<(select sal from
emp where ename='SCOTT') and sal>(select sal from emp where
ename='JAMES');
45. Display the names of employees who earn a Sal more than that of James or
that of salary greater than that of Scott.
select ename from emp where sal <
(select sal from emp where ename='SCOTT') and sal >
(select sal from emp where ename='JAMES');
46. Display the names of the employees who earn highest salary in their respective
departments.
select * from emp e where sal =
(select max(sal) from emp where deptno=e.deptno)
47. Display the names of employees who earn highest salaries in their respective
job groups.
select * from emp e where sal in
68
Suresh
(select max(sal) from emp group by job having e.job=job)
48. Display the employee names who are working in accountings dept.
select ename from emp where deptno =
(select deptno from dept where dname=”ACCOUNTING”);
(or)
select ename from emp where deptno in (select deptno from dept
where dname=”ACCOUNTING”);
49. Display the employee names who are working in Chicago.
select ename from emp where deptno =
(select deptno from dept where loc=’CHICAGO’);
50. Display the job groups having total salary greater then the maximum salary for
managers.
select job, sum(sal) from emp group by job having sum(sal) >
(select max(sal) from emp where job='MANAGER');
51. Display the names of employees in Upper case.
select upper(ename) from emp;
52. Display the names of employees in lower case.
select lower(ename) from emp;
53. Replace every occurrence of alphabet A with B in the string Allen’s (user
translate function).
select replace('Allens','A','b') from dual;
54. Display the information from EMP table. Wherever job ‘manager’ is found it
should be displayed as boss(replace function).
select empno, ename, replace(job, 'MANAGER', 'Boss') JOB from emp;
55. Display empno, ename, deptno from EMP table. Instead of display department
numbers display the related department name (use decode function).
select e.empno, e.ename, d.dname from emp e,dept d where
e.deptno = d.deptno;
56. Display the common jobs from department number 10 and 20.
select job from emp where deptno=10 and job in(select job from emp
where deptno=20);
(or)
select job from emp where deptno=10 intersect select job from emp
where deptno=20;
57. Display the jobs found in department number 10 and 20 eliminate duplicate
jobs.
select distinct(job) from emp where deptno=10 and job in(select job
from emp where deptno=20);
(or)
select job from emp where deptno=10 intersect select job from emp
where deptno=20;
58. Display the jobs which are unique to dept no 10.
69
Suresh
select job from emp where deptno=10 minus select job from emp
where deptno!=10;
(or)
select job from emp where deptno = 10 and job not in (select job from
emp where deptno<>10);
59. Display the details of those who do not have any person working under them.
select empno from emp where empno not in (select mgr from emp
where mgr is not null);
60. Display the details of employees who are in sales dept and grade is 3.
select * from emp where sal>=(select losal from salgrade where
grade=3) and sal<=(select hisal from salgrade where grade=3) and
deptno=(select deptno from dept where dname='SALES');
61. Display those who are not managers and who are managers any one.
select * from emp where empno in(select mgr from emp) union
select * from emp where empno not in(select mgr from emp where
mgr is not null);
62. Display those employees whose name contains not less than 4 chars.
Select * from emp where length(ename)>4;
63. Display those departments whose name start with ‘S’ while location name end
with ‘O’.
select * from dept where dname like 'S%' and loc like '%O';
64. Display those employees whose manager name is JONES.
select * from emp where mgr=(select empno from emp where
ename='JONES');
65. Display those employees whose salary is more than 3000 after giving 20%
increment.
select * from emp where sal*120/100 > 3000;
(or)
select * from emp where sal+sal*20/100 > 3000;
66. Display all employees with there dept name.
select ename, dname from emp e, dept d where e.deptno = d.deptno;
67. Display ename who are working in sales dept.
select empno, ename from emp where
deptno=(select deptno from dept where dname='SALES');
68. Display employee name, deptname, salary and comm. for those Sal in between
2000 to 5000 while location is Chicago.
select empno,ename,deptno from emp where deptno=(select deptno
from dept where loc='CHICAGO') and sal between 2000 and 5000;
69. Display those employees whose salary greater than his manager salary.
select * from emp e where sal>(select sal from emp where
empno=e.mgr);
70
Suresh
70. Display those employees who are working in the same dept where his manager
is working.
select * from emp e where
deptno = (select deptno from emp where empno=e.mgr);
71. Display those employees who are not working under any manger.
select * from emp where mgr is null or empno=mgr;
72. Display grade and employees name for the dept no 10 or 30 but grade is not 4,
while joined the company before 31-dec-82.
select empno,ename,sal,deptno,hiredate,grade from emp e,salgrade s
where e.sal>=s.losal and e.sal<=s.hisal and deptno in(10,30) and
grade<>4 and hiredate<'01-dec-1981';
73. Update the salary of each employee by 10% increments that are not eligible for
commission.
update emp set sal=sal+(sal*10/100) where comm is null;
74. Delete those employees who joined the company before 31-dec-82 while there
dept location is ‘NEW YORK’ or ‘CHICAGO’.
delete from emp where hiredate<'31-dec-1982' and deptno in
(select deptno from dept where loc in('NEW YORK','CHICAGO'));
75. Display employee name, job, deptname, location for all who are working as
managers.
select ename,job,dname,loc from emp e, dept d where
e.deptno=d.deptno and empno in (select mgr from emp);
76. Display those employees whose manager names is Jones, and also display
there manager name.
select e.empno, e.ename, m.ename MANAGER from emp e, emp m
where e.mgr=m.empno and m.ename='JONES';
77. Display name and salary of ford if his Sal is equal to high Sal of his grade.
select ename,sal from emp e where ename='FORD' and sal=(select
hisal from salgrade where grade=(select grade from salgrade where
e.sal>=losal and e.sal<=hisal));
78. Display employee name, his job, his dept name, his manager name, his grade
and make out of an under department wise.
select d.deptno, e.ename, e.job, d.dname, m.ename, s.grade from
emp e, emp m, dept d, salgrade s where e.deptno=d.deptno and e.sal
between s.losal and s.hisal and e.mgr=m.empno order by e.deptno;
79. List out all the employees name, job, and salary grade and department name
for every one in the company except ‘CLERK’. Sort on salary display the
highest salary.
select empno, ename, sal, dname, grade from emp e, dept d, salgrade s
where e.deptno=d.deptno and e.sal between s.losal and s.hisal and
e.job<>'CLERK' order by sal;
71
Suresh
80. Display employee name, his job and his manager. Display also employees who
are without manager.
select e.ename, e.job, m.ename Manager from emp e,emp m where
e.mgr=m.empno union select ename,job,'no manager' from emp where
mgr is null;
81. Find out the top 5 earner of company.
select * from emp e where 5>(select count(*) from emp where
sal>e.sal) order by sal desc;
82. Display the name of those employees who are getting highest salary.
select empno,ename,sal from emp where sal=(select max(sal) from
emp);
83. Display those employees whose salary is equal to average of maximum and
minimum.
select * from emp where sal=(select (max(sal)+min(sal))/2 from
emp);
84. Display count of employees in each department where count greater than 3.
select deptno, count(*) from emp group by deptno having count(*)>3;
85. Display dname where at least 3 are working and display only dname.
select dname from dept where deptno in
(select deptno from emp group by deptno having count(*)>3);
86. Display name of those managers name whose salary is more than average
salary of company.
select ename, sal from emp where empno in(select mgr from emp) and
sal > (select avg(sal) from emp);
87. Display those managers name whose salary is more than an average salary of
his employees.
select ename, sal from emp e where empno in(select mgr from emp)
and e.sal>(select avg(sal) from emp where mgr=e.empno);
88. Find out the last 5(least) earner of the company?
select * from emp e where 5>(select count(*) from emp where
sal<e.sal) order by sal;
89. Find out the number of employees whose salary is greater than there manager
salary?
select count(*) from emp e where sal>(select sal from emp where
empno=e.mgr);
90. Display those manager who are not working under president but they are
working under any other manager?
select * from emp e where mgr in(select empno from emp where
ename<>'KING');
72
Suresh
91. Delete those department where no employee working?
delete from dept d where 0=(select count(*) from emp where
deptno=d.deptno);
92. Delete those records from EMP table whose deptno not available in dept table?
delete from emp where deptno not in(select deptno from dept);
93. Display those earners whose salary is out of the grade available in Sal grade
table?
select * from emp where sal<(select min(losal) from salgrade) or
sal>(select max(hisal) from salgrade);
94. Display employee name, Sal, comm. and whose net pay is greater than any
other in the company?
Select ename, sal, comm from emp where sal+sal*15/100-sal*5/100
+sal*10/100 = (select max(sal+sal*15/100-sal*5/100+sal*10/100)
from emp);
95. Display those employees who are working in sales or research?
select * from emp where deptno in(select deptno from dept where
dname in('SALES','RESEARCH'));
96. Display the grade of Jones?
select grade from salgrade where losal<=(select(sal) from emp where
ename='JONES') and hisal>=(select(sal) from emp where
ename='JONES');
97. Delete those records where no of employee in a particular department is less
than 3?
delete from emp where deptno in(select deptno from emp group by
deptno having count(*)>3);
98. Display the department name the no of characters of which is equal to no of
employees in any other department?
Select dname from dept where len (dname) in (select count(*) from
emp group by deptno);
99. Display those employees who are working as manager?
select * from emp where empno in(select mgr from emp);
100. Count the no of employees who are working as manager (use set operation)?
select count(*) from emp where empno in(select mgr from emp);
101. Display the name of then dept those employees who joined the company on
the same date?
select empno,ename,hiredate,deptno from emp e where hiredate in
(select hiredate from emp where empno<>e.empno);
102. Display the manager who is having maximum number of employees working
under him?
73
Suresh
Select mgr from emp group by mgr having count(*)=(select
max(count(mgr)) from emp group by mgr);
103. Produce the output of the EMP table “EMPLOYEE_AND_JOB” for ename and job?
select * from EMPLOYEE_AND_JOB;
104. Print the details of all the employees who are sub ordinate to Blake.
Select * from emp where mgr=(select empno from emp where
ename='BLAKE');
105. Display those who working as manager using co related sub query.
Select * from emp where empno in(select mgr from emp);
106. Display those employees whose manger name is Jones and also with his
manager name.
Select * from emp where mgr=(select empno from emp where
ename='JONES') union select * from emp where empno=(select mgr
from emp where ename='JONES');
107. Find out how many mangers are there with out listing them.
Select count (*) from EMP where empno in (select mgr from EMP);
108. Check whether all employees number are indeed unique.
select count(empno),count(distinct(empno)) from emp having
count(empno)=(count(distinct(empno)));
109. List out the lowest paid employees working for each manager, exclude any
groups where min sal is less than 1000 sort the output by sal.
select e.ename,e.mgr,e.sal from emp e where sal in(select min(sal)
from emp where mgr=e.mgr) and e.sal>1000 order by sal;
110. find out the all employees who joined the company before their manager.
Select * from emp e where hiredate<(select hiredate from emp where
empno=e.mgr);
111. list out the all employees by name and number along with their manager’s
name and number also display ‘No Manager’ who has no manager.
select e.empno,e.ename,m.empno Manager,m.ename ManagerName
from emp e,emp m where e.mgr=m.empno
union
select empno,ename,mgr,'No Manager' from emp where mgr is null;
112. find out the employees who earned the highest Sal in each job typed sort in
descending Sal order.
select * from emp e where sal =(select max(sal) from emp where
job=e.job);
113. find out the employees who earned the min Sal for their job in ascending
order.
select * from emp e where sal =(select min(sal) from emp where
job=e.job) order by sal;
114. find out the most recently hired employees in each dept order by hire date
74
Suresh
select * from emp order by deptno, hiredate desc;
115. display ename, sal and deptno for each employee who earn a Sal greater than
the avg of their department order by deptno
select ename,sal,deptno from emp e where sal>(select avg(sal) from
emp where deptno=e.deptno) order by deptno;
116. display the department where there are no employees
select deptno,dname from dept where deptno not in(select
distinct(deptno) from emp);
117. display the dept no with highest annual remuneration bill as compensation.
select deptno,sum(sal) from emp group by deptno having sum(sal) =
(select max(sum(sal)) from emp group by deptno);
118. display avg sal figure for the dept
select deptno,avg(sal) from emp group by deptno;
119. Write a query of display against the row of the most recently hired employee.
display ename hire date and column max date showing.
select empno,hiredate from emp where hiredate=(select max
(hiredate) from emp);
120. display employees who can earn more than lowest Sal in dept no 30
select * from emp where sal>(select min(sal) from emp where
deptno=30);
121. find employees who can earn more than every employees in dept no 30
select * from emp where sal>(select max(sal) from emp where
deptno=30);
select * from emp where sal>all(select sal from emp where
deptno=30);
122. find all dept’s which have more than 3 employees
select deptno from emp group by deptno having count(*)>3;
123. Create a copy of emp table.
Create table emp1 as select * from emp;
124. Select ename if ename exists more than once.
select distinct(ename) from emp e where ename in(select ename from
emp where e.empno<>empno);
125. display all enames in reverse order.
select ename from emp order by ename desc;
126. List out the employees ename, sal, PF from emp
Select ename,sal,sal*15/100 PF from emp;
127. Create table emp with only one column empno
Create table emp (empno number(5));
75
Suresh
128. Add this column to emp table ename Varchar(20).
alter table emp add ename varchar2(20) not null;
129. OOPS! I forgot to give the primary key constraint. Add it now.
alter table emp add constraint emp_empno primary key (empno);
130. Now increase the length of ename column to 30 characters.
alter table emp modify ename varchar(30);
131. Add salary column to emp table.
alter table emp add sal numeric(7,2);
132. I want to give a validation saying that sal cannot be greater 10,000(note give a
name to this column).
alter table emp add constraint emp_sal_check check (sal<10000);
133. Add column called as mgr to your emp table.
Alter table emp add mgr numeric (5);
134. Oh! This column should be related to empno. Give a command to add this
constraint
Alter table emp add constraint emp_mgr foreign key(empno);
135. Add dept no column to your emp table
Alter table emp add deptno numeric (3);
136. This dept no column should be related to deptno column of dept table
Alter table emp1 add constraint emp1_deptno foreign key (deptno)
references dept (deptno);
137. Create table called as new emp. Using single command create this table as well
as to get data into this table (use create table as)
Select*into newemp from EMP;
138. Create table called as newemp. This table should contain only empno,ename,
dname
create table newemp as select empno,ename,dname from emp e , dept
d where e.deptno=d.deptno;
139. Provide a commission to employees who are not earning any commission.
update emp set comm=300 where comm is null;
140. If any employee has commission his commission should be incremented by
10% of his salary.
update emp set comm=comm*10/100 where comm is not null;
141. Display employee name and department name for each employee.
select ename,dname from emp e, dept d where e.deptno=d.deptno;
142. Display employee number, name and location of the department in which he is
working.
Select empno, ename, loc from emp e, dept d where
e.deptno=d.deptno;
76
Sqlmaterial 120414024230-phpapp01
Sqlmaterial 120414024230-phpapp01

Mais conteúdo relacionado

Mais procurados

Mais procurados (18)

Security Analysis of AES and Enhancing its Security by Modifying S-Box with a...
Security Analysis of AES and Enhancing its Security by Modifying S-Box with a...Security Analysis of AES and Enhancing its Security by Modifying S-Box with a...
Security Analysis of AES and Enhancing its Security by Modifying S-Box with a...
 
SHA 1 Algorithm
SHA 1 AlgorithmSHA 1 Algorithm
SHA 1 Algorithm
 
Aes
AesAes
Aes
 
D44091720
D44091720D44091720
D44091720
 
Renas Rajab Asaad
Renas Rajab AsaadRenas Rajab Asaad
Renas Rajab Asaad
 
Aes128 bit project_report
Aes128 bit project_reportAes128 bit project_report
Aes128 bit project_report
 
Filehandlinging cp2
Filehandlinging cp2Filehandlinging cp2
Filehandlinging cp2
 
Aes
AesAes
Aes
 
File Handling In C++
File Handling In C++File Handling In C++
File Handling In C++
 
Cpp file-handling
Cpp file-handlingCpp file-handling
Cpp file-handling
 
Minor Project- AES Implementation in Verilog
Minor Project- AES Implementation in VerilogMinor Project- AES Implementation in Verilog
Minor Project- AES Implementation in Verilog
 
File Handling In C++(OOPs))
File Handling In C++(OOPs))File Handling In C++(OOPs))
File Handling In C++(OOPs))
 
Filehadnling
FilehadnlingFilehadnling
Filehadnling
 
Advance computer architecture
Advance computer architectureAdvance computer architecture
Advance computer architecture
 
Pf cs102 programming-8 [file handling] (1)
Pf cs102 programming-8 [file handling] (1)Pf cs102 programming-8 [file handling] (1)
Pf cs102 programming-8 [file handling] (1)
 
AES by example
AES by exampleAES by example
AES by example
 
A Universal Bit Level Block Encoding Technique Using Session Based Symmetric ...
A Universal Bit Level Block Encoding Technique Using Session Based Symmetric ...A Universal Bit Level Block Encoding Technique Using Session Based Symmetric ...
A Universal Bit Level Block Encoding Technique Using Session Based Symmetric ...
 
Files in c++
Files in c++Files in c++
Files in c++
 

Semelhante a Sqlmaterial 120414024230-phpapp01

2011 06-sq lite-forensics
2011 06-sq lite-forensics2011 06-sq lite-forensics
2011 06-sq lite-forensics
viaForensics
 
SQL, Oracle, Joins
SQL, Oracle, JoinsSQL, Oracle, Joins
SQL, Oracle, Joins
Gaurish Goel
 

Semelhante a Sqlmaterial 120414024230-phpapp01 (20)

Sql material
Sql materialSql material
Sql material
 
Data What is Data.. - Computer E Learning
Data   What is Data.. - Computer E LearningData   What is Data.. - Computer E Learning
Data What is Data.. - Computer E Learning
 
Structured Query Language (SQL) _ Edu4Sure Training.pptx
Structured Query Language (SQL) _ Edu4Sure Training.pptxStructured Query Language (SQL) _ Edu4Sure Training.pptx
Structured Query Language (SQL) _ Edu4Sure Training.pptx
 
Computer System Architecture
Computer System ArchitectureComputer System Architecture
Computer System Architecture
 
Network Management
Network ManagementNetwork Management
Network Management
 
Sql Basics And Advanced
Sql Basics And AdvancedSql Basics And Advanced
Sql Basics And Advanced
 
Tamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptxTamir Dresher - DotNet 7 What's new.pptx
Tamir Dresher - DotNet 7 What's new.pptx
 
Sql Server Interview Question
Sql Server Interview QuestionSql Server Interview Question
Sql Server Interview Question
 
2011 06-sq lite-forensics
2011 06-sq lite-forensics2011 06-sq lite-forensics
2011 06-sq lite-forensics
 
Secure Text Transfer Using Diffie-Hellman Key Exchange Based On Cloud
Secure Text Transfer Using Diffie-Hellman Key Exchange Based On CloudSecure Text Transfer Using Diffie-Hellman Key Exchange Based On Cloud
Secure Text Transfer Using Diffie-Hellman Key Exchange Based On Cloud
 
MariaDB ColumnStore
MariaDB ColumnStoreMariaDB ColumnStore
MariaDB ColumnStore
 
Lab 1 Essay
Lab 1 EssayLab 1 Essay
Lab 1 Essay
 
Ms sql server architecture
Ms sql server architectureMs sql server architecture
Ms sql server architecture
 
Js2517181724
Js2517181724Js2517181724
Js2517181724
 
Js2517181724
Js2517181724Js2517181724
Js2517181724
 
Sql introduction
Sql introductionSql introduction
Sql introduction
 
In-Memory and TimeSeries Technology to Accelerate NoSQL Analytics
In-Memory and TimeSeries Technology to Accelerate NoSQL AnalyticsIn-Memory and TimeSeries Technology to Accelerate NoSQL Analytics
In-Memory and TimeSeries Technology to Accelerate NoSQL Analytics
 
SQL, Oracle, Joins
SQL, Oracle, JoinsSQL, Oracle, Joins
SQL, Oracle, Joins
 
Postgresql Database Administration Basic - Day2
Postgresql  Database Administration Basic  - Day2Postgresql  Database Administration Basic  - Day2
Postgresql Database Administration Basic - Day2
 
Revision booklet 6957 2016
Revision booklet 6957 2016Revision booklet 6957 2016
Revision booklet 6957 2016
 

Último

Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
ZurliaSoop
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functions
KarakKing
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
heathfieldcps1
 

Último (20)

Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
NO1 Top Black Magic Specialist In Lahore Black magic In Pakistan Kala Ilam Ex...
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functions
 
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptxHMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
HMCS Vancouver Pre-Deployment Brief - May 2024 (Web Version).pptx
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Sensory_Experience_and_Emotional_Resonance_in_Gabriel_Okaras_The_Piano_and_Th...
Sensory_Experience_and_Emotional_Resonance_in_Gabriel_Okaras_The_Piano_and_Th...Sensory_Experience_and_Emotional_Resonance_in_Gabriel_Okaras_The_Piano_and_Th...
Sensory_Experience_and_Emotional_Resonance_in_Gabriel_Okaras_The_Piano_and_Th...
 
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
REMIFENTANIL: An Ultra short acting opioid.pptx
REMIFENTANIL: An Ultra short acting opioid.pptxREMIFENTANIL: An Ultra short acting opioid.pptx
REMIFENTANIL: An Ultra short acting opioid.pptx
 
How to Add New Custom Addons Path in Odoo 17
How to Add New Custom Addons Path in Odoo 17How to Add New Custom Addons Path in Odoo 17
How to Add New Custom Addons Path in Odoo 17
 
Google Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptxGoogle Gemini An AI Revolution in Education.pptx
Google Gemini An AI Revolution in Education.pptx
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structure
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and Modifications
 
ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.ICT role in 21st century education and it's challenges.
ICT role in 21st century education and it's challenges.
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptx
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 

Sqlmaterial 120414024230-phpapp01

  • 1. Suresh Data: Data is the most important component in any work that we do; Data means collection of information or collection of raw facts. Ex: 1. Text files 2. Facts 3. Figures (photos) 4. Audios 5. Videos etc... Database: collection of related data. DBMS :( Database Management System) Data Base Management System is the management system or maintenance system on databases. (Or) It is a suit of software program for creating, maintaining & manipulating the data in database. (Or) It allows the users to insert the data, to retrieve the data, to modify the data and to delete the data. Properties: 1. Create 2. Insert 3. Update 4. Delete 5. Select (query) 6. Low level security etc... Ex: FoxPro, ims (information management system) The first databases of kind existed in the form of files. A file is nothing but collection of records. A Record is nothing but collection of information or data. But the file system was not very efficient .it was crippled by slow data search speed. It includes the following Drawbacks. 1.Security 2.Data Redundancy 3.Data Integrity 4.Concurrency Control 5.Slow in Process 6. File system: in a dbms database, data must be stored in the form of files only Note: basic property of file system is independent and individual, means each and every file is unique AND relation is not possible between data files 7. Low level security, No Login name No Password. RDBMS (Relational Database Management System): 1
  • 2. Suresh • Data must be stored in the form of tables only • Relation between Tables is possible Table: It is collection of columns and rows, X axis directions are rows and Y axis directions are columns Relation: Creating internal dependencies between Database Tables Ex of RDBMS: 1. Sqlserver 2. Oracle 3. Db2 (Database 2000, IBM) 4. Mysql (open source) 5. ms-access 6. Postgresql (open source) 7. Sybase 8. Tera data Etc..... Terminology: 1. Table -- Entity 2. Column (field) -- Attribute 3. Row (record) -- Tupple 4. Duplicate data (Repeated data) – Data Redundancy Metadata: Data about data, it describes characteristics of data Ex: Description of a table Syn: sp_help <TN> Ex: sp_help EMP Note: <TN> stands for Table name Data models: 1. Hierarchy data model 2. Network data model 3. Relational data model Note: Currently all RDBMS Databases following RELATIONAL DATA MODEL Adv of Relational Data model: • Relation • Perfect solution for duplicate data and null values • Normalization Normalization: It is a process of eliminating duplicate data from the database. EF CODD RULES: 2
  • 3. Suresh Sqlserver 2005: 1. It is RDBMS database 2. It is a product of Microsoft 3. It is case insensitive 4. It is platform dependant-- it is compatible for windows OS 5. User friendly History: Introduced in 1994 • Sqlserver 4.0 • Sqlserver 5.0 • Sqlserver 6.0 • Sqlserver 6.5 • Sqlserver 7.0 • Sqlserver 8.0(2000) • Sqlserver 9.0(2005) • Sqlserver 10.0(2008) Editions (flavors): 1. Enterprise edition 2. Standard edition 3. Developer edition 4. Mobile edition 5. Personal edition (express edition)  free Software Requirements: 1. OS • Windows xp sp2 or sp3 • Windows server 2000 • Windows server 2003 • Windows server 2008 • Windows Vista • Windows 7 2. Windows installer: It is a default component of Windows; we can download it from www.microsoft.com 3
  • 4. Suresh 3. IIS (internet information services): • It is an application server from MICROSOFT Hardware requirements: 1. Processor: It supports both 32 bit, 64 bit Ex: 1. Pentium 4 2. Amd athlon 2. Hard disk: • 500 mb (MICROSOFT) • 1 GB (Mine) 3. Ram: • 512mb(MICROSOFT) • 1 GB(Mine) SQL -- structured query language Sequel-- structured English query language FEATURES OF SQL SERVER: 1. Security: Provides login and password to interact with data in database 2. Data Redundancy: Less Data reputation 3. Data Integrity: Data validation/Data Checking Process facility 4. Backup and Recovery(Restore) 5. Introducing support for XML 6. User defined function are introduced. 7. OLAP (online analytical process) services available in SQL server 7.0 are now called as SQL server 2005 analysis services Things to Observe: 1. While writing the Queries using T-SQL in SQL Server Management Studio we need not to follow any particular case. Because T-SQL is case insensitive language. 2. After writing the Query, we need to select that query using either mouse or keyboard. 3. Now Press F5 (Execute Key). 4. Then the results are displayed in a separate window called Result window or Result Pane. 5. Use Ctrl+R to Hide/Show the Result window or Result Pane. 6. Use F8 for Object Explorer Note: 4
  • 5. Suresh 1. SQL SERVER can handle nearly 32767 Databases 2. Each Database can handle nearly 2 billion Database Objects. 3. Each Table can handle nearly 1024 columns 4. Each Table can handle nearly 1 million Rows  SQLSERVER is two parts, they are 1. Tsql :( Transact sql) 2. Tsql programs Tool: 1. Management studio: It contains two parts, they are 1. Cui (Character user interface): • Sqlscripting can be written in *newqury* option • By using execute button or f5 we can execute the script 2. Gui (Graphical user interface): • It is Navigations part of the management Studio. • We can connect to GUI by using *summary* option. Path: start programs sqlserver 2005 Management Studio (click) Inside management studio window provide following information 1. Server type-- database engine 2. servername-- database server name 3. authentication-- A. Windows’s authentication • This user must be an OS user B. Sqlserver authentication UN: sa (sysadmin-- DBA) Pw: ******** (Depends Upon Installation) Databases: 1. System databases: • These are inbuilt or default databases • Along with installation of Sqlserver 2005 we can get system databases • System databases monitors entire database engine Note: User can’t create and delete a system database 5
  • 6. Suresh A. master B. model C. msdb D. tempdb E. MS resources Description master Database Records all the system-level information for an instance of SQL Server. msdb Database It is used by SQL Server Agent for scheduling alerts and jobs. model Database Template database Resource Database It is a read-only database that contains system objects that are included with SQL Server 2005. System objects are physically persisted in the Resource database, but they logically appear in the sys schema of every database. tempdb Database It is a workspace for holding temporary objects or intermediate result sets. 2. User databases: • These database created and maintained by the users explicitly Ex: CREATE DATABASE suresh ON PRIMARY (NAME=suresh, FILENAME="C:MSSQLvaddesuresh.mdf", SIZE=100, MAXSIZE=200, FILEGROWTH=25%) Log on ( NAME=suresh_log, FILENAME="C:MSSQLvaddesuresh_log.ldf", SIZE=100, MAXSIZE=200, FILEGROWTH=25%) 6
  • 7. Suresh SQL Server Data Types: Character strings: Data type Description Storage char(n) Fixed-length character string. Maximum 8,000 characters n varchar(n) Variable-length character string. Maximum 8,000 characters varchar(max) Variable-length character string. Maximum 1,073,741,824 characters text Variable-length character string. Maximum 2GB of text data Unicode strings: Data type Description Storage nchar(n) Fixed-length Unicode data. Maximum 4,000 characters nvarchar(n) Variable-length Unicode data. Maximum 4,000 characters nvarchar(max) Variable-length Unicode data. Maximum 536,870,912 characters ntext Variable-length Unicode data. Maximum 2GB of text data Binary types: Data type Description Storage bit Allows 0, 1, or NULL binary(n) Fixed-length binary data. Maximum 8,000 bytes varbinary(n) Variable-length binary data. Maximum 8,000 bytes varbinary(max) Variable-length binary data. Maximum 2GB image Variable-length binary data. Maximum 2GB Number types: Data type Description Storage tinyint Allows whole numbers from 0 to 255 1 byte smallint Allows whole numbers between -32,768 and 32,767 2 bytes int Allows whole numbers between -2,147,483,648 and 2,147,483,647 4 bytes bigint Allows whole numbers between -9,223,372,036,854,775,808 and 9,223,372,036,854,775,807 8 bytes decimal(p,s) Fixed precision and scale numbers. Allows numbers from -10^38 +1 to 10^38 –1. The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p 5-17 bytes 7
  • 8. Suresh must be a value from 1 to 38. Default is 18. The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0 numeric(p,s) Fixed precision and scale numbers. Allows numbers from -10^38 +1 to 10^38 –1. The p parameter indicates the maximum total number of digits that can be stored (both to the left and to the right of the decimal point). p must be a value from 1 to 38. Default is 18. The s parameter indicates the maximum number of digits stored to the right of the decimal point. s must be a value from 0 to p. Default value is 0 5-17 bytes small money Monetary data from -214,748.3648 to 214,748.3647 4 bytes money Monetary data from -922,337,203,685,477.5808 to 922,337,203,685,477.5807 8 bytes float(n) Floating precision number data from -1.79E + 308 to 1.79E + 308. The n parameter indicates whether the field should hold 4 or 8 bytes. Float (24) holds a 4-byte field and float (53) holds an 8-byte field. Default value of n is 53. 4 or 8 bytes real Floating precision number data from -3.40E + 38 to 3.40E + 38 4 bytes Date types: Data type Description Storage datetime From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 milliseconds 8 bytes datetime2 From January 1, 0001 to December 31, 9999 with an accuracy of 100 nanoseconds 6-8 bytes smalldatetime From January 1, 1900 to June 6, 2079 with an accuracy of 1 minute 4 bytes date Store a date only. From January 1, 0001 to December 31, 9999 3 bytes time Store a time only to an accuracy of 100 nanoseconds 3-5 bytes datetimeoffset The same as datetime2 with the addition of a time zone offset 8-10 bytes timestamp Stores a unique number that gets updated every time a row gets created or modified. The timestamp value is based upon an internal clock and does not correspond to real time. Each table may have only one timestamp variable Other data types: Data type Description sql_variant Stores up to 8,000 bytes of data of various data types, except text, ntext, and 8
  • 9. Suresh timestamp uniqueidentifier Stores a globally unique identifier (GUID) xml Stores XML formatted data. Maximum 2GB cursor Stores a reference to a cursor used for database operations table Stores a result-set for later processing TSQL: This is a 4th generated intermediate language between user and SQL Server. Whenever user wants to interact with SQL Server, he has to interact with SQL Server through T-SQL. It includes the following Sub Languages Sublanguages: 1. DDL (data definition language) 2. DML (data manipulation language) 3. DRL (data retrieval language) or QL (query language) 4. TCL (transaction control language) 5. DCL (data control language) -- DBA 1. DDL: Commands: 1. Create 2. Truncate 3. Drop 4. Alter 1. Create: used to create database, tables and other database objects syn: create table <tn>(col1 dt(l),col2 dt(l),col3 dt(l)) Ex: create table tab1 (id int, ename varchar (20), DOB datetime) Note: • Max length of a table name and column name is 30; it may include alphabets, digits 0 to 9 and special character '_' (Underscore). • It is known as "naming conventions". • Max of 1024 columns can be included into a table. 2. Truncate: used to delete entire data from a table and its not possible to delete selected or specific rows from a table by using truncate command. Ex: Assume that Tab1 is a table, contains 10 rows of data, now Entire data of Tab1 table= 10rows Selected or specific data of Tab1 table<entire data 1 to 9 rows are known as selected or specific data 9
  • 10. Suresh Syn: truncate table <TN> Ex: truncate table tab1 3. Drop: used delete a table from the database Syn: drop table <TN> Ex: drop table tab1 4. Alter: Alter+add: used to add a column to the table Syn: alter table <TN> add column_name DT (l), column_name DT (l) Ex: alter table tab1 add sal numeric (7, 2), comm Numeric (5, 2), address varchar (50) Alter+drop: used delete columns from the table Syn: alter table <TN> drop column column_name Ex: alter table tab1 drop column address Alter+alter: used change the data type and length of data type of a column Note: Column is empty then only we can change data type Syn: alter table <TN> alter column column_name DT (l) Ex: alter table tab1 alter column id varchar (20) Miscellaneous: System stored procedures: Directly we can execute them when ever required 1. Getting description of a table (metadata) Syn: sp_help <TN> Ex: sp_help tab1 2. Getting description of a database: Syn: sp_helpdb <dbname> Ex: sp_helpdb Suresh 3. Displaying list of tables in a database Syn: sp_tables 10
  • 11. Suresh Ex: sp_tables 4. Changing name of a table Syn: sp_rename <TN>, <new_name> Ex: sp_rename tab1, employ 5. Retrieving list of Databases Syn: sp_databases DML: Commands: 1. Insert 2. Update 3. Delete 1. Insert: Used to insert (add) data into tables Syn: insert into <TN> values (col1, col2, col3) Ex: insert into employ values ('a12','ramesh','12-apr-07', 3000, 30) Id name DOB sal comm Note: while working with char and date time data we should use single quotes Inserting null values into table: Student table contains 5 columns; now insert null value into comm column Ex: insert into employ (id, name, DOB) values ('a13','ravi','21-jul-06', 2000) Ex: insert into employ values ('a14','ramesh','12-apr-06', 5000, null) 2. Update: used to update (replace) old data with new data, it is two types they are A. Updating entire data in a column: Syn: update <TN> set column_name=new_value Ex: update employ set sal=5000 B. Updating selected data in a column: Syn: update <TN> set column_name=new_value where <condition> Ex: update employ set sal=3000 where id='a12' 3. Delete: used to delete entire data and selected data from a table 11
  • 12. Suresh A. Deleting entire data from a table: Syn: delete from <TN> Ex: delete from employ B. Deleting selected data from a table: Syn: delete from <TN> where <condition> Ex: delete from employ where id='a14' DRL: Commands: 1. Select: used to retrieve or display data from table or tables Note: Retrieving data from single table is 4 types 1. Retrieving entire data (all columns and all rows) from a table Syn: select*from <TN> Ex: select*from employ Note: * stands for entire columns of the table 2. Retrieving all columns and selected rows from a table Syn: select*from <TN> where <condition> Ex: select*from employ where id='a12' 3. Retrieving entire data from selected columns Syn: select col1, col2 from <TN> Ex: select ename, fees from employ 4. Retrieving selected rows from selected columns Syn: select col1, col2 from <TN> where <condition> Ex: select name, fees from employ where id='a13' DCL: It is used to control the data between different user accounts. It includes the following statements. 1. GRANT Statement 2. REVOKE Statement 12
  • 13. Suresh Grant Statement: This statement is used to grant the permissions (INSERT, SELECT, UPDATE, DELETE) on a specific table to different user accounts. Syntax: GRANT {ALL/SPECIFIC PERMISSIONS} ON TABLENAME TO USER ACCOUNT (S) [WITH GRANT OPTION] WITH GRANT OPTION: When any user got the permissions on a specific table from other user with this option, then that user can grant the permissions on that same table to another user account. At that time sub user acts as owner. Ex: GRANT ALL ON EMP TO RAMESH WITH GRANT OPTION From the above statement RAMESH user account got all permissions on EMP table from SA user account. Mean time RAMESH can give the permissions on EMP to another user account because he got the permissions WITH GRANT OPTION. Ex: GRANT INSERT, SELECT ON EMP TO SURESH Now SURESH can perform select and insert operations on EMP table. But SURESH cannot perform update and delete operations on EMP table because he does not have the corresponding permissions. Revoke Statement: This statement is used to revoke the permissions (INSERT, SELECT, UPDATE, DELETE) on a specific table from different user accounts. Syntax: REVOKE {ALL/SPECIFIC PERMISSIONS} ON TABLENAME FROM USER ACCOUNT (S) [CASCADE] CASCADE: Using this option we can destroy the communication link between user accounts more over from the main user it self we can revoke the permissions from all sub users. Ex: REVOKE ALL ON EMP FROM SUBBU CASCADE The above statement revokes the permissions on EMP table from SUBBU and SURESH. Now SUBBU and SURESH users cannot access EMP table. TCL: Transaction is nothing but a unit of work. We can control these transactions using the following statements ROLLBACK Statement COMMIT Statement 13
  • 14. Suresh SAVE TRAN [SACTION] ROLLBACK Statement: This statement is used to cancel a particular performed transaction. To perform this statement in SQL Server we have to follow any one of the below 2 approaches. Approach 1: SET IMPLICIT_TRANSATIONS ON This approach is only to cancel a single recently performed operation. Ex: SET IMPLICIT_TRANSATIONS ON SELECT * FROM EMP DELETE FROM EMP SELECT * FROM EMP ROLLBACK SELECT * FROM EMP Approach 2: Explicit Transactions To approach is to cancel recently performed multiple operations. Syntax: BEGIN TRAN ------------- GO ------------- GO ------------- ROLLBACK TRAN Note: GO is query separator Ex: BEGIN TRAN INSERT INTO DEPT VALUES (50,’TRA’,’AUS’) GO UPDATE EMP SET SAL=SAL+1000 WHERE EMPNO=11 GO DELETE FROM STUDENT WHERE SNO=101 Select the entire transaction and press F5 for one time ROLLBACK TRAN The ROLLBACK statement cancels INSERT on Dept, UPDATE on EMP and DELETE on Student tables. COMMIT Statement: This statement makes a transaction permanent. It is not possible to rollback the committed transaction. Ex: SELECT * FROM EMP DELETE FROM EMP 14
  • 15. Suresh SELECT * FROM EMP COMMIT SELECT * FROM EMP The COMMIT statement deletes the data from EMP permanently. It is not possible to ROLLBACK the delete operation. Ex: BEGIN TRAN INSERT INTO DEPT VALUES (50,’TRA’,’AUS’) GO UPDATE EMP SET SAL=SAL+1000 WHERE EMPNO=11 GO DELETE FROM STUDENT WHERE SNO=101 Select the entire transaction and press F5 for one time COMMIT TRAN The above COMMIT TRAN makes all three transactions permanent. We cannot ROLLBACK the transactions. SAVE TRAN Statement: This statement is used to COMMIT/ROLLBACK a particular performed transaction from the set of transactions. It is associated with alphabets in order to save the transactions. BEGIN TRAN SAVE TRAN A INSERT INTO DEPT VALUES (50,’TRA’,’AUS’) SAVE TRAN B UPDATE EMP SET SAL=SAL+1000 WHERE EMPNO=11 SAVE TRAN C DELETE FROM STUDENT WHERE SNO=101 ROLLBACK TRAN C (The delete operation will be cancelled) COMMIT TRAN B (The update operation performed permanently we cannot rollback) TABLES FOR PRACTICALS: 1.CREATE TABLE EMP (EMPNO NUMERIC(4) NOT NULL, ENAME VARCHAR(10), JOB VARCHAR(9), MGR NUMERIC(4), HIREDATE DATETIME, SAL NUMERIC(7, 2), 15
  • 16. Suresh COMM NUMERIC(7, 2), DEPTNO NUMERIC(2)); DATA: INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902,'17-DEC-1980', 800, NULL, 20); INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698,'20-FEB-1981', 1600, 300, 30); INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698,'22-FEB-1981', 1250, 500, 30); INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839,'2-APR-1981', 2975, NULL, 20); INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,'28-SEP-1981', 1250, 1400, 30); INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,'1-MAY-1981', 2850, NULL, 30); INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,'9-JUN-1981', 2450, NULL, 10); INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,'09-DEC-1982', 3000, NULL, 20); INSERT INTO EMP VALUES 16
  • 17. Suresh (7839, 'KING', 'PRESIDENT', NULL,'17-NOV-1981', 5000, NULL, 10); INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,'8-SEP-1981',1500, 0, 30); INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,'12-JAN-1983', 1100, NULL, 20); INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,'3-DEC-1981', 950, NULL, 30); INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,'3-DEC-1981', 3000, NULL, 20); INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,'23-JAN-1982', 1300, NULL, 10); 2.CREATE TABLE DEPT (DEPTNO NUMERIC(2), DNAME VARCHAR(14), LOC VARCHAR(13) ); DATA: INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO'); 17
  • 18. Suresh INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON'); 3.CREATE TABLE SALGRADE (GRADE NUMERIC, LOSAL NUMERIC, HISAL NUMERIC); DATA: INSERT INTO SALGRADE VALUES (1, 700, 1200); INSERT INTO SALGRADE VALUES (2, 1201, 1400); INSERT INTO SALGRADE VALUES (3, 1401, 2000); INSERT INTO SALGRADE VALUES (4, 2001, 3000); INSERT INTO SALGRADE VALUES (5, 3001, 9999); Operators: 1. Arithmetic operators: +, -,*, / 1. +: Select sal, sal+1000 from EMP 2.-: Select sal, sal-100 from EMP 3.*: Select sal, sal*12 from EMP 4. /: Select sal, sal/2 from EMP 18
  • 19. Suresh 2. Assignment operator’s :( relational operators) =, <> or ! =,>,>=,<,<= 1. =: Select*from EMP where deptno=20 2. <> or! =: Select*from EMP where deptno<>20 3.>: Select*from EMP where sal>3000 4.>=: Select*from EMP where sal>=3000 5. <: Select*from EMP where sal<3000 6. <=: Select*from EMP where sal<=3000 3. Logical operators: and, or, not Ex: in maths two conditions are there, condition A and condition B A and B-- both conditions must be satisfied A or B-- if anyone satisfied then we can get output 1. And: Select*from EMP where sal>3000 and deptno=20 2. Or: Select*from EMP where sal>3000 or deptno=20 Between operator :( Range operator) Ex: select*from EMP where sal between 2000 and 5000 Not between: Ex: select*from EMP where sal not between 2000 and 5000 19
  • 20. Suresh In operator :( Minimizes searching time) Select*from EMP where ename in ('Scott', 'Turner’, ‘Suresh') Not in: Select*from EMP where ename not in ('scott','turner','suresh') Like operator :( Pattern matching) Ex: select*from EMP where ename like’s%' S%-- ename starts with s %s-- ename ends with s %s%-- somewhere s in ename _s%-- second character is s from beginning %s_ -- second from ending is s in ename Note: _ (underscore) denotes one character Not like operator: Select*from EMP where ename not like’s%' Alias: • Second or duplicate name, can be assigned to a table or column • Alias is temporary Ex: • Select sal*12 from EMP • Select sal*12 annual Sal from EMP Note: annual Sal is alias for sal*12 Inbuilt functions: 1. Aggregate functions :( Group functions) 1. Sum (): Select sum (sal) from EMP 2. Average (): Select avg (sal) from EMP 3. Max (): Select max (sal) from EMP 20
  • 21. Suresh 4. Min (): Select min (sal) from EMP 5. Count (): it counts number of rows Select count (*) from EMP Select count (ename) from EMP Select count (comm) from EMP Note: 1. Count Function doesn’t consider null as a value. 2. COUNT function does not count the rows of the column whose data type is BIGINT, In such situations we have to use COUNT_BIG function 6. Standard deviation (): Select stdev (sal) from EMP 7. Variance (): Select var (sal) from EMP DISTINCT ( ): This function displays the different values available for a specific column. It considers one NULL value. Ex: SELECT DISTINCT (DEPTNO) AS DIFF_VALUES FROM EMP DIFF_VALUES 10 20 Ex: SELECT COUNT (DISTINCT( DEPTNO)) AS NO_OF_ROWS FROM EMP NO_OF_ROWS 2 2. Numeric functions: 1. Absolute: Select abs (-9.5) O/p: 9.5 2. Ceiling: Select ceiling (9.01) O/p: 10 3. Floor: 21
  • 22. Suresh Select floor (9.9) O/p: 9 4. Square root: Select sqrt (144) O/p: 12 5. Power: Select power (3, 3) O/p: 27(3*3*3) 6. Square: Select square (3) O/p: 9(3*3) 7. Pi (): Select pi () O/p: 3.14(22/7) 8. Log: Select log (2) O/p: 0.693147180559945 9. Exp: Select exp (2) O/p: 7.38905609893065 10. ROUND (M, N): IT WILL ROUND THE VALUE OF M TO NEAREST WHOLE NUMBER OF IT WILL AROUND.  SELECT ROUND (15.143)  SELECT ROUND (16.513) 15 16 22
  • 23. Suresh  SELECT ROUND (16.816)  SELECT ROUND (21.132,1)  SELECT ROUND (25.143) 3. Character functions :( String functions) 1. Length: Select Len ('Hyderabad') O/p: 9 2. Upper: Select upper ('Hyderabad') O/p: HYDERABAD 3. Lower: Select lower ('HYDERABAD') O/P: hyderabad 4. Reverse: Select reverse ('Malayalam') O/p: Malayalam Select reverse ('school') O/p: loohcs 5. Replace: Select replace ('hyderabad','hyd','cyb') O/p: cyberabad 6. Substring: Select substring ('hyderabad', 3, 5) O/p: derab 7. ASCII (Character): It gives ASCII value of a character 17 21.1 25 23
  • 24. Suresh Select ASCII (‘A’) O/p: 65 Select ASCII (‘a’) O/p: 97 8. Char (n): It gives character for given ASCII value Select char (98) O/p: b Date time functions: 1. Getdate (): Select getdate () O/p: 2009-07-17 18:11:20.000 2. Getutcdate (): Select getutcdate () O/p: 2009-07-17 12:42:09.263 3. Dateadd: Select dateadd (dd, 7, getdate ()) O/p: 2010-04-27 15:24:15.827 4. Datediff: Select datediff (mm,'03/26/04', getdate ()) O/p: 73 5. Date part: Select datepart (yy, getdate ()) O/p: 2010 Select datepart (mm, getdate ()) O/p: 4 Select datepart (dd, getdate ()) O/p: 20 24
  • 25. Suresh 6. Date name: Select datename (DW, getdate ()) O/p: Tuesday Set operators: a= {1, 2, 3} b= {3, 4, 5} 1. A union B= {1, 2, 3, 4, 5} 2. A union all B= {1, 2, 3, 3, 4, 5} Note: union all retrieves duplicate data 3. A intersect B= {3} 4. A except B = A minus B= {1, 2} 1. Union: SELECT EMPNO FROM EMP UNION SELECT DEPTNO FROM DEPT 2. Union all: SELECT EMPNO FROM EMP UNION ALL SELECT DEPTNO FROM DEPT 3. Intersect: SELECT EMPNO FROM EMP INTERSECT SELECT DEPTNO FROM DEPT 4. Except: SELECT EMPNO FROM EMP EXCEPT SELECT DEPTNO FROM DEPT Group by clause: • Used to group similar data in the output • Conjunction of the similar data • Used to divide the table into number of subgroups based on a specific column. • Minimum single group or aggregate function is mandatory 25
  • 26. Suresh • If column contains similar data then only we can use it into group by clause  Display the number of employee working in different jobs of EMP table Ex: Select job, count (job) from EMP Group by job  Display max and min salaries of employees who are working in different deptno's of EMP table Ex: Select deptno, max (sal), min (sal) from EMP Group by (deptno) Ex: SELECT DEPTNO, MAX (SAL) AS HISAL, MIN (SAL) AS LOSAL, SUM (SAL) AS TOTSAL, AVG (SAL) AS AVGSAL FROM EMP GROUP BY DEPTNO Having clause: • It is an arithmetical expression • It can be used as an extension of group by clause and we can’t use where clause after group by clause • This clause is used to evaluate a condition with group by clause. Generally for evaluating conditions we will use WHERE clause, but where clause does not support by group by clause. Ex: Select job, count (deptno) from EMP Group by job Having count (deptno)>2 Ex: SELECT DEPTNO, MAX (SAL) AS HISAL, MIN (SAL) AS LOSAL, SUM (SAL) AS TOTSAL, AVG (SAL) AS AVGSAL FROM EMP GROUP BY DEPTNO HAVING AVG (SAL)>10000 Order by clause: • It is temporary sorting of the data either in ascending order or in Descending order • Default is ascending order Ascending: Ex: Select*from EMP order by sal Descending: 26
  • 27. Suresh Ex: Select*from EMP order by sal desc Clause precedence: 1. Where clause 2. Group by clause 3. Having clause 4. order by clause Joins: • Used to retrieve data from multiple tables • Joins plays major role in performance tuning • Joins comes under temporary relations • We need a common column or common data column in multiple tables • Two tables are there, they are EMP and DEPT am creating joins between them • Both tables contains a common column i.e. deptno, so that we can create Joins between EMP, DEPT tables • Formula: no. of joins=no. of tables-1 Types of JOINS: 1. Inner join :( Equi join) We are retrieving data from EMP, DEPT tables Ex: Select empno, ename, sal, d.deptno, dname, loc from EMP e Inner join DEPT d on e.deptno=d.deptno Note: Query retrieves equal number of rows from both tables 2. Outer join: This is three types 1. Left outer join: Select empno, ename, sal, d.deptno, dname, loc from EMP e Left outer join DEPT d on e.deptno=d.deptno It retrieves condition satisfies and non satisfied data from left side table of the condition i.e. EMP, it retrieves only condition satisfied data from right side table of the condition i.e. DEPT 2. Right outer join: Select empno, ename, sal, d.deptno, dname, loc from EMP e Right outer join DEPT d on e.deptno=d.deptno 27
  • 28. Suresh It retrieves condition satisfied from left side table of the condition i.e. EMP, it retrieves condition satisfied data and non satisfied data from right side table of the condition i.e. DEPT 3. Full outer join: This is combination of both right and left outer joins. Select empno, ename, sal, d.deptno, dname, loc from EMP e Full outer join DEPT d on e.deptno=d.deptno It retrieves condition satisfied and non satisfied data from both tables. 3. Non-equi join: EMP table contains a column sal, in SALGRADE table, we got two columns losal and hisal so that we can define a join condition. Select empno, ename, sal, grade from EMP e, SALGRADE s where e.sal between s.losal and s.hisal By using above query we can map employees and their grades. 4. Cross join :( Cartesian product) a= (1, 2, 3) b= (4, 5, 6) A*B=3*3=9 EMP table contains 14 rows Dept table contains 4 rows Cross join of EMP, DEPT tables produces 56 rows Ex: Select*from EMP cross join DEPT Creating a table by copying data and structure from another table: Syn: Select*into <TN> from <existing_table> Ex: Select*into EMP1 from EMP Ex: (Oracle) Create table EMP1 as select*from EMP; Creating a table by copying sturucture from another table: In this by defining false condition we can avoid copying of data. 28
  • 29. Suresh Syn: Select*into <TN> from <existing_tabel> where <false_condition> Ex: Select*into EMP2 from EMP where 1=2 SUB-QUERIES: • It is a Combination of multiple queries or select statements. • Query with in a query is known as Sub-Query Syn: Select statement (Select statement) Outer query inner query Types: 1. Simple or single row sub query: • It returns only single row to the user Ex: Retrieve second highest sal from EMP table Select max (sal) from EMP where sal< (select max (sal) from EMP) 2. Nested sub query: • It is also simple sub query • It returns single row Ex: Retrieve third highest sal from EMP table Select max (sal) from EMP where sal< (select max (sal) from EMP where Sal< (select max (sal) from EMP)) Distinct: It eliminates duplications temporarily. Ex: A. Select sal from EMP 29
  • 30. Suresh B. Select distinct (sal) from EMP  Formula for retrieving n highest salaries from EMP table: Select max (sal) from EMP e where n= (select count (distinct (sal)) from EMP b where e.sal<b.sal)  N is a number which indicates position of the sal  N starts from zero  n=n-1  Formula for Min sal: Select min (sal) from EMP e where n= (select count (distinct (sal)) from EMP b where e.sal>b.sal) 3. Co-related sub query:  It can return single and multiple rows to the user I want to retrieve deptno 20 data from EMP table, for that I want Satisfy the condition in dept table Ex: Select*from EMP where deptno= (select deptno from DEPT where dname='accounting') Note: If a sub query sends multiple values to its nearest main query then we have to use IN operator between Main query and Sub query. Ex: WAQ to display employee details, who are working under RAM dept. SELECT * FROM EMP WHERE DEPTNO= (SELECT DEPTNO FROM EMP WHERE ENAME=’RAM’) Ex: WAQ To display employee details, whose salary is greater than highest salary of 10th department SELECT * FROM EMP WHERE SAL> (SELECT MAX (SAL) FROM EMP WHERE DEPTNO=10) Ex: WAQ To display employee details, whose salary is greater than average salary of RAM department SELECT * FROM EMP WHERE SAL> (SELECT AVG (SAL) FROM EMP WHERE DEPTNO= SELECT DEPTNO FROM EMP WHERE ENAME=’RAM’) Constraints:  Set of rules which are used to improve functionality of tables 30
  • 31. Suresh  These are inbuilt rules  We can impose constraints on columns Adv: 1. Creating permanent relations between tables 2. We can avoid duplications and null values 3. We can create permanent conditions Note: We can create a constraint along with table creation this is of two types: 1. Column level Constraint: It can be created on single column 2. Table level Constraint: It can be created on multiple columns Note: We can add a constraint to the existing table Types: 1. Primary key 2. Unique constraint 3. Check constraint 4. Not null 5. Foreign key (Referential integrity) 1. Primary key: Properties: • It is unique • It is not null  Column level Primary Key: Syn: create table <TN> (col1 DT (l) constraint con_name primary key, col2 DT (l), col3 DT (l)) Ex: create table t1 (id int constraint p_key primary key, name varchar (20), DOB datetime) • In this we can create a constraint on single column only  Table level Primary key: syn: create table <tn>(col1 dt(l),col2 dt(l),col3 dt(l), constraint con_name primary key(col1,col2)) Ex: create table t2 (id int, name varchar (20), DOB datetime, constraint p_key3 primary key (id, name)) • We can create single constraint on multiple columns 31
  • 32. Suresh • Max of single primary key can be created on a table • If single primary key is working on multiple columns then it is known as "composite primary key" 2. Unique constraint: Properties: • Unique • It accepts single null value Syn: create table <TN> (col1 DT (l) constraint con_name unique, col2 DT (l), col3 DT (l)) Ex: create table t3 (id int constraint u_con unique, dname varchar (20), loc varchar (20)) 3. Check constraint: used to impose permanent conditions on columns Syn: create table <tn>(col1 dt(l),col2 dt(l) constraint con_name check(condition),col3 dt(l)) Ex: create table t4 (id int, sal numeric (7, 2) constraint check_con check (sal>3000), commission numeric (5, 2)) 4. Not null: it doesn’t accept null values Syn: create table <TN> (col1 DT (l) constraint con_name not null) Ex: create table t5 (id int constraint n_null not null) 5. Foreign key: • It always references values from either primary key or unique constraint and there are no properties for foreign key. • It also known as referential integrity • This reference will be stored into database permanently, so that • It is comes under permanent relation • Generally primary key and foreign are a part of different tables • Primary key table is known as parent or master table • Foreign key table is known as child or detail table • We can create primary key and foreign key in single table, that is known as "self referential integrity" Note: 1. Primary key and foreign key columns data types must be same. 32
  • 33. Suresh 2. If the value existing in primary key then only we can insert same value into foreign key. 3. Foreign key accepts null values when it is referencing from unique constraint syn: create table <tn>(col1 dt(l),col2 dt(l),col3 dt(l), constraint con_name foreign key(col1)references <tn2>(col1)) Ex: create table t6 (id int, address varchar (50), job varchar (20), constraint f_key foreign key (id) references t1 (id)) Adding constraint to a table: Syn: alter table <TN> add constraint con_name type_constraint (col_list) Ex: alter table t2 add constraint p_key3 primary key (id) Dropping constraint: Syn: alter table <TN> drop constraint con_name Ex: alter table t2 drop constraint p_key3 Information regarding constraints of a table: Syn: sp_helpconstraint <TN> Ex: sp_helpconstraint t1 Normalization: Normalization is process of splitting the base table into multiple tables based on the theory of Functional Dependency. OR Normalization is repetitive process in order to identify the functional dependencies among the columns and to remove them. If any functional dependency is occurred after the normalization process again we have to start the same process until all functional dependencies have been removed. To do this Normalization we have to follow rules or conditions called Normal Forms. Un-Normalized Table EMPNO PROJNO ENAME PNAME SAL BUD DEPTNO DNAME LOC 11 (P1, P2) ---- (Pn1, Pn2) ----- ----- 10 -------- ----- 22 (P2, P3) ---- (Pn2, Pn3) ----- ----- 10 -------- ----- 33 (P1, P3) ---- (Pn1, Pn3) ----- ----- 20 -------- ----- 33
  • 34. Suresh EMPNO and PROJNO are Primary Keys called ‘COMPOSITE PRIMARY KEY’ FIRST NORMAL FORM (1NF): According to first normal form table should contain only single values columns. But in the above un-normalized table the columns PROJNO and PNAME contains multiple values. To make the table into first normal form we should have to split the multiple values into single values. EMPNO PROJNO ENAME PNAME SAL BUD DEPTNO DNAME LOC 11 P1 ---- Pn1 ----- ----- 10 -------- ----- 11 P2 ---- Pn2 ----- ----- 10 -------- ----- 22 P2 ---- Pn2 ----- ----- 10 -------- ----- 22 P3 ---- Pn3 ----- ----- 10 -------- ----- 33 P1 ---- Pn1 ----- ----- 20 -------- ----- 33 P3 ---- Pn3 ----- ----- 20 -------- ----- SECOND NORMAL FORM (2NF): According to second normal form table should be in 1NF and we should have to remove Partial Functional Dependency. In the above table DEPTNO non-key column dependent part of the Primary key column i.e. EMPNO. It means there existed Partial functional dependency. To make the table into second normal form we have to divide the table into multiple tables. PROJ-INFO PROJNO PNAMEBUD P1 Pn1 ------ P2 Pn2 ------ P3 Pn3 ------ EMP-INFO EMPNO ENAME SAL DEPTNO DNAME LOC 11 ---- ---- 10 ------ ----- 22 ---- ---- 10 ------ ----- 33 ---- ---- 20 ------ ----- THIRD NORMAL FORM (3NF): 34
  • 35. Suresh According to second normal form table should be in 2NF and we should have to remove Transitive Functional Dependency. In the above EMP-INFO table non-key column DNAME dependent part on the other non- key column i.e.DEPTNO. It means there existed Transitive functional dependency. To make the table into third normal form we have to divide the table into multiple tables. PROJ-INFO PROJNO PNAMEBUD P1 Pn1 ------ P2 Pn2 ------ P3 Pn3 ------ EMP-INFO DEPT-INFO EMPNO ENAME SAL DEPTNO DNAME LOC 11 ---- ---- 10 ------ ----- 22 ---- ---- 20 ------ ----- 33 ---- ---- Views: A View is nothing but an image table or virtual table, which is created for a base table. A view can be created by taking all values from the base table or by taking only selected values from base table. There are two types’ views available in SQL Server. 1. Simple Views 2. Complex Views Note: If we perform any modifications in base table, then those modifications automatically effected in view and vice-versa. 1. Simple Views: Creating View by taking only one single base table. Syntax: CREATE VIEW VIEWNAME [WITH ENCRYPTION] AS SELECT * FROM TABLENAME [WHERE CONDITION] [WITH CHECK OPTION] Ex: CREATE VIEW V1 AS SELECT * FROM EMP INSERT INTO V1 VALUES (55,’RAVI’, 10000, 10) The above insert statement inserts the values into base table EMP as well as into view V1. Ex: 35
  • 36. Suresh CREATE VIEW V2 AS SELECT * FROM EMP WHERE DEPTNO=10 INSERT INTO V2 VALUES (66,’BABBU’, 25000, 10) The above insert statement inserts the values into base table EMP as well as into view V2. INSERT INTO V2 VALUES (77,’AMAR’, 15000, 20) The above insert statement inserts the values into only base table EMP but not into view V2 because according to the definition of V2 user supplied values are invalid values. It means invalid values are inserting into base table EMP. To stop this kind of operations we have to create the view with ‘WITH CHECK OPTION’. Ex: CREATE VIEW V3 AS SELECT * FROM EMP WHERE DEPTNO=10 WITH CHECK OPTION INSERT INTO V3 VALUES (88,’TEJA’, 25000, 20) The above insert statement cannot insert the values into base table EMP as well as into view V3. SP_HELPTEXT: This stored procedure is used to display the definition of a specific view. Syntax: SP_HELPTEXT VIEWNAME Ex: SP_HELPTEXT V1 Output: CREATE VIEW V1 AS SELECT * FROM EMP WITH ENCRYPTION: Once we create any view with ‘WITH ENCRYPTION’ then we cannot find the definition of that particular view using SP_HELPTEXT stored procedure because this encryption option hides the definition. Ex: CREATE VIEW V4 WITH ENCRYPTION AS SELECT * FROM EMP WHERE DEPTNO=20 SP_HELPTEXT V4 Output: The text for object v4 is encrypted To decrypt the definition of view V4 we have to follow the below approach 1. Replace CREATE with ALTER 2. Remove WITH ENCRYPTION keyword Ex: 36
  • 37. Suresh ALTER VIEW V4 AS SELECT * FROM EMP WHERE DEPTNO=20 SP_HELPTEXT V4 CREATE VIEW V4 AS SELECT * FROM EMP WHERE DEPTNO=20 2. Complex Views: Creating View by taking multiple base tables. Ex: CREATE VIEW EMP_DEPT_VIEW AS SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME FROM EMP, DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO Syntax to create view based on another views: SQL SERVER enables users to create views based on another view. We can create view based on another view up to 32 levels Syntax: CREATE VIEW VIEWNAME [WITH ENCRYPTION] AS SELECT * FROM VIEWNAME [WHERE CONDITION] [WITH CHECK OPTION] Ex: CREATE VIEW V5 AS SELECT * FROM V1 WHERE DEPTNO=10 Syntax to Drop the Views: DROP VIEW VIEWNAME […N] Ex: DROP VIEW V1, V2, V3, V4, V5 Indexes: Indexes in SQL server is similar to index in text book... Indexes are used to improve the performance of queries. • INDEXES ARE GENERALLY CREATED FOR FOLLOWING COLUMNS 1. Primary key column 2. Foreign key column: frequently used in join conditions. 3. Column which are frequently used in where clause 4. Columns, which are used to retrieve the data in sorting order. • INDEXED CANNOT BE CREATED FOR FOLLOWING COLUMNS 1. The columns which are not used frequently used in where clause. 2. Columns containing the duplicate and null values 3. Columns containing images, binary information, and text information. TYPES OF INDEXES: 37
  • 38. Suresh • CLUSTERED INDEX • NON-CLUSTERED INDEX CLUSTERED INDEX: only one clustered index is allowed per table. The order of values in a table order of values in index is also same. When cluster index is created on table data is arranged in ascending order cluster index will occupy 5% of the table. Syntax: CREATE [UNIQUE] CLUSTERED INDEX INDEXNAME ON TABLENAME (COLUMN) Ex: CREATE CLUSTERED INDEX CI ON EMP (EMPNO) Note: If we want to maintain unique values in clustered/non clustered indexed column then specify UNIQUE keyword along with CLUSTERED INDEX/NONCLUSTERD INDEX NONCLUSTERED INDEX: It is the default index created by the server the physical order of the data in the table is different from the order of the values in index. Max no. Of non- clustered indexed allowed for table is 249 Syntax: CREATE [UNIQUE] NONCLUSTERED INDEX INDEXNAME ON TABLENAME (COLUMN1…) Ex: CREATE NONCLUSTERED INDEX NCI ON EMP (ENAME, SAL) Ex: CREATE UNIQUE NONCLUSTERED INDEX UI ON DEPT (DNAME) COMPOSITE INDEX: If a Unique NonClustered index is created on more than one column then that concept is called composite index. CREATE UNIQUE NONCLUSTERED INDEX COI ON DEPT (DEPTNO, DNAME) DEPTNO DNAME 10 SALES 20 HR 30 IR 10 HR (Accepted) 20 SALES (Accepted) 30 IR (Repeated, Not accepted) SP_HELPINDEX: This stored procedure is used to display the list of indexes, which have been placed on different columns of a specific table. Ex: SP_HELPINDEX EMP Syntax to drop the index: 38
  • 39. Suresh DROP INDEX TABLENAME.INDEXNAME Ex: DROP INDEX DEPT.UI Synonym: • It is a database object • It is a second or duplicate name which can be assigned to a table • It will not occupies any space, just it is a second name of the table • Trough synonyms we can impose securities i.e. we can hide actual table names Syn: create synonym syn_name for <TN> Ex: create synonym syn_1 for EMP Retrieving data: Syn: select*from syn_name Ex: select*from syn_1 Dropping: Syn: drop synonym <TN> Ex: drop synonym syn_1 RULES AND DEFAULTS: CREATING DEFAULT: Default is one of the database objects used to declare default values globally. Syntax: CREATE DEFAULT DEFAULTNAME AS NUMERICVALUE/STRING VALUE Ex: CREATE DEFAULT D1 AS ‘UNKNOWN’ BINDING THE DEFAULT TO COLUMN: Syntax: SP_BINDDEFAULT DEFAULTNAME, ‘TABLENAME.COLUMN’ Ex: SP_BINDDEFAULT D1, ‘DEPT.LOC’ SP_BINDEFAULT D1, ‘EMP.ENAME’ 39
  • 40. Suresh INSERT INTO DEPT (DEPTNO, DNAME) VALUES (10,ACCOUNTING’) SELECT * FROM DEPT WHERE DEPTNO =10 DEPTNO DNAME LOC 10 ACCOUNTING UNKNOWN INSERT INTO EMP (EMPNO, SAL, DEPTNO) VALUES (100, 5000,20) SELECT EMPNO, ENAME, DEPTNO FROM EMP WHERE EMPNO =100 EMPNO ENAME DEPTNO 100 UNKNOWN 20 UNBINDING THE DEFAULT FROM THE BINDING COLUMN: Syntax: SP_UNBINDEFAULT ‘TABLENAME...COLUMN’ SP_UNBINDEFAULT ‘ DEPT.LOC’ SP_UNBINDEFAULT ‘ EMP.ENAME’ DROPPING THE DEFAULT: Syntax: DROP DEFAULT DEFAULTNAME DROP DEFAULT D1 CREATING RULES: Rule is just check constraint but it is placed on columns globally. Syntax: CREATE RULE RULENAME AS EXPRESSION Ex: CREATE RULE R1 AS @ X >=10 AND @ X <= 60 BINDING THE RULE: SP_BINDEFAULT RULENAME, ‘ TABLE.COLUMN’ SP_BINDEFAULT R1, ‘DEPT.DEPTNO’ INSERT INTO DEPT (DEPTNO) VALUES (70) ERROR 40
  • 41. Suresh UNBINDING THE RULES: SP_UNBIND RULE ‘DEPT.DEPTNO’ DROPPING THE RULES: DROP RULE RULENAME DROP RULE R1 TSQL Programs: Variable: whose can be varied is known as a variable Types: 1. Local variable: once we declared local variable then it can be used into single program Ex: @x int 2. Global variable: once we declared global variable then it can be used into many no. of programs Ex: @@y int Constant: whose value can’t be varied Ex: 1, 2,3,4,5 Note: tsql programs also known as tsql batches, these are two types 1. Named batches 2. Unnamed batches Structure: Declare Declaration and initiation of variables Begin Body of the program End 1. Declare: User can declare variables according to the requirement of the batch and can assign initial values to variables 41
  • 42. Suresh Ex: declare @x int Set @x=10 2. Begin: It contains actual code i.e. Logic Exceptions Conditional statements Output Output: print 'output' 3. End: Ending of the batch  WAP to display the word 'welcome to database' Begin Print 'welcome to database' End  WAP to calculate sum of two numbers Declare @x int Set @x=20 Declare @y int Set @y=10 Declare @z int Begin Set @z=@x+@y Print @z End Conditional Statements: 1. If. Else: Syn: Declare Variable declaration and initiation Begin If condition Output Else Output End  WAP to find out greatest number among two numbers Declare @x int Set @x=20 Declare @y int 42
  • 43. Suresh Set @y=10 Begin If @x>@y Print 'x is greatest' Else Print 'y is greatest' End 2. If. Elseif... Else: Syn: Declare Variable declaration and initiation Begin If condition Output Else if condition Output Else Output End  WAP to find out greatest number among three numbers Declare @x int Set @x=20 Declare @y int Set @y=10 Declare @z int Set @z=5 Begin If @x>@y and @x>@z Print 'x is greatest' Else if @y>@x and @y>@z Print 'y is greatest' Else Print 'z is greatest' End 3. While: Syn: Declare Variable declaration and initiation While condition Begin Body of the program End  WAP to display numbers from 1 to 10 with increment of 1 DECLARE @counter INT SET @counter=1 43
  • 44. Suresh WHILE @counter <= 10 BEGIN PRINT @counter SET @counter=@counter+1 END Cursors: Cursor is a logical area, which is used to retrieve a particular nth record. Selecting a particular nth record is not possible through physical area (Table). In such situations one logical area (Cursor) we can create and then we can select a particular nth record. Cursors are used to store transaction information temporarily. Types of Cursors: 1. STATIC CURSOR 2. DYNAMIC CURSOR 3. KEYSET CURSOR 4. FORWARD_ONLY CURSOR DEPT_TABLE: DEPTNO DNAME LOC 10 SALES HYD 20 HR CHE 30 IR BAN 40 A/C MUM Syntax: Syntax to declare the Cursor: DECLARE CURSORNAME CURSOR CURSORTYPE FOR SELECT * FROM TABLENAME Syntax to open the Cursor: OPEN CURSORNAME Syntax to fetch the records from Cursor: FETCH {FIRST/NEXT/PRIOR/LAST/ABSOLUTE N/RELATIVE N} FROM CURSORNAME Syntax to close the Cursor: CLOSE CURSORNAME Syntax to de allocates the Cursor: DEALLOCATE CURSORNAME FIRST: Fetches first record from the cursor 44
  • 45. Suresh NEXT: Fetches next record from the current position of the cursor PRIOR: Fetches previous record from the current position of the cursor LAST: Fetches last record from the cursor ABSOLUTE N: Fetches nth record from the top of the cursor if n is positive fetches the nth record from bottom of the cursor if n is negative. Where n is an integer RELATIVE N: Fetches nth next record from current position of the cursor if n is positive fetches nth previous record from the current position of the cursor if n is negative where n is an integer. 1. STATIC CURSOR: This is the logical area in which dynamic updations not possible. If we want those updations in logical area we close the cursor and we need to reopen it. 1. DECLARE SC CURSOR STATIC FOR SELECT * FROM DEPT OPEN SC FETCH FIRST FROM SC 10 SALES HYD UPDATE DEPT SET DEPTNO=15 WHERE DEPTNO=10 FETCH FIRST FROM SC 10 SALES HYD CLOSE SC OPEN SC FETCH FIRST FROM SC 15 SALES HYD FETCH NEXT FROM SC 20 HR CHE FETCH PRIOR FROM SC 15 SALES HYD FETCH LAST FROMSC 40 A/C MUM FETCH ABSOLUTE 2 FROM SC 20 HR CHE FETCH ABSOLUTE –2 FROM SC 30 IR BAN FETCH FIRST FROM SC 15 SALES HYD FETCH RELATIVE 2 FROM SC 30 IR BAN 45
  • 46. Suresh FETCH RELATIVE –2 FROM SC 15 SALES HYD CLOSE SC DEALLOCATE SC 2. DYNAMIC CURSOR: This is the logical area in which dynamic updations possible. We need to close and reopen the cursor for the modified values Ex: DECLARE DC CURSOR DYNAMIC FOR SELECT * FROM DEPT OPEN SC FETCH FIRST FROM DC 15 SALES HYD UPDATE DEPT SET DEPTNO=10 WHERE DEPTNO=15 FETCH FIRST FROM DC 10 SALES HYD CLOSE DC DEALLOCATE DC Note: ABSOLUTE N will not be supported by the dynamic cursor because dynamic updations are possible. 3. KEYSET CURSOR: This is the logical area, which is useful only when there is a primary key in the table. This logical area holds only Primary key column values. Based on the key column values in the logical area (Cursor) the rest column values are coming from physical area (Table). Ex: DECLARE KC CURSOR KEYSET FOR SELECT * FROM DEPT OPEN KC FETCH FIRST FROM KC 10 SALES HYD UPDATE DEPT SET LOC=’SRNAGAR’ WHERE LOC=’HYD’ FETCH FIRST FROM KC 10 SALES SRNAGAR UPDATE DEPT SET DEPTNO=15 WHERE DEPTNO=10 FETCH FIRST FROM KC 0 NULL NULL CLOSE KC 46
  • 47. Suresh OPEN KC FETCH FIRST FROM KC 15 SALES HYD CLOSE KC DEALLOCATE KC Note: Dynamic updations are not possible on key column of the keyset cursor, we have to close the cursor and we need to reopen it for the modified values. 4. FORWARD_ONLY CURSOR: This is the most unused logical area because it supports only NEXT operation. Ex: DECLARE FC CURSOR FORWARD_ONLY FOR SELECT * FROM DEPT OPEN FC FETCH FIRST FROM FC Error Message FETCH NEXT FROM FC 15 SALES HYD CLOSE SC DEALLOCATE FC NOTE: If the cursor does not found any value in its searching process then it will display the corresponding column values. 1. BATCH TO FETCH MULTIPLE RECORDS FROM STATIC CURSOR Step1: DECLARE SC CURSOR STATIC FOR SELECT * FROM DEPT Step2: DECLARE @N INT OPEN SC SET @N=2 WHILE (@N<=4) BEGIN FETCH ABSOLUTE @N FROM SC SET @N=@N+1 END Step3: CLOSE SC DEALLOCATE SC OUTPUT: 47
  • 48. Suresh DEPTNO DNAME LOC 20 HR CHE DEPTNO DNAME LOC 30 IR BAN DEPTNO DNAME LOC 40 A/C MUM Stored Procedures: • It is a database object • After successful compilation it will be stored into a precompiled programming unit • So that with out compilation we can use same stored procedure any number of times • User can get reusability • It is major part performance tuning • Used complete a task in database Types: 1. System stored procedures: Ex: sp_tables sp_helptable <TN> sp_helpdb <database name> sp_rename sp_addumpdevice 2. User stored procedure: • defined by the users explicitly • variable are known as "parameters" • parameters are two types 1. In :( default) used to pass the values 2. Output: used to get the values Note: stored procedure can return multiple values through its output parameter Syntax: CREATE PROC [EDURE] PROCEDURENAME [@PARA 1 DATATYPE (SIZE)[=DEFAULT_VALUE][OUTPUT] 48
  • 49. Suresh @PARA 2 DATATYPE (SIZE)[=DEFAULT_VALUE][VALUE],….] AS BEGIN SELECT STATEMENT END Syntax to execute the user defined stored procedure: EXEC [UTE] PROCEDURENAME [VALUE1, VALUE2…] Drop: Drop procedure pro_name Programs:  Create a stored procedure to insert data into dept table Create procedure insert_dept @dno int,@name varchar (20), @loc varchar (20) As Begin Insert into dept (deptno, dname, loc) values (@dno, @name, @loc) End Execution: Exec insert_dept 50,'csc','hyderabad' Result: Select*from dept  Create a stored procedure to update dname, loc according to the given deptno of dept table Create procedure update_dept @dno int, @name varchar (20), @loc varchar (20) As Begin Update dept set dname=@name,loc=@loc where deptno=@dno End Execution: Exec update_dept 50,'eee','india' Result: Select*from dept Note: The number of values supplied through EXEC statement must be equal to the number parameters. 49
  • 50. Suresh  Write a procedure to select the data from EMP table. CREATE PROCEDURE P1 AS BEGIN SELECT * FROM EMP END EXEC P1  Write a procedure to select the data from EMP table based on user supplied DEPTNO. CREATE PROCEDURE P2 @X INT AS BEGIN SELECT * FROM EMP WHERE DEPTNO=@X END EXEC P2 20  Write a procedure to add two numbers CREATE PROCEDURE P3 @A INT=10,@B INT=20 AS BEGIN DECLARE @C INT SET @C=@A+@B PRINT @C END EXEC P3 Output: 30 EXEC P3 25, 45 Output: 70 Note: Server will give highest priority to the user supplied values rather than default values. User Defined Functions :( UDF’S) • It is a database object • Used to complete calculations in database • It is like stored procedure after successful compilation it will stored into database as a pre • compiled programming unit • User’s gets reusability facility i.e. without compilation users can go for execution • It contains only one parameter In parameter: used to pass the values 50
  • 51. Suresh 1. Through return statement it can send value to the user 2. Udf’s can return single value with data type Functions created by user are called user defined functions Types of user defined functions: 1. SCALAR VALUED FUNCTIONS 2. TABLE VALUED FUNCTIONS 1. Scalar valued functions: These functions will return a scalar value to the calling environment Syntax: CREATE FUNCTION < FUNCTION_NAME> (@PARA 1 DATA TYPE , @ PARA 2 DATATYPE…) RETURNS <DATATYPE> AS BEGIN DECLARE @VARIABLE DATATYPE -------- ---------- RETURN @VARIABLE END Syntax to execute the user defined function: SELECT/PRINT DBO.FUNCTIONNAME (VALUE1, VALUE2…) Note: The number of values supplied through PRINT/SELECT statement must be equal to the number parameters.  Write a function to find the product of two numbers CREATE FUNCTION F1 (@ A INT, @B INT) RETURNS INT AS BEGIN DECLARE @ C INT SET @C = @A * @B RETURN @C END SELECT/PRINT DBO.F1 (3,5)  Write function to find the net salary of an employee read EMPNO though parameter and display the net to return value CREATE FUNCTION F2 (@ VNO INT) RETURNS INT AS BEGIN DECLARE @ VSAL INT, @VCOM INT, @NET INT SELECT @VSAL = SAL, @VCOM=COM 51
  • 52. Suresh FROM EMP WHERE EMPNO =@VNO IF @ VCOM IS NULL BEGIN PRINT ‘COMMISION IS NULL’ SET @NET = @VSAL END ELSE BEGIN SET @ NET = @VSAL + @VCOM END RETURN (@NET) END PRINT/SELECT DBO.F2(22) 2. Table valued function: These functions will return entire table to the calling environment. Syntax: CREATE FUNCTION <FUNCTION_NAME> (PARA 1 DATA TYPE ……….) RETURNS TABLE AS BEGIN <FUNCTION BODY> RETURN (SELECT STATEMENT) END  Write a function to return entire dept table CREATE FUNCTION F3() RETURNS TABLE AS BEGIN RETURN (SELECT * FROM DEPT) END SELECT * FROM F3() DEPT DNAME LOC  CREATE FUNCTION F4() RETURN TABLE AS BEGIN RETURN(SELECT ENAME, DNAME FROM EMP, DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO) END SELECT * FROM F4() 52
  • 53. Suresh ENAME DNAME SMITH RESEARCH MILLER ACCOUNTING  Create function to convert datetime data into char Default datetime format: 'yyyy-mm-dd HH: MI: SS: MS’  2009-07-31 -- is it datetime data in sqlserver 2005? No CREATE FUNCTION DateOnly (@InDateTime date time) RETURNS varchar (10) AS BEGIN DECLARE @MyOutput varchar (10) SET @MyOutput = CONVERT (varchar (10), @InDateTime, 101) RETURN @MyOutput END Note: Convert is inbuilt function used to convert data from one data type to another To call our function, execute: SELECT dbo.DateOnly (GETDATE ()) Drop: Syn: Drop function fun_name TRIGGERS: Two types of Triggers are there in SQLSERVER 2005, they are 1. DDL TRIGGERS: Can be created on database Servers and databases. 2. DML TRIGGERS: Can be created on Tables and Views. DML Triggers: DML triggers respond to user INSERT, UPDATE, DELETE operations against a table or a view. When a data modification event occurs, the trigger performs a set of actions defined within the trigger. Similar to stored procedures, triggers are defined in Transact-SQL and allow a full range of activities to be performed. A DML trigger can be defined specifically as FOR UPDATE, FOR INSERT, FOR DELETE, or any combination of the three. UPDATE triggers respond to modifications against one or more columns within the table, INSERT triggers respond to new data being added to the database, and DELETE triggers respond to data being deleted from the database. There are two types of DML triggers: AFTER and INSTEAD OF. 53
  • 54. Suresh AFTER triggers are only allowed for tables, and they execute after the data modification has been completed against the table. INSTEAD OF triggers execute instead of the original data modification and can be created for both tables and views. DML triggers allow you to perform actions in response to data modifications in a table. For example, you can create a trigger that populates an audit table based on the operation performed, or perhaps use the trigger to decrement the value of a quantity. Although this ability to trigger actions automatically is a powerful feature, there are a few things to keep in mind before your use of triggers proliferates: • Triggers can often become a hidden and hence forgotten problem. When troubleshooting Performance or logical issues, DBAs can forget that triggers are executing in the background. Make sure that your use of triggers is “visible” in your data documentation. • If you can ensure that all your data modifications flow through a stored procedure, I would strongly recommend you perform all activities within the stored procedure, rather than use a Trigger. For example, if you need to update a quantity in a related table, after inserting a sales record; why not put this logic in the stored procedure instead? The advantages are manageability (One place to look) and supportability (one place to troubleshoot), when the Procedure needs modifications or performs unexpected actions. • Always keep performance in mind and this means writing triggers that execute quickly. Long-running triggers can significantly slow down data modification operations. Take particular care in putting triggers into databases with frequent data modifications. • Non-logged updates do not cause a DML trigger to fire (for example WRITETEXT, TRUNCATE TABLE and bulk insert operations). • Constraints usually run faster than a DML trigger, so if your business requirements can be fulfilled by a constraint, use constraints instead. AFTER triggers run after the data modification has already occurred, so they cannot be used to prevent a constraint violation. • Don’t allow result sets from a SELECT statement to be returned within your trigger. Most applications can’t consume these in an elegant fashion, and embedded queries can hurt the Trigger’s performance. Parts of Trigger: 1. Triggering Statement 2. Triggering Restriction 3. Triggering Action Note: Triggering Action is different from remaining parts, because Trigger fires implicitly whenever an event occurs against to the Triggering Condition. Things to Observe: • When user creates an after Trigger on any table for INSERT operation then server arranges a temporary table “INSERTED” for holding recently inserted values. • When user creates an after Trigger on any table for DELETE operation then server arranges a temporary table “DELETED” for holding recently deleted values. 54
  • 55. Suresh • When user creates an after Trigger on any table for UPDATE operation then server arranges two temporary tables “INSERTED, DELETED” for holding old and new values of UPDATE operation. Syntax of After Trigger: CREATE TRIGGER TRIGGERNAME ON TABLE NAME FOR/ AFTER {INSERT/ UPDATE/ DELETE} AS BEGIN SQL STATEMENT END Syntax for Instead of Trigger: Create trigger <Trigger_name> on <TN> or <View_name> instead of INSERT OR UPDATE OR DELETE As Begin Body of the program End Drop: Syntax: Drop trigger <Trigger_name> Retrieve list of Triggers on a Table: Syn: sp_helptrigger <TN> Ex: sp_helptrigger EMP To view the SQL behind a specific trigger Syn: sp_helptext <Trigger_name> Create a trigger for generate alert Create trigger tri_emp on EMP after insert As Begin Print 'one row inserted' End Result: Insert into EMP (empno) values (1) Create a trigger for copying data from Temp table to Original table CREATE TRIGGER deleteorder_trigger ON orders AFTER DELETE AS BEGIN INSERT INTO orders_archive (order_id, order_date, cust_id) SELECT order_id, order_date, cust_id FROM DELETED 55
  • 56. Suresh End Note: 1. Create Orders, Orders_archive tables before running above program. 2. Orders, Orders_archive tables contain same structure. 3. DELETED is a temporary table Ex: CREATE TRIGGER vendor_trigger ON EMP AFTER INSERT, UPDATE AS BEGIN UPDATE EMP SET ename=Upper (ename) WHERE empno IN (SELECT empno FROM INSERTED) END Instead of Trigger: Ex: CREATE TRIGGER T4 ON DEPT INSTEAD OF INSERT,UPDATE, DELETE AS BEGIN PRINT ‘THESE OPERATIONS ARE NOT ALLOWED’ END The above trigger fires automatically and shows a message THESE OPERATIONS ARE NOT ALLOWED, when user try to perform INSERT, UPDATE, DELETE operations on DEPT table. DDL TRIGGERS (2005 Triggers): These triggers are fired when user performs DDL operations in the database and these triggers belong to database. It means we can define triggers on the current database. Syntax: CREATE TRIGGER TRIGGERNAME ON DATABASE FOR/ AFTER {DROP,/ALTER/ CREATE} AS BEGIN SQL STATEMENT. END 1. USE PUBS CREATE TRIGGER DROP_TRG ON DATABASE FOR DROP_TABLE AS BEGIN PRINT ‘TABLE DROPPED’ END 56
  • 57. Suresh 2. USE PUBS CREATE TRIGGER DROP_TRG ON DATABASE INSTEAD OF DROP_TABLE AS BEGIN PRINT ‘U CANNOT DROP THE TABLE’ END DIFFERENCE BETWEEN ORACLE & SQL Server: ORACLE %TYPE data type SQL Server No equivalent DESCRIPTION The %TYPE data type of Oracle lets you create a variable and have that variable's data type be defined by a table or view column or a PL/SQL package variable. There is no equivalent for Oracle's %TYPE datatype in T-SQL, but it can be simulated (not very conveniently though) using User Defined Data types (UDT). Here is an example: EXEC sp_addtype 'MyType', 'smallint', NULL CREATE TABLE MyTable (i MyType) CREATE PROC MyProc AS BEGIN DECLARE @i MyType END BEFORE triggers INSTEAD OF triggers Use INSTEAD OF trigger in SQL Server as an equivalent to Oracle's BEFORE trigger. For more information on INSTEAD OF triggers, see SQL Server Books Online DECODE() function CASE expression DECODE can be conveniently simulated using the T-SQL CASE expression. Here's an example: SELECT Sport, CASE Sport WHEN 'Cricket' THEN 'England' WHEN 'Hockey' THEN 'India' WHEN 'Base Ball' THEN 'America' ELSE NULL END AS 'Originating Country' 57
  • 58. Suresh FROM Sports DESCRIBE sp_help or sp_columns There are a lot of alternatives for Oracle's DESCRIBE, in SQL Server. You could use the system stored procedure sp_help for detailed information about a table's columns and other properties. If sp_help is providing you with too much information, then try the ODBC catalog stored procedure, sp_columns. There are a bunch of other useful sp_help* stored procedures available in SQL Server. You can find more information about those in SQL Server Books Online. If none of those procedures are suitable for your requirements, then you could query the system view INFORMATION_SCHEMA.COLUMNS, to get the desired information. You could wrap your code inside a stored procedure named DESCRIBE, if you wish. As a last resort, you could even query system tables like sysobjects and syscolumns, but this is not a recommended approach. DUAL table No equivalent There is no DUAL table in SQL Server. In fact, you don't need one in SQL Server, as you can have a SELECT statement without a FROM clause. For example, consider the following SELECT statement in Oracle: SELECT 'Something' FROM DUAL In SQL Server, the same result can be obtained by the following command: SELECT 'Something' If you are porting some code from Oracle into SQL Server and if you don't want to remove all references to DUAL table, then just create a DUAL table in your database using the following commands: CREATE TABLE DUAL ( DUMMY varchar(1) ) INSERT INTO DUAL (DUMMY) VALUES ('X') 58
  • 59. Suresh INTERSECT operator Not supported Use EXISTS clause to generate the same result. The following example illustrates the simulation of Oracle's INTERSECT operator: SELECT OrderID, OrderDate FROM Orders O WHERE EXISTS ( SELECT 1 FROM RefundsTable R WHERE O.OrderID = R.OrderID ) MINUS operator Not supported Use NOT EXISTS clause in your SELECT statement to generate the same result. The following example illustrates the simulation of Oracle's MINUS operator: SELECT OrderID, OrderDate FROM Orders O WHERE NOT EXISTS ( SELECT 1 FROM RefundsTable R WHERE O.OrderID = R.OrderID ) Nested tables Not supported Oracle 8i and prior versions didn't support this feature and is introduced in Oracle 9i. This feature basically enables you to store a table, within a column. It is like having an array of records in your database columns. SQL Server has no concept of nested tables. As a workaround, You could store your sub-tables or child tables in the form of XML inside a char, nchar, varchar, nvarchar, text or ntext type column, and parse it as needed, at runtime. See OPENXML, sp_xml_preparedocument, sp_xml_removedocument in SQL Server 2000 Books Online. Another possible workaround would be to store comma separated values (CSV). Note that this is against the basic rules of normalization. Columns are nomore atomic, with nested tables. From a design point of view, best thing to do would be, to create different tables for representing different entities and link them with primary and foreign key relationships. This will also make 59
  • 60. Suresh searching easier. Packages Not supported No equivalent in SQL Server for Oracle's Packages and Package variables concept PL/SQL T-SQL PROGRAMMING Every database product implements and extends the standard SQL. Oracle's implementation of SQL is called PL/SQL, while Microsoft's is called T-SQL (Transact-SQL) Row level security No equivalent Though there is no inbuilt support in SQL Server for row level permissions, you can implement it using view and system functions. For more information and a working example, read this article: Implementing row level permissions/security in SQL Server databases rownum pseudo column No equivalent Though there is no rownum or rowid in SQL Server, there are several ways in which a row number can be generated. For some examples, read this article: Q186133 INF: How to Dynamically Number Rows in a Select Statement SELECT...FOR UPDATE UPDLOCK hint Use the locking hint UPDLOCK in your SELECT statement. See SQL Server Books Online for more information. Sequences IDENTITY It is much simpler in SQL Server to generate a sequence value for a primary key or a non-key column. You just need to turn on the IDENTITY property of column. IDENTITY property can be set to columns of the following data types: tinyint, smallint, int, bigint, decimal, numeric Try this example to see how it works: CREATE TABLE foo ( i int IDENTITY(1, 1) j int ) 60
  • 61. Suresh INSERT INTO foo (j) VALUES (911) INSERT INTO foo (j) VALUES (999) SQL *Plus Query Analyzer/ SSMS For connecting to SQL Server and executing queries and modifying data, use the built-in Query Analyzer. It is much more powerful and friendlier than Oracle's SQL *Plus START WITH...CONNECT BY clause No equivalent Though there's no direct equivalent in T-SQL for Oracle's START WITH...CONNECT BY, there are several ways and efficient techniques for processing and querying hierarcical data. For more information, read this article: Working with hierarchical data in SQL Server databases Synonym Views You can simulate Oracle Synonyms in SQL Server using Views. For example, the following creates a view that returns the OrderID and OrderDate from Orders table. CREATE VIEW vOrders AS SELECT OrderID, OrderDate FROM Orders Now you can select data from the view, using the following SELECT statement: SELECT * FROM vOrders The following example will create a view which is equivalent to Oracles TABS synonym or USER_TABLES data dictionary view (For simplicity, I am only including the table name in the view definition): CREATE VIEW TABS AS SELECT name AS table_name FROM sysobjects WHERE type = 'U' Now you can execute the following SELECT statement to return all user table names: SELECT table_name FROM TABS T-SQL Enhancements in 2008: 61
  • 62. Suresh Every new version of SQL Server comes with several T-SQL features and enhancements. SQL Server 2008 is no exception. In the newest version of SQL Server, Microsoft has responded to developer requests in a big way. SQL Server 2008 supports brand new developer convenience features like single statement declaration and initialization, new data types to manipulate and query date-based and spatial data, new statements like MERGE that add much needed functionality to T-SQL and a whole lot more. Once you’ve made the move to SQL Server 2008, you’ll undoubtedly want to take advantage of the new features and functionality to solve common problems. 1. Separate Variable Declaration and Initialization The first of these new features is single statement variable declaration and initialization. In the past, developers had to declare new variables in one or more DECLARE statements and assign values to the variables in one or more SET or SELECT statements as shown in below Listing. DECLARE @x int, @y int, @z int SET @x=1 SET @y=2 SET @z=3 With single statement declaration and initialization, you can combine these two steps into a single step as shown in below Listing DECLARE @x int =1,@y int=2, @z int =3 2. Calculating and Assigning Values with C-Style Assignment T-SQL has further improved with the addition of several C-Style assignment operators. Operator Description += Addition with assignment, or string concatenation with assignment -= Subtraction with assignment *= Multiplication with assignment /= Division with assignment %= Modulo with assignment Ex: DECLARE @x int=4, @y int=25, @s1 varchar(20)=’Sql’ SET @x *= @y SET @s1+= ‘SERVER’ SELECT @x, @s1 3. NEW INSERT STATEMENT SYNTAX: INSERT INTO TABLE_NAME 62
  • 63. Suresh VALUES (VALUE1, VALUE2,……), (VALUE1, VALUE2,…..), (VALUE1,VALU2,……..) EX: INSERT INTO EMP VALUES (11,’RAM’, 30000, 10), (22,’RAJ’, 20000, 20) Like in SQL Server 2005 we need not to write multiple INSERT statements for multiple records. With in single INSERT statement we can insert multiple records into the table at a time 4. MERGE Statement It is one of the DML statement placed newly in SQL Server 2008 Merge Statement is a combination statement that can perform INSERT, UPDATE, DELETE statements based on whether rows that match the selection criteria exist in the target table or not. This Merge statement takes Target and Source Tables, When Source rows are matched with Target it will update the rows of source table into target table otherwise it will insert the rows of source table into target table. Always merge statement takes a temp table as its source and base table as its target table. Using this Merge statement we can combine the rows of a source table to target table. Syntax: MERGE Target_Table as target USING Source_table as source ON condition WHEN MATCHED THEN UPDATE SET column=source.column,……….. WHEN TARGET NOT MATCHED THEN INSERT VALUES (source.column1, source.column2,) 4. New Data Types In 2008 SQL Server 2008 provides new data types that support storage, manipulation and querying of new forms of data. Some, like the date data type which stores a simple date with out the time component. Others like the geometry data type, which allows storage and querying of spatial data, have only recently addressed. Date and Time Data Types SQL Server supports four brand new date and time data types, which includes 1. date 2. time 3. datetime2 4. datetimeoffset 63
  • 64. Suresh The date data type finally allows us to store date only without the time component. It can also store a much larger range of dates than datetime and smalldatetime data types. The date data type can handle dates from January 1, 1 CE (0001-01-01) to December 31, 9999 CE (9999-12-31) Ex: DECLARE @d1 date=’0014-08-19’ DECLARE @d2 date=’1983-02-26’ SELECT @d1 as DATE1,@d2 as DATE2 DATEDIFF (YEAR, @d1, @d2) as YEARDIFFERENCE In contrast to the date data type, the time data type lets you to store time only data. The range for the time data type is defined on 24 hour clock, from 00:00:00.0000000 through 23:59:59.9999999 with user defined fractional second precision of up to seven digits. Ex: DECLARE @start_time time (1) =’06:25:19.1’ --1 digit fractional precision DECLARE @end_time time=’18:25:19.1234567’ --default fractional precision SELECT @start_time as STARTTIME, @end_time as ENDTIME DATEADD (HOUR, 6, @start_time) as STARTTIMEPLUS, DATEDIFF (HOUR,@start_time,@end_time) as ENDSTARTDIFF The cleverly named datetime2 data type is an extension to the standard datetime data type. The datetime2 combines the benefits of the new date and time data types, giving you the wide date range of the date data type and the greater fractional second precision of the time data type. Ex: DECLARE @start_dt2 datetime2=’1972-07-06T07:13:28.8235670’ DECLARE @end_dt2 datetime2=’2009-12-14T03:14:13.2349872’ SELECT @start_dt2 as start_dt2, @end_dt2 as end_dt2 The new datetimeoffset data type builds on datetime2 by adding the ability to store offsets relative to the International Telecommunication Union(ITU) standard for Coordinated Universal Time(UTC) with your date and time data type. 5. The Hierarchyid Data Type The hierarchyid data type offers to represent hierarchical data in the database. This new data type offers built-in support for representing your hierarchical data using one of the simplest models available: materialized paths Hierarchyid Data Type Methods 64
  • 65. Suresh Method Description GetAncestor(n) Retrieves the nth ancestor of the hierarchyid node instance GetDescendent(n) Retrieves the nth descendent of the hierarchyid node instance GetLevel() Gets the level of the hierarchyid node instance in the hierarchy GetRoot() Gets the root node of the hierarchyid instance in the hierarchy IsDescendent(node) Returns 1 if a specified node is descendent Parse(String) Converts the given canonical string, in forward slash- separated format to a hierarchyid path. Reparent(old_root,new_root) Reparents a node by moving nodes from old_root to new_root ToString() Converts a hierarchyid instance to a canonical forward slash-separated string representation 5. The Spatial Data Type SQL Server 2008 includes two new data types for storing, querying, and manipulating spatial data. • Geometry • Geography Geometry data type is designed to represent flat-earth, or Euclidean, spatial data. Geography data type supports round earth or ellipsoidal, spatial data. QUERIES: 1. Display the dept information from department table. Select * from DEPT; 2. Display the details of all employees. Select * from EMP; 3. Display the name and job for all employees. Select ename, job from EMP; 4. Display name and salary for all employees. Select ename, sal from EMP; 5. Display employee number and total salary for each employee. Select empno, sal+comm from EMP; 6. Display the names of all employees who are working in department number 10. Select ename from EMP where deptno=10; 7. Display the names of all employees working as clerks and drawing a salary more than 3000. select ename from EMP where job=’CLERK’ and sal>3000; 65
  • 66. Suresh 8. Display employee number and names for employees who earn commission. Select empno, ename from EMP where comm is not null and comm>0; 9. Display names of employees who do not earn any commission. Select empno, ename from EMP where comm is null and comm=0; 10. Display the names of employees who are working as clerk, salesman or analyst and drawing a salary more than 3000. Select ename from EMP where (job=’CLERK’ or job=’SALESMAN’ or job=’ANALYST’) and sal>3000; (Or) Select ename from EMP where job in (‘CLERK’,’SALESMAN’,’ANALYST’) and sal>3000; 11. Display the names of employees who are working in the company for the past 5 years. Select ename from EMP where sysdate-hiredate>5*365; 12. Display the list of employees who have joined the company before 30th June 90 or after 31st dec 90. Select * from EMP where hiredate between ‘30-jun-1990’ and ‘31-dec- 1990’; 13. Display the names of employees working in department number 10 or 20 or 40 or employees working as clerks, salesman or analyst. Select ename from EMP where deptno in (10, 20, 40) or job in (‘CLERK’,’SALESMAN’,’ANALYST’); 14. Display the names of employees whose name starts with alphabet S. Select ename from EMP where ename like ‘S%’; 15. Display employee names for employees whose name ends with alphabet. Select ename from EMP where ename like ‘%S’; 16. Display the names of employees whose names have second alphabet A in their names. Select ename from EMP where ename like ‘_S%’; 17. Display the names of employees whose name is exactly five characters in length. Select ename from EMP where length (ename) =5; (Or) Select ename from EMP where ename like '_____'; 18. Display the names of employees who are not working as SALESMAN or CLERK or ANALYST. Select ename from EMP where job not in (‘CLERK’,’SALESMAN’,’ANALYST’); 19. Display the total number of employees working in the company. Select count (*) from EMP; 66
  • 67. Suresh 20. Display the maximum salary from EMP table. Select max (sal) from EMP; 21. Display the minimum salary from EMP table. Select min (sal) from EMP; 22. Display the average salary from EMP table. Select avg (sal) from EMP; 23. Display the maximum salary being paid to CLERK. select max (sal) from EMP where job=’CLERK’; 24. Display the maximum salary being paid in dept no 20. Select max (sal) from EMP where deptno=20; 25. Display the min Sal being paid to any SALESMAN. select min (sal) from EMP where job=’SALESMAN’; 26. Display the average salary drawn by managers. select avg (sal) from EMP where job=’MANAGER’; 27. Display the names of employees in order of salary i.e. the name of the employee earning lowest salary should appear first. Select ename from EMP order by sal; 28. Display the names of employees in descending order of salary. Select ename from EMP order by sal desc; 29. Display the details from EMP table in order of EMP name. Select ename from EMP order by ename; 30. Display empno, ename, deptno, and sal. Sort the output first based on name and within name by deptno and within deptno by Sal; Select * from EMP order by ename, deptno, sal; 31. Display name, Sal, hra, pf, da, total Sal for each employee. The output should be in the order of total Sal, hra 15% of Sal, da 10% of sal, pf 5% of sal total salary will be (sal*hra*da)-pf. select ename,sal,sal*15/100 HRA, sal*5/100 PF, sal*10/100 DA,sal+sal*15/100-sal*5/100+sal*10/100 TOTAL_SALARY from emp 32. Display dept numbers and total number of employees within each group. select deptno,count(*) from emp group by deptno; 33. Display the various jobs and total number of employees with each job group. select job, count(*) from emp group by job; 34. Display department numbers and total salary for each department. select deptno, sum(sal) from emp group by deptno; 35. Display department numbers and maximum salary for each department. select deptno, max(sal),min(sal) from emp group by deptno; 67
  • 68. Suresh 36. Display the various jobs and total salary for each job. select job, sum(sal) from emp group by job; 37. Display each job along with minimum sal being paid in each job group. select job, min(sal) from emp group by job; 38. Display the department numbers with more than three employees in each dept. select deptno, count(*) from emp group by deptno having count(*)>3; 39. Display the various jobs along with total sal for each of the jobs where total sal is greater than 40000. select job, sum(sal) from emp group by job having sum(sal)>40000; 40. Display the various jobs along with total number of employees in each job. The output should contain only those jobs with more than three employees. select job, count(*) from emp group by job having count(*)>3; 41. Display the name of emp who earns highest sal. select ename from emp where sal=(select max(sal) from emp); 42. Display the employee number and name of employee working as CLERK and earning highest salary among CLERKS. select empno, ename from emp where job='CLERK' and sal=(select max(sal) from emp where job='CLERK'); 43. Display the names of the salesman who earns a salary more than the highest salary of any clerk. select ename from emp where job=’SALESMAN’ and sal > (select max(sal) from emp where job='CLERK'); 44. Display the names of clerks who earn salary more than that of James of that of sal lesser than that of Scott. select ename from emp where job='CLERK' and sal<(select sal from emp where ename='SCOTT') and sal>(select sal from emp where ename='JAMES'); 45. Display the names of employees who earn a Sal more than that of James or that of salary greater than that of Scott. select ename from emp where sal < (select sal from emp where ename='SCOTT') and sal > (select sal from emp where ename='JAMES'); 46. Display the names of the employees who earn highest salary in their respective departments. select * from emp e where sal = (select max(sal) from emp where deptno=e.deptno) 47. Display the names of employees who earn highest salaries in their respective job groups. select * from emp e where sal in 68
  • 69. Suresh (select max(sal) from emp group by job having e.job=job) 48. Display the employee names who are working in accountings dept. select ename from emp where deptno = (select deptno from dept where dname=”ACCOUNTING”); (or) select ename from emp where deptno in (select deptno from dept where dname=”ACCOUNTING”); 49. Display the employee names who are working in Chicago. select ename from emp where deptno = (select deptno from dept where loc=’CHICAGO’); 50. Display the job groups having total salary greater then the maximum salary for managers. select job, sum(sal) from emp group by job having sum(sal) > (select max(sal) from emp where job='MANAGER'); 51. Display the names of employees in Upper case. select upper(ename) from emp; 52. Display the names of employees in lower case. select lower(ename) from emp; 53. Replace every occurrence of alphabet A with B in the string Allen’s (user translate function). select replace('Allens','A','b') from dual; 54. Display the information from EMP table. Wherever job ‘manager’ is found it should be displayed as boss(replace function). select empno, ename, replace(job, 'MANAGER', 'Boss') JOB from emp; 55. Display empno, ename, deptno from EMP table. Instead of display department numbers display the related department name (use decode function). select e.empno, e.ename, d.dname from emp e,dept d where e.deptno = d.deptno; 56. Display the common jobs from department number 10 and 20. select job from emp where deptno=10 and job in(select job from emp where deptno=20); (or) select job from emp where deptno=10 intersect select job from emp where deptno=20; 57. Display the jobs found in department number 10 and 20 eliminate duplicate jobs. select distinct(job) from emp where deptno=10 and job in(select job from emp where deptno=20); (or) select job from emp where deptno=10 intersect select job from emp where deptno=20; 58. Display the jobs which are unique to dept no 10. 69
  • 70. Suresh select job from emp where deptno=10 minus select job from emp where deptno!=10; (or) select job from emp where deptno = 10 and job not in (select job from emp where deptno<>10); 59. Display the details of those who do not have any person working under them. select empno from emp where empno not in (select mgr from emp where mgr is not null); 60. Display the details of employees who are in sales dept and grade is 3. select * from emp where sal>=(select losal from salgrade where grade=3) and sal<=(select hisal from salgrade where grade=3) and deptno=(select deptno from dept where dname='SALES'); 61. Display those who are not managers and who are managers any one. select * from emp where empno in(select mgr from emp) union select * from emp where empno not in(select mgr from emp where mgr is not null); 62. Display those employees whose name contains not less than 4 chars. Select * from emp where length(ename)>4; 63. Display those departments whose name start with ‘S’ while location name end with ‘O’. select * from dept where dname like 'S%' and loc like '%O'; 64. Display those employees whose manager name is JONES. select * from emp where mgr=(select empno from emp where ename='JONES'); 65. Display those employees whose salary is more than 3000 after giving 20% increment. select * from emp where sal*120/100 > 3000; (or) select * from emp where sal+sal*20/100 > 3000; 66. Display all employees with there dept name. select ename, dname from emp e, dept d where e.deptno = d.deptno; 67. Display ename who are working in sales dept. select empno, ename from emp where deptno=(select deptno from dept where dname='SALES'); 68. Display employee name, deptname, salary and comm. for those Sal in between 2000 to 5000 while location is Chicago. select empno,ename,deptno from emp where deptno=(select deptno from dept where loc='CHICAGO') and sal between 2000 and 5000; 69. Display those employees whose salary greater than his manager salary. select * from emp e where sal>(select sal from emp where empno=e.mgr); 70
  • 71. Suresh 70. Display those employees who are working in the same dept where his manager is working. select * from emp e where deptno = (select deptno from emp where empno=e.mgr); 71. Display those employees who are not working under any manger. select * from emp where mgr is null or empno=mgr; 72. Display grade and employees name for the dept no 10 or 30 but grade is not 4, while joined the company before 31-dec-82. select empno,ename,sal,deptno,hiredate,grade from emp e,salgrade s where e.sal>=s.losal and e.sal<=s.hisal and deptno in(10,30) and grade<>4 and hiredate<'01-dec-1981'; 73. Update the salary of each employee by 10% increments that are not eligible for commission. update emp set sal=sal+(sal*10/100) where comm is null; 74. Delete those employees who joined the company before 31-dec-82 while there dept location is ‘NEW YORK’ or ‘CHICAGO’. delete from emp where hiredate<'31-dec-1982' and deptno in (select deptno from dept where loc in('NEW YORK','CHICAGO')); 75. Display employee name, job, deptname, location for all who are working as managers. select ename,job,dname,loc from emp e, dept d where e.deptno=d.deptno and empno in (select mgr from emp); 76. Display those employees whose manager names is Jones, and also display there manager name. select e.empno, e.ename, m.ename MANAGER from emp e, emp m where e.mgr=m.empno and m.ename='JONES'; 77. Display name and salary of ford if his Sal is equal to high Sal of his grade. select ename,sal from emp e where ename='FORD' and sal=(select hisal from salgrade where grade=(select grade from salgrade where e.sal>=losal and e.sal<=hisal)); 78. Display employee name, his job, his dept name, his manager name, his grade and make out of an under department wise. select d.deptno, e.ename, e.job, d.dname, m.ename, s.grade from emp e, emp m, dept d, salgrade s where e.deptno=d.deptno and e.sal between s.losal and s.hisal and e.mgr=m.empno order by e.deptno; 79. List out all the employees name, job, and salary grade and department name for every one in the company except ‘CLERK’. Sort on salary display the highest salary. select empno, ename, sal, dname, grade from emp e, dept d, salgrade s where e.deptno=d.deptno and e.sal between s.losal and s.hisal and e.job<>'CLERK' order by sal; 71
  • 72. Suresh 80. Display employee name, his job and his manager. Display also employees who are without manager. select e.ename, e.job, m.ename Manager from emp e,emp m where e.mgr=m.empno union select ename,job,'no manager' from emp where mgr is null; 81. Find out the top 5 earner of company. select * from emp e where 5>(select count(*) from emp where sal>e.sal) order by sal desc; 82. Display the name of those employees who are getting highest salary. select empno,ename,sal from emp where sal=(select max(sal) from emp); 83. Display those employees whose salary is equal to average of maximum and minimum. select * from emp where sal=(select (max(sal)+min(sal))/2 from emp); 84. Display count of employees in each department where count greater than 3. select deptno, count(*) from emp group by deptno having count(*)>3; 85. Display dname where at least 3 are working and display only dname. select dname from dept where deptno in (select deptno from emp group by deptno having count(*)>3); 86. Display name of those managers name whose salary is more than average salary of company. select ename, sal from emp where empno in(select mgr from emp) and sal > (select avg(sal) from emp); 87. Display those managers name whose salary is more than an average salary of his employees. select ename, sal from emp e where empno in(select mgr from emp) and e.sal>(select avg(sal) from emp where mgr=e.empno); 88. Find out the last 5(least) earner of the company? select * from emp e where 5>(select count(*) from emp where sal<e.sal) order by sal; 89. Find out the number of employees whose salary is greater than there manager salary? select count(*) from emp e where sal>(select sal from emp where empno=e.mgr); 90. Display those manager who are not working under president but they are working under any other manager? select * from emp e where mgr in(select empno from emp where ename<>'KING'); 72
  • 73. Suresh 91. Delete those department where no employee working? delete from dept d where 0=(select count(*) from emp where deptno=d.deptno); 92. Delete those records from EMP table whose deptno not available in dept table? delete from emp where deptno not in(select deptno from dept); 93. Display those earners whose salary is out of the grade available in Sal grade table? select * from emp where sal<(select min(losal) from salgrade) or sal>(select max(hisal) from salgrade); 94. Display employee name, Sal, comm. and whose net pay is greater than any other in the company? Select ename, sal, comm from emp where sal+sal*15/100-sal*5/100 +sal*10/100 = (select max(sal+sal*15/100-sal*5/100+sal*10/100) from emp); 95. Display those employees who are working in sales or research? select * from emp where deptno in(select deptno from dept where dname in('SALES','RESEARCH')); 96. Display the grade of Jones? select grade from salgrade where losal<=(select(sal) from emp where ename='JONES') and hisal>=(select(sal) from emp where ename='JONES'); 97. Delete those records where no of employee in a particular department is less than 3? delete from emp where deptno in(select deptno from emp group by deptno having count(*)>3); 98. Display the department name the no of characters of which is equal to no of employees in any other department? Select dname from dept where len (dname) in (select count(*) from emp group by deptno); 99. Display those employees who are working as manager? select * from emp where empno in(select mgr from emp); 100. Count the no of employees who are working as manager (use set operation)? select count(*) from emp where empno in(select mgr from emp); 101. Display the name of then dept those employees who joined the company on the same date? select empno,ename,hiredate,deptno from emp e where hiredate in (select hiredate from emp where empno<>e.empno); 102. Display the manager who is having maximum number of employees working under him? 73
  • 74. Suresh Select mgr from emp group by mgr having count(*)=(select max(count(mgr)) from emp group by mgr); 103. Produce the output of the EMP table “EMPLOYEE_AND_JOB” for ename and job? select * from EMPLOYEE_AND_JOB; 104. Print the details of all the employees who are sub ordinate to Blake. Select * from emp where mgr=(select empno from emp where ename='BLAKE'); 105. Display those who working as manager using co related sub query. Select * from emp where empno in(select mgr from emp); 106. Display those employees whose manger name is Jones and also with his manager name. Select * from emp where mgr=(select empno from emp where ename='JONES') union select * from emp where empno=(select mgr from emp where ename='JONES'); 107. Find out how many mangers are there with out listing them. Select count (*) from EMP where empno in (select mgr from EMP); 108. Check whether all employees number are indeed unique. select count(empno),count(distinct(empno)) from emp having count(empno)=(count(distinct(empno))); 109. List out the lowest paid employees working for each manager, exclude any groups where min sal is less than 1000 sort the output by sal. select e.ename,e.mgr,e.sal from emp e where sal in(select min(sal) from emp where mgr=e.mgr) and e.sal>1000 order by sal; 110. find out the all employees who joined the company before their manager. Select * from emp e where hiredate<(select hiredate from emp where empno=e.mgr); 111. list out the all employees by name and number along with their manager’s name and number also display ‘No Manager’ who has no manager. select e.empno,e.ename,m.empno Manager,m.ename ManagerName from emp e,emp m where e.mgr=m.empno union select empno,ename,mgr,'No Manager' from emp where mgr is null; 112. find out the employees who earned the highest Sal in each job typed sort in descending Sal order. select * from emp e where sal =(select max(sal) from emp where job=e.job); 113. find out the employees who earned the min Sal for their job in ascending order. select * from emp e where sal =(select min(sal) from emp where job=e.job) order by sal; 114. find out the most recently hired employees in each dept order by hire date 74
  • 75. Suresh select * from emp order by deptno, hiredate desc; 115. display ename, sal and deptno for each employee who earn a Sal greater than the avg of their department order by deptno select ename,sal,deptno from emp e where sal>(select avg(sal) from emp where deptno=e.deptno) order by deptno; 116. display the department where there are no employees select deptno,dname from dept where deptno not in(select distinct(deptno) from emp); 117. display the dept no with highest annual remuneration bill as compensation. select deptno,sum(sal) from emp group by deptno having sum(sal) = (select max(sum(sal)) from emp group by deptno); 118. display avg sal figure for the dept select deptno,avg(sal) from emp group by deptno; 119. Write a query of display against the row of the most recently hired employee. display ename hire date and column max date showing. select empno,hiredate from emp where hiredate=(select max (hiredate) from emp); 120. display employees who can earn more than lowest Sal in dept no 30 select * from emp where sal>(select min(sal) from emp where deptno=30); 121. find employees who can earn more than every employees in dept no 30 select * from emp where sal>(select max(sal) from emp where deptno=30); select * from emp where sal>all(select sal from emp where deptno=30); 122. find all dept’s which have more than 3 employees select deptno from emp group by deptno having count(*)>3; 123. Create a copy of emp table. Create table emp1 as select * from emp; 124. Select ename if ename exists more than once. select distinct(ename) from emp e where ename in(select ename from emp where e.empno<>empno); 125. display all enames in reverse order. select ename from emp order by ename desc; 126. List out the employees ename, sal, PF from emp Select ename,sal,sal*15/100 PF from emp; 127. Create table emp with only one column empno Create table emp (empno number(5)); 75
  • 76. Suresh 128. Add this column to emp table ename Varchar(20). alter table emp add ename varchar2(20) not null; 129. OOPS! I forgot to give the primary key constraint. Add it now. alter table emp add constraint emp_empno primary key (empno); 130. Now increase the length of ename column to 30 characters. alter table emp modify ename varchar(30); 131. Add salary column to emp table. alter table emp add sal numeric(7,2); 132. I want to give a validation saying that sal cannot be greater 10,000(note give a name to this column). alter table emp add constraint emp_sal_check check (sal<10000); 133. Add column called as mgr to your emp table. Alter table emp add mgr numeric (5); 134. Oh! This column should be related to empno. Give a command to add this constraint Alter table emp add constraint emp_mgr foreign key(empno); 135. Add dept no column to your emp table Alter table emp add deptno numeric (3); 136. This dept no column should be related to deptno column of dept table Alter table emp1 add constraint emp1_deptno foreign key (deptno) references dept (deptno); 137. Create table called as new emp. Using single command create this table as well as to get data into this table (use create table as) Select*into newemp from EMP; 138. Create table called as newemp. This table should contain only empno,ename, dname create table newemp as select empno,ename,dname from emp e , dept d where e.deptno=d.deptno; 139. Provide a commission to employees who are not earning any commission. update emp set comm=300 where comm is null; 140. If any employee has commission his commission should be incremented by 10% of his salary. update emp set comm=comm*10/100 where comm is not null; 141. Display employee name and department name for each employee. select ename,dname from emp e, dept d where e.deptno=d.deptno; 142. Display employee number, name and location of the department in which he is working. Select empno, ename, loc from emp e, dept d where e.deptno=d.deptno; 76