Замечание:

Выполните скрипты ниже, до работы Please run the below cells first before proceeding- you'll need them soon!


In [1]:
%load_ext sql
%sql sqlite://


Out[1]:
'Connected: None@None'

In [2]:
%%sql
DROP TABLE IF EXISTS Movies;
CREATE TABLE Movies(title VARCHAR(50), year INT, director VARCHAR(50), length INT);
INSERT INTO Movies VALUES('Database Wars', 1967, 'John Joe', 123);
INSERT INTO Movies VALUES('The Databaser', 1992, 'John Bob', 190);
INSERT INTO Movies VALUES('Database Wars', 1998, 'John Jim', 176);


Done.
0 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.
Out[2]:
[]

In [3]:
%sql DROP TABLE IF EXISTS A; DROP TABLE IF EXISTS B;
%sql CREATE TABLE A (x int, y int); CREATE TABLE B (x int, y int);
for i in range(1,6):
    %sql INSERT INTO A VALUES (:i, :i+1)
for i in range(1,11,3):
    %sql INSERT INTO B VALUES (:i, :i+2)


Done.
Done.
1 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.
1 rows affected.

Лабораторная 3-1:


In [4]:
%sql SELECT * FROM movies


Done.
Out[4]:
title year director length
Database Wars 1967 John Joe 123
The Databaser 1992 John Bob 190
Database Wars 1998 John Jim 176

Задание #1

Получить все названия фильмов которые используются более чем в одном фильме

Можно считать, что в 1 год только 1 фильм с одним и тем же названием. Схема для табоицы movies:

  • title STRING
  • year INT
  • director STRING
  • length INT

Пример с ANY


In [5]:
%%sql
SELECT m.title 
FROM Movies m
WHERE m.year <> ANY(SELECT year FROM Movie WHERE title = m.title);


(sqlite3.OperationalError) near "SELECT": syntax error [SQL: 'SELECT m.title \nFROM Movies m\nWHERE m.year <> ANY(SELECT year FROM Movie WHERE title = m.title);']

ANY не работает в SQLite! Можно ли переписать запрос?:


In [ ]:

Задание 2 #2

Рассмотрим 2 отношения:


In [6]:
%sql SELECT * FROM A;


Done.
Out[6]:
x y
1 2
2 3
3 4
4 5
5 6

In [7]:
%sql SELECT * FROM B;


Done.
Out[7]:
x y
1 3
4 6
7 9
10 12

Предполагая отсутствие дублей, можете ли вы написать запрос пересечения только по атрибуту x, не используя INTERSECT или вложенный подзапрос?


In [ ]:

Верните полные кортежи в $A$ и $B$ которые персекаются по $x$ атрибуту:


In [ ]: