Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретические основы реляционных баз данных. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
936 Кб
Скачать

 

 

 

- 28 -

 

 

 

family

| name

| stgroup |

gpa

| sex

--------------

+--------

+

---------

+

------

+-----

Балашов

| Андрей |

342

|

5.00

| м

Катеринченко

| Андрей |

342

|

4.59

| м

Малин

| Сергей |

345

|

4.87

| м

Никулкин

| Сергей |

342

|

4.79

| м

(4 rows)

 

 

 

 

 

 

2.5.3. Создание более сложных предикатов в предложении SELECT

Критерии отбора могут комбинироваться с помощью круглых скобок и логических операций И (AND), ИЛИ (OR) и НЕТ(NOT). Кроме того, можно использовать различные операции сравнения аналогично тому, как это происходит в других языках программирования: =, <>, >, <, <=, >=.

Рассмотрим ряд примеров. Предположим, нас интересуют все студенты со средним баллом не менее 4.5, обучающиеся в группе 342:

SELECT * FROM students

WHERE gpa >= 4.5 AND stgroup='342';

family

| name

| stgroup |

gpa

| sex

--------------

+--------

+

---------

+

------

+-----

Балашов

| Андрей |

342

|

5.00

| м

Катеринченко

| Андрей |

342

|

4.59

| м

Никулкин

| Сергей |

342

|

4.79

| м

(3 rows)

 

 

 

 

 

 

Далее рассмотрим более сложный пример, когда надо выбрать сведения о студентах, которые имеют средний балл не хуже 4.5 и обучаются либо в группе 342, либо в группе 345.

SELECT * FROM students WHERE gpa >= 4.5

AND (stgroup='342' OR stgroup='345');

family

| name

| stgroup |

gpa

| sex

--------------

+--------

+

---------

+

------

+-----

Балашов

| Андрей |

342

|

5.00

| м

Катеринченко

| Андрей |

342

|

4.59

| м

Малин

| Сергей |

345

|

4.87

| м

Никулкин

| Сергей |

342

|

4.79

| м

(4 rows)

 

 

 

 

 

 

Данные при вводе записываются всегда в «хвост» таблицы, и оператор SELECT именно в этом порядке и выводит их в результате

- 29 -

запроса. Этот естественный порядок можно изменить, используя ключевую фразу ORDER BY за которой следует перечисление полей, по которым происходит упорядочивание вывода. Сначала записи упорядочиваются по первому из перечисленных полей, потом по следующему и так далее. Для каждого поля может указываться порядок сортировки по возрастанию значения поля () или по его убыванию. В следующем примере будем сортировать нашу таблицу по фамилиям:

SELECT * FROM students ORDER BY family;

family

| name

|

stgroup |

gpa

| sex

--------------

+--------

+

---------

+

------

+-----

Балашов

| Андрей |

342

|

5.00

| м

Катеринченко

| Андрей |

342

|

4.59

| м

Колычева

| Лия

|

349

|

4.38

| ж

Малин

| Сергей |

345

|

4.87

| м

Никулкин

| Сергей |

342

|

4.79

| м

Фахрудинова

| Тамара |

342

|

4.12

| ж

Чертков

| Максим |

344

|

4.31

| м

(7 rows)

 

 

 

 

 

 

Теперь усложним порядок сортировки — сначала по номеру группы, а затем по фамилии:

SELECT * FROM

students

ORDER BY stgroup, family;

family

| name |

stgroup | gpa

| sex

--------------

+--------

+---------

+----

+-----

Балашов

| Андрей

| 342

| 5.00

| м

Катеринченко

| Андрей

| 342

| 4.59

| м

Никулкин

| Сергей

| 342

| 4.79

| м

Фахрудинова

| Тамара

| 342

| 4.12

| ж

Чертков

| Максим

| 344

| 4.31

| м

Малин

| Сергей

| 345

| 4.87

| м

Колычева

| Лия

| 349

| 4.38

| ж

(7 rows)

 

 

 

 

2.5.4. Формирование вывода запросов

Большинство основанных на SQL баз данных предоставляют специальные средства, позволяющие совершенствовать вывод ваших запросов.

Если надо выполнять простую числовую обработку данных, чтобы затем поместить их в форму, больше соответствующую

- 30 -

потребностям, то SQL позволит помещать скалярные выражения и константы среди выбранных полей. Эти выражения могут дополнять или замещать поля в предложениях SELECT и могут включать в себя одно или более выбранных полей.

Например, нам необходимо представить успеваемость студентов в процентах:

SELECT family, name, gpa/5*100 FROM students ;

family

| name

|

 

--------------

+--------

+

--------------------------

Балашов

| Андрей |

100.00000000000000000000

Катеринченко

| Андрей |

91.80000000000000000000

Колычева

| Лия

|

87.60000000000000000000

Малин

| Сергей |

97.40000000000000000000

Никулкин

| Сергей |

95.80000000000000000000

Фахрудинова

| Тамара |

82.40000000000000000000

Чертков

| Максим |

86.20000000000000000000

(7 rows)

 

 

 

В запрос можно вставлять и символьные строки, так в следующем примере мы при перечислении полей введем строку

SELECT family, name, '%', gpa/5*100 FROM students ;

family

| name |

|

--------------

+--------

+---

+----------------------

Балашов

| Андрей | % | 100.000000000000000000

Катеринченко

| Андрей | % | 91.800000000000000000

Колычева

| Лия

| % | 87.600000000000000000

Малин

| Сергей | % | 97.400000000000000000

Никулкин

| Сергей | % | 95.800000000000000000

Фахрудинова

| Тамара | % | 82.400000000000000000

Чертков

| Максим | % | 86.200000000000000000

(7 rows)

 

 

 

2.5.5. Агрегатные группы

Агрегатные группы могут использоваться для группировки значений из таблиц по определенному признаку. В следующем примере нас интересует обобщенная информация о группе: максимальное MAX(), минимальное MIN(), среднее AVG() значение среднего балла и количество записей о студентах в каждой группе COUNT().

SELECT stgroup, MAX(gpa),

MIN(gpa), AVG(gpa), COUNT(gpa) FROM students GROUP BY stgroup;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]