REQUEST COMPLIMENTARY SQLS*PLUS LICENCE
SQL EXISTS condition
SQL EXISTS condition is used in combination with a subquery and is considered satisfied if the subquery returns at least one line. It can be used in the SELECT, INSERT, UPDATE or DELETE operator.
Syntax of EXISTS condition in SQL
WHERE EXISTS ( subquery_id );
where:
- subquery_id – the subquery is a SELECT operator. If a subquery returns at least one entry in its result set, the EXISTS offer is evaluated as true and the EXISTS condition is met. If the subquery does not return any record, the EXISTS sentence is evaluated as false and the EXISTS condition is not met.
Note:
SQL statements using the EXISTS condition are very inefficient because the subquery is re-run for EVERY line in the external query table. There are more efficient ways to write most queries that do not use the EXISTS condition.
Using the EXISTS Condition with the SELECT Operator
Let us start with an example that shows how to use the EXISTS condition with a SELECT operator.
In this example we have a table with the following data:
ord_id | custom_id | ord_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
4 | 4000 | 2019/06/20 |
5 | NULL | 2019/07/01 |
And the table with the following data:
ord_id | custom_id | ord_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
4 | 4000 | 2019/06/20 |
5 | NULL | 2019/07/01 |
Now let’s find all the records from the customers table, where there is at least one record in the orders table with the same custom_id. Perform the following SELECT query:
SELECT *
FROM customs
WHERE EXISTS
(SELECT *
FROM ords
WHERE customs.custom_id = ords.custom_id);
Four entries will be selected. Here are the results that you should get:
custom_id | f_name | l_name | fav_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
5000 | Selena | Gomez | bing.com |
7000 | Tom | Cruise | oracle.com |
8000 | Johnny | Depp | NULL |
In this example, there are 4 entries in the customers table that have the value custom_id in the orders table.
EXISTS condition with UPDATE operator
Let’s look at an example where the EXISTS condition in the UPDATE operator is used.
In this example we have a product table with the following data:
prod_id | prod_name | cat_id |
---|---|---|
1 | Pear | 50 |
2 | Banana | 50 |
3 | Orange | 50 |
4 | Apple | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
And a table named sum_data with the following data:
prod_id | current_cat |
---|---|
1 | 10 |
2 | 10 |
3 | 10 |
4 | 10 |
5 | 10 |
Now let’s update the sum_data table with values from the products table. Enter the following SQL statement:
UPDATE sum_data
SET current_cat = (SELECT cat_id)
FROM prods
WHERE prods.prod_id = sum_data.prod_id)
WHERE EXISTS (SELECT cat_id)
FROM prods
WHERE prods.prod_id = sum_data.prod_id);
5 records will be updated. Select data from sum_data table again:
SELECT *
FROM sum_data;
Here are the results you’ll get:
prod_id | current_cat |
---|---|
1 | 50 |
2 | 50 |
3 | 50 |
4 | 50 |
5 | 75 |
8 | 10 |
In this example, the current_cat field in the sum_data table will be updated with cat_id data from the products table where prod_id values match. The first 5 records in the sum_data table were updated.
Tip: If we did not enable EXISTS condition, UPDATE query would update current_category field to NULL in the 6th row of summary_data table (because products table has no record where product_id = 8).
EXISTS Condition with DELETE Operator
Let’s look at an example that uses the EXISTS condition in the DELETE operator.
In this example, we have a table with the following data:
custom_id | f_name | l_name | fav_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
5000 | Selena | Gomez | bing.com |
6000 | Mila | Kunis | yahoo.com |
7000 | Tom | Cruise | oracle.com |
8000 | Johnny | Depp | NULL |
9000 | Russell | Crowe | google.com |
And the table with the following data:
ord_id | custom_id | ord_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
4 | 4000 | 2019/06/20 |
5 | NULL | 2019/07/01 |
Enter the following DELETE operator:
DELETE FROM ords
WHERE EXISTS
(SELECT *
FROM customs
WHERE customs.custom_id = ords.custom_id
AND customs.l_name = ‘Bieber’);
1 record will be deleted. Select the data from the order table again:
SELECT * FROM ords;
here are the results you should get:
ord_id | custom_id | ord_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
5 | NULL | 2019/07/01 |
This example removes all records from the order table, where the customer table has a record with l_name “Bieber” and the same custom_id value in both tables. In this example the record for ord_id = 4 has been deleted.
NOT with EXISTS condition
Finally, the NOT condition can be combined with the EXISTS condition to create the NOT EXISTS condition. Let’s look at an example which shows how to use the NOT EXISTS condition in SQL.
In this example we have a table with the following data:
custom_id | f_name | l_name | fav_website |
---|---|---|---|
4000 | Justin | Bieber | google.com |
5000 | Selena | Gomez | bing.com |
6000 | Mila | Kunis | yahoo.com |
7000 | Tom | Cruise | oracle.com |
8000 | Johnny | Depp | NULL |
9000 | Russell | Crowe | google.com |
And the table with the following data:
ord_id | custom_id | ord_date |
---|---|---|
1 | 7000 | 2019/06/18 |
2 | 5000 | 2019/06/18 |
3 | 8000 | 2019/06/19 |
4 | 4000 | 2019/06/20 |
5 | NULL | 2019/07/01 |
Enter the following SQL statement:
SELECT *
FROM customs
WHERE DOES NOT EXIST
(SELECT *
FROM ords
WHERE customs.custom_id = ords.custom_id);
Two entries will be selected. Here are the results that you will get:
custom_id | f_name | l_name | fav_website |
---|---|---|---|
6000 | Mila | Kunis | yahoo.com |
9000 | Russell | Crowe | google.com |
This example will return all entries from the customs table where there are no entries in the ords table for this custom_id.
The SQL EXISTS clause
MORE NEWS
PreambleNoSql is not a replacement for SQL databases but is a valid alternative for many situations where standard SQL is not the best approach for...
PreambleMongoDB Conditional operators specify a condition to which the value of the document field shall correspond.Comparison Query Operators $eq...
5 Database management trends impacting database administrationIn the realm of database management systems, moreover half (52%) of your competitors feel...
The data type is defined as the type of data that any column or variable can store in MS SQL Server. What is the data type? When you create any table or...
PreambleMS SQL Server is a client-server architecture. MS SQL Server process starts with the client application sending a query.SQL Server accepts,...
First the basics: what is the master/slave?One database server (“master”) responds and can do anything. A lot of other database servers store copies of all...
PreambleAtom Hopper (based on Apache Abdera) for those who may not know is an open-source project sponsored by Rackspace. Today we will figure out how to...
PreambleMongoDB recently introduced its new aggregation structure. This structure provides a simpler solution for calculating aggregated values rather...
FlexibilityOne of the most advertised features of MongoDB is its flexibility. Flexibility, however, is a double-edged sword. More flexibility means more...
PreambleSQLShell is a cross-platform command-line tool for SQL, similar to psql for PostgreSQL or MySQL command-line tool for MySQL.Why use it?If you...
PreambleWriting an application on top of the framework on top of the driver on top of the database is a bit like a game on the phone: you say “insert...
PreambleOracle Coherence is a distributed cache that is functionally comparable with Memcached. In addition to the basic function of the API cache, it...
PreambleIBM pureXML, a proprietary XML database built on a relational mechanism (designed for puns) that offers both relational ( SQL / XML ) and...
What is PostgreSQL array? In PostgreSQL we can define a column as an array of valid data types. The data type can be built-in, custom or enumerated....
PreambleIf you are a Linux sysadmin or developer, there comes a time when you need to manage an Oracle database that can work in your environment.In this...
PreambleStarting with Microsoft SQL Server 2008, by default, the group of local administrators is no longer added to SQL Server administrators during the...