|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.06.2012, 10:48 | #1 |
Новичок
Джуниор
Регистрация: 20.12.2010
Сообщений: 2
|
Запросы
Помогите пожалуйста написать запросы к БД. Но есть условие они должны быть без подзапросов.
Структура Student -id_stud -id_grup -surname -name -stipend -birthday Ozenka -id_stud -id_disp -ocenka Disziplina -id_disp -name Grupp -id_grup -id_stud -name
Из двух таблиц:
|
27.06.2012, 12:39 | #2 |
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
1.
SELECT `surname`, `name`, `stipend` FROM `Student` ORDER BY `surname`, `name`; 2. Для группы с именем Gruppa1: SELECT SUM(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`name` = "Gruppa1"; Для группы с именем Gruppa2: SELECT SUM(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`name` = "Gruppa2"; Для группы с именем Gruppa3: SELECT SUM(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`name` = "Gruppa3"; или тоже самое, если хотите обратиться к тем же группам не по имени, а по их id: SELECT SUM(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`id_grup` = 1; SELECT SUM(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`id_grup` = 2; SELECT SUM(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`id_grup` = 3; 3. SELECT AVG(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`name` = "Gruppa1"; SELECT AVG(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`name` = "Gruppa2"; SELECT AVG(`stipend`) FROM `Student` INNER JOIN `Grupp` USING(`id_stud`,`id_grup`) WHERE `Grupp`.`name` = "Gruppa3"; 4. SELECT MIN(`stipend`) FROM `Student`; 5. SELECT AVG(`Stipend`)-MIN(`Stipend`) FROM `Student`; 6. SELECT COUNT(*) FROM `Student` INNER JOIN `Grupp` USING(`id_grup`,`id_stud`) WHERE `Grupp`.`name` = "Gruppa1"; SELECT COUNT(*) FROM `Student` INNER JOIN `Grupp` USING(`id_grup`,`id_stud`) WHERE `Grupp`.`name` = "Gruppa2"; SELECT COUNT(*) FROM `Student` INNER JOIN `Grupp` USING(`id_grup`,`id_stud`) WHERE `Grupp`.`name` = "Gruppa3"; 7. SELECT `Grupp`.`name` FROM `Grupp` INNER JOIN `Student` USING(`id_grup`,`id_stud`) GROUP BY `id_grup` HAVING COUNT(*)>15; Из двух таблиц: 1. SELECT `surname`, `name` FROM `Student` INNER JOIN `Ozenka` USING(`id_stud`) GROUP BY `id_stud` HAVING AVG(`ocenka`) = 4.5; 2. SELECT `surname`, `name`, SUM(`ocenka`) FROM `Student` INNER JOIN `Ozenka` USING(`id_stud`) GROUP BY `id_stud`; 3. SELECT AVG(`ocenka`) FROM `Ozenka` INNER JOIN `Grupp` USING(`id_stud`) WHERE `name` = "Gruppa1"; SELECT AVG(`ocenka`) FROM `Ozenka` INNER JOIN `Grupp` USING(`id_stud`) WHERE `name` = "Gruppa2"; SELECT AVG(`ocenka`) FROM `Ozenka` INNER JOIN `Grupp` USING(`id_stud`) WHERE `name` = "Gruppa3"; Или одним запросом: SELECT AVG(`ocenka`) FROM `Ozenka` INNER JOIN `Grupp` USING(`id_stud`) GROUP BY `id_grup`;
No name. Just Linel.
Последний раз редактировалось Linel; 27.06.2012 в 12:48. |
27.06.2012, 12:43 | #3 |
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
P.S. Сам сейчас изучаю MySQL, поэтому твои задачки оказались очень кстати, чтобы голову размять
Все работает, сам проверял. Единственное, что хотел спросить. Скажи, ты базу данных сам проектировал? Потому что если такая база была уже дана (взята за основу) и спроектированна она правильно, то это сломает мне мозг, т.к. исходя из уже мною изученного, такая структура мягко говоря не идеальна.
No name. Just Linel.
|
27.06.2012, 13:00 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
1. Между Student и Disziplina реализовано отношение многие-к многим посредством таблицы Ozenka. При этом у студента по дисциплине может быть только одна оценка. Если больше, то в таблице Ozenka запросто могут появиться полностью совпадающие записи
2. В таблице Grupp поле id_stud явно лишнее
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
27.06.2012, 13:48 | #5 | ||
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
Аватар, спасибо, что отписАлись.
Цитата:
Цитата:
No name. Just Linel.
|
||
27.06.2012, 13:56 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
Там похоже и так первичный ключ составной из id_stud и id_disp. Эти же поля и внешние ключи. Т.е. оценка только одна. Если держать несколько, то сделать отдельный первичный ключ, id_stud и id_disp только внешние ключи, возможно добавить дату оценки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
28.06.2012, 13:43 | #7 |
Новичок
Джуниор
Регистрация: 20.12.2010
Сообщений: 2
|
я извиняюсь, а нельзя ли прислать скриншоты этих запросов....Буду очень благодарна
|
28.06.2012, 14:27 | #8 |
Форумчанин
Регистрация: 08.11.2009
Сообщений: 225
|
человеку, походу, отчет на лабу надо сделать, а вы обсуждаете структуру бд
|
28.06.2012, 16:11 | #9 | |
Форумчанин
Регистрация: 21.02.2009
Сообщений: 372
|
Цитата:
No name. Just Linel.
|
|
11.12.2019, 18:40 | #10 | |
Новичок
Джуниор
Регистрация: 11.12.2019
Сообщений: 1
|
Цитата:
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запросы в БД | Valecus | Microsoft Office Access | 6 | 11.11.2010 21:55 |
С++. Запросы в БД | morindos | Помощь студентам | 1 | 24.06.2010 11:42 |
Запросы | ара | Помощь студентам | 20 | 13.05.2010 11:54 |
Запросы | Kristina92 | Microsoft Office Access | 2 | 25.03.2010 21:27 |
Запросы | Katushka_88_88 | Microsoft Office Access | 3 | 25.01.2010 20:04 |