PODSTAWY BAZ DANYCH

Podstawy baz danych 09

Baza

DVD Rental Service

source

restore

Subqueries

SELECT
   film_id,
   title,
   rental_rate
FROM
   film
WHERE
   rental_rate > (
      SELECT
         AVG (rental_rate)
      FROM
         film
   );
SELECT
   film_id,
   title
FROM
   film
WHERE
   film_id IN (
      SELECT
         inventory.film_id
      FROM
         rental
      INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id
      WHERE
         return_date BETWEEN '2005-05-29' AND '2005-05-30'
   );
SELECT
   first_name,
   last_name
FROM
   customer
WHERE
   EXISTS (
      SELECT
         1
      FROM
         payment
      WHERE
         payment.customer_id = customer.customer_id
   );

Views

CREATE [OR REPLACE] VIEW active_customer AS
  SELECT *
  FROM customer
  WHERE active = 1
SELECT *
FROM active_customer
INSERT INTO active_customer (store_id, first_name, last_name, email, address_id, activebool, create_date, last_update)
VALUES(1, 'Joe', 'Doe', 'joe@doe.net', 1, true, now(), now());
SELECT active FROM customer WHERE email = 'joe@doe.net';
DELETE FROM active_customer WHERE email = 'joe@doe.net'
DROP VIEW active_customer;

Materialized Views

CREATE MATERIALIZED VIEW active_customer AS
  SELECT *
  FROM customer
  WHERE active = 1
REFRESH MATERIALIZED VIEW active_customer;
DROP MATERIALIZED VIEW active_customer;

Ćwiczenia

  • Uruchomic przykłady
  • Napisać zapytanie z subquery, które zwróci imie i nazwisko aktora, który zagrał w min. 40 filmach
  • Utworzyć:
    • view dla customer i address z nazwa customer_with_address
    • materialized view dla customer i address z nazwa customer_with_address_m
    • Zmodyfikować customer-a(ów) i address w tabeli customer, customer_with_address oraz customer_with_address_m.
    • znaleźć customer i jego address w widokach, podzielić się wnioskami na PM