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

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

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

Пример 1.

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

Таблица 1
IDФамилия_И.О.Пол
866Карпец Д.К.Ж
867Коротич Б.Ф.М
879Лемешко В.А.Ж
885Месхи К.Г.М
900Сердюк Л.А.Ж
904Петрик А.И.М
911Коротич А.Б.Ж
932Петрик П.А.Ж
938Коротич И.Б.М
949Фоменко Г.Р.Ж
970Сердюк А.П.М
995Кортич Т.И.Ж
1017Кортич П.И.М
1026Мухина Р.Г.Ж
1041Гейко М.А.Ж
1056Сердюк П.А.М
Таблица 2
ID_РодителяID_Ребенка
866911
866938
867911
867938
911879
9111041
904900
938995
9381017
949995
9491017
970879
9701041
904932
1026900
1026932

Решение.

Найдем в первой таблице Карпец Д. К., её 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_Ребенка
22301243
22301251
22303319
23006258
23001257
32526258
32521257
52152230
52152300
62142230
62142300
92521243
92521251
92523319
......

Решение.

Найдем идентификационный номер (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_Ребенка
866911
866938
867911
867938
911879
9111041
1026900
938995
9381017
949995
9491017
970879
9701041
1026932
904900
904932
......

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

ID_РодителяID_Ребенка
866911
866938
911879
9111041
1026900
949995
9491017
1026932

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

ID_РодителяID_РебенкаВозраст матери на момент рождения ребенка
86691129
86693832
91187927
911104139
102690029
94999536
949101737
102693233

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

Ответ: 3

Пример 4.

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

Фамилия  Пол Родной язык Охрана труда Материаловедение Химия Высшая математика 
Андрюшинм10072556670
Борискинм7534866489
Варенковаж8577737974
Дегтеряевм7785818180
Евлашинаж8875795675
Закиринаж7280667070

Решение.

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

  1. при соединении условий союзом «И» все условия должны одновременно выполняться;
  2. при соединении союзом «ИЛИ» хотя бы одно условие должно выполняться.
    Проверим каждую строку этой таблицы, выполняются ли оба условия: «Пол = 'м'» и «Материаловедение < Охрана труда». Отметим цветом все строки, которые нам подходят.
    Фамилия  Пол Родной язык Охрана труда Материаловедение Химия Высшая математика 
    Андрюшинм10072556670
    Борискинм7534866489
    Варенковаж8577737974
    Дегтеряевм7785818180
    Евлашинаж8875795675
    Закиринаж7280667070

    Оказалось, что подходят две записи.
    Ответ: 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Айвазян Г.С.вторник210Б
    4Михальчук М.С.вторник2
    5Пай С.В.вторник310Б
    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