Выборка информации из таблицы
Информация извлекается из таблиц при помощи команды SELECT . Вызывается она так:
SELECT what_to_select FROM which_table WHERE conditions_to_satisfy
где what_to_select обозначает нужные данные. Это может быть список столбцов или символ * ("все столбцы"). which_table указывает таблицу, из которой должны быть извлечены данные. Условие WHERE использовать необязательно, но если оно все же присутствует в вызове команды, то параметр conditions_to_satisfy задает условия, которым должны соответствовать нужные строки.
Выборка всех данных
В самом простом варианте вызова SELECT из таблицы извлекаются сразу все данные:
mysql> SELECT * FROM pet; +----------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+--------+---------+------+------------+------------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Fang | Benny | dog | m | 1990-08-27 | NULL | | Bowser | Diane | dog | m | 1998-08-31 | 1995-07-29 | | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+--------+---------+------+------------+------------+
Использовать SELECT таким образом удобно, когда нужно просмотреть всю таблицу, например, после того, как в нее была загружена первая порция данных. Как часто случается, в выведенных на экран данных сразу можно увидеть ошибку в таблице: Bowser , оказывается, успел умереть еще до того, как родился! Заглянув в его родословную обнаруживаем, что пес родился в 1989, а не в 1998 году.
Исправить ошибку можно как минимум двумя способами:
Отредактировать файл pet.txt, затем очистить таблицу и снова заполнить ее командами DELETE и LOAD DATA:
mysql> SET AUTOCOMMIT=1; # Used for quick re-create of the table mysql> DELETE FROM pet; mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
Однако в таком случае придется снова ввести запись о Puffball.
Исправить только ошибочно введенные данные при помощи команды UPDATE :
mysql> UPDATE pet SET birth = "1989-08-31" WHERE name = "Bowser";
Как видно из приведенного выше примера, загрузить всю таблицу сразу очень просто. Но на практике обычно этого не требуется, особенно когда таблица достигает значительных размеров. Чаще всего нужно просто ответить на какой-нибудь вопрос, для чего необходимо ввести ограничения, указывающие, какая же информация вам нужна. Давайте рассмотрим несколько запросов с точки зрения вопросов, на которые они отвечают.
Выборка определенных строк
Из таблицы можно выбрать и только нужные строки. Например, если вы хотите проверить правильность внесенных в дату рождения собаки Bowser изменений, соответствующую запись можно получить следующим способом:
mysql> SELECT * FROM pet WHERE name = "Bowser"; +--------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+-------+---------+------+------------+------------+ | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+-------+---------+------+------------+------------+
Теперь видно, что год рождения теперь записан правильно -1989, а не 1998.
В операции сравнения строк обычно не учитывается регистр символов, так что имя можно записать как "bowser" , "BOWSER" и т.п. Результаты запросов будут идентичными.
В условиях может указываться любой из столбцов, а не только name . Если, например, вам нужно узнать, какие их животных родились после 1998 года, в условие вводится значение столбца birth :
mysql> SELECT * FROM pet WHERE birth >= "1998-1-1"; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+-------+---------+------+------------+-------+
Условия можно и комбинировать, например для того, чтобы выделить всех собак женского пола:
mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f";
+-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+
В предыдущем запросе использован оператор AND . Существует еще и оператор OR :
mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird";
+----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | +----------+-------+---------+------+------------+-------+
Операторы AND и OR можно использовать совместно. В таком случае с помощью скобок можно указать порядок группировки условий:
mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m") -> OR (species = "dog" AND sex = "f");
+-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+
1 2 3 4 5 6 7
8 8 8
|