Задавайте вопросы, мы ответим
Вы не зашли.
Есть 3 таблицы: KN – книги, KL – клиенты, VD – выдача книг
как-то так
CREATE TABLE KN ( KKN integer(5) NOT NULL, N varchar(100) NOT NULL, A varchar(100) NOT NULL PRIMARY KEY(KKN)) CREATE TABLE KL ( KK integer(5) NOT NULL, F varchar(100) NOT NULL PRIMARY KEY(KK)) CREATE TABLE VD ( K integer(5) NOT NULL, KKN integer(5) NOT NULL, KK integer(5) NOT NULL, DT DATETIME, SR integer(3) NULL PRIMARY KEY(K))
1. Список клиентов с полем KOL, содержащим количество выдач книг данному клиенту. Если клиенту книги не выдавались, значение этого поля должно быть не определено (использовать внешнее соединение)
я сделал так, но не уверен:
SELECT *, count(vd.k) as kol FROM kl FULL OUTER JOIN vd ON kl.kk = vd.kk
2. Список книг с указанием, сколько раз она выдавалась (поле KOL) и среднего срока выдачи (поле SR). Если книга не выдавалась, она должна присутствовать в списке, KOL=0, SR=0;
здесь, возможно, union надо использовать?
3. Список клиентов, бравших одну и ту же книгу более 1 раза. В списке отобразить название книги и сколько раз она бралась.
4. Список книг, которые брались более 10 раз на срок не менее 30 дней.
5. Удалить из БД информацию о клиентах, которые ни разу не брали книги
Неактивен
JEEN написал:
1. Список клиентов с полем KOL, содержащим количество выдач книг данному клиенту. Если клиенту книги не выдавались, значение этого поля должно быть не определено (использовать внешнее соединение)
я сделал так, но не уверен:
Код:
SELECT *, count(vd.k) as kol FROM kl FULL OUTER JOIN vd ON kl.kk = vd.kk
Практика - критерий истины.
Думаю вам стоит заполнить таблицы десятком тестовых записей и проверять работу своего запроса. Как только получиться правильно написать первый - остальные будет легче.
И если вы используете MySQL, то ориентируйтесь на её синтаксис http://dev.mysql.com/doc/refman/5.5/en/join.html
Неактивен
я бы не писал сюда, если бы у меня было куча времени для практики. Это те запросы, которые остались, их естественно было куда больше, но похоже слоган сайта "Задавайте вопросы, мы ответим" ошибочный?
Синтаксис не обязательно MySQL, просто SQL. А этот запрос был полностью скопирован с какого-то сайта по sql, я не сомневаюсь в его правильном написании,я сомневаюсь в том, что он удовлетворяет условие задания.
Неактивен
JEEN написал:
я бы не писал сюда, если бы у меня было куча времени для практики. Это те запросы, которые остались, их естественно было куда больше, но похоже слоган сайта "Задавайте вопросы, мы ответим" ошибочный?
Слоган означает, что поможем разобраться, а не сделаем за вас лабу.
JEEN написал:
Синтаксис не обязательно MySQL, просто SQL. А этот запрос был полностью скопирован с какого-то сайта по sql, я не сомневаюсь в его правильном написании,я сомневаюсь в том, что он удовлетворяет условие задания.
А как вы вообще проверяете правильность запросов, если у вас нет тестовых данных?
Давайте так, вот вам ответ на первый вопрос, а дальше задавайте конкретные вопросы.
Неактивен
я и не просил сделать все за меня. Если есть желание - я не возражаю. Но мне нужна "помощь", любая. По первому я спросил проверить правильность, спасибо за ответ, кстати. А по второму и остальным я просто не знаю какие функции использовать, в какую сторону копать.
возьмем хотя бы это:
5. Удалить из БД информацию о клиентах, которые ни разу не брали книги
в одном источнике написано что JOIN в DELETE нельзя использовать, в другом написан пример по его использованию. Без JOIN'а я тут без понятия как делать. Подзапросом?
2. Список книг с указанием, сколько раз она выдавалась (поле KOL) и среднего срока выдачи (поле SR). Если книга не выдавалась, она должна присутствовать в списке, KOL=0, SR=0;
это задание сильно похоже на первое, но меня сильно смущает KOL=0, в предыдущем было NULL. Здесь разные функции разный результат дают или надо какую-то автозамену использовать?
Сейчас занимаюсь заполнением базы данных
Неактивен
JEEN написал:
я и не просил сделать все за меня. Если есть желание - я не возражаю. Но мне нужна "помощь", любая. По первому я спросил проверить правильность, спасибо за ответ, кстати. А по второму и остальным я просто не знаю какие функции использовать, в какую сторону копать.
Выбор богатый
http://dev.mysql.com/doc/refman/5.5/en/functions.html
JEEN написал:
возьмем хотя бы это:
5. Удалить из БД информацию о клиентах, которые ни разу не брали книги
в одном источнике написано что JOIN в DELETE нельзя использовать, в другом написан пример по его использованию. Без JOIN'а я тут без понятия как делать. Подзапросом?
http://dev.mysql.com/doc/refman/5.5/en/delete.html
Обратите внимание на примеры.
JEEN написал:
2. Список книг с указанием, сколько раз она выдавалась (поле KOL) и среднего срока выдачи (поле SR). Если книга не выдавалась, она должна присутствовать в списке, KOL=0, SR=0;
это задание сильно похоже на первое, но меня сильно смущает KOL=0, в предыдущем было NULL. Здесь разные функции разный результат дают или надо какую-то автозамену использовать?
Неактивен
Выбор богатый
зачем тогда форум, если вы всегда тыкаете на мануал? я и без того могу посмотреть в интернете список фунций sql. Буду благодарен, если укажите на конкретные функции (count, group, join, ...) в каждом примере.
Обратите внимание на примеры.
спасибо
Тут начал проверять остальные запросы, что по проще. Может пригодятся кому-то.
Список книг авторов «Иванов», «Петров» и «Андреев», упорядоченный сначала по убыванию по авторам, затем по возрастанию по названиям;
SELECT * FROM KN WHERE A = 'Иванов' OR A = 'Петров' OR A = 'Сидоров' ORDER BY A DESC, N ASC
Список клиентов, фамилии которых заканчиваются на «ов»;
SELECT F FROM KL WHERE F like '%ов'
Список кодов книг, которые выдавались (без повторов);
SELECT DISTINCT KKN FROM VD
Список клиентов, которым выдавались книги с указанием количества выдач;
SELECT * FROM KL LEFT JOIN VD ON KL.KK = VD.KK WHERE VD.SR IS NOT NULL
последний запрос работает, только без указания количества выдач. Пытаюсь сделать так:
SELECT *, count(VD.K) as count FROM KL LEFT JOIN VD ON KL.KK = VD.KK WHERE VD.SR IS NOT NULL GROUP BY VD.K
но всем книгам присваивается по одной выдаче. Почему так?
Неактивен
JEEN написал:
Выбор богатый
зачем тогда форум, если вы всегда тыкаете на мануал? я и без того могу посмотреть в интернете список фунций sql. Буду благодарен, если укажите на конкретные функции (count, group, join, ...) в каждом примере.
На общий вопрос можно лишь получить общий ответ. В случае вопросов по существу и ссылки давались на конкретные функции.
JEEN написал:
Список клиентов, которым выдавались книги с указанием количества выдач;
SELECT * FROM KL LEFT JOIN VD ON KL.KK = VD.KK WHERE VD.SR IS NOT NULL
последний запрос работает, только без указания количества выдач. Пытаюсь сделать так:SELECT *, count(VD.K) as count FROM KL LEFT JOIN VD ON KL.KK = VD.KK WHERE VD.SR IS NOT NULL GROUP BY VD.K
но всем книгам присваивается по одной выдаче. Почему так?
Потому что делаете группировку по VD.K
И еще посмотрите http://sqlinfo.ru/forum/viewtopic.php?pid=30427#p30427
Неактивен