<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rokesh . S</title>
    <description>The latest articles on DEV Community by Rokesh . S (@rokesh_s_8c34404217ded3).</description>
    <link>https://dev.to/rokesh_s_8c34404217ded3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3452208%2Fe2964aff-1fa9-4678-ae65-1ecd213abc04.png</url>
      <title>DEV Community: Rokesh . S</title>
      <link>https://dev.to/rokesh_s_8c34404217ded3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rokesh_s_8c34404217ded3"/>
    <language>en</language>
    <item>
      <title>MONGODB CRUD IN DBMS</title>
      <dc:creator>Rokesh . S</dc:creator>
      <pubDate>Tue, 07 Oct 2025 09:23:41 +0000</pubDate>
      <link>https://dev.to/rokesh_s_8c34404217ded3/mongodb-crud-in-dbms-1hnp</link>
      <guid>https://dev.to/rokesh_s_8c34404217ded3/mongodb-crud-in-dbms-1hnp</guid>
      <description>&lt;p&gt;Getting Hands-On with MongoDB Atlas: CRUD Operations Made Simple&lt;br&gt;
Hey devs&lt;/p&gt;

&lt;p&gt;I recently dove into MongoDB Atlas to explore how CRUD operations work in a cloud-hosted NoSQL environment—and I wanted to share a few insights and screenshots from my journey. If you're just getting started with MongoDB or curious about how Atlas simplifies database management, this post is for you!&lt;/p&gt;

&lt;p&gt;What I Built&lt;br&gt;
I created a database named CRUD and a collection called students. Using the Atlas UI, I performed basic operations like:&lt;/p&gt;

&lt;p&gt;Insert: Added student records with fields like name, age, year, and department.&lt;/p&gt;

&lt;p&gt;Query: Filtered documents using operators like $gt, $or, and range queries with $gte and $lte.&lt;/p&gt;

&lt;p&gt;Update: Modified fields directly in the UI—super intuitive!&lt;/p&gt;

&lt;p&gt;Delete: Flagged documents for deletion with a simple click.&lt;/p&gt;

&lt;p&gt;Sample Queries I Used&lt;br&gt;
Here are a few examples of queries I ran:&lt;/p&gt;

&lt;p&gt;js&lt;br&gt;
// Find students with student_id greater than 5000&lt;br&gt;
{ "student_id": { "$gt": "5000" } }&lt;/p&gt;

&lt;p&gt;// Find students aged either 1 or 3&lt;br&gt;
{ "$or": [ { "age": 1 }, { "age": 3 } ] }&lt;/p&gt;

&lt;p&gt;// Find students aged between 1.5 and 7.5&lt;br&gt;
{ "age": { "$gte": 1.5, "$lte": 7.5 } }&lt;br&gt;
Screenshots&lt;br&gt;
I’ve included screenshots showing:&lt;/p&gt;

&lt;p&gt;How documents are structured in MongoDB Atlas&lt;/p&gt;

&lt;p&gt;How filters are applied and results are displayed&lt;/p&gt;

&lt;p&gt;How easy it is to modify or delete documents&lt;/p&gt;

&lt;p&gt;These visuals really help demystify the process for beginners.&lt;/p&gt;

&lt;p&gt;Why MongoDB Atlas?&lt;br&gt;
No setup headaches—just launch and go.&lt;/p&gt;

&lt;p&gt;Built-in UI for managing data without writing shell commands.&lt;/p&gt;

&lt;p&gt;Great for prototyping and learning NoSQL concepts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaw66okx158br3j70o45.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flaw66okx158br3j70o45.png" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69vfsm99fe3yrzkbxngg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69vfsm99fe3yrzkbxngg.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqkiptuvkplt62bxb5pwt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqkiptuvkplt62bxb5pwt.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqy3ucq852na7jpaftja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqy3ucq852na7jpaftja.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdv04s2y1ilax016wj8xj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdv04s2y1ilax016wj8xj.png" alt=" " width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>mongodb</category>
      <category>beginners</category>
      <category>database</category>
    </item>
    <item>
      <title>Indexing, Hashing &amp; Query Optimization</title>
      <dc:creator>Rokesh . S</dc:creator>
      <pubDate>Tue, 07 Oct 2025 07:59:41 +0000</pubDate>
      <link>https://dev.to/rokesh_s_8c34404217ded3/indexing-hashing-query-optimization-3j78</link>
      <guid>https://dev.to/rokesh_s_8c34404217ded3/indexing-hashing-query-optimization-3j78</guid>
      <description>&lt;p&gt;Step-1: 1. Setting Up Your Table&lt;br&gt;
First, you'll create a simple table to store student information and fill it with some data.&lt;/p&gt;

&lt;p&gt;Create a table Students: You need a table with columns for roll number (roll_no), name, department (dept), and cgpa.&lt;/p&gt;

&lt;p&gt;Insert at least 20 sample records: You'll add 20 or more rows of fake student data into this table.&lt;/p&gt;

&lt;p&gt;This gives you a dataset to work with. Without any indexes, if you search for a student, the database has to look through every single row one by one, which is slow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nc65nznlu349yzzr851.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nc65nznlu349yzzr851.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-2: B-Tree Index (For Specific Lookups)&lt;br&gt;
This part shows how to speed up searches for a single, specific record.&lt;/p&gt;

&lt;p&gt;Create a B-Tree index on the roll_no column: A B-Tree index is like the index at the back of a textbook. If you want to find a specific topic (like roll_no = 110), you don't read the whole book; you look it up in the index, which tells you the exact page number (or in this case, the row's location). This is very fast for finding unique values.&lt;/p&gt;

&lt;p&gt;Execute a query to fetch the details of a student with roll_no = 110: When you run this query, the database will use the B-Tree index you just created to instantly find the student with roll_no = 110 instead of scanning the whole table&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rp8cro1qymb1wcbaijn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4rp8cro1qymb1wcbaijn.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-3: B+ Tree Index (For Range-Based Searches)&lt;br&gt;
This part focuses on searches that look for a range of values.&lt;/p&gt;

&lt;p&gt;Create a B+ Tree index on the cgpa column: A B+ Tree is a special type of B-Tree where all the final data pointers are stored at the bottom level (leaf nodes) and are linked to each other. This structure makes it extremely efficient to scan through a sequence of data.&lt;/p&gt;

&lt;p&gt;Write a query to display all students with cgpa &amp;gt; 8.0: This is a range query (you're not looking for one CGPA, but all CGPAs above a certain value). The B+ Tree allows the database to quickly find the first student with a CGPA of 8.0 and then just follow the linked list to get all the other students with higher CGPAs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ayx5zmkcyzkwk35xxpp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ayx5zmkcyzkwk35xxpp.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-4: Hash Index (For Exact Matches)&lt;br&gt;
This part demonstrates an index that is super fast for finding records based on an exact value.&lt;/p&gt;

&lt;p&gt;Create a Hash index on the dept column: A Hash index works like a dictionary or hash map in programming. It takes a value (e.g., 'CSBS'), converts it into a unique code (a "hash"), and uses that code to find the data's location directly.&lt;/p&gt;

&lt;p&gt;Run a query to retrieve all students from the 'CSBS' department: This is an equality query. The hash index will instantly find all students in the 'CSBS' department. However, a hash index is not good for range queries (e.g., dept &amp;gt; 'CSBS').&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvcm6jsexydgd1n3j6kr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvcm6jsexydgd1n3j6kr.png" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>performance</category>
      <category>database</category>
      <category>sql</category>
    </item>
    <item>
      <title>Transactions, Deadlocks &amp; Log Based Recovery</title>
      <dc:creator>Rokesh . S</dc:creator>
      <pubDate>Tue, 07 Oct 2025 07:53:10 +0000</pubDate>
      <link>https://dev.to/rokesh_s_8c34404217ded3/transactions-deadlocks-log-based-recovery-16p2</link>
      <guid>https://dev.to/rokesh_s_8c34404217ded3/transactions-deadlocks-log-based-recovery-16p2</guid>
      <description>&lt;p&gt;CREATE TABLE Accounts (&lt;br&gt;
acc_no INT PRIMARY KEY,&lt;br&gt;
name VARCHAR(50),&lt;br&gt;
balance INT&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts VALUES&lt;br&gt;
(1, 'Alice', 1000),&lt;br&gt;
(2, 'Bob', 1500),&lt;br&gt;
(3, 'Charlie', 2000);&lt;/p&gt;

&lt;p&gt;SELECT * FROM Accounts;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpepal59mtb95fpv9y60s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpepal59mtb95fpv9y60s.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-1: Atomicity &amp;amp; Rollback&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5z1989yyrdhggcv3bfd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5z1989yyrdhggcv3bfd4.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-2: Deadlock Simulation&lt;br&gt;
Session 1&lt;br&gt;
UPDATE Accounts SET balance = balance - 100 WHERE name = 'Alice';&lt;br&gt;
UPDATE Accounts SET balance = balance + 100 WHERE name = 'Bob';&lt;br&gt;
Session 2&lt;br&gt;
UPDATE Accounts SET balance = balance - 100 WHERE name = 'Bob';&lt;br&gt;
UPDATE Accounts SET balance = balance + 100 WHERE name = 'Alice';&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuglbm1buqndhajscyxzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuglbm1buqndhajscyxzg.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the sessions will show:&lt;/p&gt;

&lt;p&gt;ORA-00060: deadlock detected while waiting for resource&lt;br&gt;
Step-3: Log-Based Recovery&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ft9n35mfuytmkhmnacl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ft9n35mfuytmkhmnacl.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>database</category>
      <category>sql</category>
    </item>
    <item>
      <title>ACID property with SQL transactions</title>
      <dc:creator>Rokesh . S</dc:creator>
      <pubDate>Tue, 07 Oct 2025 07:12:16 +0000</pubDate>
      <link>https://dev.to/rokesh_s_8c34404217ded3/acid-property-with-sql-transactions-2lnk</link>
      <guid>https://dev.to/rokesh_s_8c34404217ded3/acid-property-with-sql-transactions-2lnk</guid>
      <description>&lt;p&gt;ACID stands for:&lt;/p&gt;

&lt;p&gt;A – Atomicity: Ensures that a transaction is “all or nothing.”&lt;/p&gt;

&lt;p&gt;C – Consistency: Ensures data follows rules and constraints.&lt;/p&gt;

&lt;p&gt;I – Isolation: Ensures transactions run independently without interfering.&lt;/p&gt;

&lt;p&gt;D – Durability: Ensures committed changes are saved even after system failure&lt;/p&gt;

&lt;p&gt;Step-1 : Create Table and Insert Records&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cnwn0wr1mf6xft64zis.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cnwn0wr1mf6xft64zis.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-2: Atomicity – Transaction Rollback&lt;br&gt;
Simulate a transfer where you rollback midway:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxlw8yyv2fxwdrt2cd8a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxlw8yyv2fxwdrt2cd8a.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-3: Consistency – Reject Invalid Data&lt;br&gt;
Try inserting invalid data&lt;br&gt;
❌ You’ll get an error because of the CHECK(balance &amp;gt;= 0) constraint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ujkcg7j865m6116w0mw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ujkcg7j865m6116w0mw.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-4: solation – Two Sessions&lt;/p&gt;

&lt;p&gt;In Oracle Live SQL, open two sessions:&lt;br&gt;
Session 1: Start a transaction and update balance but don’t commit.&lt;br&gt;
Session 2: Try reading the same row.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdwv62qp9esxdijsskpw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdwv62qp9esxdijsskpw.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-5: Durability – Commit and Restart&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flghcm97pximp84i6kjez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flghcm97pximp84i6kjez.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CREATE TABLE Accounts(&lt;br&gt;
acc_no INT PRIMARY KEY,&lt;br&gt;
name VARCHAR(50),&lt;br&gt;
balance INT CHECK(balance &amp;gt;= 0)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;INSERT INTO Accounts VALUES (101, 'Ravi', 5000);&lt;br&gt;
INSERT INTO Accounts VALUES (102, 'Meena', 3000);&lt;br&gt;
INSERT INTO Accounts VALUES (103, 'Arun', 7000);&lt;/p&gt;

&lt;p&gt;SELECT * FROM Accounts;&lt;br&gt;
-- Start a transaction&lt;br&gt;
SAVEPOINT start_tx;&lt;/p&gt;

&lt;p&gt;UPDATE Accounts SET balance = balance - 1000 WHERE acc_no = 101;&lt;br&gt;
UPDATE Accounts SET balance = balance + 1000 WHERE acc_no = 102;&lt;/p&gt;

&lt;p&gt;-- Oops! Suppose error or cancellation occurs&lt;br&gt;
ROLLBACK TO start_tx;&lt;/p&gt;

&lt;p&gt;SELECT * FROM Accounts;&lt;br&gt;
INSERT INTO Accounts VALUES (104, 'Kiran', -2000);&lt;br&gt;
-- Session 1&lt;br&gt;
UPDATE Accounts SET balance = balance - 500 WHERE acc_no = 101;&lt;br&gt;
-- Don’t commit yet&lt;/p&gt;

&lt;p&gt;-- Session 2&lt;br&gt;
SELECT * FROM Accounts WHERE acc_no = 101;&lt;br&gt;
UPDATE Accounts SET balance = balance + 500 WHERE acc_no = 103;&lt;br&gt;
COMMIT;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>beginners</category>
      <category>database</category>
      <category>sql</category>
    </item>
    <item>
      <title>CURSOR + TRIGGER</title>
      <dc:creator>Rokesh . S</dc:creator>
      <pubDate>Tue, 07 Oct 2025 07:04:13 +0000</pubDate>
      <link>https://dev.to/rokesh_s_8c34404217ded3/cursor-trigger-42ha</link>
      <guid>https://dev.to/rokesh_s_8c34404217ded3/cursor-trigger-42ha</guid>
      <description>&lt;p&gt;CURSOR + TRIGGER&lt;/p&gt;

&lt;p&gt;sql&lt;/p&gt;

&lt;p&gt;database&lt;/p&gt;

&lt;p&gt;tutorial&lt;br&gt;
Cursor example&lt;br&gt;
Step 1: Create a sample table (Employee)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsx4jxkwa4rmuoh81nf8f.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsx4jxkwa4rmuoh81nf8f.jpeg" alt=" " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2: Insert some records.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc68h1siz3rrpzbtqixqh.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc68h1siz3rrpzbtqixqh.jpeg" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: Write Cursor Program.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fge63w96lt09clgcjhuga.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fge63w96lt09clgcjhuga.jpeg" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TRIGGER EXAMPLE STEP BY STEP&lt;/p&gt;

&lt;p&gt;Step 4: Create an audit table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb266ozah3mpbljjs69uw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb266ozah3mpbljjs69uw.jpeg" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 5: Create a trigger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupysnfb1uzyn5m7ak54z.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupysnfb1uzyn5m7ak54z.jpeg" alt=" " width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 6: Test the trigger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkz1ep2zapao3n5vfy41b.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkz1ep2zapao3n5vfy41b.jpeg" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now check&lt;br&gt;
SELECT * FROM Employee_Audit;&lt;br&gt;
Step 7:A cursor was used to fetch and display employee records satisfying a condition, while a trigger was created to automatically log insert operations into an audit table. This demonstrates how cursors help in handling query results row by row and how triggers ensure automatic enforcement of business rules. Together, they show the importance of procedural extensions in SQL for effective database management.&lt;/p&gt;

&lt;p&gt;-- Step 1: Create Employee table&lt;br&gt;
CREATE TABLE Employee (&lt;br&gt;
emp_id NUMBER,&lt;br&gt;
emp_name VARCHAR2(50),&lt;br&gt;
salary NUMBER&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Step 2: Insert sample records&lt;br&gt;
INSERT INTO Employee VALUES (1, 'Rahul', 60000);&lt;br&gt;
INSERT INTO Employee VALUES (2, 'Priya', 45000);&lt;br&gt;
INSERT INTO Employee VALUES (3, 'Kiran', 75000);&lt;br&gt;
COMMIT;&lt;/p&gt;

&lt;p&gt;-- Step 3: Cursor Program (fetch employees with salary &amp;gt; 50000)&lt;br&gt;
DECLARE&lt;br&gt;
v_id Employee.emp_id%TYPE;&lt;br&gt;
v_name Employee.emp_name%TYPE;&lt;br&gt;
v_sal Employee.salary%TYPE;&lt;/p&gt;

&lt;p&gt;CURSOR c_emp IS&lt;br&gt;
SELECT emp_id, emp_name, salary FROM Employee WHERE salary &amp;gt; 50000;&lt;br&gt;
BEGIN&lt;br&gt;
OPEN c_emp;&lt;br&gt;
LOOP&lt;br&gt;
FETCH c_emp INTO v_id, v_name, v_sal;&lt;br&gt;
EXIT WHEN c_emp%NOTFOUND;&lt;br&gt;
DBMS_OUTPUT.PUT_LINE(v_id || ' | ' || v_name || ' | ' || v_sal);&lt;br&gt;
END LOOP;&lt;br&gt;
CLOSE c_emp;&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

&lt;p&gt;-- Step 4: Create Employee_Audit table (for trigger)&lt;br&gt;
CREATE TABLE Employee_Audit (&lt;br&gt;
emp_id NUMBER,&lt;br&gt;
action VARCHAR2(20),&lt;br&gt;
action_time DATE&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;-- Step 5: Create Trigger to log inserts&lt;br&gt;
CREATE OR REPLACE TRIGGER trg_emp_insert&lt;br&gt;
AFTER INSERT ON Employee&lt;br&gt;
FOR EACH ROW&lt;br&gt;
BEGIN&lt;br&gt;
INSERT INTO Employee_Audit VALUES (:NEW.emp_id, 'INSERT', SYSDATE);&lt;br&gt;
END;&lt;br&gt;
/&lt;/p&gt;

&lt;p&gt;-- Step 6: Test the trigger&lt;br&gt;
INSERT INTO Employee VALUES (4, 'Sneha', 55000);&lt;br&gt;
COMMIT;&lt;/p&gt;

&lt;p&gt;-- Step 7: Check audit log&lt;br&gt;
SELECT * FROM Employee_Audit;&lt;/p&gt;

</description>
      <category>database</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Normalization</title>
      <dc:creator>Rokesh . S</dc:creator>
      <pubDate>Mon, 06 Oct 2025 14:40:16 +0000</pubDate>
      <link>https://dev.to/rokesh_s_8c34404217ded3/normalization-15fd</link>
      <guid>https://dev.to/rokesh_s_8c34404217ded3/normalization-15fd</guid>
      <description>&lt;p&gt;Step 1: Identify anomalies in the base table&lt;/p&gt;

&lt;p&gt;Base table:&lt;/p&gt;

&lt;p&gt;StudentID StudentName CourseID CourseName Instructor InstructorPhone&lt;br&gt;
S01 Arjun C101 DBMS Dr. Kumar 9876543210&lt;br&gt;
S01 Arjun C102 Data Mining Dr. Mehta 9123456780&lt;br&gt;
S02 Priya C101 DBMS Dr. Kumar 9876543210&lt;br&gt;
S03 Kiran C103 AI Dr. Rao 9988776655&lt;/p&gt;

&lt;p&gt;Anomalies:&lt;/p&gt;

&lt;p&gt;Insertion anomaly: Cannot insert a new instructor without assigning a student.&lt;/p&gt;

&lt;p&gt;Update anomaly: Updating InstructorPhone requires multiple rows to be updated (e.g., Dr. Kumar’s phone).&lt;/p&gt;

&lt;p&gt;Deletion anomaly: Deleting the last student in a course deletes course &amp;amp; instructor info.&lt;/p&gt;

&lt;p&gt;Step 2: Convert to 1NF&lt;/p&gt;

&lt;p&gt;1NF Rule: Remove repeating groups and make all attributes atomic.&lt;/p&gt;

&lt;p&gt;Our table already has atomic values, so 1NF is essentially the same table. But for clarity, we define a primary key on StudentID + CourseID.&lt;br&gt;
CREATE TABLE StudentCourse_1NF (&lt;br&gt;
StudentID VARCHAR2(10),&lt;br&gt;
StudentName VARCHAR2(50),&lt;br&gt;
CourseID VARCHAR2(10),&lt;br&gt;
CourseName VARCHAR2(50),&lt;br&gt;
Instructor VARCHAR2(50),&lt;br&gt;
InstructorPhone VARCHAR2(15),&lt;br&gt;
PRIMARY KEY (StudentID, CourseID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Step 3: Convert to 2NF&lt;/p&gt;

&lt;p&gt;2NF Rule: Remove partial dependency. Here, StudentName depends only on StudentID and CourseName &amp;amp; Instructor info depends only on CourseID.&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
StudentID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
StudentName VARCHAR2(50)&lt;br&gt;
);&lt;br&gt;
CREATE TABLE Courses (&lt;br&gt;
CourseID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
CourseName VARCHAR2(50),&lt;br&gt;
Instructor VARCHAR2(50),&lt;br&gt;
InstructorPhone VARCHAR2(15)&lt;br&gt;
);&lt;br&gt;
CREATE TABLE Enrollments (&lt;br&gt;
StudentID VARCHAR2(10),&lt;br&gt;
CourseID VARCHAR2(10),&lt;br&gt;
PRIMARY KEY (StudentID, CourseID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Step 4: Convert to 3NF&lt;/p&gt;

&lt;p&gt;3NF Rule: Remove transitive dependency. InstructorPhone depends on Instructor, so create a separate Instructors table&lt;br&gt;
CREATE TABLE Students (&lt;br&gt;
StudentID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
StudentName VARCHAR2(50)&lt;br&gt;
);&lt;br&gt;
CREATE TABLE Instructors (&lt;br&gt;
InstructorID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
InstructorName VARCHAR2(50),&lt;br&gt;
InstructorPhone VARCHAR2(15)&lt;br&gt;
);&lt;br&gt;
CREATE TABLE Courses (&lt;br&gt;
CourseID VARCHAR2(10) PRIMARY KEY,&lt;br&gt;
CourseName VARCHAR2(50),&lt;br&gt;
InstructorID VARCHAR2(10),&lt;br&gt;
FOREIGN KEY (InstructorID) REFERENCES Instructors(InstructorID)&lt;br&gt;
);&lt;br&gt;
CREATE TABLE Enrollments (&lt;br&gt;
StudentID VARCHAR2(10),&lt;br&gt;
CourseID VARCHAR2(10),&lt;br&gt;
PRIMARY KEY (StudentID, CourseID),&lt;br&gt;
FOREIGN KEY (StudentID) REFERENCES Students(StudentID),&lt;br&gt;
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Step 5: Insert sample data into 3NF tables&lt;br&gt;
-- Students&lt;br&gt;
INSERT INTO Students VALUES ('S01', 'Arjun');&lt;br&gt;
INSERT INTO Students VALUES ('S02', 'Priya');&lt;br&gt;
INSERT INTO Students VALUES ('S03', 'Kiran');&lt;/p&gt;

&lt;p&gt;-- Instructors&lt;br&gt;
INSERT INTO Instructors VALUES ('I01', 'Dr. Kumar', '9876543210');&lt;br&gt;
INSERT INTO Instructors VALUES ('I02', 'Dr. Mehta', '9123456780');&lt;br&gt;
INSERT INTO Instructors VALUES ('I03', 'Dr. Rao', '9988776655');&lt;/p&gt;

&lt;p&gt;-- Courses&lt;br&gt;
INSERT INTO Courses VALUES ('C101', 'DBMS', 'I01');&lt;br&gt;
INSERT INTO Courses VALUES ('C102', 'Data Mining', 'I02');&lt;br&gt;
INSERT INTO Courses VALUES ('C103', 'AI', 'I03');&lt;/p&gt;

&lt;p&gt;-- Enrollments&lt;br&gt;
INSERT INTO Enrollments VALUES ('S01', 'C101');&lt;br&gt;
INSERT INTO Enrollments VALUES ('S01', 'C102');&lt;br&gt;
INSERT INTO Enrollments VALUES ('S02', 'C101');&lt;br&gt;
INSERT INTO Enrollments VALUES ('S03', 'C103');&lt;/p&gt;

&lt;p&gt;Step 6: Query to list all students with courses and instructor names&lt;/p&gt;

&lt;p&gt;SELECT s.StudentName, c.CourseName, i.InstructorName&lt;br&gt;
FROM Enrollments e&lt;br&gt;
JOIN Students s ON e.StudentID = s.StudentID&lt;br&gt;
JOIN Courses c ON e.CourseID = c.CourseID&lt;br&gt;
JOIN Instructors i ON c.InstructorID = i.Instruct&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h55mm83wcpnxufr79jq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h55mm83wcpnxufr79jq.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqbp9baa200if3svozkq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqbp9baa200if3svozkq.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpe7i3s8g9n0mhgh7xc9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhpe7i3s8g9n0mhgh7xc9.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3mo14otul6t2t7m9q6o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3mo14otul6t2t7m9q6o.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjb3rpgdjso0562ojksw4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjb3rpgdjso0562ojksw4.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p0i7vnfirmnwszcr4kk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p0i7vnfirmnwszcr4kk.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnik3i8aucdus1yzycdo2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnik3i8aucdus1yzycdo2.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fot4wiq8b7t57lw1iao99.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fot4wiq8b7t57lw1iao99.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2wto925gg8r1ahotj0de.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2wto925gg8r1ahotj0de.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>MASTERING SQL ON ORACLE LIVE SQL ( COLLEGE STUDENT AND COURSE MANGEMENT SYSTEM )</title>
      <dc:creator>Rokesh . S</dc:creator>
      <pubDate>Fri, 22 Aug 2025 09:05:52 +0000</pubDate>
      <link>https://dev.to/rokesh_s_8c34404217ded3/mastering-sql-on-oracle-live-sql-college-student-and-course-mangement-system--f1</link>
      <guid>https://dev.to/rokesh_s_8c34404217ded3/mastering-sql-on-oracle-live-sql-college-student-and-course-mangement-system--f1</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Mastering SQL on Oracle Live SQL: A Step-by-Step Guide
&lt;/h1&gt;

&lt;p&gt;Working with SQL is a fundamental skill for developers and data professionals. Recently, I explored &lt;strong&gt;Oracle Live SQL&lt;/strong&gt;, a web-based platform for writing and executing SQL scripts without installing any local database. In this post, I’ll walk you through the steps I took — from creating tables to writing queries and procedures.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 1. Creating Tables with Constraints
&lt;/h2&gt;

&lt;p&gt;First, I created multiple tables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;STUDENTS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;COURSES&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ENROLLMENTS&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s an example of creating the &lt;strong&gt;Enrollments&lt;/strong&gt; table with foreign keys referencing &lt;strong&gt;Students&lt;/strong&gt; and &lt;strong&gt;Courses&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;Enrollments&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;EnrollID&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;StudentID&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="n"&gt;Students&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;StudentID&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;CourseID&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="n"&gt;Courses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CourseID&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;Grade&lt;/span&gt; &lt;span class="nb"&gt;CHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures &lt;strong&gt;referential integrity&lt;/strong&gt; between students, courses, and enrollments.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 2. Inserting Data
&lt;/h2&gt;

&lt;p&gt;Next, I inserted sample data into the &lt;strong&gt;Students&lt;/strong&gt; table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Students&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;StudentID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Dept&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DOB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Alice Johnson'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Computer Science'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TO_DATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'2002-05-10'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'YYYY-MM-DD'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;'alice@univ.edu'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Students&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;StudentID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Dept&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DOB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Bob Smith'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Mechanical'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TO_DATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'2001-11-15'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'YYYY-MM-DD'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;'bob@univ.edu'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;Students&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;StudentID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Dept&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DOB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;VALUES&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Clara Adams'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Physics'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TO_DATE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'2003-02-20'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'YYYY-MM-DD'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;'clara@univ.edu'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;TO_DATE&lt;/strong&gt; function ensures proper date formatting for Oracle DB.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 3. Altering Table Structure
&lt;/h2&gt;

&lt;p&gt;What if you need to add a new column later? You can use &lt;strong&gt;ALTER TABLE&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;Students&lt;/span&gt;
&lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="n"&gt;PhoneNo&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This adds a phone number column to the existing table.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 4. Aggregating Data with GROUP BY and HAVING
&lt;/h2&gt;

&lt;p&gt;To get departments with more than two students, I used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;Dept&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;Student_Count&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Students&lt;/span&gt;
&lt;span class="k"&gt;GROUP&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;Dept&lt;/span&gt;
&lt;span class="k"&gt;HAVING&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query filters out departments having fewer than three students.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ 5. Creating a Stored Procedure
&lt;/h2&gt;

&lt;p&gt;Finally, I created a &lt;strong&gt;stored procedure&lt;/strong&gt; to update student grades:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="k"&gt;REPLACE&lt;/span&gt; &lt;span class="k"&gt;PROCEDURE&lt;/span&gt; &lt;span class="n"&gt;UpdateGrade&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;p_StudentID&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p_CourseID&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="n"&gt;NUMBER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;p_NewGrade&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="nb"&gt;CHAR&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;Enrollments&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;Grade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_NewGrade&lt;/span&gt;
    &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;StudentID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_StudentID&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;CourseID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p_CourseID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;COMMIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes updating grades easy and reusable.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔑 Key Learnings:
&lt;/h3&gt;

&lt;p&gt;✔ Use &lt;strong&gt;foreign keys&lt;/strong&gt; for data integrity.&lt;br&gt;
✔ Use &lt;strong&gt;ALTER TABLE&lt;/strong&gt; for schema changes without losing data.&lt;br&gt;
✔ &lt;strong&gt;GROUP BY&lt;/strong&gt; and &lt;strong&gt;HAVING&lt;/strong&gt; are powerful for aggregations.&lt;br&gt;
✔ Stored procedures automate repetitive tasks.&lt;/p&gt;




&lt;p&gt;💬 Have you tried Oracle Live SQL or created similar setups? Share your experience in the comments!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzc8jae4sbiyn1vut5jk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzc8jae4sbiyn1vut5jk.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmxzxznqy83x73gcg6tp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxmxzxznqy83x73gcg6tp.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xml6s7lh5lf6i1qluok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xml6s7lh5lf6i1qluok.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fns2gb63tmexzajfs6xed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fns2gb63tmexzajfs6xed.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65uviq1zphkfjcjdcsr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65uviq1zphkfjcjdcsr8.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
