Поиск и сортировка информации в базах данных

Тема: Поиск и сортировка информации в базах данных.

В заданиях данной темы требуется определить какую-либо информацию на основе табличных данных, приведенных в условии. Рассмотрим несколько типичных заданий и их решения.

Пример 1.

Во фрагменте базы данных представлены сведения о родственных отношениях. На основании приведённых данных определите, сколько всего внуков и внучек есть у Карпец Д. К.

Таблица 1
ID Фамилия_И.О. Пол
866 Карпец Д.К. Ж
867 Коротич Б.Ф. М
879 Лемешко В.А. Ж
885 Месхи К.Г. М
900 Сердюк Л.А. Ж
904 Петрик А.И. М
911 Коротич А.Б. Ж
932 Петрик П.А. Ж
938 Коротич И.Б. М
949 Фоменко Г.Р. Ж
970 Сердюк А.П. М
995 Кортич Т.И. Ж
1017 Кортич П.И. М
1026 Мухина Р.Г. Ж
1041 Гейко М.А. Ж
1056 Сердюк П.А. М
Таблица 2
ID_Родителя ID_Ребенка
866 911
866 938
867 911
867 938
911 879
911 1041
904 900
938 995
938 1017
949 995
949 1017
970 879
970 1041
904 932
1026 900
1026 932

Решение.

Найдем в первой таблице Карпец Д. К., её ID равен 866. Сначала найдем всех её детей, то есть найдем из таблицы 2 все записи, где ID_Родителя равен 866. Это записи с ID 911 и 938. Найдем их детей с помощью таблицы 2. Это записи с ID 879, 1041, 995, 1017. Чтобы не запутаться, удобно записывать эти данные в виде дерева такого вида:

Получили, что у Карпец Д. К. четверо внуков и внучек.

Ответ: 4

Пример 2.

Во фрагменте базы данных представлены сведения о родственных отношениях. Укажите в ответе идентификационный номер (ID) дяди Ан В.А. Примечание. Дядя — это брат матери или отца.

Таблица 1
ID Фамилия_И.О. Пол
1243 Бесчастных П.А. М
1248 Попович А.А. М
1250 Ан Н.А. Ж
1251 Ан В.А. Ж
1257 Фоменко П.И. М
2230 Фоменко Е.А. Ж
2300 Фоменко И.А. М
3252 Фоменко Т.Х. Ж
3293 Поркуян А.А Ж
3319 Сабо С.А. Ж
5215 Фоменко А.К. М
6214 Попович Л.П. Ж
6258 Фоменко Т.И. Ж
9252 Бесчастных А.П. М
Таблица 2
ID_Родителя ID_Ребенка
2230 1243
2230 1251
2230 3319
2300 6258
2300 1257
3252 6258
3252 1257
5215 2230
5215 2300
6214 2230
6214 2300
9252 1243
9252 1251
9252 3319

Решение.

Найдем идентификационный номер (ID) самого Ан В.А. (не торопитесь, обратите внимание, что в таблице может быть несколько человек с такой фамилией, то человек с такой фамилией и инициалами точно будет ровно один). Его ID равен 1251. Чтобы найти его дядю, придется сначала найти:

  1. его родителей;
  2. родителей его родителей (бабушек и дедушек);
  3. детей этих дедушек и бабушек: среди них ровно один искомым дядей Ан В.А.

Для удобства будем записывать найденные ID в виде дерева.

Найдем родителей Ан В.А. из второй таблицы (те строки, где ID_Ребенка равен 1251):

Теперь найдем родителей его родителей (то есть в таблице 2 найдем те записи, где ID_Ребенка равны 2230 и 9252):

Для человека с ID 9252 записей о родителях в таблице нет.

Теперь найдем детей для людей с ID 5215 или 6214 – именно эти люди будут дядями и тетями для исходного Ан В.А. (ID которого 1251 – в самом низу нашего дерева)

Нам повезло, и такой человек нашелся только один – с ID 2300 (но в других задачах, возможно, их будет несколько, и тогда нужно не забыть найти среди них человека нужного пола). Под ID 2300 в таблице 1 человек мужского пола, значит, это и есть искомый дядя. В данной задаче в качестве ответа нужно написать только ID.

Ответ: 2300

Пример 3.

Даны фрагменты двух таблиц из базы данных. Каждая строка таблицы 2 содержит информацию о ребёнке и об одном из его родителей. Информация представлена значением поля ID в соответствующей строке таблицы 1. На основании приведённых данных определите, у скольких детей в момент рождения матерям было меньше 30 полных лет. При вычислении ответа учитывайте только информацию из приведённых фрагментов таблиц.

Таблица 1
ID Фамилия_И. О. Пол Год рождения
866 Кравец Д.К. Ж 1942
867 Тошич Б.Ф. М 1938
879 Гонтарь В.А. Ж 1998
885 Крон К.Г. М 1990
900 Кислюк Л.А. Ж 2012
904 Петраш А.И. М 1981
911 Тошич А.Б. Ж 1971
932 Петраш П.А. Ж 2016
938 Тошич И.Б. М 1974
949 Седых Г.Р. Ж 1966
970 Кислюк А.П. М 1968
995 Тошич Т.И. Ж 2002
1017 Тошич П.И. М 2003
1026 Мухина Р.Г. Ж 1983
1041 Сайко М.А. Ж 2010
1056 Кислюк П.А. М 1989
Таблица 2
ID_Родителя ID_Ребенка
866 911
866 938
867 911
867 938
911 879
911 1041
1026 900
938 995
938 1017
949 995
949 1017
970 879
970 1041
1026 932
904 900
904 932

Решение. Для того, чтобы найти ответ, нужно найти, сколько лет было каждой из матерей на момент рождения каждого её ребёнка. ID родителя и ребенка можно найти по таблице 2, а их годы рождения – по таблице 1. Чтобы было удобнее, оставим в таблице 2 только матерей и их детей.

ID_Родителя ID_Ребенка
866 911
866 938
911 879
911 1041
1026 900
949 995
949 1017
1026 932

Теперь нужно для каждого ребенка посчитать, сколько лет было матери в момент рождения. Для этого вычтем из года рождения ребенка год рождения матери (их мы находим из первой таблице по ID). Можно записать эти данные в дополнительный столбец рядом.

ID_Родителя ID_Ребенка Возраст матери на момент рождения ребенка
866 911 29
866 938 32
911 879 27
911 1041 39
1026 900 29
949 995 36
949 1017 37
1026 932 33

Из полученной таблицы находим, у скольких детей в момент рождения матерям было меньше 30 лет. Таких детей трое.

Ответ: 3

Пример 4.

Сколько записей удовлетворяют условию «Пол = ‘м’ И Материаловедение < Охрана труда»?

Фамилия   Пол  Родной язык  Охрана труда  Материаловедение  Химия  Высшая математика 
Андрюшин м 100 72 55 66 70
Борискин м 75 34 86 64 89
Варенкова ж 85 77 73 79 74
Дегтеряев м 77 85 81 81 80
Евлашина ж 88 75 79 56 75
Закирина ж 72 80 66 70 70

Решение.

Обратим внимание, что условие состоит из двух простых условий соединённых союзом «И». Следует знать, что:

  1. при соединении условий союзом «И» все условия должны одновременно выполняться;
  2. при соединении союзом «ИЛИ» хотя бы одно условие должно выполняться.
    Проверим каждую строку этой таблицы, выполняются ли оба условия: «Пол = ‘м’» и «Материаловедение < Охрана труда». Отметим цветом все строки, которые нам подходят.
    Фамилия   Пол  Родной язык  Охрана труда  Материаловедение  Химия  Высшая математика 
    Андрюшин м 100 72 55 66 70
    Борискин м 75 34 86 64 89
    Варенкова ж 85 77 73 79 74
    Дегтеряев м 77 85 81 81 80
    Евлашина ж 88 75 79 56 75
    Закирина ж 72 80 66 70 70

    Оказалось, что подходят две записи.
    Ответ: 2.
    Пример 5.
    В таблице приведен фрагмент базы данных с результатами тестирования:
    Фамилия Пол Английский Французский Немецкий
    Кукушкина
    Морозов
    Прохорова
    Самоварова
    Тубин
    Шапочкин
    ж
    м
    ж
    ж
    м
    м
    7
    9
    10
    9
    3
    10
    10
    6
    3
    9
    3
    10
    9
    10
    3
    8
    3
    8
    Сколько записей в этой таблице удовлетворяют условию
    Пол <> ‘ж’ ИЛИ Английский <= Французский ИЛИ Французский <> Немецкий
    1. 5 2) 63) 34) 4
      Решение.
      Обратим внимание, что в сложном условии может участвовать более 2 простых условий. В этом случае нужно помнить, что:
      1) сначала выполняются отношения, затем – «И», потом – «ИЛИ»;
      2) в качестве отношений могут быть использованы знаки отношений <, <= (меньше или равно), >, >= (больше или равно), = (равно), <> (не равно);
  3. для изменения порядка выполнения операций могут быть использованы скобки.
    Также обратим внимания, что в качестве ответа нужно записать не количество подходящих записей, а номер верного варианта ответа, так что не забывайте очень внимательно читать условие.
    Отметим в таблице все строки, в которых хотя бы одно из перечисленных трех условий истинно (так как условия соединены союзом «ИЛИ»):
    Фамилия Пол Английский Французский Немецкий
    Кукушкина
    Морозов
    Прохорова
    Самоварова
    Тубин
    Шапочкин
    ж
    м
    ж
    ж
    м
    м
    7
    9
    10
    9
    3
    10
    10
    6
    3
    9
    3
    10
    9
    10
    3
    8
    3
    8

    Получилось, что 5 записей удовлетворяют данному сложному условию. В ответ запишем номер правильного варианта.
    Ответ: 1
    Пример 6.
    В таблице представлены несколько записей из базы данных «Расписание»:
    Учитель День_недели Номер_урока Класс
    1 Айвазян Г.С. понедельник 3
    2 Айвазян Г.С. понедельник 4
    3 Айвазян Г.С. вторник 2 10Б
    4 Михальчук М.С. вторник 2
    5 Пай С.В. вторник 3 10Б
    6 Пай С.В. среда 5
    Укажите номера записей, которые удовлетворяют условию
    Номер_урока > 2 И Класс > ‘8А’
    1. 1, 6 2) 2, 63) 2, 5, 6 4) 1, 2, 5, 6

Решение.

Так же как и в прошлых заданиях, если два простых условия соединены союзом «И», то они должны выполняться одновременно. Однако в этом задании одно из условий может стать для вас камнем преткновения. Посмотрим на него внимательно:

Класс > ‘8А’

Значение поля поле Класс имеет тип «символьная строка», поэтому сравнение Класс > ‘8А’ будет выполняться по символам, начиная с первого. Символ считается «больше» другого, если его код больше. Так как в кодовых таблицах цифры располагаются последовательно, то при сравнении, например, строк  ‘8А’ и  ‘10Б’ первая из них окажется больше (так как код символа  ‘8’ больше кода символа ‘1’).

Оставим в таблице только те записи, для которых оба условия выполняются:

Учитель День_недели Номер_урока Класс
2 Айвазян Г.С. понедельник 4
6 Пай С.В. среда 5

Получается, что только 2 записи удовлетворяют условию: записи с номерами 2 и 6. В ответе укажем номер правильного варианта ответа.

Ответ: 2