<?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: Ashiq Omar</title>
    <description>The latest articles on DEV Community by Ashiq Omar (@ashiq_omar).</description>
    <link>https://dev.to/ashiq_omar</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%2F3834681%2F6fb5328c-f642-431d-af15-fffb88a4c35c.jpg</url>
      <title>DEV Community: Ashiq Omar</title>
      <link>https://dev.to/ashiq_omar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashiq_omar"/>
    <language>en</language>
    <item>
      <title>SELECT QUERIES FROM DVD RENTAL DATABASE</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 06:09:28 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/select-queries-from-dvd-rental-database-5gnh</link>
      <guid>https://dev.to/ashiq_omar/select-queries-from-dvd-rental-database-5gnh</guid>
      <description>&lt;p&gt;Let me explain it with some "DVD Rental DB" qns&lt;/p&gt;

&lt;p&gt;QN: 1&lt;/p&gt;

&lt;p&gt;Retrieve film titles and their rental rates.&lt;br&gt;
ANS: SELECT title AS "Movie Title", rental_rate AS "Rate" FROM film;&lt;br&gt;
it is to select title and rental_rate from table film and we are renaming them as Movie Title and Rate using alias.&lt;/p&gt;

&lt;p&gt;QN: 2&lt;/p&gt;

&lt;p&gt;List customer names and their email addresses.&lt;br&gt;
ANS: SELECT first_name AS "First Name", last_name AS "Last Name", email FROM customer;&lt;br&gt;
since, we need first name, last name and email from customer table and we rename first_name and last_name.&lt;/p&gt;

&lt;p&gt;QN: 3&lt;/p&gt;

&lt;p&gt;Sort films by rental rate descending and title.&lt;br&gt;
ANS: SELECT title, rental_rate FROM film ORDER BY rental_rate DESC, title ASC;&lt;br&gt;
since, it is to sort rental_rate in descending if same means then title will be sorted alphabetically.&lt;/p&gt;

&lt;p&gt;QN: 4&lt;/p&gt;

&lt;p&gt;Actor names sorted by last name then first name.&lt;br&gt;
ANS: SELECT first_name, last_name FROM actor ORDER BY last_name, first_name;&lt;br&gt;
sorting is done first by last_name and then by first_name.&lt;/p&gt;

&lt;p&gt;QN: 5&lt;/p&gt;

&lt;p&gt;Unique replacement costs.&lt;br&gt;
ANS: SELECT DISTINCT replacement_cost FROM film;&lt;br&gt;
it is to get only unique values so we use DISTINCT.&lt;/p&gt;

&lt;p&gt;QN: 6&lt;/p&gt;

&lt;p&gt;Film title and length.&lt;br&gt;
ANS: SELECT title, length AS "Duration (min)" FROM film;&lt;br&gt;
select title and length and rename length as Duration.&lt;/p&gt;

&lt;p&gt;QN: 7&lt;/p&gt;

&lt;p&gt;Customer with active status.&lt;br&gt;
ANS: SELECT first_name, last_name, active AS "Is Active" FROM customer;&lt;br&gt;
we take name and active column and rename active.&lt;/p&gt;

&lt;p&gt;QN: 8&lt;/p&gt;

&lt;p&gt;Film categories sorted.&lt;br&gt;
ANS: SELECT name FROM category ORDER BY name;&lt;br&gt;
we select category names and sort alphabetically.&lt;/p&gt;

&lt;p&gt;QN: 9&lt;/p&gt;

&lt;p&gt;Films by length descending&lt;br&gt;
ANS: SELECT title, length FROM film ORDER BY length DESC;&lt;br&gt;
sorting is from highest length to lowest.&lt;/p&gt;

&lt;p&gt;QN: 10&lt;/p&gt;

&lt;p&gt;Actors by first name descending.&lt;br&gt;
ANS: SELECT first_name, last_name FROM actor ORDER BY first_name DESC;&lt;br&gt;
sorting is based on first_name in reverse.&lt;/p&gt;

&lt;p&gt;QN: 11&lt;/p&gt;

&lt;p&gt;Unique ratings.&lt;/p&gt;

&lt;p&gt;ANS: SELECT DISTINCT rating FROM film;only unique ratings are needed.&lt;/p&gt;

&lt;p&gt;QN: 12&lt;/p&gt;

&lt;p&gt;Unique rental durations.&lt;br&gt;
ANS: SELECT DISTINCT rental_duration FROM film;&lt;br&gt;
we need only distinct rental_duration.&lt;/p&gt;

&lt;p&gt;QN: 13&lt;/p&gt;

&lt;p&gt;First customer_id based on active.&lt;br&gt;
ANS: SELECT DISTINCT ON (active) customer_id, active FROM customer ORDER BY active, customer_id;&lt;br&gt;
for each active value we take first customer_id.&lt;/p&gt;

&lt;p&gt;QN: 14&lt;/p&gt;

&lt;p&gt;Earliest rental date per customer.&lt;br&gt;
ANS: SELECT customer_id, MIN(rental_date) FROM rental GROUP BY customer_id ORDER BY customer_id;&lt;br&gt;
 MIN is used to find earliest date for each customer.&lt;/p&gt;

&lt;p&gt;QN: 15&lt;/p&gt;

&lt;p&gt;10 shortest films.&lt;br&gt;
ANS: SELECT title, length FROM film ORDER BY length ASC LIMIT 10;&lt;br&gt;
 sorting is from smallest length and limiting to 10.&lt;/p&gt;

&lt;p&gt;QN: 16&lt;/p&gt;

&lt;p&gt;Top 5 customers with highest id.&lt;br&gt;
ANS: SELECT first_name, last_name, customer_id FROM customer ORDER BY customer_id DESC LIMIT 5;&lt;br&gt;
highest customer_id will come first.&lt;/p&gt;

&lt;p&gt;QN: 17&lt;/p&gt;

&lt;p&gt;Unique store ids.&lt;br&gt;
ANS: SELECT DISTINCT store_id FROM inventory;&lt;br&gt;
DISTINCT removes duplicates.&lt;/p&gt;

&lt;p&gt;QN: 18&lt;/p&gt;

&lt;p&gt;Unique replacement cost sorted.&lt;br&gt;
ANS: SELECT DISTINCT replacement_cost FROM film ORDER BY replacement_cost ASC;&lt;br&gt;
values are sorted from lowest to highest.&lt;/p&gt;

&lt;p&gt;QN: 19&lt;/p&gt;

&lt;p&gt;First rental date per store.&lt;br&gt;
ANS: SELECT i.store_id, MIN(r.rental_date) FROM rental r JOIN inventory i ON r.inventory_id = i.inventory_id GROUP BY i.store_id ORDER BY i.store_id;&lt;br&gt;
we join tables and get earliest rental date per store.&lt;/p&gt;

&lt;p&gt;QN: 20&lt;/p&gt;

&lt;p&gt;Unique ratings sorted.&lt;br&gt;
ANS: SELECT DISTINCT rating FROM film ORDER BY rating;&lt;br&gt;
ratings are sorted alphabetically.&lt;/p&gt;

&lt;p&gt;QN: 21&lt;/p&gt;

&lt;p&gt;Films by rating and length.&lt;br&gt;
ANS: SELECT title, rating, length FROM film ORDER BY rating ASC, length DESC;&lt;br&gt;
first rating is sorted then length is sorted.&lt;/p&gt;

&lt;p&gt;QN: 22&lt;/p&gt;

&lt;p&gt;Actors sorted last and first name.&lt;br&gt;
ANS: SELECT first_name, last_name FROM actor ORDER BY last_name ASC, first_name DESC;&lt;br&gt;
last_name is ascending and first_name is descending.&lt;/p&gt;

&lt;p&gt;QN: 23&lt;/p&gt;

&lt;p&gt;Films by replacement and rate.&lt;br&gt;
ANS: SELECT title, replacement_cost, rental_rate FROM film ORDER BY replacement_cost ASC, rental_rate DESC;&lt;br&gt;
first replacement_cost is sortedthen rental_rate.&lt;/p&gt;

&lt;p&gt;QN: 24&lt;/p&gt;

&lt;p&gt;Customers sorted.&lt;br&gt;
ANS: SELECT first_name, last_name FROM customer ORDER BY last_name ASC, first_name DESC;&lt;br&gt;
last_name ascending and first_name descending.&lt;/p&gt;

&lt;p&gt;QN: 25&lt;/p&gt;

&lt;p&gt;Rentals sorted.&lt;br&gt;
ANS: SELECT * FROM rental ORDER BY customer_id ASC, rental_date DESC;&lt;br&gt;
sorted by customer_id and latest rental first.&lt;/p&gt;

&lt;p&gt;QN: 26&lt;/p&gt;

&lt;p&gt;Films by duration and title.&lt;br&gt;
ANS: SELECT title, rental_duration FROM film ORDER BY rental_duration ASC, title DESC;&lt;br&gt;
duration is sorted first then title in reverse order.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>python</category>
      <category>devops</category>
    </item>
    <item>
      <title>HOW A REQUEST ORGINATES FROM CLIENT AND REACHES THE SERVER?</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 06:00:24 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/how-a-request-orginates-from-client-and-reaches-the-server-6b9</link>
      <guid>https://dev.to/ashiq_omar/how-a-request-orginates-from-client-and-reaches-the-server-6b9</guid>
      <description>&lt;p&gt;How a Request Travels from Client to Server&lt;/p&gt;

&lt;p&gt;A client is simply the end user who makes a request, usually by typing something like a website name into a browser. This request is in a human-readable format. computers dont understand domain names directly the system needs a way to convert this into a machine-readable format. Thats where the Domain Name System comes in.&lt;/p&gt;

&lt;p&gt;What Happens Behind the Scenes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a user enters a domain like &lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt; the request is first handled by DNS&lt;/li&gt;
&lt;li&gt;DNS translates the domain name into an IP address which is what servers actually understand.&lt;/li&gt;
&lt;li&gt;Once the correct IP address is found, the request is sent to the appropriate server where the required data is stored.&lt;/li&gt;
&lt;li&gt;After processing the request the server sends the response back. Even though the communication happens using IP addresses the browser presents everything in a human-readable format.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example&lt;br&gt;
Request:&lt;br&gt;
&lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt;&lt;br&gt;
DNS converts it into an IP address like:&lt;br&gt;
&lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt;&lt;br&gt;
 → 126.xxx.xxx.0&lt;br&gt;
This IP address helps identify the exact server where the website is hosted.&lt;/p&gt;

&lt;p&gt;Role of Protocols and Data Transfer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When the request is sent, it uses protocols like HTTP or HTTPS. These protocols define how data is transferred between the client and the server.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The request includes important details like:&lt;br&gt;
Source IP address&lt;br&gt;
Destination IP address&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The data is then broken into smaller packets. These packets travel through multiple routers across the internet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Routers make sure the packets reach the correct destination without data loss.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once the server receives the request, it processes it and sends the response back in the same way through the internet and routers, until it reaches the users browser.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Work Flow:&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%2Fqsisg1mthwst3ibxfssp.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%2Fqsisg1mthwst3ibxfssp.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>devops</category>
      <category>career</category>
    </item>
    <item>
      <title>DNS RESOLVER</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 05:53:08 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/dns-resolver-1go9</link>
      <guid>https://dev.to/ashiq_omar/dns-resolver-1go9</guid>
      <description>&lt;p&gt;A DNS resolver works like a cache memory that helps the operating system find the IP address of a domain name by communicating with different DNS servers.&lt;/p&gt;

&lt;p&gt;How the Process Works&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Let’s say you enter a domain like example.com.&lt;/li&gt;
&lt;li&gt;First the request goes from the client to the operating system.&lt;/li&gt;
&lt;li&gt;The operating system then asks the DNS resolver if it already knows the IP address for that domain.&lt;/li&gt;
&lt;li&gt;If the resolver has the answer stored in its cache, it immediately returns the IP address. This makes the process very fast.&lt;/li&gt;
&lt;li&gt;If the resolver does not have the IP address, it starts querying other DNS servers step by step.&lt;/li&gt;
&lt;li&gt;It begins with the root server, then moves to the top-level domain server, and finally reaches the authoritative DNS server, which holds the actual IP address.&lt;/li&gt;
&lt;li&gt;Once the resolver gets the IP address, it stores it in its cache for future use and then sends it back to the operating system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What Happens Next Time&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When the same request is made again, the operating system first checks with the resolver.&lt;/li&gt;
&lt;li&gt;If the resolver already has the IP in its cache, it returns the result instantly without going through the full process again.&lt;/li&gt;
&lt;li&gt;This reduces the time taken and improves performance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Workflow Summary&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%2F053194as8fp4egeuvprm.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%2F053194as8fp4egeuvprm.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>python</category>
      <category>career</category>
    </item>
    <item>
      <title>EC2 LAUNCHING</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 05:46:26 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/ec2-launching-525j</link>
      <guid>https://dev.to/ashiq_omar/ec2-launching-525j</guid>
      <description>&lt;p&gt;Let’s go step by step and launch a simple web server on AWS.&lt;/p&gt;

&lt;p&gt;Step 1: Launch an EC2 Instance&lt;br&gt;
Go to the AWS Console open EC2 and click on Launch Instance.&lt;br&gt;
Now configure the instance:&lt;/p&gt;

&lt;p&gt;Name: my-web-server&lt;br&gt;
AMI: Amazon Linux 2, which is beginner-friendly&lt;br&gt;
Instance Type: t2.micro since it comes under the free tier&lt;/p&gt;

&lt;p&gt;Step 2: Choose a Key Pair&lt;br&gt;
You need a key pair to securely connect to your instance.&lt;br&gt;
You can either create a new one or use an existing key pair.&lt;br&gt;
Make sure to download the .pem file when creating it, because you’ll need it later to connect.&lt;/p&gt;

&lt;p&gt;Step 3: Configure Network Settings&lt;br&gt;
Allow the following ports:&lt;br&gt;
SSH (port 22) for logging into the server&lt;br&gt;
HTTP (port 80) so your website can be accessed from a browser&lt;/p&gt;

&lt;p&gt;Step 4: Launch the Instance&lt;br&gt;
Click on Launch Instance.&lt;br&gt;
Your server will now be created and started.&lt;/p&gt;

&lt;p&gt;Step 5: Connect to the Instance&lt;br&gt;
There are two easy ways to connect:&lt;/p&gt;

&lt;p&gt;First option:&lt;br&gt;
Use EC2 Instance Connect directly from the AWS Console. This is the easiest method.&lt;/p&gt;

&lt;p&gt;Second option:&lt;br&gt;
Use your terminal with the key pair file you downloaded:&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="n"&gt;ssh&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="o"&gt;-&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;pem&lt;/span&gt; &lt;span class="n"&gt;ec2&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="o"&gt;@&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 6: Install a Web Server&lt;br&gt;
Once connected, install Apache on your instance:&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="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;yum&lt;/span&gt; &lt;span class="k"&gt;update&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;yum&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;httpd&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 7: Start the Web Server&lt;br&gt;
Start the Apache service and enable it so it runs automatically:&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="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;systemctl&lt;/span&gt; &lt;span class="k"&gt;start&lt;/span&gt; &lt;span class="n"&gt;httpd&lt;/span&gt;
&lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;systemctl&lt;/span&gt; &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="n"&gt;httpd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 8: Create a Simple Web Page&lt;br&gt;
Now add a basic web page:&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="n"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;"Hello from EC2"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="n"&gt;tee&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;index&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 9: Get the Public IP&lt;br&gt;
Go to the EC2 dashboard and copy the public IP address of your instance.&lt;/p&gt;

&lt;p&gt;Step 10: Access from Your Browser&lt;br&gt;
Open your browser and enter:&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="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ip&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If everything is set up correctly you will see:&lt;br&gt;
Hello from EC2&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>Setup a DNS hosted zone in Route53 in AWS.</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 05:32:55 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/setup-a-dns-hosted-zone-in-route53-in-aws-3bo3</link>
      <guid>https://dev.to/ashiq_omar/setup-a-dns-hosted-zone-in-route53-in-aws-3bo3</guid>
      <description>&lt;p&gt;Let’s walk through how DNS works in a simple and practical way using AWS.&lt;/p&gt;

&lt;p&gt;Step 1: Open Route 53&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start by logging into your AWS Console search for Amazon Route 53 and open it.&lt;/li&gt;
&lt;li&gt;Once inside, go to Hosted Zones This is where your domain DNS settings are managed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 2: Create a Hosted Zone&lt;/p&gt;

&lt;p&gt;Click on Create Hosted Zone.&lt;br&gt;
Now enter the details:&lt;br&gt;
Domain Name:&lt;br&gt;
   Enter your domain name like yourdomain.com. It can be a real domain or just for practice.&lt;/p&gt;

&lt;p&gt;Type:&lt;br&gt;
   Choose Public Hosted Zone so your domain can be accessed over the internet.&lt;br&gt;
Then click Create Hosted Zone.&lt;/p&gt;

&lt;p&gt;Step 3: Understand the Default Records&lt;/p&gt;

&lt;p&gt;After creating the hosted zone, AWS automatically creates two records:&lt;br&gt;
NS Record:&lt;br&gt;
These are AWS DNS servers that handle requests for your domain.&lt;br&gt;
SOA Record:&lt;br&gt;
This contains technical and administrative details about your domain.&lt;br&gt;
You don’t need to change these records.&lt;/p&gt;

&lt;p&gt;Step 4: Create an A Record&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now you need to connect your domain to your server.&lt;/li&gt;
&lt;li&gt;Click Create Record and fill in&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Record Name:&lt;br&gt;
You can use www or leave it empty.&lt;br&gt;
Record Type:&lt;br&gt;
A&lt;br&gt;
Value:&lt;br&gt;
Enter your EC2 instance’s public IP address.&lt;br&gt;
Click Create Record.&lt;/p&gt;

&lt;p&gt;Step 5: Connect Your Domain to AWS&lt;/p&gt;

&lt;p&gt;If you bought your domain from providers like GoDaddy or Namecheap you need to update the nameservers.&lt;br&gt;
Go to your domain provider’s settings and replace their nameservers with the ones provided by Amazon Route 53.&lt;/p&gt;

&lt;p&gt;They will look like:&lt;br&gt;
ns-123.awsdns-45.com&lt;br&gt;
ns-678.awsdns-12.net&lt;br&gt;
This step ensures that your domain uses AWS for DNS resolution.&lt;/p&gt;

&lt;p&gt;Step 6: Test in Browser&lt;br&gt;
Open your browser and visit:&lt;br&gt;
&lt;a href="http://www.yourdomain.com" rel="noopener noreferrer"&gt;http://www.yourdomain.com&lt;/a&gt;&lt;br&gt;
If everything is set up correctly your EC2-hosted website will load.&lt;/p&gt;

&lt;p&gt;How the Flow Works&lt;br&gt;
When a user enters your domain in the browser this is what happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User sends a DNS request&lt;/li&gt;
&lt;li&gt;Route 53 receives the request&lt;/li&gt;
&lt;li&gt;It checks the A record&lt;/li&gt;
&lt;li&gt;Returns the EC2 IP address&lt;/li&gt;
&lt;li&gt;Browser loads the website&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>devops</category>
      <category>career</category>
    </item>
    <item>
      <title>Basic Select SQL Queries</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 05:30:09 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/basic-select-sql-queries-28g7</link>
      <guid>https://dev.to/ashiq_omar/basic-select-sql-queries-28g7</guid>
      <description>&lt;p&gt;Let me explain it with some Hackerank problems:&lt;/p&gt;

&lt;p&gt;QN: 1&lt;br&gt;
Query all columns for a city in CITY with the ID 1661&lt;br&gt;
ANS: SELECT * from CITY where ID = 1661;&lt;/p&gt;

&lt;p&gt;it is to select all columns from table city and the condition is for ID = 1661.&lt;/p&gt;

&lt;p&gt;QN: 2&lt;br&gt;
Query all attributes of every Japanese city in the CITY table. The COUNTRYCODE for Japan is JPN.&lt;br&gt;
ANS: SELECT * from CITY where COUNTRYCODE= 'JPN';&lt;/p&gt;

&lt;p&gt;it is to select all attributes from the table city and the condition is for a COUNTRYCODE =JPN&lt;/p&gt;

&lt;p&gt;QN:3&lt;br&gt;
Query the NAME field for all American cities in the CITY table with populations larger than 120000. The CountryCode for America is USA.&lt;/p&gt;

&lt;p&gt;ANS: SELECT NAME from CITY where POPULATION &amp;gt; 120000 and COUNTRYCODE = 'USA';&lt;/p&gt;

&lt;p&gt;since it is to select all the names from the table city condition is population is more than 120000 and CountryCode =USA&lt;/p&gt;

&lt;p&gt;QN:4&lt;/p&gt;

&lt;p&gt;Query the list of CITY names from STATION that do not start with vowels. Your result cannot contain duplicates.&lt;br&gt;
ANS: SELECT DISTINCT CITY FROM STATION WHERE CITY NOT LIKE"A%" AND CITY NOT LIKE "E%"AND CITY NOT LIKE "I%"AND CITY NOT LIKE "O%"AND CITY NOT LIKE "U%";&lt;/p&gt;

&lt;p&gt;Since, it is to select the unique city names from the table STATION and the condition is to the names of the city should not start with vowels(a,e,i,o,u). A%,E%,I%,O%,U% is that all other character after that are considered.so this represents the first letter.&lt;/p&gt;

&lt;p&gt;QN:5&lt;/p&gt;

&lt;p&gt;Query a list of CITY and STATE from the STATION table.&lt;br&gt;
ANS: SELECT CITY,STATE FROM STATION;&lt;/p&gt;

&lt;p&gt;we need both city and state columns from table STATION we select both table&lt;/p&gt;

&lt;p&gt;QN:6&lt;/p&gt;

&lt;p&gt;Query all columns for all American cities in the CITY table with populations larger than 100000. The CountryCode for America is USA.&lt;/p&gt;

&lt;p&gt;ANS: SELECT * FROM CITY WHERE POPULATION &amp;gt;100000 AND COUNTRYCODE = 'USA';&lt;br&gt;
Since, it is to select all from table CITY . the condition is where population is more than 100000 and COUNTRYCODE IS USA&lt;/p&gt;

&lt;p&gt;QN:7&lt;/p&gt;

&lt;p&gt;Find the difference between the total number of CITY entries in the table and the number of distinct CITY entries in the table.&lt;br&gt;
ANS: SELECT COUNT(CITY)-COUNT(DISTINCT CITY) from STATION;&lt;/p&gt;

&lt;p&gt;here it is asked for the difference between all city and unique city names to find the repetition we use COUNT keyword to city and distinct city .&lt;/p&gt;

&lt;p&gt;QN:8&lt;br&gt;
Query the names of all the Japanese cities in the CITY table. The COUNTRYCODE for Japan is JPN&lt;br&gt;
ANS: SELECT NAME FROM CITY WHERE COUNTRYCODE = 'JPN'; &lt;/p&gt;

&lt;p&gt;it is to select the names of the city from table CITY and the condition is COUNTRYCODE to be JPN&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>beginners</category>
      <category>python</category>
    </item>
    <item>
      <title>DB-TASK-002</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 05:21:05 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/db-task-002-59o7</link>
      <guid>https://dev.to/ashiq_omar/db-task-002-59o7</guid>
      <description>&lt;p&gt;Let me explain it with some "DVD Rental DataBase" qns&lt;/p&gt;

&lt;p&gt;QN: 1&lt;/p&gt;

&lt;p&gt;Get all movies with rental rate greater than 3.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;it is to select all columns from film table and condition is rental_rate greater than 3.&lt;/p&gt;

&lt;p&gt;QN: 2&lt;/p&gt;

&lt;p&gt;Movies with rental rate &amp;gt; 3 and replacement cost &amp;lt; 20.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;replacement_cost&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;two conditions are given so we use AND to combine both.&lt;/p&gt;

&lt;p&gt;QN: 3&lt;/p&gt;

&lt;p&gt;Movies rated PG or rental rate 0.99.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rating&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'PG'&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;either one condition can be true so we use OR.&lt;/p&gt;

&lt;p&gt;QN: 4&lt;/p&gt;

&lt;p&gt;First 10 movies sorted by rental rate (highest first).&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt; &lt;span class="k"&gt;LIMIT&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;we sort rental_rate in descending and take first 10.&lt;/p&gt;

&lt;p&gt;QN: 5&lt;/p&gt;

&lt;p&gt;Skip first 5 and get next 3 (ascending).&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt; &lt;span class="k"&gt;OFFSET&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OFFSET skips first 5 rows then LIMIT gives next 3.&lt;/p&gt;

&lt;p&gt;QN: 6&lt;/p&gt;

&lt;p&gt;Skip first 5 and get next 3 (ascending).&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt; &lt;span class="k"&gt;OFFSET&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;same question so same query.&lt;/p&gt;

&lt;p&gt;QN: 7&lt;/p&gt;

&lt;p&gt;Movies with rental duration between 3 and 7.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rental_duration&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;BETWEEN is used for range values.&lt;/p&gt;

&lt;p&gt;QN: 8&lt;/p&gt;

&lt;p&gt;Title starts with A and ends with e.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'A%e'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A% means starts with A and %e means ends with e.&lt;/p&gt;

&lt;p&gt;QN: 9&lt;/p&gt;

&lt;p&gt;Customers without email.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NULL is checked using IS NULL.&lt;/p&gt;

&lt;p&gt;QN: 10&lt;/p&gt;

&lt;p&gt;Movies in 2006, rental rate 2.99 or 3.99, title starts with S.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;release_year&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;release_year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2006&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'S%'&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;multiple conditions are combined and we limit to top 5.&lt;/p&gt;

&lt;p&gt;QN: 11&lt;/p&gt;

&lt;p&gt;Skip 20 customers and show next 10 sorted by last name.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;last_name&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt; &lt;span class="k"&gt;OFFSET&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="k"&gt;LIMIT&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;&lt;br&gt;
`&lt;br&gt;
sorted alphabetically then skip 20 and take next 10.&lt;/p&gt;

&lt;p&gt;QN: 12&lt;/p&gt;

&lt;p&gt;Top 5 movies with highest replacement cost, skip most expensive one.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`sql&lt;/p&gt;

&lt;p&gt;ANS: SELECT * FROM film ORDER BY replacement_cost DESC OFFSET 1 LIMIT 5;&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
highest is skipped using OFFSET 1 then next 5 are taken.&lt;/p&gt;

&lt;p&gt;QN: 13&lt;/p&gt;

&lt;p&gt;Rentals between two dates.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`sql&lt;/p&gt;

&lt;p&gt;ANS: SELECT * FROM rental WHERE rental_date BETWEEN '2005-05-01' AND '2005-06-01';&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
BETWEEN is used for date range.&lt;/p&gt;

&lt;p&gt;QN: 14&lt;/p&gt;

&lt;p&gt;Actors with "man" in last name.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`sql&lt;/p&gt;

&lt;p&gt;ANS: SELECT * FROM actor WHERE last_name LIKE '%man%';&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
%man% means anywhere in the name.&lt;/p&gt;

&lt;p&gt;QN: 15&lt;/p&gt;

&lt;p&gt;Movies with no special features.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`sql&lt;/p&gt;

&lt;p&gt;ANS: SELECT * FROM film WHERE special_features IS NULL;&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;NULL values are checked using IS NULL.&lt;/p&gt;

&lt;p&gt;QN: 16&lt;/p&gt;

&lt;p&gt;Movies with rental duration more than 7.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`sql&lt;/p&gt;

&lt;p&gt;ANS: SELECT * FROM film WHERE rental_duration &amp;gt; 7;&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;condition is greater than 7.&lt;/p&gt;

&lt;p&gt;QN: 17&lt;/p&gt;

&lt;p&gt;First 10 movies with rental rate 2.99 or 4.99, rating R, title contains L.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`sql&lt;/p&gt;

&lt;p&gt;ANS:&lt;br&gt;
SELECT * FROM film&lt;br&gt;
WHERE (rental_rate = 2.99 OR rental_rate = 4.99)&lt;br&gt;
AND rating = 'R'&lt;br&gt;
AND title LIKE '%L%'&lt;br&gt;
LIMIT 10;&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
multiple conditions and title contains L.&lt;/p&gt;

&lt;p&gt;QN: 18&lt;/p&gt;

&lt;p&gt;Title starts with A or B and ends with s.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`sql&lt;/p&gt;

&lt;p&gt;ANS: SELECT * FROM film WHERE (title LIKE 'A%s' OR title LIKE 'B%s');&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
starts with A or B ends with s.&lt;/p&gt;

&lt;p&gt;QN: 19&lt;/p&gt;

&lt;p&gt;Title contains Man, Men or Woman.&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`sql&lt;/p&gt;

&lt;p&gt;ANS:&lt;br&gt;
SELECT * FROM film&lt;br&gt;
WHERE title LIKE '%Man%'&lt;br&gt;
OR title LIKE '%Men%'&lt;br&gt;
OR title LIKE '%Woman%';&lt;/p&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
checking multiple words using LIKE.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>python</category>
      <category>aws</category>
      <category>docker</category>
    </item>
    <item>
      <title>CREATE TABLES</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 05:14:05 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/create-tables-2k4b</link>
      <guid>https://dev.to/ashiq_omar/create-tables-2k4b</guid>
      <description>&lt;p&gt;Tables with constraints&lt;/p&gt;

&lt;p&gt;QN:1 &lt;/p&gt;

&lt;p&gt;Create a table called students where each student has an id, name, and age. Ensure that the id uniquely identifies each student.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&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;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;id should uniquely identify each student  we use PRIMARY KEY&lt;/p&gt;

&lt;p&gt;QN:2&lt;/p&gt;

&lt;p&gt;Create a table employees where name and email cannot be empty, but phone_number can be optional.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;phone_number&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;name and email should not be empty we use NOT NULL phone is optional so no constraint&lt;/p&gt;

&lt;p&gt;QN:3 &lt;/p&gt;

&lt;p&gt;Create a table users where both username and email must be unique across all records.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;username&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;username and email should not repeat we use UNIQUE&lt;/p&gt;

&lt;p&gt;QN:4&lt;/p&gt;

&lt;p&gt;Create a table products where price must always be greater than 0 and stock cannot be negative.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stock&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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;price should be greater than 0 and stock should not be negative we use CHECK&lt;/p&gt;

&lt;p&gt;QN:5 &lt;/p&gt;

&lt;p&gt;Create a table orders where status should default to 'pending' if no value is provided, and created_at should store the current timestamp automatically.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;status&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="s1"&gt;'pending'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="k"&gt;CURRENT_TIMESTAMP&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we need default values we use DEFAULT for status and timestamp&lt;/p&gt;

&lt;p&gt;QN:6&lt;/p&gt;

&lt;p&gt;Create a table accounts where account_number must be unique and not null and balance must always be greater than or equal to 0&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;account_number&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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;account_number should not be empty and must be unique and balance should not go negative&lt;/p&gt;

&lt;p&gt;QN:7&lt;/p&gt;

&lt;p&gt;Create a table enrollments where a student can enroll in multiple courses, but the combination of student_id and course_id must be unique.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&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;student_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;course_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;student_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;course_id&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;same student should not enroll same course again so we use combination UNIQUE&lt;/p&gt;

&lt;p&gt;QN:8&lt;/p&gt;

&lt;p&gt;Create two tables: departments with id and name and employees with id, name, and department_id. Ensure that department_id in employees must exist in departments.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;departments&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;department_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="k"&gt;FOREIGN&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;department_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="n"&gt;departments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&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;employee must belong to valid department so we use FOREIGN KEY&lt;/p&gt;

&lt;p&gt;QN:9 &lt;/p&gt;

&lt;p&gt;Modify the previous foreign key example so that when a department is deleted, all related employees are also deleted and when a department ID is updated, it reflects in the employees 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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;departments&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&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;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="n"&gt;department_id&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="k"&gt;FOREIGN&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;department_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="n"&gt;departments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;CASCADE&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="k"&gt;CASCADE&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we need automatic delete and update so we use CASCADE&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>aws</category>
      <category>database</category>
    </item>
    <item>
      <title>Alter Tables</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sun, 29 Mar 2026 05:07:40 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/alter-tables-4g3l</link>
      <guid>https://dev.to/ashiq_omar/alter-tables-4g3l</guid>
      <description>&lt;p&gt;ALTER TABLE constraints&lt;/p&gt;

&lt;p&gt;QN:1&lt;/p&gt;

&lt;p&gt;You have a table customers with a column email that currently allows NULL values. Modify the table so that future entries must always have an email.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;customers&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;COLUMN&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;email should not be empty for future records we use SET NOT NULL&lt;/p&gt;

&lt;p&gt;QN:2 &lt;/p&gt;

&lt;p&gt;In the users table, ensure that the username column is unique across all records using an ALTER statement.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;
&lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;unique_username&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;username should not repeat we add UNIQUE constraint&lt;/p&gt;

&lt;p&gt;QN:3 &lt;/p&gt;

&lt;p&gt;In the products table, enforce that price must always be greater than 0 using an ALTER command.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt;
&lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;check_price&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;price should always be greater than 0 we use CHECK constraint&lt;/p&gt;

&lt;p&gt;QN:4&lt;/p&gt;

&lt;p&gt;Modify the orders table so that the status column defaults to 'pending' if no value is provided during insertion.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;COLUMN&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="s1"&gt;'pending'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if no value is given status should automatically become pending&lt;/p&gt;

&lt;p&gt;QN:5 &lt;/p&gt;

&lt;p&gt;Alter the employees table by adding a new column salary such that&lt;br&gt;
It cannot be NULL&lt;br&gt;
It must always be greater than 10,000&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;
&lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;COLUMN&lt;/span&gt; &lt;span class="n"&gt;salary&lt;/span&gt; &lt;span class="nb"&gt;INT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;salary&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;salary should not be empty and must be above 10000 we use NOT NULL and CHECK&lt;/p&gt;

&lt;p&gt;QN:6 &lt;/p&gt;

&lt;p&gt;Modify the foreign key constraint between employees and departments so that when a department is deleted, all related employees are automatically removed.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;
&lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;employees_department_id_fkey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;employees&lt;/span&gt;
&lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;employees_department_id_fkey&lt;/span&gt;
&lt;span class="k"&gt;FOREIGN&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;department_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="n"&gt;departments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;DELETE&lt;/span&gt; &lt;span class="k"&gt;CASCADE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;existing foreign key cannot be modified directly we drop and recreate with CASCADE&lt;/p&gt;

&lt;p&gt;QN:7 &lt;/p&gt;

&lt;p&gt;In the accounts table, remove an existing CHECK constraint that enforces balance &amp;gt;= 0.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt;
&lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;accounts_balance_check&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we want to remove condition on balance we drop CHECK constraint&lt;/p&gt;

&lt;p&gt;QN:8&lt;/p&gt;

&lt;p&gt;In the payments table, ensure that the combination of user_id and transaction_id is unique using an ALTER TABLE statement.&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="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;payments&lt;/span&gt;
&lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="k"&gt;CONSTRAINT&lt;/span&gt; &lt;span class="n"&gt;unique_payment&lt;/span&gt; &lt;span class="k"&gt;UNIQUE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;transaction_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;same user should not have duplicate transaction_id we use combination UNIQUE&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>career</category>
      <category>aws</category>
    </item>
    <item>
      <title>DB-TASK-002</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sat, 28 Mar 2026 15:31:24 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/db-task-002-1bpi</link>
      <guid>https://dev.to/ashiq_omar/db-task-002-1bpi</guid>
      <description>&lt;p&gt;Let me explain it with some "DVD Rental DataBase" qns&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="n"&gt;QN&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;Get&lt;/span&gt; &lt;span class="k"&gt;all&lt;/span&gt; &lt;span class="n"&gt;movies&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rental&lt;/span&gt; &lt;span class="n"&gt;rate&lt;/span&gt; &lt;span class="n"&gt;greater&lt;/span&gt; &lt;span class="k"&gt;than&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;


&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;it is to select all columns from film table and condition is rental_rate greater than 3&lt;/p&gt;

&lt;p&gt;QN: 2&lt;br&gt;
Movies with rental rate &amp;gt; 3 and replacement cost &amp;lt; 20.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;replacement_cost&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;two conditions are given so we use AND to combine both.&lt;/p&gt;

&lt;p&gt;QN: 3&lt;br&gt;
Movies rated PG or rental rate 0.99.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rating&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'PG'&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;either one condition can be true so we use OR.&lt;/p&gt;

&lt;p&gt;QN: 4&lt;br&gt;
First 10 movies sorted by rental rate (highest first).&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt; &lt;span class="k"&gt;LIMIT&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;since, we sort rental_rate in descending and take first 10.&lt;/p&gt;

&lt;p&gt;QN: 5&lt;br&gt;
Skip first 5 and get next 3 (ascending).&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt; &lt;span class="k"&gt;OFFSET&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OFFSET skips first 5 rows then LIMIT gives next 3.&lt;/p&gt;

&lt;p&gt;QN: 6&lt;br&gt;
Skip first 5 and get next 3 (ascending).&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt; &lt;span class="k"&gt;OFFSET&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;same question so same query.&lt;/p&gt;

&lt;p&gt;QN: 7&lt;br&gt;
Movies with rental duration between 3 and 7.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rental_duration&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;BETWEEN is used for range values.&lt;/p&gt;

&lt;p&gt;QN: 8&lt;br&gt;
Title starts with A and ends with e.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'A%e'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A% means starts with A and %e means ends with e.&lt;/p&gt;

&lt;p&gt;QN: 9&lt;br&gt;
Customers without email.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NULL is checked using IS NULL.&lt;/p&gt;

&lt;p&gt;QN: 10&lt;br&gt;
Movies in 2006, rental rate 2.99 or 3.99, title starts with S.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;release_year&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;release_year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2006&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'S%'&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;multiple conditions are combined and we limit to top 5.&lt;/p&gt;

&lt;p&gt;QN: 11&lt;br&gt;
Skip 20 customers and show next 10 sorted by last name.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;last_name&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt; &lt;span class="k"&gt;OFFSET&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="k"&gt;LIMIT&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;sorted alphabetically then skip 20 and take next 10.&lt;/p&gt;

&lt;p&gt;QN: 12&lt;br&gt;
Top 5 movies with highest replacement cost, skip most expensive one.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;replacement_cost&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt; &lt;span class="k"&gt;OFFSET&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;highest is skipped using OFFSET 1 then next 5 are taken.&lt;/p&gt;

&lt;p&gt;QN: 13&lt;br&gt;
Rentals between two dates.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;rental&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rental_date&lt;/span&gt; &lt;span class="k"&gt;BETWEEN&lt;/span&gt; &lt;span class="s1"&gt;'2005-05-01'&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="s1"&gt;'2005-06-01'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;BETWEEN is used for date range.&lt;/p&gt;

&lt;p&gt;QN: 14&lt;br&gt;
Actors with "man" in last name.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;actor&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;last_name&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'%man%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;%man% means anywhere in the name.&lt;/p&gt;

&lt;p&gt;QN: 15&lt;br&gt;
Movies with no special features.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;special_features&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NULL values are checked using IS NULL.&lt;/p&gt;

&lt;p&gt;QN: 16&lt;br&gt;
Movies with rental duration more than 7.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;rental_duration&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;condition is greater than 7.&lt;/p&gt;

&lt;p&gt;QN: 17&lt;br&gt;
First 10 movies with rental rate 2.99 or 4.99, rating R, title contains L.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;rental_rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;99&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;rating&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'R'&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'%L%'&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&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;multiple conditions and title contains L.&lt;/p&gt;

&lt;p&gt;QN: 18&lt;br&gt;
Title starts with A or B and ends with s.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'A%s'&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'B%s'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;starts with A or B ends with s.&lt;/p&gt;

&lt;p&gt;QN: 19&lt;br&gt;
Title contains Man, Men or Woman.&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="n"&gt;ANS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'%Man%'&lt;/span&gt;
&lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'%Men%'&lt;/span&gt;
&lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="k"&gt;LIKE&lt;/span&gt; &lt;span class="s1"&gt;'%Woman%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;checking multiple words using LIKE.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>Users, Roles, Groups</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sat, 28 Mar 2026 15:18:03 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/users-roles-groups-5gmj</link>
      <guid>https://dev.to/ashiq_omar/users-roles-groups-5gmj</guid>
      <description>&lt;p&gt;Lets understand roles and permissions with a few practical questions.&lt;/p&gt;

&lt;p&gt;QN 1: Create a login role that can only read from film 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;CREATE&lt;/span&gt; &lt;span class="k"&gt;ROLE&lt;/span&gt; &lt;span class="n"&gt;report_user&lt;/span&gt; &lt;span class="n"&gt;LOGIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;report_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we create a user called report_user and give it only SELECT permission on the film table. So it can read data but cant modify anything.&lt;/p&gt;

&lt;p&gt;2: Accessing customer table gives permission denied fix it&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;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;report_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The error happens because report_user doesnt have access to the customer table. Granting SELECT fixes the issue.&lt;/p&gt;

&lt;p&gt;3: Allow access to only specific columns&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;REVOKE&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;report_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;first_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;last_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;report_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we remove full access.&lt;br&gt;
Then we grant access only to selected columns. Now the user can’t see sensitive fields like email or other data.&lt;/p&gt;

&lt;p&gt;4: Create a support user with limited permissions&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;ROLE&lt;/span&gt; &lt;span class="n"&gt;support_user&lt;/span&gt; &lt;span class="n"&gt;LOGIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;support_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;UPDATE&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;ON&lt;/span&gt; &lt;span class="n"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;support_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This user can: Read all customer data update only the email column no delete or full update access is given tight control.&lt;/p&gt;

&lt;p&gt;5: Remove access from film 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;REVOKE&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;film&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;report_user&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simply removes the permission we granted earlier.&lt;/p&gt;

&lt;p&gt;6: Create a read-only group&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;ROLE&lt;/span&gt; &lt;span class="n"&gt;readonly_group&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="n"&gt;TABLES&lt;/span&gt; &lt;span class="k"&gt;IN&lt;/span&gt; &lt;span class="k"&gt;SCHEMA&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;readonly_group&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a group role that can read all tables in the schema.&lt;/p&gt;

&lt;p&gt;7: Add users to the group&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;ROLE&lt;/span&gt; &lt;span class="n"&gt;analyst1&lt;/span&gt; &lt;span class="n"&gt;LOGIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;ROLE&lt;/span&gt; &lt;span class="n"&gt;analyst2&lt;/span&gt; &lt;span class="n"&gt;LOGIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;readonly_group&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;analyst1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="n"&gt;readonly_group&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;analyst2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both users inherit permissions from the group so instead of managing permissions individually we manage them centrally.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>cloud</category>
      <category>python</category>
    </item>
    <item>
      <title>Consistency</title>
      <dc:creator>Ashiq Omar</dc:creator>
      <pubDate>Sat, 28 Mar 2026 15:03:15 +0000</pubDate>
      <link>https://dev.to/ashiq_omar/consistency-3gji</link>
      <guid>https://dev.to/ashiq_omar/consistency-3gji</guid>
      <description>&lt;p&gt;Let’s understand how a database keeps data valid using an accounts table.&lt;br&gt;
Assume the table has a rule like:&lt;br&gt;
balance ≥ 0&lt;br&gt;
This is a constraint which means the database wont allow any negative balance.&lt;/p&gt;

&lt;p&gt;Initial data&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Alice = 1000&lt;/li&gt;
&lt;li&gt;Bob = 500&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Trying to break the rule now suppose we try to deduct more money than Alice actually has&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;UPDATE&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Alice'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alice only has 1000 so this would make her balance -1000 which violates the constraint.&lt;br&gt;
Result:&lt;br&gt;
The database throws an error and rejects the update.&lt;/p&gt;

&lt;p&gt;Directly setting a negative value&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;UPDATE&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Bob'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again this violates the rule.&lt;br&gt;
Result:&lt;br&gt;
The database blocks the query with an error.&lt;/p&gt;

&lt;p&gt;Checking the data again&lt;br&gt;
SELECT * FROM accounts;&lt;br&gt;
Alice = 1000&lt;br&gt;
Bob = 500&lt;br&gt;
invalid operations were rejected the data remains unchanged.&lt;/p&gt;

&lt;p&gt;Inside a transaction&lt;br&gt;
Now lets try the same invalid update within a transaction:&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;BEGIN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="n"&gt;accounts&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Alice'&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the constraint fails the transaction itself fails and does not complete.&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The database uses constraints like CHECK (balance &amp;gt;= 0) to automatically prevent invalid data, such as negative balances.&lt;/li&gt;
&lt;li&gt;This is schema-level protection.&lt;/li&gt;
&lt;li&gt;But checking whether a user has enough balance before attempting a transfer is still the responsibility of the application or transaction logic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Big picture&lt;br&gt;
Database - prevents invalid data&lt;br&gt;
Application - handles business rules&lt;/p&gt;

&lt;p&gt;Because of this Balances never go negative data stays consistent and the system remains reliable&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>devops</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
