PDA

Просмотр полной версии : помогите составить slq запросы



2puk
11.06.2009, 12:11
База данных "Колледж" состоит из отношений. Отношение "students"(студенты) состоит из полей: student_id, surname - фамилия, name - имя студента, kurs - курс, sity - город проживания и stipend - стипендия. Отношение "exam_marks" (экзаменнационные оценки) содержит: exam_id, student_id. subj_id, mark - оценка, exam_data - дата экзамена. Отношение "subject"(дисциплины) состоит из subj_id, subj_name - название дисциплины, hour - часы, отводимые на изучение дисциплины, semestr - семестр, в котором изучается данная дисциплина. Отношение "lecturers" (преподаватели) содержит: lecturer_id? surname_lec - фамилия, name_lec - имя, second_name_lec - отчество преподавателя. Отношение subj_lect состоит из полей: lecturer_id, subj_id.создать приложение для ввода, изменения и удаления данных в указанных отношениях, а также обеспечить выполнение следующих запросов: 1. вывести название дисциплин, в которых отсутствуют названия оценок, т.е. студенты не аттестованы2. вывести для каждого студента выпускного курса егго фамилию и средний балл (выводимые данные отсортировать по среднему баллу)3. вывести первого в алфавитном порядке списка студентов, фамилия которого начинается на букву "И"создать приложение в C++builder 6, базы данных в paradox7 standart


приложение создано остались только запросы

ustas
24.07.2009, 18:44
что такое paradox7 я не знаю, адаптируй вот это, если он не поддерживает человеческий SQL :)

1. вывести название дисциплин, в которых отсутствуют названия оценок, т.е. студенты не аттестованы

не понятно, что значит "отсутствуют названия оценок"? нет записей в exam_marks или если записи есть, но оценки не проставлены?
впринципе этот запрос отвечает обоим ситуациям:

select s.subj_name
from subject s
where not exists ( select 1
from exam_marks em
where em.subj_id = s.subj_id
and em.mark is not null
)

2. вывести для каждого студента выпускного курса его фамилию и средний балл (выводимые данные отсортировать по среднему баллу)

select s.surname,
avg(em.mark)
from students s,
exam_marks em
where s.student_id = em.student_id
and s.kurs = ( select max(s2.kurs)
from students s2
)
group by s.surname
order by avg(em.mark)

3. вывести первого в алфавитном порядке списка студентов, фамилия которого начинается на букву "И"

select *
from students s
where s.surname like 'И%'
and rownum < 2
order by s.surname asc