Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

БД 02.03.13 / Копия Лаба1

.docx
Скачиваний:
7
Добавлен:
28.05.2015
Размер:
32.62 Кб
Скачать

Лабораторная работа № 1

Тема: Знакомство с языком запросов SQL. Выборка данных

Основные понятия: Язык SQL. Знакомство с утилитой для интерактивного выполнения команд выбранной СУБД. Простые запросы выборки столбцов. Выборка из таблицы всех столбцов; другие объекты в списке выборки; NULL-значения; литералы (константы); предотвращение выборки повторяющихся строк (DISTINCT); упорядочение строк результата запроса (ORDER BY). Простые запросы выборки строк. Фраза WHERE и определение условий выборки в ней; таблицы истинности логических выражений СУБД.

Теоретический материал:

Основной синтаксис оператора SELECT можно описать следующим образом:

SELECT список_полей FROM список_таблиц WHERE условия_запроса GROUP BY условия_группировки HAVING вторичные_условия_запроса ORDER BY условия_сортировки LIMIT диапазон_строк

Строго говоря, оператор SELECT имеет следующую структуру:

SELECT [STRAIGHT_JOIN]

[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]

[DISTINCT | DISTINCTROW | ALL]

select_expression,...

[INTO {OUTFILE | DUMPFILE} 'file_name' export_options]

[FROM table_references

[WHERE where_definition]

[GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

[HAVING where_definition]

[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

[LIMIT [offset,] rows | rows OFFSET offset]

[PROCEDURE procedure_name(argument_list)]

[FOR UPDATE | LOCK IN SHARE MODE]]

SELECT применяется для извлечения строк, выбранных из одной или нескольких таблиц. Выражение select_expression задает столбцы, в которых необходимо проводить выборку. Кроме того, оператор SELECT можно использовать для извлечения строк, вычисленных без ссылки на какую-либо таблицу. Например:

mysql> SELECT 1 + 1;

-> 2

При указании ключевых слов следует точно соблюдать порядок, указанный выше. Например, выражение HAVING должно располагаться после всех выражений GROUP BY и перед всеми выражениями ORDER BY.

  • Используя ключевое слово AS, выражению в SELECT можно присвоить псевдоним. Псевдоним используется в качестве имени столбца в данном выражении и может применяться в ORDER BY или HAVING. Например:

mysql> SELECT CONCAT(last_name,', ',first_name) AS full_name

FROM mytable ORDER BY full_name;

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

  • Выражение FROM table_references задает таблицы, из которых надлежит извлекать строки. Если указано имя более чем одной таблицы, следует выполнить объединение. Для каждой заданной таблицы по желанию можно указать псевдоним.

  • Ссылку на таблицу можно заменить псевдонимом, используя tbl_name [AS] alias_name:

mysql> SELECT t1.name, t2.salary FROM employee AS t1, info AS t2

WHERE t1.name = t2.name;

mysql> SELECT t1.name, t2.salary FROM employee t1, info t2

WHERE t1.name = t2.name;

  • В выражениях ORDER BY и GROUP BY для ссылок на столбцы, выбранные для вывода информации, можно использовать либо имена столбцов, либо их псевдонимы, либо их позиции (местоположения). Нумерация позиций столбцов начинается с 1:

mysql> SELECT college, region, seed FROM tournament

ORDER BY region, seed;

mysql> SELECT college, region AS r, seed AS s FROM tournament

ORDER BY r, s;

mysql> SELECT college, region, seed FROM tournament

ORDER BY 2, 3;

Для того чтобы сортировка производилась в обратном порядке, в утверждении ORDER BY к имени заданного столбца, в котором производится сортировка, следует добавить ключевое слово DESC (убывающий). По умолчанию принята сортировка в возрастающем порядке, который можно задать явно при помощи ключевого слова ASC.

  • В выражении WHERE можно использовать любую из функций, которая поддерживается в MySQL. See Раздел 6.3, «Функции, используемые в операторах SELECT и WHERE».

  • Выражение HAVING может ссылаться на любой столбец или псевдоним, упомянутый в выражении select_expression. HAVING отрабатывается последним, непосредственно перед отсылкой данных клиенту, и без какой бы то ни было оптимизации. Не используйте это выражение для определения того, что должно быть определено в WHERE. Например, нельзя задать следующий оператор:

mysql> SELECT col_name FROM tbl_name HAVING col_name > 0;

Вместо этого следует задавать:

mysql> SELECT col_name FROM tbl_name WHERE col_name > 0;

В версии MySQL 3.22.5 или более поздней можно также писать запросы, как показано ниже:

mysql> SELECT user,MAX(salary) FROM users

GROUP BY user HAVING MAX(salary)>10;

В более старых версиях MySQL вместо этого можно указывать:

mysql> SELECT user,MAX(salary) AS sum FROM users

GROUP BY user HAVING sum>10;

  • Параметры (опции) DISTINCT, DISTINCTROW и ALL указывают, должны ли возвращаться дублирующиеся записи. По умолчанию установлен параметр (ALL), т.е. возвращаются все встречающиеся строки. DISTINCT и DISTINCTROW являются синонимами и указывают, что дублирующиеся строки в результирующем наборе данных должны быть удалены.

  • При использовании выражения GROUP BY строки вывода будут сортироваться в соответствии с порядком, заданным в GROUP BY, - так, как если бы применялось выражение ORDER BY для всех полей, указанных в GROUP BY

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

NULL — специальный тип данных, обозначающий отсутствие информации.

Задачи:

Для таблицы Студенты (№ зачетки, Фамилия, Имя, номер группы, телефон)

1. Напишите запрос который вывел бы фамилии студентов.

2. Напишите запрос который вывел бы таблицу со столбцами в следующем порядке: № группы, имя, фамилию, телефон.

3. Напишите запрос который вывел бы всю информацию из таблицы.

4. Напишите запрос который вывел бы все строки из таблицы «Студенты» для которых номер группы = 11.

5. Напишите запрос который вывел бы записи о студенте «Иванов».

6. Напишите запрос который вывел бы записи о студентах с именем «Ольга»

7. Напишите запрос который вывел бы записи о студентах 11 и 12 группы.

8. Напишите запрос который вывел бы записи о студентах 11 и 12 группы, которые имеют телефон.

9. Напишите запрос который вывел бы значения № группы из таблицы «Студенты» без каких бы то ни было повторений.

Для таблицы Предметы(Фамилия преподавателя, предмет, номер группы).

10.Напишите запрос который вывел бы фамилии преподавателей. (Учесть, чтобы фамилии появлялись без повтора если преподаватели ведут два и более предметов)

Для таблицы Студенты_Предметы (№зачетки, предмет, оценка).

11.Вывести №зачеток неуспевающих студентов.

12.Напишите запрос который вывел бы информацию о сдаче экзаменов студентом № зачетки которого= 11111

13.Напишите запрос который вывел бы № зачеток студентов, которые сдали английский на хорошо и отлично.

14.Напишите запрос который вывел бы информацию о сдаче экзаменов студентами, № зачетки которых= 11111, 11114, 11115.

Задание: Создать различные виды запросов с использованием оператора SELECT для базы данных.

Форма отчета:

Отчет по лабораторной работе №1

Студент :_______________ (фамилия, имя)

Группа: _________________

Запрос

Результат

1

Select * from...

...

Источники:

  1. http://hostinfo.ru/articles/260

  2. http://phpclub.ru/mysql/doc/select.html

Полезные ссылки:

  1. http://www.codenet.ru/db/mysql5/manual.ru_Reference.php