📔
Databases
  • Table of contents
  • SQL
    • Getting Started
      • PgAdmin Tool
    • Data Types
      • Arrays
      • Date/Time/Stamps
      • JSON
      • Internal Functions
      • Sequences
      • User Defined Data Types
    • Database
      • Schema
    • Table
      • Aggregation
      • Usefull Functions
      • Combining Tables
      • Constraints
      • Common Table Expression
      • GROUP BY and HAVING
      • OPERATORS
      • ORDER BY and DISTINCT
      • Views
      • WHERE Clause
    • Order of SQL Execution
    • Advance Table
      • Internals
      • Managing Tables
      • Partitioning Tables
      • Pivotal or Crosstab Tables
    • Joins
      • Cross & Natural Joins
      • Full, Multiple & Self Joins
      • Inner Join
      • Left and Right JOIN
    • Functions
      • Cursors
      • PL/pgSQL
      • Stored Procedures
      • Triggers
        • More on Triggers
    • Indexing
      • Custom Indexes
      • GIN Index
      • Indexes
      • SQL
      • Unique Index
    • Summarization
      • SubQueries
      • Window
  • MongoDB
    • Mongo Administration
    • MongoDB Aggregation
    • MQL
  • Redis
  • Cassandra
    • CQL
    • Data Modelling
      • Advance Data Modelling
    • Cassandra Administration
    • Cassandra Features
Powered by GitBook
On this page
  • SubQueries with SELECT clause
  • SubQueries With WHERE Clause
  • SubQueries with JOINS
  • SubQueries with Alias

Was this helpful?

  1. SQL
  2. Summarization

SubQueries

  • Allows you to construct a complex query

  • A sub-query is nested inside another query

  • can be nested inside SELECT, INSERT, UPDATE, DELETE

SubQueries with SELECT clause

SELECT movie_name,
       movie_length
FROM movies mv
WHERE movie_length >= (
    SELECT avg(movie_length)
    FROM movies
)

SELECT movie_name,
       movie_length
FROM movies mv
WHERE movie_length >= (
    SELECT avg(movie_length)
    FROM movies
    WHERE movie_lang = 'English'
);

SubQueries With WHERE Clause

SELECT first_name, last_name, date_of_birth
FROM actors
WHERE date_of_birth > (
    SELECT date_of_birth
    FROM actors
    WHERE first_name = 'Douglas' -- 1922-06-10
);

-- using IN operator
SELECT movie_name,
       movie_length
FROM movies
WHERE movie_id in (
    SELECT movie_id
    FROM movies_revenues
    WHERE revenues_domestic > 200
);

SELECT movie_id, movie_name
FROM movies
WHERE movie_id IN (
    SELECT movie_id
    FROM movies_revenues
    WHERE revenues_domestic > movies_revenues.revenues_international
);

SubQueries with JOINS

-- with joins
SELECT d.director_id,
       d.first_name || ' ' || d.last_name  as "Director Name",
       SUM(r.revenues_international + r.revenues_domestic) as "total_revenues"
FROM directors d
         INNER JOIN movies mv ON mv.director_id = d.director_id
         INNER JOIN movies_revenues r on r.movie_id = mv.movie_id
WHERE (r.revenues_domestic + r.revenues_international) >
      (
          SELECT avg(revenues_domestic + revenues_international) as "avg_total_revenue"
          FROM movies_revenues
      )
GROUP BY d.director_id
ORDER BY total_revenues;


SELECT d.director_id,
       SUM(COALESCE(r.revenues_domestic, 0) + COALESCE(r.revenues_international, 0)) AS "totaL_reveneues"
FROM directors d
         INNER JOIN movies mv ON mv.director_id = d.director_id
         INNER JOIN movies_revenues r ON r.movie_id = mv.movie_id
WHERE COALESCE(r.revenues_domestic, 0) + COALESCE(r.revenues_international, 0) >
      (
          SELECT AVG(COALESCE(r.revenues_domestic, 0) + COALESCE(r.revenues_international, 0)) as "avg_total_reveneues"
          FROM movies_revenues r
                   INNER JOIN movies mv ON mv.movie_id = r.movie_id
          WHERE mv.movie_lang = 'English'
      )
GROUP BY d.director_id
ORDER BY 2 DESC, 1 ASC;

SubQueries with Alias

-- as alias
SELECT *
FROM (
         SELECT *
         FROM movies
     ) t1;

-- query without FROM
SELECT (
           SELECT avg(revenues_domestic) as "Average Revenue"
           FROM movies_revenues
       ),
       (
           SELECT min(revenues_domestic) as "MIN Revenue"
           FROM movies_revenues
       ),
       (
           SELECT max(revenues_domestic) as "MAX Revenue"
           FROM movies_revenues
       )
PreviousSummarizationNextWindow

Last updated 3 years ago

Was this helpful?