Материал: Using_MySql,_MS_SQL_Server_and_Oracle

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Пример 6: упорядочивание выборки

2.1.6. Пример 6: упорядочивание выборки

Задача 2.1.6.a{35}: показать все книги в библиотеке в порядке возрастания их года издания.

Задача 2.1.6. b{36}: показать все книги в библиотеке в порядке убывания их года издания.

Ожидаемый результат 2.1.6.a.

b_name

b_year

Курс теоретической физики

1981

Евгений Онегин

1985

Сказка о рыбаке и рыбке

1990

Искусство программирования

1993

Язык программирования C++

1996

Психология программирования

1998

Основание и империя

2000

Ожидаемый результат 2.1.6.b.

b_name

b_year

Основание и империя

2000

Психология программирования

1998

Язык программирования C++

1996

Искусство программирования

1993

Сказка о рыбаке и рыбке

1990

Евгений Онегин

1985

Курс теоретической физики

1981

Решение 2.1.6.a{35}.

 

Для упорядочивания1 результатов выборки необходимо применить конструкцию ORDER BY (строка 4 каждого запроса), в которой мы указываем:

поле, по которому производится сортировка (b_year)

направление сортировки (ASC). 1

MySQL і Решение 2.1.6.a

1SELECT 'b name',

2'b_year'

3

FROM

'books'

4

ORDER

BY 'b_year' ASC

MS SQL I Решение 2.1.6.a |

1SELECT [b name]

2[b_year]

3FROM [books]

4ORDER BY [b year] ASC

1В повседневной жизни всё равно большинство людей использует тут термин «сортировка» вместо «упорядочивание», но

это не совсем идентичные понятия. «Сортировка» больше относится к процессу изменения порядка, а «упорядочивание» к готовому результату.

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 40/545

Пример 6: упорядочивание выборки

Oracle Решение 2.1.6.a

1SELECT "b name"

2"b_year"

3

FROM

"books"

4

ORDER

BY "b year" ASC

 

 

•Ч

Решение 2.1.6. b .

Здесь (в отличие от решения{35} задачи 2.1.6.a{35}) всего лишь необходимо поменять направление сортировки с «по возрастанию» (ASC) на «по убыванию»

(DESC).

Альтернативное решение можно получить добавлением знака «минус» перед именем поля, по которому сортировка реализована по возрастанию, т.е. ORDER BY

числовое_поле DESC эквивалентно ORDER BY -числовое_поле ASC.

 

Решение 2.1.6.b (альтернативный вариант)

 

MySQL I Решение 2.1.6.b (альтернативный вариант) |

 

1

SELECT

[b_name]

1

SELECT 'b_name',

2

 

[b_year]

2

 

'b_year'

3

FROM

[books]

3

FROM

'books'

4

ORDER BY [b year] ASC

4

ORDER BY -'b year' ASC

 

 

 

Oracle Решение 2.1.6.b (альтернативный вариант)

MS SQL

1SELECT "b_name"

2"b_year"

3

FROM

"books"

4

ORDER BY "b _year" ASC

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 41/545

Пример 6: упорядочивание выборки

Исследование 2.1.6.EXP.A. Ещё одна неожиданная проблема с упорядочиванием связана с тем, где различные СУБД по умолчанию располагают NULL-значения — в начале выборки или в конце. Проверим.

 

 

Снова воспользуемся готовой таблицей table_with_nulls{26}.

В ней

попрежнему находятся следующие данные:

 

 

 

 

 

 

x

 

1 __

 

 

1 __

 

 

2 _

 

 

 

 

 

 

NULL

 

 

 

Выполним запросы 2.1.6.EXP.A:

 

Результаты будут следующими (обратите внимание на то, где расположено NULL-значение):

 

x

 

 

x _

_2

_

 

NULL

_1

_

 

2 __

_1

_

 

1 __

 

NULL

 

_1 _

MySQL

MS SQL Server

Oracle

Получить в MySQL и MS SQL Server поведение, аналогичное поведению Oracle (и наоборот), можно с использованием следующих запросов:

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 42/545

Пример 6: упорядочивание выборки

В случае с Oracle мы явно указываем, поместить ли NULL-значения в начало выборки (NULLS FIRST) или в конец выборки (NULLS LAST). Поскольку MySQL и

MS SQL Server не поддерживают такой синтаксис, выборку приходится упорядочивать по двум уровням: первый уровень (строка 3 для MySQL, строки 3-6 для MS SQL Server) — по признаку «является ли значение поля NULL’ом», второй уровень — по самому значению поля.

Задание 2.1.6.TSK.A: показать список авторов в обратном алфавитном порядке (т.е. «Я ^ А».

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 43/545

Пример 7: использование составных условий

2.1.7. Пример 7: использование составных условий

Задача 2.1.7.a{39}: показать книги, изданные в период 1990-2000 годов, представленные в библиотеке в количестве трёх и более экземпляров.

Задача 2.1.7. b{40}: показать идентификаторы и даты выдачи книг за лето 2012-го года.

Ожидаемый результат 2.1.7.a.

 

b_name

b_year

b_quantity

Сказка о рыбаке и рыбке

1990

3

Основание и империя

2000

5

Язык программирования C++

1996

3

Искусство программирования

1993

7

 

Ожидаемый результат 2.1.7.b.

 

 

 

 

 

 

 

 

sb_id

sb_start

 

 

 

 

42

2012-06-11

 

 

 

 

57

2012-06-11

 

 

 

Ч/* Решение 2.1.7. a{39}.

Для каждой СУБД приведено два варианта запроса — с ключевым словом BETWEEN (часто используемого как раз для указания диапазона дат), и без него — в

виде двойного неравенства (что выглядит более привычно для имеющих опыт программирования).

В случае использования BETWEEN, границы включаются в диапазон искомых значений.

В представленных ниже решениях отдельные условия осознанно не взяты в скобки. Синтаксически такой вариант верен и отлично работает, но он тем сложнее читается, чем больше составных частей входит в сложное условие. Потому всё же рекомендуется брать каждую отдельную часть в скобки.

MySQL

Решение 2.1.7.a

1

-- Вариант 1: использование BETWEEN

2

SELECT 'b name',

3

 

'b year',

4

 

'b_quanti ty'

5

FROM

'books'

6

WHERE

'b year' BETWEEN 1990 AND 2000

7

 

AND 'b_quantity' >= 3

1

-- Вариант 2: использование двойного неравенства

2

SELECT 'b name',

3

 

'b_year',

4

 

'b_quanti ty'

5

FROM

'books'

6

WHERE

'b year' >= 1990

7

 

AND 'b year' <= 2000

8

 

AND 'b_quantity' >= 3

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 44/545

Источник: https://studfile.net/preview/16420333/