Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2012, 10:48   #1
Erstasya
Новичок
Джуниор
 
Регистрация: 20.12.2010
Сообщений: 2
По умолчанию Запросы

Помогите пожалуйста написать запросы к БД. Но есть условие они должны быть без подзапросов.
Структура

Student
-id_stud
-id_grup
-surname
-name
-email
-stipend
-birthday

Ozenka
-id_stud
-id_disp
-ocenka

Disziplina
-id_disp
-name

Grupp
-id_grup
-id_stud
-name

  1. Вывести на экран список студентов с годовым доходом в алфавитном порядке.
  2. Вычислить сумму стипендии для каждой группы студентов.
  3. Вычислить среднюю стипендию для каждой группы студентов.
  4. Найти минимальную стипендию среди всех стипендий.
  5. Найти разницу между средней стипендией и самой минимальной.
  6. Сколько студентов в группе XXX?
  7. Вывести группы, в которых более 15 человек.


Из двух таблиц:
  1. Вывести студентов, у которых средний балл = 4,5.
  2. Вывести студентов с суммарными баллами по всем предметам.
  3. Вывести средний балл успеваемости каждой группы
Erstasya вне форума Ответить с цитированием
Старый 27.06.2012, 12:39   #2
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 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.
Linel вне форума Ответить с цитированием
Старый 27.06.2012, 12:43   #3
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

P.S. Сам сейчас изучаю MySQL, поэтому твои задачки оказались очень кстати, чтобы голову размять

Все работает, сам проверял.

Единственное, что хотел спросить. Скажи, ты базу данных сам проектировал? Потому что если такая база была уже дана (взята за основу) и спроектированна она правильно, то это сломает мне мозг, т.к. исходя из уже мною изученного, такая структура мягко говоря не идеальна.
No name. Just Linel.
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
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Аватар, спасибо, что отписАлись.

Цитата:
2. В таблице Grupp поле id_stud явно лишнее
Это я и имел в виду. Т.к. пренадлежность студента к группе описана уже в таблице `Student`

Цитата:
Если больше, то в таблице Ozenka запросто могут появиться полностью совпадающие записи
Этого ведь можно избежать путем добавления составного первичного ключа на поля id_stud и id_disp?
No name. Just Linel.
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
Erstasya
Новичок
Джуниор
 
Регистрация: 20.12.2010
Сообщений: 2
По умолчанию

я извиняюсь, а нельзя ли прислать скриншоты этих запросов....Буду очень благодарна
Erstasya вне форума Ответить с цитированием
Старый 28.06.2012, 14:27   #8
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

человеку, походу, отчет на лабу надо сделать, а вы обсуждаете структуру бд
Pamparam вне форума Ответить с цитированием
Старый 28.06.2012, 16:11   #9
Linel
Форумчанин
 
Аватар для Linel
 
Регистрация: 21.02.2009
Сообщений: 372
По умолчанию

Цитата:
а вы обсуждаете структуру бд
Как-то да, эгоистично получаеццо.
No name. Just Linel.
Linel вне форума Ответить с цитированием
Старый 11.12.2019, 18:40   #10
AvatarDaiBogLife
Новичок
Джуниор
 
Регистрация: 11.12.2019
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Там похоже и так первичный ключ составной из id_stud и id_disp. Эти же поля и внешние ключи. Т.е. оценка только одна. Если держать несколько, то сделать отдельный первичный ключ, id_stud и id_disp только внешние ключи, возможно добавить дату оценки
Цитата:
Сообщение от Аватар Посмотреть сообщение
Там похоже и так первичный ключ составной из id_stud и id_disp. Эти же поля и внешние ключи. Т.е. оценка только одна. Если держать несколько, то сделать отдельный первичный ключ, id_stud и id_disp только внешние ключи, возможно добавить дату оценки
Уважаемый, Аватар, мы с другом ебались , откровенно говоря, с SQL(В ACCESS) по большей мере 2 часа. Однако, как только мы увидели ваше сообщение, наш словно током пиздануло, извините за наш французский. Вы словно мессия среди адептов SQL, приехали на осле в наш спокойный Томск подобно Иисусу. Вы избавили нас от агонии Валерия Дмитриевича (Не берите в голову кто это) и мы наконец-то пойдем на заслуженный отдых в замечательном тактическом шутере. И вероятно сдадим лабу Яну Ябловски. Ещё раз спасибо вам от души. Искренне ваши поклонники Александр А. AND Евгений 1/2П.
AvatarDaiBogLife вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запросы в БД 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