Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
для студентов РУБД / Лаб раб 4 курс.doc
Скачиваний:
60
Добавлен:
21.03.2016
Размер:
635.39 Кб
Скачать

Предположим, нужно узнать, в каком возрасте животные давали приплод:

mysql> SELECT pet.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS age, remark

-> FROM pet, event WHERE pet.name = event.name AND type = "litter";

name

age

remark

Fluffy

2.27

4 kittens, 3 female, 1 male

Buffy

4.12

5 puppies, 2 female, 3 male

Buffy

5.10

3 puppies, 3female

Для объединения не обязательно иметь две отдельные таблицы; иногда можно объединить таблицу с самой собой - если нужно сравнить одни записи таблицы с другими записями той же таблицы. Например, для того, чтобы обнаружить среди животных ``семейные пары'', можно объединить таблицу pet с ней самой, составив пары животных разного пола, но одного вида:

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species FROM pet AS p1, pet AS p2

-> WHERE p1.species = p2.species AND p1.sex = "f" AND p2.sex = "m";

name

sex

name

sex

species

Fluffy

f

Claws

m

cat

Buffy

f

Fang

m

dog

Buffy

f

Bowser

m

dog

В этом запросе мы указываем псевдонимы имен таблицы, для обращения к столбцам и определения, к какой из таблиц относится каждая ссылка на столбец.

Для сортировки в обратном порядке к имени столбца следует добавить ключевое слово DESC (по убыванию): mysql> SELECT name, birth FROM pet ORDER BY birth DESC;

name

birth

Puffball

1999-03-30

Chirpy

1998-09-11

Whistler

1997-12-09

Slim

1996-04-29

Claws

1994-03-17

Fluffy

1993-02-04

Fang

1990-08-27

Bowser

1989-08-31

Buffy

1989-05-13

Сортировку можно проводить по нескольким столбцам сразу.

mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC;

name

species

birth

Chirpy

bird

1998-09-11

Whistler

bird

1997-12-09

Claws

cat

1994-03-17

Fluffy

cat

1993-02-04

Fang

dog

1990-08-27

Bowser

dog

1989-08-31

Buffy

dog

1989-05-13

Puffball

hamster

1999-03-30

Slim

snake

1996-04-29

Вычисление дат

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

mysql> SELECT name, birth, CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(birth))

-> - (RIGHT(CURRENT_DATE,5)<RIGHT(birth,5)) AS age FROM pet;

name

birth

URRENT_DATE

age

Fluffy

1993-02-04

2001-08-29

8

Claws

1994-03-17

2001-08-29

7

Buffy

1989-05-13

2001-08-29

12

Fang

1990-08-27

2001-08-29

11

Bowser

1989-08-31

2001-08-29

11

Chirpy

1998-09-11

2001-08-29

2

Whistler

1997-12-09

2001-08-29

3

Slim

1996-04-29

2001-08-29

5

Puffball

1999-03-30

2001-08-29

2

В этом примере функция YEAR() выделяет из даты год, аRIGHT() - пять крайних справа символов, представляющих календарный день (MM-DD). Часть выражения, сравнивающая даты, выдает 1 или 0, что позволяет уменьшить результат на единицу, если текущий день (CURRENT_DATE) находится к началу календаря ближе, нежели день рождения животного.

Упорядочить запрос

mysql> SELECT name, birth, CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(birth))

-> - (RIGHT(CURRENT_DATE,5)<RIGHT(birth,5)) AS age FROM pet ORDER BY name;

name

birth

CURRENT_DATE

age

Bowser

1989-08-31

2001-08-29

11

Buffy

1989-05-13

2001-08-29

12

Chirpy

1998-09-11

2001-08-29

2

Claws

1994-03-17

2001-08-29

7

Fang

1990-08-27

2001-08-29

11

Fluffy

1993-02-04

2001-08-29

8

Puffball

1999-03-30

2001-08-29

2

Slim

1996-04-29

2001-08-29

5

Whistler

1997-12-09

2001-08-29

3