Skip to content

Procedural and Non Procedural Language

  • User specifies what data is required and how to get it (sequence of steps)

  • Query execution path is defined by user
  • Define Steps, More control, less abstraction

Examples:

  1. Relational Algebra
  2. Tuple Relational Calculus (considered weakly procedural in exams)

eg:- Relational Algebra (RA)

π name (σ marks > 80 (STUDENT))
  • First select tuples

  • Then project attributes

eg:- Tuple Relational Calculus (TRC)

{ t.name | STUDENT(t) ∧ t.marks > 80 }
  • Specify desired attribute in result
  • Give condition on tuples (no explicit operation order)

1. Relational Algebra Operations ⭐

Primitive (Basic) Operations:

  • Selection (σ)
  • Projection (π)
  • Cartesian Product (×)
  • Union (∪)
  • Set Difference (−)
  • Rename (ρ)

Derived Operations:

  • Intersection (∩)
  • Join (⨝)
  • Division (÷)

Unary Operations

OperationSymbolPurposeExample
SelectionσSelect rows satisfying conditionσ_Age>20(Student)
ProjectionπSelect specific columnsπ_Name, Age(Student)
RenameρRename relation or attributesρ_Stud(Student)

Binary Operations

OperationSymbolPurposeExample
UnionTuples in either relationStudent ∪ Alumni
Set Difference-Tuples in first, not in secondStudent - Alumni
IntersectionTuples common to bothStudent ∩ Scholarship
Cartesian Product×All combinations of tuplesStudent × Course
JoinCombine tuples based on conditionStudent ⨝_ID=Enroll.ID Enroll
Division÷Tuples related to all in second relationStudentID ÷ CourseID
  • Unary: operate on one relation
  • Binary: operate on two relations
  • Rename (ρ) helps in queries and avoiding conflicts.

Examples :

  1. Find all students older than 20 σ_Age>20 (Student)
  2. Find all students enrolled in a 4-credit course σ_Credit=4 (Student ⨝ Student.CourseID = Course.ID Course)
  3. Find all students with marks > 80 σ_Marks>80 (Student)
  4. Find names of students in “DBMS” course π_Name (σ_CourseName='DBMS' (Student ⨝ Student.CourseID = Course.ID Course))
  5. Find students who have taken all courses offered π_StudentID (Enroll) ÷ π_CourseID (Course)

2. Tuple Relational Calculus (TRC)

FeatureDescription
DefinitionNon-procedural query language using tuples as variables
Tuple VariableRepresents a tuple from a relation
Syntax{t | P(t)}
PredicateCondition on tuple t (comparisons, logical operators)
OperatorsAND (), OR (), NOT (¬), =, , <, >, ,
Quantifiers== (exists)==, == (for all)==
CharacteristicsNon-procedural; specifies what to retrieve, not how
Difference from SQLTRC is theoretical; SQL is practical
Examples :
  1. Find all students older than 20 { t | Student(t) ∧ t.Age > 20 }
  2. Find all students enrolled in a 4-credit course { t | ∃c (Course(c) ∧ t.CourseID = c.ID ∧ c.Credit = 4) }
  3. Find all students with marks > 80 { t | Student(t) ∧ t.Marks > 80 }
  4. Find names of students in “DBMS” course { t.Name | ∃c (Course(c) ∧ t.CourseID = c.ID ∧ c.CourseName = 'DBMS') }
  5. Find students who have taken all courses offered { s | Student(s) ∧ ∀c (Course(c) → ∃e (Enroll(e) ∧ e.StudentID = s.ID ∧ e.CourseID = c.ID)) }

  • User specifies what data is required, not how to retrieve

  • DBMS decides execution plan
  • Define Result Only, High-level, declarative, high abstraction

Examples:

  1. SQL
  2. Query By Example
  3. Domain Relational Calculus (QBE)

eg:- SQL

SELECT name FROM STUDENT WHERE marks > 80;

eg:- Query By Example (QBE)

  • Put condition >80 under marks
  • Put P. under name

eg:- Domain Relational Calculus (DRC)

{ <n> | ∃ r (STUDENT(n, r) ∧ r > 80) }
  • Specify required domain variable in result
  • Use logical condition on domains (no execution order)

3. SQL (Structured Query Language)

FeatureDescription
DefinitionDeclarative query language for relational databases
NatureNon-procedural (user specifies what, not how)
BasisBased on Relational Algebra & Relational Calculus
Core ClausesSELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
JoinsINNER, LEFT, RIGHT, FULL
QuantificationEXISTS, NOT EXISTS, IN, ALL, ANY
CharacteristicsPractical, optimized by DBMS
Difference from TRCSQL is executable; TRC is mathematical

Examples :

  1. Find all students older than 20 SELECT * FROM Student WHERE Age > 20;
  2. Find all students enrolled in a 4-credit course SELECT DISTINCT s.* FROM Student s, Course c WHERE s.CourseID = c.ID AND c.Credit = 4;
  3. Find all students with marks > 80 SELECT * FROM Student WHERE Marks > 80;
  4. Find names of students in “DBMS” course SELECT s.Name FROM Student s, Course c WHERE s.CourseID = c.ID AND c.CourseName = 'DBMS';

2. QBE (Query By Example)

FeatureDescription
DefinitionVisual, example-based query language
NatureNon-procedural
BasisBased on Domain Relational Calculus
Query StyleConditions filled in table skeletons
Output IndicationP. (print)
UsageEducational, conceptual (rare in real systems)
Difference from SQLQBE is graphical; SQL is textual

Examples :

  1. Find all students older than 20
    • Put >20 under Age
    • Put P. under required attributes
  2. Find all students enrolled in a 4-credit course
    • Course table: put 4 under Credit
    • Match CourseID
    • Put P. under Student attributes
  3. Find all students with marks > 80
    • Put >80 under Marks
    • Put P. under Student attributes
  4. Find names of students in “DBMS” course
    • Course table: put DBMS under CourseName
    • Match CourseID
    • Put P. under Name
  5. Find students who have taken all courses offered
    • Use ALL rows of Course table
    • Match StudentID and CourseID via Enroll
    • Put P. under Student attributes

3. Domain Relational Calculus (DRC)

FeatureDescription
DefinitionNon-procedural query language using domain variables
Domain VariableRepresents attribute values
Syntax{ <x1, x2, …> | P(x1, x2, …) }
PredicateConditions on domains using logic
Operators, , ¬, =, <, >
Quantifiers==, ==
CharacteristicsMathematical, declarative
Difference from TRCDRC uses domains; TRC uses tuples

Examples :

  1. Find all students older than 20 { <n, a> | Student(n, a) ∧ a > 20 }
  2. Find all students enrolled in a 4-credit course { <s> | ∃c (Student(s, c) ∧ Course(c, 4)) }
  3. Find all students with marks > 80 { <n> | ∃m (Student(n, m) ∧ m > 80) }
  4. Find names of students in “DBMS” course { <n> | ∃c (Student(n, c) ∧ Course(c, 'DBMS')) }
  5. Find students who have taken all courses offered { <s> | ∀c (Course(c) → ∃e (Enroll(s, c))) }