Исходный текст: Exercise 40: Reading with SQL
Переводчик: Феликс Ли
Лицензия: CC BY-NC-SA 4.0
Гордо использует Google Translate
В матрице CRUD вы знаете только «создание». Вы можете создавать таблицы и строки в этих таблицах. Теперь я расскажу вам, как «читать», или SELECT
в SQL:
SELECT * FROM person;
SELECT name, age FROM pet;
SELECT name, age FROM pet WHERE dead = 0;
SELECT * FROM person WHERE first_name != 'Zed';
Вот что делает каждая строка:
ex5.sql:1
Это значит «выбрать все столбцы из person
и вернуть все строки». Формат SELECT
— это SELECT что FROM таблицы(ы) WHERE (тесты)
. Подзапрос WHERE
является необязательным. Звездочка (*
) указывает на все столбцы.
ex5.sql:3
Здесь я запрашиваю только два столбца из таблицы pet
: имя и возраст. Он вернет все строки.
ex5.sql:5
Теперь я ищу те же столбцы из pet
, но запрашиваю только строки, где dead = 0
. Это даст мне всех живых питомцев.
ex5.sql:7
Наконец, я выбираю все столбцы из person
, как в первой строке, но теперь указываю, что они не равны 'Zed'
. Подзапрос WHERE
определяет, какие строки будут возвращены, а какие нет.
SELECT
, который будет искать в person
и каким-то образом находить моих питомцев. Для этого вам придётся запросить таблицу person_pet
для получения нужного столбца id
. Вот мой способ сделать это:SELECT pet.id, pet.name, pet.age, pet.dead
FROM pet, person_pet, person
WHERE
pet.id = person_pet.pet_id AND
person_pet.person_id = person.id AND
person.first_name = "Zed";
Сейчас это может показаться сложным, но я разберу его, чтобы вы могли видеть, что он просто строит новую таблицу на основе данных из трёх таблиц и подзапроса WHERE
.
```sql
SELECT pet.id, pet.name, pet.age, pet.dead
FROM pet, person_pet, person
WHERE
pet.id = person_pet.pet_id AND
person_pet.person_id = person.id AND
person.first_name = "Zed";
````ex6.sql:1`
Я хочу получить лишь некоторые столбцы из таблицы `pet`, поэтому я указываю их в запросе `SELECT`. В прошлом упражнении вы использовали символ `*`, чтобы указать "все столбцы", но это плохая идея здесь. Вместо этого следует явно указывать каждый нужный столбец каждой таблицы с помощью конструкции `table.column`. Например, `pet.name`.
`ex6.sql:2`
Чтобы соединить таблицу `pet` с таблицей `person`, мне нужно пройти через связующую таблицу `person_pet`. В SQL это означает, что мне нужно указать все три таблицы после ключевого слова `FROM`.
`ex6.sql:3`
Начало условий в блоке `WHERE`.
`ex6.sql:4`Сначала я соединяю таблицу `pet` с таблицей `person_pet` по соответствующим столбцам идентификаторов `pet.id` и `person_pet.pet_id`.
`ex6.sql:5`
Затем я также соединяю таблицу `person` с таблицей `person_pet` аналогичным образом. Теперь база данных может просто искать строки, где значения всех указанных столбцов совпадают, то есть это будут объединённые строки.
`ex6.sql:6`
И наконец, я запрашиваю только тех питомцев, которых я сам владею, проверяя мое имя с помощью условия `person.first_name`.
## Часто задаваемые вопросы+ Напишите запрос, который выбирает всех питомцев старше 10 лет.
+ Напишите запрос, который выбирает всех людей младше вас. Затем найдите всех людей старше вас.
+ Напишите запрос, используя несколько условий в блоке `WHERE`, объединив их оператором `AND`. Например, `WHERE first_name = 'Zed' AND age > 30`.
+ Выполните другой запрос, используя три условия, и используйте операторы `AND` и `OR` для поиска строк.
+ Если вы знакомы с языками программирования, такими как Python или Ruby, это может быть удивительным способом взаимодействия с данными. Уделите время тому, чтобы использовать классы и объекты для создания такой же структуры отношений, а затем отобразите её на эту конфигурацию.
+ Выполните запрос, который выбирает всех питомцев, которых вы уже добавили.
+ Измените запрос, чтобы он использовал ваш идентификатор `person.id` вместо имени `person.name`, как это сделано здесь.
+ Обзор выходных данных выполненного запроса и убедитесь, что вы знаете, какие SQL команды создали каждую таблицу и как был получен этот вывод.## Дополнительное чтение
Прочитайте документацию по команде [SELECT](https://sqlite.org/lang_select.html) и функции [EXPLAIN QUERY PLAN](https://sqlite.org/eqp.html) для более глубокого понимания работы с SQLite3. Если вам непонятна причина того, почему SQLite3 выполняет какие-то действия, воспользуйтесь командой `EXPLAIN`.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )