13 основных команд и запросов SQL, которые должны знать программисты
Программирование

13 основных команд и запросов SQL, которые должны знать программисты

Каждый большой или динамический сайт так или иначе использует базу данных, а в сочетании со структурированным языком запросов (SQL) возможности для манипулирования данными поистине безграничны

Базы данных составляют основу современного Интернета. Каждый большой или динамичный сайт так или иначе использует базу данных, а в сочетании с командами SQL (Structured Query Language) возможности манипулирования данными поистине безграничны

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

Предисловие

Все примеры основаны на четырех вымышленных таблицах. Таблица customer содержит имя и возраст клиентов:

 

Имя

Возраст

Джо

99

Джеймс

78

Райан

101

Таблица heights содержит имя и рост любого человека:

 

Имя

Высота

Джо

101

Джеймс

102

Райан

103

Таблица staff содержит имя и возраст сотрудников, точно так же, как и таблица customer:

 

Имя

Возраст

Джо

17

Джеймс

24

Райан

18

Последняя таблица people содержит имена и возраст людей, как и таблицы клиентов и сотрудников:

 

Имя

Возраст

Джо

98

Джеймс

99

Райан

100

1. Выберите

Команда select в SQL – это самый простой, но один из самых важных запросов в наборе команд SQL

Считается лучшей практикой писать зарезервированный синтаксис SQL в верхнем регистре, так как это облегчает чтение и понимание команды select

Как следует из названия, select используется для выбора данных из базы данных. Вот простейший вариант использования:

SELECTFROMtable

В этой командной строке есть две части. Первая часть ( SELECT * ) указывает, какие столбцы вы хотите выбрать

Звездочка указывает, что вы хотите выбрать все столбцы из заданной таблицы. Вторая часть ( FROM table ) говорит вашему механизму базы данных, откуда вы хотите получить эти данные

Замените table на имя таблицы вашей базы данных

Этот оператор select известен как select star. Звездочка – это хороший способ выяснить, какие данные находятся в таблице, но он не всегда рекомендуется для производственных кодов

В большинстве случаев вы работаете с тоннами строк кода— это означает, что оператор select * переведет вашу систему в режим ожидания. Это происходит потому, что он пытается получить все строки данных из определенной таблицы

При использовании оператора select star все зависит от движка базы данных, чтобы представить вам нужные данные. Вы не можете контролировать порядок возврата данных, поэтому если кто-то добавит новый столбец в таблицу, вы можете обнаружить, что ваши переменные в вашем языке программирования больше не представляют правильные данные. К счастью, есть решение

Вы можете явно указать, какие столбцы вы хотите получить, например, так:

SELECTage,nameFROMpeople;

Этот запрос извлекает столбцы возраст и имя из таблицы people. Такая явность может быть немного утомительной, если у вас много данных, но это поможет уменьшить количество проблем в будущем, а также сделает ваш SQL-запрос более понятным

Если вы хотите выбрать дополнительный фрагмент данных, но он не хранится ни в одной из ваших таблиц, вы можете сделать это следующим образом:

SELECTage,'1234'FROMpeople;

Любая строка внутри одинарных кавычек будет возвращена вместо соответствия имени столбца

Связанные вопросы: SQL vs.NoSQL: Какая база данных лучше для вашего следующего проекта?

2. Где

Команда select отлично подходит для извлечения данных, но что если вы хотите отфильтровать результаты на основе определенных критериев?

Как насчет того, чтобы найти только тех, у кого голубые глаза? Как насчет людей, родившихся в январе, которые работают механиками?

Здесь на помощь приходит команда where. Использование этой команды SQL позволяет вам применять условия с помощью оператора select, и вы просто добавляете его в конец оператора:

SELECTage,nameFROMpeopleWHEREage <100

Теперь этот запрос ограничивается людьми в возрасте до 100 лет

Вы можете объединить несколько условий с помощью оператора AND :

SELECTFROMcustomerWHEREage >80ANDage <100

Команда AND работает точно так же, как и в английском языке: она применяет еще одно условие к высказыванию

Другая команда, которая может быть использована в сочетании с этим, – OR. Вот пример:

SELECTFROMcustomerWHEREage >10ORname'Joe'

Этот запрос возвращает записи, в которых возраст больше 90 или имя равно Джо

3. Порядок

Команда order используется для сортировки результатов в порядке возрастания/убывания. Просто добавьте ее в конец вашего оператора, после оператора where, если вы его используете:

SELECTFROMcustomerORDERBYageDESC

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

Вы можете упорядочить по нескольким столбцам следующим образом:

select * from staff order by age desc, name

ORDER BY – одна из самых полезных команд в сочетании с другими командами. Не все запросы возвращают данные в логическом или упорядоченном виде; эта команда позволяет это изменить

4. Присоединиться

Команда join в sql используется для объединения связанных данных, хранящихся в одной или нескольких таблицах. Вы можете присоединить одну таблицу к другой, чтобы получить объединенные результаты

Вот базовый пример:

SELECTage,name, heightFROMpeople
LEFT JOIN heights
USING (name);

Вы должны начать с синтаксиса LEFT JOIN , который указывает, что вы хотите объединить таблицу с помощью объединения типа left

Связанное: Как запросить несколько таблиц базы данных одновременно с помощью SQL Joins

Затем укажите таблицу, к которой вы хотите присоединиться (высоты). Синтаксис USING (name) утверждает, что столбец name можно найти в обеих таблицах, и его следует использовать в качестве первичного ключа для объединения таблиц

Не беспокойтесь, если ваши столбцы имеют разные имена в каждой таблице. Вы можете использовать ON вместо USING :

SELECTa.age, a.name,b.HeightFROMpeople aLEFTJOINheightsasONa.name = b.name;

В операторе on явно указывается, по каким столбцам следует искать ключ. Существует множество типов объединений; вот краткое описание их использования:

  • (INNER) JOIN возвращает строки с совпадением в обеих таблицах.
  • LEFT (OUTER) JOIN возвращает все строки из левой таблицы с любыми совпадениями из правой таблицы. Если совпадений нет, возвращаются записи из левой таблицы.
  • RIGHT (OUTER) JOIN является противоположностью левого соединения: возвращаются все строки из правой таблицы, а также все совпадения в левой таблице.
  • ПОЛНОЕ (ВНЕШНЕЕ) СОЕДИНЕНИЕ возвращает все записи с совпадениями в любой из таблиц.
  • UNEQUAL JOIN: Результатом являются несовпадающие записи из обеих таблиц.

5. Псевдоним

Команда Alias используется для временного переименования таблицы. Это псевдоним, который существует внутри отдельной выполняемой транзакции

Вот как вы ее используете:

SELECTA.ageFROMpeopleasA;

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

Этот псевдоним присваивается таблице сразу после ее объявления. Это то же самое, что сделать следующее:

SELECTpeople.ageFROMpeople;

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

Если вы делаете выборку из нескольких таблиц, легко запутаться в том, какие столбцы относятся к какой таблице. Если в обеих таблицах окажутся столбцы с одинаковыми именами, ваш запрос к базе данных не будет выполнен без явной ссылки на имя таблицы (таблиц) или псевдоним

Вот пример с двумя таблицами:

SELECTstaff.age, staff.name, customers.age, customers.nameFROMstaff, customers;

Вот тот же запрос с псевдонимами:

SELECTA.age, A.name, B.age, B.nameFROMstaff A, customers B;

Таблице сотрудников присвоен псевдоним A , а таблице клиентов – псевдоним B. Псевдонимы таблиц помогают сделать ваш код более понятным и сокращают количество вводимых символов

Вы также можете переименовать столбец с псевдонимом с помощью команды AS :

SELECTageASperson_ageFROMpeople;

При выполнении этого запроса столбец теперь будет называться person_age , а не age

6. Союз

Union – это отличная команда, поскольку она позволяет добавлять строки друг к другу. В отличие от объединения, которое добавляет совпадающие столбцы, объединение может добавлять несвязанные строки при условии, что они имеют одинаковое количество и название столбцов

SELECTage,nameFROMcustomer
UNION
SELECTage,nameFROMstaff;

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

Вы можете использовать синтаксис UNION ALL , чтобы вернуть все данные, независимо от дубликатов:

SELECTage,nameFROMcustomer
UNION ALL
SELECTage,nameFROMstaff;

Заметили, как изменился порядок строк? Объединение работает наиболее эффективным способом, поэтому возвращаемые данные могут меняться по порядку

Возможный вариант использования объединения – промежуточный итог: вы можете объединить запрос общей суммы с запросом индивидуальных итогов для определенного сценария

7. Вставка

Иногда требуется добавить новые данные в существующую базу данных/таблицу. Здесь на помощь приходит команда insert в SQL

Синтаксис VALUES используется для указания значений для вставки

INSERTINTOpeople(name, age)
VALUES'Joe'102);

Вы должны указать имя таблицы (people) и столбцы, которые вы хотите использовать (имя и возраст). Синтаксис VALUES используется для указания значений для вставки. Они должны располагаться в том же порядке, что и столбцы, которые были указаны ранее

Для вставки нельзя указывать условие where, и вам нужно убедиться, что вы следуете всем необходимым ограничениям таблицы, которые присутствуют

8. Обновление

После вставки некоторых данных вполне естественно возникает необходимость изменить определенные строки. Вот синтаксис команды update :

UPDATEpeopleSETname'Joe', age =101

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

Чтобы быть более точным, вы можете использовать WHERE клаузулы, как и при выполнении оператора select:

UPDATEpeopleSETname'Joe', age =101WHEREname'James'

Можно даже задать несколько условий, используя AND/ OR :

UPDATEpeopleSETname'Joe', age =101WHEREname'James'ANDage =100ORname'Ryan'

Обратите внимание, как скобки используются для ограничения условий

9.Upsert

Upsert – это странно звучащее слово, но это невероятно полезная команда. Скажем, у вас есть ограничение на таблицу, и вы указали, что вам нужны только записи с уникальными именами; вы не хотите хранить две строки с одинаковыми именами, например

Если бы вы попытались вставить несколько значений Joe , ваш механизм базы данных выдал бы ошибку и отказался бы это делать (вполне справедливо)

UPSERT позволяет вам обновить запись, если она уже существует. Это невероятно полезно! Без этой команды вам придется написать множество логических операторов, чтобы сначала проверить, существует ли запись, вставить ее, если нет, в противном случае получить правильный первичный ключ и затем обновить

К сожалению, в разных движках баз данных апсерт реализован по-разному.PostgreSQL получил эту возможность совсем недавно, в то время как MySQL имеет ее уже довольно давно. Вот синтаксис MySQL для справки:

INSERTINTOpeople(name, age)
VALUES'Joe'101
ON DUPLICATE KEYUPDATEage =101

Обратите внимание, что это, по сути, оператор обновления и оператор вставки, который можно обобщить как обновить, если вставка не удалась

10. Удалить

Delete используется для полного удаления записей; при неправильном использовании может нанести вред

Основной синтаксис очень прост в использовании:

DELETEFROMpeople;

Как и большинство других команд, эта удалит все. Вам нужно использовать where, чтобы ограничить его немного более разумным количеством строк, в идеале – одной:

DELETEFROMpeopleWHEREname'Joe'

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

11. Создайте таблицу

Команда create table используется для создания таблиц. Это еще один простой и базовый процесс запроса:

CREATETABLEpeople (
name TEXT,
age, INTEGER,
PRIMARY KEY(name)
);

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

Связанное: Как создать таблицу в SQL

Указан первичный ключ, как и требуется в любом хорошем проекте базы данных

12. Изменить таблицу

Команда alter в SQL используется для изменения структуры таблицы. Это несколько ограничено, поскольку ваша база данных не позволит вам изменить таблицу, если существующие данные вызовут конфликт— например, изменение строки на целое число. В таких случаях сначала исправьте данные, а затем измените таблицу. Вот пример:

ALTERTABLEpeopleADDheightinteger

Этот пример добавляет столбец height типа integer в таблицу people. На самом деле нет никаких ограничений на то, что вы можете изменить

13. Убрать таблицу

Последняя команда – drop table. Считайте это командой delete, но вместо удаления одной записи, она удаляет все записи вместе с таблицей. Вот как ее можно использовать:

DROPTABLEpeople;

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

Команды SQL для каждого программиста

SQL – это очень распространенный, но мощный инструмент, с помощью которого можно извлекать, преобразовывать и загружать данные из/в базы данных. Сама суть запросов к данным опирается на SQL. Чтобы овладеть этим языком, необходимо знать, как работать с некоторыми командами для наилучшего использования

Об авторе

Алексей Белоусов

Привет, меня зовут Филипп. Я фрилансер энтузиаст . В свободное время занимаюсь переводом статей и пишу о потребительских технологиях для широкого круга изданий , не переставая питать большую страсть ко всему мобильному =)

Комментировать

Оставить комментарий