Простые вопросы по SQL
От: Zender  
Дата: 21.07.12 14:45
Оценка:
Изучаю SQL. Возник вопрос, на задание

Скажем есть две таблицы
Product(maker, model)
Printer(code, model, price)

Таблица Product представляет производителя (maker), номер модели (model).
В таблице Printer для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product) и price — цена.
Задание: Найдите производителей принтеров. Вывести: maker

Ну т.е. в таблице Product есть именя фирм Samsung, hp, canon. А в таблице Printer даны ключи для таблицы Product. Нужно вывести название производителей принтеров, которые есть в таблице Printer

Почему нельзя писать так

Select DISTINCT maker
From Product, Printer
Where Printer.model=Product.model
Re: Простые вопросы по SQL
От: BlackEric http://black-eric.lj.ru
Дата: 21.07.12 14:51
Оценка:
Здравствуйте, Zender, Вы писали:

Z>Изучаю SQL. Возник вопрос, на задание


Z>Скажем есть две таблицы

Z>Product(maker, model)
Z>Printer(code, model, price)

Z>Таблица Product представляет производителя (maker), номер модели (model).

Z>В таблице Printer для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product) и price — цена.
Z>Задание: Найдите производителей принтеров. Вывести: maker

Z>Ну т.е. в таблице Product есть именя фирм Samsung, hp, canon. А в таблице Printer даны ключи для таблицы Product. Нужно вывести название производителей принтеров, которые есть в таблице Printer


Z>Почему нельзя писать так


Так можно:
Select DISTINCT v.maker
From Product v, Printer p
Where p.model=v.model
https://github.com/BlackEric001
Re: Простые вопросы по SQL
От: DeadMachine Россия  
Дата: 21.07.12 16:32
Оценка: -1
Лучше отказаться от предложения
Where

и не связывать в нем таблицы, а использовать ключевое слово
join

примерно так:
Select DISTINCT Product.maker
From Printer full join Product on Printer.model = Product.model
Re[2]: Простые вопросы по SQL
От: LuciferArh Россия  
Дата: 21.07.12 18:04
Оценка:
Здравствуйте, DeadMachine, Вы писали:

DM>Лучше отказаться от предложения

DM>
DM>Where
DM>


Чем лучше? Обоснуй!

DM> и не связывать в нем таблицы, а использовать ключевое слово

DM>
DM>join
DM>

DM>примерно так:
DM>
DM>Select DISTINCT Product.maker
DM>From Printer full join Product on Printer.model = Product.model
DM>


Угу... Особливо — FULL. Да еще и DISTINCT. Я бы посмотрел на производительность этого запроса на реальных данных...
... << RSDN@Home 1.2.0 alpha 5 rev. 52>>
Re[3]: Простые вопросы по SQL
От: Zender  
Дата: 21.07.12 18:46
Оценка:
LA>Угу... Особливо — FULL. Да еще и DISTINCT. Я бы посмотрел на производительность этого запроса на реальных данных...
Критика советов-ответов конечно важна, но было бы ещё лучше если бы ты написал как нужно в данном случае.
Re: Простые вопросы по SQL
От: Zender  
Дата: 21.07.12 18:51
Оценка:
Новая задачка, не получается.

Скажем есть две таблицы
Product(maker, model)
PC(code, model, speed)

Таблица Product представляет производителя (maker), номер модели (model).
В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product) и speed — частота процессора.
Задание: Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: maker
Ну я решаю так

SELECT DISTINCT maker
FROM Product INNER JOIN
PC ON speed>450 AND PC.model = Product.model


Ответ правильный выходит, выводит то что нужно, но тестовая программа заявляет, что где то косяк и решение другое.
ps: Если кто не вспомнил задачки с сайта www.sql-ex.ru, но там форум не понятный.
Re[2]: Простые вопросы по SQL
От: LuciferArh Россия  
Дата: 21.07.12 19:23
Оценка:
Здравствуйте, Zender, Вы писали:

Z>
Z>SELECT DISTINCT maker
Z>FROM Product INNER JOIN
Z>PC ON speed>450 AND PC.model = Product.model
Z>


А если вот так:
SELECT DISTINCT maker
FROM Product 
INNER JOIN PC ON PC.model = Product.model
WHERE speed > 450
... << RSDN@Home 1.2.0 alpha 5 rev. 52>>
Re[3]: Простые вопросы по SQL
От: Zender  
Дата: 21.07.12 19:27
Оценка:
Здравствуйте, LuciferArh, Вы писали:

LA>Здравствуйте, Zender, Вы писали:


Z>>
Z>>SELECT DISTINCT maker
Z>>FROM Product INNER JOIN
Z>>PC ON speed>450 AND PC.model = Product.model
Z>>


LA>А если вот так:

LA>
LA>SELECT DISTINCT maker
LA>FROM Product 
LA>INNER JOIN PC ON PC.model = Product.model
LA>WHERE speed > 450  
LA>


Неа, такая же ошибка.
Я думаю загвоздка где то в логике решения.
Re[4]: Простые вопросы по SQL
От: 1stein Украина  
Дата: 21.07.12 19:32
Оценка: +1
Внимательно читаем задачу:

Задание: Найдите производителей ПК с процессором не менее 450 Мгц.
Will code C# for food
Re[5]: Простые вопросы по SQL
От: Zender  
Дата: 21.07.12 19:59
Оценка:
Здравствуйте, 1stein, Вы писали:

1>Внимательно читаем задачу:


1>Задание: Найдите производителей ПК с процессором не менее 450 Мгц.

ха-ха... что то уже видимо засиделся, спасибо, заработало
Re: Простые вопросы по SQL
От: Zender  
Дата: 21.07.12 20:39
Оценка:
Вот ещё одна задачка, не понимаю как сделать.
Всё те же таблицы, но тут вроде нужна только одна
Product(maker, model, type)
maker — называние производителей
model — модели
type — тип продукта


Задание: Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа.
Вывести: maker, type


Начал вот что то писать, но что то не то... хотел прокоментировать и понял что не туда лезу вроде как....

SELECT maker, type
FROM Product
GROUP BY maker, type
HAVING COUNT(maker)>1
Re[2]: Простые вопросы по SQL
От: wildwind Россия  
Дата: 22.07.12 00:35
Оценка:
Z>Задание: Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа.
Z>Вывести: maker, type


Z>Начал вот что то писать, но что то не то... хотел прокоментировать и понял что не туда лезу вроде как....


Не то, но направление верное. Группируем по производителю, раз их нужно найти. Оба условия нужно правильно выразить и поместить в having.
Re: Простые вопросы по SQL
От: _ABC_  
Дата: 22.07.12 04:52
Оценка:
Здравствуйте, Zender, Вы писали:

Z>Изучаю SQL. Возник вопрос, на задание


Правилами sql-ex.ru запрещено обсуждать решение задач на внешних ресурсах.
Re[2]: Простые вопросы по SQL
От: msi  
Дата: 22.07.12 05:50
Оценка:
Здравствуйте, Zender, Вы писали:

Z>ps: Если кто не вспомнил задачки с сайта www.sql-ex.ru, но там форум не понятный.


Форум там вполне понятный: http://sql-ex.ru/faq.php#f10

Z>Задание: Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: maker

Z>Ну я решаю так


Z>SELECT DISTINCT maker

Z>FROM Product INNER JOIN
Z>PC ON speed>450 AND PC.model = Product.model


Z>Ответ правильный выходит, выводит то что нужно, но тестовая программа заявляет, что где то косяк и решение другое.


Стоило, конечно, с такими вопросами нарушать правила сайта: http://sql-ex.ru/faq.php#f7
Re[3]: Простые вопросы по SQL
От: AmKad  
Дата: 23.07.12 04:34
Оценка:
Exists
Re[4]: Простые вопросы по SQL
От: DeadMachine Россия  
Дата: 30.07.12 07:38
Оценка:
Здравствуйте, Zender, Вы писали:

LA>>Угу... Особливо — FULL. Да еще и DISTINCT. Я бы посмотрел на производительность этого запроса на реальных данных...

Z>Критика советов-ответов конечно важна, но было бы ещё лучше если бы ты написал как нужно в данном случае.

Да, косяк, с моей стороны

INNER JOIN
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.