DBMS Notes
DBMS Notes
DBMS_Notes
ER diagram:
● ER diagram or Entity Relationship diagram is a conceptual model
that gives the graphical representation of the logical structure
of the database.
● It shows all the constraints and relationships that exist among the different
components.
● An ER diagram is mainly composed of following three
components- Entity Sets, Attributes and Relationship Set.
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 1/22
7/7/2021 DBMS_Notes
DBMS_Notes
Entity Set:
An entity set is a set of the same type of entities.
● Strong Entity Set:
o A strong entity set is an entity set that contains sufficient
attributes to uniquely identify all its entities.
In other words, a primary key exists for a strong entity set.
o
Primary key of a strong entity set is represented by underlining it.
o
● Weak Entity Set:
o A weak entity set is an entity set that does not contain
sufficient attributes to uniquely identify its entities.
o In other words, a primary key does not exist for a weak entity set.
o However, it contains a partial key called a discriminator.
o Discriminator can identify a group of entities from the entity set.
o Discriminator is represented by underlining with a dashed line.
Relationship:
A relationship is defined as an association among several entities.
● Unary Relationship Set - Unary relationship set is a relationship set
where only one entity set participates in a relationship set.
● Binary Relationship Set - Binary relationship set is a relationship set
where two entity sets participate in a relationship set.
● Ternary Relationship Set - Ternary relationship set is a relationship
set where three entity sets participate in a relationship set.
● N-ary Relationship Set - N-ary relationship set is a relationship set where
‘n’ entity sets participate in a relationship set.
Cardinality Constraint:
Cardinality constraint defines the maximum number of relationship instances in
which an entity can participate.
● One-to-One Cardinality - An entity in set A can be associated with at
most one entity in set B. An entity in set B can be associated with at
most one entity in set A.
● One-to-Many Cardinality - An entity in set A can be associated with any
number (zero or more) of entities in set B. An entity in set B can be
associated with at most one entity in set A.
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 2/22
7/7/2021 DBMS_Notes
Attributes:
Attributes are the descriptive properties which are owned by each entity
of an Entity Set. Types of Attributes:
● Simple Attributes - Simple attributes are those attributes which
cannot be divided further. Ex. Age
● Composite Attributes - Composite attributes are those attributes which
are composed of many other simple attributes. Ex. Name, Address
● Multi Valued Attributes - Multi valued attributes are those attributes
which can take more than one value for a given entity from an entity set.
Ex. Mobile No, Email ID ● Derived Attributes - Derived attributes are those
attributes which can be derived from other attribute(s). Ex. Age can be
derived from DOB.
● Key Attributes - Key attributes are those attributes which can identify an
entity uniquely in an entity set. Ex. Roll No.
Constraints:
Relational constraints are the restrictions imposed on the database contents
and operations. They ensure the correctness of data in the database.
● Domain Constraint - Domain constraint defines the domain or set of values
for an attribute. It specifies that the value taken by the attribute must be
the atomic value from its domain.
● Tuple Uniqueness Constraint - Tuple Uniqueness constraint specifies that
all the tuples must be necessarily unique in any relation.
● Key Constraint - All the values of the primary key must be unique.
The value of the primary key must not be null.
● Entity Integrity Constraint - Entity integrity constraint specifies that
no attribute of primary key must contain a null value in any
relation.
● Referential Integrity Constraint - It specifies that all the values taken by
the foreign key must either be available in the relation of the primary
key or be null.
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 3/22
7/7/2021 DBMS_Notes
● Super Key - A superkey is a set of attributes that can identify each tuple
DBMS_Notes
uniquely in the given relation. A super key may consist of any number
of attributes.
● Candidate Key - A set of minimal attribute(s) that can identify each tuple
uniquely in the given relation is called a candidate key.
● Primary Key - A primary key is a candidate key that the database designer
selects while designing the database. Primary Keys are unique and NOT
NULL.
Decomposition of a Relation:
The process of breaking up or dividing a single relation into two or more sub
relations is called the decomposition of a relation.
Properties of Decomposition:
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 4/22
7/7/2021 DBMS_Notes
Normalization:
In DBMS, database normalization is a process of making the database consistent
by-
● Reducing the redundancies
● Ensuring the integrity of data through lossless decomposition
Normal Forms:
● First Normal Form (1NF) - A given relation is called in First Normal Form
(1NF) if each cell of the table contains only an atomic value i.e. if the
attribute of every tuple is either single valued or a null value.
● Second Normal Form (2NF) - A given relation is called in Second
Normal Form (2NF) if and only if
o Relation already exists in 1NF.
o No partial dependency exists in the relation.
A → B is called a partial dependency if and only if- A is a
subset of some candidate key and B is a non-prime
attribute.
● Third Normal Form (3NF) - A given relation is called in Third Normal
Form (3NF) if and only if
o Relation already exists in 2NF.
o No transitive dependency exists for non-prime attributes.
A → B is called a transitive dependency if and only if- A is not a
super key and B is a non-prime attribute.
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 5/22
7/7/2021 DBMS_Notes
Transaction:
Transaction is a single logical unit of work formed by a
set of operations. Operations in Transaction:
● Read Operation - Read(A) instruction will read the value of ‘A’ from the
database and will store it in the buffer in main memory.
● Write Operation – Write(A) will write the updated value of ‘A’ from
the buffer to the database.
Transaction States:
● Active State –
o This is the first state in the life cycle of a transaction.
o A transaction is called in an active state as long as its
instructions are getting executed.
o All the changes made by the transaction now are stored in the
buffer in main memory.
● Partially Committed State –
o After the last instruction of the transaction has been executed,
it enters into a partially committed state.
o After entering this state, the transaction is considered to be partially
committed.
o It is not considered fully committed because all the
changes made by the transaction are still stored in the
buffer in main memory.
● Committed State –
o After all the changes made by the transaction have been
successfully stored into the database, it enters into a committed
state.
o Now, the transaction is considered to be fully committed.
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 6/22
7/7/2021 DBMS_Notes
● Failed State –
DBMS_Noteso When a transaction is getting executed in the active state or
partially committed state and some failure occurs due to which it
becomes impossible to continue the execution, it enters into a
failed state.
● Aborted State –
o After the transaction has failed and entered into a failed state,
all the changes made by it have to be undone.
o To undo the changes made by the transaction, it becomes
necessary to roll back the transaction.
o After the transaction has rolled back completely, it enters into
an aborted state. ● Terminated State –
o This is the last state in the life cycle of a transaction.
o After entering the committed state or aborted state, the
transaction finally enters into a terminated state where its life
cycle finally comes to an end.
ACID Properties:
To ensure the consistency of the database, certain properties are
followed by all the transactions occurring in the system. These
properties are called as ACID Properties of a transaction.
● Atomicity –
o This property ensures that either the transaction occurs
completely or it does not occur at all.
o In other words, it ensures that no transaction occurs partially.
● Consistency –
o This property ensures that integrity constraints are maintained.
o In other words, it ensures that the database remains consistent
before and after the transaction.
● Isolation –
o This property ensures that multiple transactions can occur
simultaneously without causing any inconsistency.
o The resultant state of the system after executing all the
transactions is the same as the state that would be achieved if the
transactions were executed serially one after the other.
● Durability –
o This property ensures that all the changes made by a
transaction after its successful execution are written
successfully to the disk.
o It also ensures that these changes exist permanently and are
never lost even if there occurs a failure of any kind.
Schedules:
The order in which the operations of multiple transactions appear for
execution is called as a schedule.
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 7/22
7/7/2021 DBMS_Notes
DBMS_Notes
● Serial Schedules –
o All the transactions execute serially one after the other.
o When one transaction executes, no other transaction is
allowed to execute. o Serial schedules are always- Consistent,
Recoverable, Cascadeless and Strict. ● Non-Serial Schedules –
o Multiple transactions execute concurrently.
o Operations of all the transactions are inter leaved or mixed with each
other.
o Non-serial schedules are not always- Consistent, Recoverable,
Cascadeless and Strict.
Serializability –
● Some non-serial schedules may lead to inconsistency of the database. ●
Serializability is a concept that helps to identify which non-serial
schedules are correct and will maintain the consistency of the database.
● Serializable Schedules –
o If a given non-serial schedule of ‘n’ transactions is
equivalent to some serial schedule of ‘n’ transactions, then it is
called as a serializable schedule.
o Serializable schedules are always- Consistent, Recoverable,
Cascadeless and Strict.
Types of Serializability –
● Conflict Serializability - If a given non-serial schedule can be
converted into a serial schedule by swapping its non-conflicting
operations, then it is called a conflict serializable schedule.
● View Serializability - If a given schedule is found to be viewed as
equivalent to some serial schedule, then it is called a view
serializable schedule.
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 8/22
7/7/2021 DBMS_Notes
DBMS_Notes
Non-Serializable Schedules –
● A non-serial schedule which is not serializable is called a non-serializable
schedule. ● A non-serializable schedule is not guaranteed to produce the
same effect as produced by some serial schedule on any consistent
database.
● Non-serializable schedules- may or may not be consistent, may
or may not be recoverable.
● Irrecoverable Schedules –
If in a schedule,
o A transaction performs a dirty read operation from an
uncommitted transaction o And commits before the transaction from
which it has read the value then such a schedule is known as an
Irrecoverable Schedule.
● Recoverable Schedules –
If in a schedule,
o A transaction performs a dirty read operation from an
uncommitted transaction o And its commit operation is delayed till
the uncommitted transaction either commits or roll backs
then such a schedule is known as a Recoverable Schedule.
Types of Recoverable Schedules –
● Cascading Schedule - If in a schedule, failure of one transaction
causes several other dependent transactions to rollback or abort,
then such a schedule is called as a Cascading Schedule or Cascading
Rollback or Cascading Abort.
● Cascadeless Schedule - If in a schedule, a transaction is not allowed to
read a data item until the last transaction that has written it is
committed or aborted, then such a schedule is called as a Cascadeless
Schedule.
● Strict Schedule - If in a schedule, a transaction is neither allowed to read
nor write a data item until the last transaction that has written it is
committed or aborted, then such a schedule is called as a Strict Schedule.
Relational Algebra:
Relational Algebra is a procedural query language which takes a relation
as an input and generates a relation as an output.
Basic Operator Semantic
σ(Selection) Select rows based on given condition
∏(Projection) Project some columns
X (Cross Product) Cross product of relations, returns m*n rows
where m and n are number of rows in R1 and R2
respectively.
U (Union) Return those tuples which are either in R1 or in
R2. Max no. of rows returned = m+n and Min
no. of rows returned = max(m,n)
−(Minus) R1-R2 returns those tuples which are in R1 but
not in R2. Max no. of rows returned = m and
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 9/22
7/7/2021 DBMS_Notes
⟕(Left Outer Join) When applying join on two relations R and S, some
tuples of R or S do not appear in the result set
which does not satisfy the join conditions. But Left
Outer Joins gives all tuples of R in the result set.
The tuples of R which do not satisfy the join
condition will have values as NULL for attributes of
S.
⟖(Right Outer Join) When applying join on two relations R and S, some
tuples of R or S do not appear in the result set
which does not satisfy the join conditions. But
Right Outer Joins gives all tuples of S in the result
set. The tuples of S which do not satisfy the join
condition will have values as NULL for attributes of
R.
⟗(Full Outer Join) When applying join on two relations R and S, some
tuples of R or S do not appear in the result set
which does not satisfy the join conditions. But Full
Outer Joins gives all tuples of S and all tuples of R
in the result set. The tuples of S which do not
satisfy the join condition will have values as NULL
for attributes of R and vice versa.
/(Division Operator) Division operator A/B will return those tuples in A
which are associated with every tuple of B. Note:
Attributes of B should be a proper subset of
attributes of A. The attributes in A/B will be
Attributes of A- Attribute of B.
File Structures:
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 10/22
7/7/2021 DBMS_Notes
B Trees
At every level , we have Key and Data Pointer and data pointer points to either
block or record.
Properties of B-Trees:
Root of B-tree can have children between 2 and P, where P
is Order of tree. Order of tree – Maximum number of
children a node can have.
Internal node can have children between ⌈ P/2 ⌉ and P
Internal node can have keys between ⌈ P/2 ⌉ – 1 and P-1
B+ Trees
In B+ trees, the structure of leaf and non-leaf are different, so their order is.
Order of non-leaf will be higher as compared to leaf nodes.
Searching time will be less in B+ trees, since it doesn’t have record pointers in
non-leaf because of which depth will decrease.
SQL
DDL:
DDL is short name of Data Definition Language, which deals with
database schemas and descriptions, of how the data should reside in the
database.
● CREATE - to create a database and its objects like (table, index, views,
store procedure, function, and triggers)
● ALTER - alters the structure of the existing database
● DROP - delete objects from the database
● TRUNCATE - remove all records from a table, including all spaces
allocated for the records are removed
● RENAME - rename an object
DML:
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 11/22
7/7/2021 DBMS_Notes
DML is short name of Data Manipulation Language which deals with data
DBMS_Notes
manipulation and includes most common SQL statements such SELECT,
INSERT, UPDATE, DELETE, etc., and it is used to store, modify, retrieve, delete
and update data in a database.
● SELECT - retrieve data from a database
● INSERT - insert data into a table
● UPDATE - updates existing data within a table
● DELETE - Delete all records from a database table
● MERGE - UPSERT operation (insert or update)
DCL:
DCL is short name of Data Control Language which includes commands
such as GRANT and mostly concerned with rights, permissions and other
controls of the database system.
● GRANT - allow users access privileges to the database
● REVOKE - withdraw users access privileges given by using the GRANT
command
TCL:
TCL is short name of Transaction Control Language which deals with a
transaction within a database.
● COMMIT - commits a Transaction
● ROLLBACK - rollback a transaction in case of any error occurs
● SAVEPOINT - to roll back the transaction making points
within groups SQL:
SQL is a standard language for storing, manipulating and retrieving data in
databases.
SELECT:
The SELECT statement is used to select data from a database.
Syntax -
● SELECT column1, column2, ...
FROM table_name;
● Here, column1, column2, ... are the field names of the table you want to
select data from. If you want to select all the fields available in the table,
use the following syntax: ● SELECT * FROM table_name;
Ex –
● SELECT CustomerName, City FROM Customers;
SELECT DISTINCT:
WHERE:
The WHERE clause is used to filter records.
Syntax –
● SELECT column1, column2, ...
FROM table_name
WHERE condition;
Ex –
● SELECT * FROM Customers
WHERE Country='Mexico';
Operator Description
= Equal
> Greater than
< Less than
>= Greater than or equal
<= Less than or equal
<> Not equal. Note: In some versions of SQL this operator may
be written as !=
Ex –
DBMS_Notes
● SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';
● SELECT * FROM Customers
WHERE Country='Germany' AND (City='Berlin' OR City='München');
ORDER BY:
The ORDER BY keyword is used to sort the result-set in ascending or descending
order.
The ORDER BY keyword sorts the records in ascending order by default. To
sort the records in descending order, use the DESC keyword.
Syntax –
● SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
Ex –
● SELECT * FROM Customers
ORDER BY Country;
● SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
INSERT INTO:
The INSERT INTO statement is used to insert new records in a table.
Syntax –
● INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
● INSERT INTO table_name
VALUES (value1, value2, value3, ...);
*In the second syntax, make sure the order of the values is in the same order as
the columns in the table.
Ex –
● INSERT INTO Customers (CustomerName, ContactName, Address,
City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006',
'Norway');
NULL Value:
Syntax –
DBMS_Notes
● SELECT column_names
FROM table_name
WHERE column_name IS NULL;
● SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
Ex –
● SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;
UPDATE:
In 2ndsyntax, all rows are deleted. The table structure, attributes, and
indexes will be intact Ex –
● DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';
SELECT TOP:
● SELECT column_name(s)
DBMS_Notes
FROM table_name
ORDER BY column_name(s)
FETCH FIRST number ROWS ONLY;
● SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
*In case the interviewer asks other than the TOP, rest are also correct.
(Diff. DB Systems) Ex –
● SELECT TOP 3 * FROM Customers;
● SELECT * FROM Customers
LIMIT 3;
● SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;
Aggregate Functions:
MIN():
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 16/22
7/7/2021 DBMS_Notes
FROM Products;
DBMS_Notes
AVG():
The AVG() function returns the average value of a numeric column.
Syntax –
● SELECT AVG(column_name)
FROM table_name
WHERE condition;
Ex –
● SELECT AVG(Price)
FROM Products;
SUM():
The SUM() function returns the total sum of a numeric column.
Syntax –
● SELECT SUM(column_name)
FROM table_name
WHERE condition;
Ex –
● SELECT SUM(Quantity)
FROM OrderDetails;
LIKE Operator:
WHERE CustomerName LIKE Finds any values that have "r" in the
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 17/22
7/7/2021 DBMS_Notes
IN:
BETWEEN:
The BETWEEN operator selects values within a given range. The values can be
numbers, text, or dates.
The BETWEEN operator is inclusive: begin and end values are included.
Syntax –
● SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
Ex –
● SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
Joins:
A JOIN clause is used to combine rows from two or more tables, based on a
related column between them.
INNER JOIN:
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 18/22
7/7/2021 DBMS_Notes
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 19/22
7/7/2021 DBMS_Notes
The FULL OUTER JOIN keyword returns all records when there is a match in left
DBMS_Notes
(table1) or right (table2) table records.
Syntax:
● SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
Ex –
● SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON
Customers.CustomerID=Orders.CustomerID ORDER BY
Customers.CustomerName;
UNION:
The UNION operator is used to combine the result-set of two or more SELECT
statements.
● Every SELECT statement within UNION must have the same
number of columns ● The columns must also have similar data
types
● The columns in every SELECT statement must also be in the same order
The UNION operator selects only distinct values by default. To allow
duplicate values, use UNION ALL
Syntax –
● SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
● SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
Ex –
● SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
GROUP BY:
The GROUP BY statement groups rows that have the same values into summary
rows, like "find the number of customers in each country".
The GROUP BY statement is often used with aggregate functions
(COUNT(), MAX(), MIN(), SUM(), AVG()) to group the result-set by one or
more columns. Syntax –
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 20/22
7/7/2021 DBMS_Notes
● SELECT column_name(s)
DBMS_Notes
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
Ex –
● SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;
HAVING:
The HAVING clause was added to SQL because the WHERE keyword
cannot be used with aggregate functions.
*WHERE is given priority over HAVING.
Syntax –
● SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);
Ex –
● SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
CREATE DATABASE:
DROP DATABASE:
CREATE TABLE:
The CREATE TABLE statement is used to create a new table in a database.
Syntax –
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 21/22
7/7/2021 DBMS_Notes
TRUNCATE TABLE:
The TRUNCATE TABLE statement is used to delete the data inside a table, but not
the table itself. Syntax –
● TRUNCATE TABLE table_name;
ALTER TABLE:
The ALTER TABLE statement is used to add, delete, or modify columns in an
existing table.
The ALTER TABLE statement is also used to add and drop various
constraints on an existing table.
Syntax –
● ALTER TABLE table_name
ADD column_name datatype;
● ALTER TABLE table_name
DROP COLUMN column_name;
● ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
Ex –
● ALTER TABLE Customers
ADD Email varchar(255);
● ALTER TABLE Customers
DROP COLUMN Email;
● ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
https://docs.google.com/document/u/0/d/1KV-9I5D6iddJbAoDzPEBVR6izf-j_7PXq3JQSC7KC2Q/mobilebasic 22/22