PostgreSQL SubqueryIn this section, we are going to understand the working of PostgreSQL Subquery, which allows us to create a difficult query. And we also see examples of subqueries with different clauses such as SELECT, FROM, and WHERE, different Conditions such as IN, EXISTS, and different Queries such as SELECT, INSERT, UPDATE, and DELETE. Introduction of PostgreSQL SubqueryA subquery is a command used within another query. In contrast, the INNER SELECT or the INNER statement is called a SUBQUERY, and OUTER SELECT or the OUTER statement is called the MAIN command. The PostgreSQL subquery is enclosed in parentheses. The PostgreSQL subquery can be used with different clauses such as SELECT, FROM, WHERE and HAVING clauses. We can also combine the PostgreSQL subquery with the SELECT, INSERT, UPDATE, and DELETE commands as well as different operators such as <,>, =, <=,>=, BETWEEN, IN, and so on. Note: In PostgreSQL, a Subquery is not allowed to use with the ORDER BY clause. But we can use the GROUP BY command to perform similar functionality in place of the ORDER BY command.Examples of PostgreSQL Subquery With different ClausesLet us see different examples to understand how the PostgreSQL subquery works with various clauses. Example of PostgreSQL Subquery with SELECT clauseThe PostgreSQL subquery can also be combined with the SELECT clause. The subqueries are used when we want to fetch a calculation with the help of an aggregate function like Average, Count, Sum, Max, and Min function, but we do not want the aggregate function to use into the MAIN query. Here, we will display how to use the Subquery with the SELECT clause. We are taking the car table from the javatpoint database to select the particular data from the table. Output After executing the above command, we will get the following output: In the above example, we have created a Subquery in the SELECT clause like below: And we have aliasing the subquery as the name Subquery1, which will be the name used to refer the above subquery or any of these fields. NOTE: The aggregate functions like Average, Count, Sum, Max, and Min function are regularly used in the subquery. And the subquery must return a single value, that's why we are placing a subquery in the SELECT clause.Example of PostgreSQL Subquery with FROM clauseThe PostgreSQL Subquery can also be combined with the FROM clause. For this, we are taking the Course and Course_categories table from the javatpoint database, which we created in the earlier section of the PostgreSQL tutorial. Output After successful executing of the above command, we will get the following output: In the above example, we have created a Subquery in the FROM clause like below: And we have aliasing the subquery as a name Subquery2, which will be the name used to refer the above subquery or any of these fields. Example of PostgreSQL Subquery with WHERE clauseThe PostgreSQL subquery most commonly used with the WHERE clause. And these Subqueries are also known as the Nested Subqueries. For this, we are taking the Client and Client_details table from the Javatpoint database, which we created in the earlier section of the PostgreSQL tutorial. Output On implementing the above command, we will get the following result: In the above example, we have created a Subquery in the WHERE clause like below: The above subquery statement will allow us to identify all client_id values from the client_details table with a client_id less than 6, and the client_name starts with 'M'. The subquery is used to filter the MAIN query's output with the IN-condition's help. In the below command, we have used with an INNER Join condition as an alternative of Subquery follows: Output After executing the above command, we will get a similar result as compared to the above subquery command with WHERE clause: Note: The INNER JOIN condition will perform more efficiently as compared to the original subquery, and it is significant to see that not all subqueries can be re-written with the help of PostgreSQL joins.Examples of PostgreSQL Subquery With different ConditionsLet us see different examples to understand how the PostgreSQL subquery works with different conditions. Example of PostgreSQL Subquery with EXISTS ConditionThe PostgreSQL Subquery can also be combined with the EXISTS clause. The below syntax is used to display the working of a Subquery with EXISTS Condition: The EXISTS condition only kept the number of rows returned from the subquery, and not the content of the rows. Hence, we can use the following syntax of EXISTS condition:
Let's see one sample example for our better understanding of the Subquery with the EXISTS condition. For this, we are taking the employee and department table from the javatpoint database, which we created in the earlier section of the PostgreSQL tutorial. Output After executing the above command, we will get the following output: As we can see in the above screenshot that the commands work like PostgreSQL Inner Join on the emp_id column. But it returns at least one row in the employee table, although there are some matching rows in the department table. Example of PostgreSQL Subquery with IN ConditionThe PostgreSQL subquery can also be combined with IN Condition. Here, we are using the subquery with IN Condition and the WHERE clause. In the following example, we take a similar table (employee and department) as the above example. Here, we will try to fetch those employee's information which has the joining_date between 2010-08-22 and 2010-08-26: Output On executing the above command, we will get the below result: The above command will return various rows. Therefore, we can use this command as a subquery in the WHERE clause of the following statement: Output After successful execution of the above command, we will get the following output: Examples of PostgreSQL Subquery With different statementsLet us see different examples to understand how the PostgreSQL subquery works with several statements. Example of PostgreSQL Subquery with SELECT StatementWe will display using the Subquery with the SELECT command. For this, we are taking the Car table from the Javatpoint database to retrieve all the records from the table. Let us assume that we need to identify those cars whose car_price is higher than the average car_pirce. So, for this, we will perform the below two steps: Step1 Firstly, we will identify the average car_price with the SELECT command and (AVG) average function. The below statement is used to fetch the average car_price from the car table: Output After successfully executing the above command, we will get the following output: As we can see in the below screenshot that the average car_price is 103109.500. Step2 After that, we will take the output of the first command in the second SELECT command to identify cars from the car table. In the below command, we will get that car_id, car_name whose car_price is greater than the average car_price: Output On implementing the above command, we will get the following result: As we can see, the above code is not well designed because it requires two steps to implement a query. Hence, we need to permit the first command's output to the second command in a single command. In such a case, we will use the concept of PostgreSQL subquery because a subquery is a command, which is nested into the other commands like INSERT, SELECT, UPDATE, and DELETE. In this section of the PostgreSQL tutorial, we will understand all the statements one by one. Syntax of PostgreSQL Subquery with SELECT StatementThe syntax of the PostgreSQL subquery with SELECT command is as follows: To create a subquery, we put the second command in parenthesis along with the WHERE clause as an expression: Output After executing the above command, we will get the following output: As we can observe that, after executing both the command, we will get similar output, but the Subquery command is more efficient and readable. Note: The PostgreSQL executes those commands which contain a subquery in the below sequence:
Example of PostgreSQL Subquery with INSERT StatementWe will display how to use the Subquery with the INSERT statement. And in the INSERT command, the records return from the subquery is used to insert into another table. In the PostgreSQL subquery, the selected data can be changed with any date functions and character. Syntax of PostgreSQL Subquery with INSERT StatementThe syntax of the PostgreSQL subquery with INSERT command is as follows: For this, we are taking the employee and department table from the Organization database and also using the AND Operator to insert the records from one table to another table. In the following example, we are inserting the record into the employee table from the department table. We take the phone and address columns records from the department table, the dept_id is less than 5, AND department_name is OPERATION. Output After executing the above command, we will get the below message window displaying that the value has been inserted successfully in the employee table. To check whether the records have been inserted into the employee table or not, we will use the SELECT command as follows: Output After implementing the above command, we will get the below output: As we can see in the above screenshot that the PostgreSQL Subquery inserted one record into the employee table. Example of PostgreSQL Subquery with UPDATE StatementWe will display how to use the Subquery with the UPDATE statement. If we used a Subquery with the UPDATE command, then either one or more than one column in a table can be updated. Syntax of PostgreSQL Subquery with UPDATE StatementThe syntax of the PostgreSQL Subquery with UPDATE command is as follows: For this, we are taking the Summer_fruits and Winter_fruits tables from the Javatpoint database, which we created in the earlier section of the PostgreSQL tutorial. In the following command, the PostgreSQL Subquery is used to update the Fruits_name column values in the summer_fruits table from the winter_fruits_name column in the winter_fruits table where the winter_fruits' wf_id column is equal to summer_fruits' sf_id column. Output After executing the above command, we will get the below output, where we can see that the summer_fruits table has been updated successfully. We will now use the Select command to check whether the particular records have been updated or not in the summer_fruits table: Output On executing the above command, we will get the below result: As we can see in the above screenshot that the PostgreSQL Subquery updated Six records into the summer_fruits table. Example of PostgreSQL Subquery with DELETE StatementWe will display how to use the Subquery with the DELETE statement, just like any other statement mentioned above. Syntax of PostgreSQL Subquery with DELETE StatementThe syntax of the PostgreSQL Subquery with DELETE command is as follows: In the below example, we take the Course and Course_categories table from the Javatpoint Database and also used the EXISTS operator for deleting the particular records from the table. In the following command, the PostgreSQL Subquery is used to delete all the records from the Course table where the course_id from Course table, and course_category_id from the Course_categories table are equal. Output After executing the above command, we will get the below message window displaying that the records have been deleted successfully from the Course table. We will now use the Select command to check whether the particular records have been deleted or not in the Course table: Output After successfully executing the above command, we will get the following output: OverviewThe use of PostgreSQL Subquery helps us to create the complex command. In the PostgreSQL Subquery section, we have learned the following topics:
Next TopicPostgreSQL Data Types |