Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с задачками по SQL

Алексей Ученик (183), на голосовании 5 лет назад
SQL
Исходные данные:
Есть 3 таблицы:
1. Наборы - N_ID bigint PK, название not null
2. Ложки - L_ID bigint PK, название varchar(50) not null, бренд varchar(100), N_ID bigint FK
3. Вилки - V_ID bigint PK, название varchar(50) not null, бренд varchar(100), N_ID bigint FK
Если бренд не известен - поле "бренд" имеет значение NULL. Для всех китайских производителей поле имеет значение "Китай"
FK ссылается на PK с тем же именем
2 одинаковые ложки/вилки заносятся в соответствующую таблицу как 2 строчки.

ЗАДАНИЕ: Написать выборки:
SQL1: Выбрать все различные названия не брендовых ложек (с неизвестным или китайским производителем) - результат: перечень названий
SQL2: Выбрать бренды ложек, по которым есть не менее 5 ложек - результат: перечень брендов
SQL3: Выбрать все ложки и с названиями наборов в которые они входят (неопределенный набор - NULL) - результат: название ложки, название набора
SQL4: Выбрать наборы и количество предметов в них. Результат: набор, количество предметов
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (445855) 5 лет назад
SELECT DISTINCT L."название"
FROM "Ложки" L
WHERE L."бренд" IS NULL
OR L."бренд"='Китай'

SELECT DISTINCT L."название", COUNT(*)
FROM "Ложки" L
INNER JOIN "Наборы" N
ON L.N_ID=N.N_ID
GROUP BY L."название"
HAVING COUNT(*)>5

SELECT DISTINCT L."название", N."название"
FROM "Ложки" L
LEFT OUTER JOIN "Наборы" N
ON L.N_ID=N.N_ID

SELECT N."название", COUNT(*)
FROM "Наборы" N
GROUP BY N."название"
Алексей Ученик (183) 5 лет назад
Спасибо огромное!
Алексей Ученик (183) 5 лет назад
В задаче №2 требуется вывести только перечень брендов. Возможно такой ответ будет более корректным?!

SELECT DISTINCT L."бренд"
FROM "Ложки" L
INNER JOIN "Наборы" N
ON L.N_ID=N.N_ID
GROUP BY L."бренд"
HAVING COUNT(*)>=5
Похожие вопросы