26 ноября 2009

Практика 26 ноября

Разминка

У вас есть таблицы A(id) и B(a_id, b). Какие из этих запросов найдут те A.id, которые НЕ упоминаются в B.a_id ?

  1. SELECT id FROM A WHERE id NOT IN (SELECT a_id FROM B)
  2. SELECT id FROM A EXCEPT SELECT a_id AS id FROM B
  3. SELECT id FROM A LEFT OUTER JOIN B ON (A.id = B.a_id)
    WHERE B.a_id IS NULL

Слайды (полноэкранные)

19 ноября 2009

Практика 19 ноября: ничего нового, доделка старого

Тем, кто уже успешно справился с домашнем задании с представлениями и у кого ко мне нет никаких вопросов, можно практику спокойно пропускать. Приходите на следующую, будут хранимые процедуры.

12 ноября 2009

Джоэл снова о программировании

Многие любят читать блог Джоэла Спольски "Joel on Software" где публикуются интересные, весёлые, не слишком заумные и в каком-то смысле полезные заметки о разработке ПО. Но английский язык там непростой, а заметки длинные, и осилить их не очень просто. Недавно вышла книжка "Джоэл снова о программировании", в которой избранные заметки очень хорошо переведены на русский, с сохранением всех приколов и стиля автора. Рекомендую для ненапряжного чтения в маршрутке :)

Практика 12 ноября

Разминка

Вопрос 1. Что получится в результате выполнения запроса?

Table1
a   b   c
---------
1   1   1
2   3   4
1   1   7
2   3   8


SELECT * FROM Table1 GROUP BY a



  1. Будет напечатана вся таблица 
  2. Для каждого значения "a" посчитают сумму в столбцах "b" и "c"
  3. Запрос не выполнится потому что не используются агрегатные функции
  4. Запрос не выполнится потому что в SELECT используются недопустимые в данном случае атрибуты
Вопрос 2. А с этим запросом и такой же таблицей что будет?

SELECT a, SUM(b) AS foo FROM Table1 GROUP BY a
  1. a  foo
    1  2
    2  6
  2. a  foo
    1  2
    2  2



Слайды (полнозкранные)



05 ноября 2009

Практика 29 октября

Разминка

Вопрос 1. Вы делаете связь многие-ко-многим между товарами и поставщиками у которой есть собственный атрибут, например, цена данного товара у данного поставщика. Вы хотите чтоб цена была уникальна для пары (товар, поставщик). Чего не хватает в этом операторе?

CREATE TABLE Goods_Supplier(
  goods_id INT FOREIGN KEY REFERECES Goods,
  supplier_id INT FOREIGN KEY REFERENCES Supplier,
  price NUMERIC (10, 2) CHECK (price >= 0)
)

  1. Да вроде всё на месте
  2. Ограничения UNIQUE для цены
  3. Ограничения UNIQUE для каждого из внешних ключей
  4. Ограничения UNIQUE для пары внешних ключей
  5. Ограничения UNIQUE для всей тройки атрибутов
Вопрос 2. Сколько строк будет в результате SELECT'а?

CREATE TABLE Автомобиль(
    рег_номер CHAR(6) PRIMARY KEY, марка VARCHAR(20))

INSERT INTO Автомобиль (рег_номер, марка)
  VALUES ('м000ск', 'Субару')

INSERT INTO Автомобиль (рег_номер, марка)
  VALUES ('м001ск', 'Cубару')
INSERT INTO Автомобиль (рег_номер, марка)
  VALUES ('м002ск', 'Subaru')

SELECT * FROM Автомобиль  WHERE марка = 'Субару'


Слайды

Практика 5 ноября

Разминка

Вопрос 1. Сколько будет в результате выполнения запроса если в таблице N строк?

CREATE TABLE Foobar (id INT PRIMARY KEY, value INT)

SELECT * FROM Foobar f1 JOIN Foobar f2 ON (f1.id = f2.id)
  1. 0 строк
  2. N строк
  3. N*N строк
  4. Заранее неизвестно
  5. Запрос не выполнится
Вопрос 2. Что будет результатом запроса?

Table1
------------------------
group_id value
1        30
1        25
2        10
1        40
2        50

SELECT group_id, MAX(value) AS value FROM Table1
  1. Да ничего, не выполнится запрос
  2. group_id  value
    1         40
    2         50 
  3. group_id value
    1         50
    1         50
    2         50
    1         50
    2         50
Занятие
Fullscreen view