Изучите один из самых популярных языков данных

Привет всем. Надеюсь, у тебя все хорошо. Сегодня мы рассмотрим SQL - язык, который очень важно выучить при работе с базами данных. Как обычно, я хочу дать вам простой для понимания 101 как SQL, так и базы данных. Приложив немного усилий, использование SQL может быть довольно забавным и простым. Давайте начнем.

Базы данных: что это такое?

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

Возможно, вы видели такие вещи, как Oracle, MySQL, PostgreSQL и т. Д., Когда просматривали базы данных или технический блог. Их называют системами управления реляционными базами данных. Короче говоря, программное обеспечение, которое позволяет нам создавать базы данных и управлять ими. В этой статье я буду использовать RDMS SQLite. Настроить довольно просто.

SQL - это язык, который общается с реляционными базами данных для хранения, обновления, изменения и удаления данных. Чтобы показать вам, как это работает, я буду создавать базу данных в SQLite с данными, которые я создал для видеоигры Street Fighter 5.

Создание базы данных и импорт файла

Первое, что мы сделаем, это создадим базу данных. Назовем это просто testDB.

-- Creating a new Database Note, statements go after sqlite>
sqlite> .open C:/sqlite/testDB.db
sqlite> .databases
seq  name             file
---  ---------------  --------------------
0    main             C:\sqlite\testDB.db

И готово. Первая строка сообщает SQLite, что я хочу создать постоянную базу данных в определенном месте под названием testDB. Вторая строка предназначена только для того, чтобы убедиться, что файл был создан. Просто нет? Но, увы, наша база пуста. Давай исправим это сейчас.

Как я упоминал ранее, я создал файл CSV с данными, относящимися к символам в SF5. Как и в случае с R, я могу загрузить этот файл в базу данных, чтобы начать с ним работать.

--First create a table
sqlite> create table SF5Characters( Name Text  Not Null, Health  Int Not Null, Stun  Int Not Null, Origin Text Not Null, Projectile  Text Not Null, Command_Grab  Text Not Null);
sqlite> .mode csv
sqlite> .import C:/sqlite/SF5Characters.csv SF5Characters
sqlite> .header on
sqlite> .mode column

В операторе создания таблицы я создал таблицу. Таблица - это в значительной степени то же самое, что и фрейм данных в R. Она содержит определенный набор данных, которые мы можем просматривать, манипулировать и т. Д. Следующие строки - это имена столбцов, тип данных, который столбец будет принимать, и Not Null. это означает, что он не принимает пустые поля. Имя каждого столбца отделяется запятой, а оператор заканчивается точкой с запятой.

Следующие две строки предназначены для того, чтобы сообщить SQLite, что придет файл CSV, и о фактическом импорте файла. Наконец, следующие 2 строки предназначены только для того, чтобы вывод наших операторов SQL был чистым.

Работа с данными: SQL-запросы и запросы

Наконец-то мы можем начать играть в SQL! Ура! Большинство SQL-запросов выглядят примерно так:

SELECT column_name FROM table_name WHERE column_name = "Frank";
filter(dataframe, column_name == "Frank")  #dplyr equivalent in R

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

  1. ВЫБРАТЬ: Выбрать эти данные
  2. ОБНОВЛЕНИЕ: изменить эти данные
  3. ВСТАВИТЬ: Добавить новые данные
  4. УДАЛИТЬ: удалить эти данные

Также для тех, кто не знаком с SF5, вот что означают некоторые столбцы.

  1. Здоровье: сколько урона может получить персонаж.
  2. Оглушение: урон, который может получить персонаж до того, как он будет «оглушен» или обездвижен.
  3. Происхождение: В какой игре Street Fighter дебютировал персонаж.
  4. Снаряд: имеет ли персонаж движение типа «огненный шар».
  5. Command_Grab: Есть ли у персонажа особый захват помимо универсального?

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

SELECT COUNT(*) FROM SF5Characters;
----------
27

Наш первый запрос. Выглядит хорошо, за исключением одной проблемы. В этом наборе данных 26 символов. Почему у нас 27 рядов? Давай займемся расследованиями.

sqlite> SELECT Name from SF5Characters;
Name
Name
Ryu
"Chun li"
Nash
"M. Bison"
Cammy
Birdie
Ken
Necalli
Vega
"R. Mika"
Rashid
Karin
Zangief
Laura
Dhalsim
F.A.N.G
Alex
Guile
Balrog
Ibuki
Juri
Urien
Akuma
Kolin
Ed
Abigail

Я вижу проблему. Имя столбца «Имя» было случайно добавлено как часть набора данных. Давайте запустим удаление.

sqlite> DELETE FROM SF5Characters WHERE Name = 'Name';
sqlite> SELECT COUNT(*) FROM SF5Characters;
----------
26

Итак, мы идем. Теперь давайте ответим на несколько основных вопросов.

Какие персонажи совершенно новые в серии Street Fighter?

sqlite> SELECT * FROM SF5Characters WHERE Origin = "SF5";
Name        Health      Stun        Origin      Projectile  Command_Grab
----------  ----------  ----------  ----------  ----------  ------------
Rashid      950         1000        SF5         Yes         No
Laura       1000        1000        SF5         Yes         Yes
F.A.N.G     950         950         SF5         Yes         No
Alex        1025        1050        SF5         No          Yes
Kolin       1000        1000        SF5         Yes         No
Ed          1000        1000        SF5         Yes         No
Abigail     1100        1050        SF5         No          Yes

Операторы SQL могут предоставить вам сразу все необходимые данные, если вы используете * после Select. Это удобно, так как вам не нужно вводить еще один оператор, чтобы что-то выяснить. Но у нас возникла другая проблема. Алекс не новичок в Street Fighter, но Некалли - новичок. Обновление придет нам на помощь.

sqlite> UPDATE SF5Characters Set Origin = "SF5" WHERE Name = "Necalli";
sqlite> UPDATE SF5Characters Set Origin = "SF3" WHERE Name = "Alex";
sqlite> SELECT * FROM SF5Characters WHERE Origin = "SF5";
Name        Health      Stun        Origin      Projectile  Command_Grab
----------  ----------  ----------  ----------  ----------  ------------
Necalli     1000        1000        SF5         No          Yes
Rashid      950         1000        SF5         Yes         No
Laura       1000        1000        SF5         Yes         Yes
F.A.N.G     950         950         SF5         Yes         No
Kolin       1000        1000        SF5         Yes         No
Ed          1000        1000        SF5         Yes         No
Abigail     1100        1050        SF5         No          Yes

Фиксированный. На данный момент в сериале есть 7 новых персонажей. У 2 персонажей менее 1000 здоровья, у 5 есть метательные атаки и у 3 есть командные захваты. Хорошо знать.

Как насчет того, чтобы немного заняться организацией? Давайте составим список всех персонажей в порядке от самого низкого до самого высокого уровня здоровья. Для этого мы можем использовать предложение ORDER BY. Предложение - это слово, которое следует после FROM, чтобы возвращать данные с помощью более конкретных команд.

sqlite> SELECT Name, Health FROM SF5Characters ORDER BY Health ;
Name        Health
----------  ----------
Akuma       900
Cammy       900
Karin       900
Dhalsim     925
Chun li     950
Nash        950
R. Mika     950
Rashid      950
F.A.N.G     950
Guile       950
Ibuki       950
Juri        950
Urien       950
Ryu         1000
M. Bison    1000
Ken         1000
Necalli     1000
Vega        1000
Laura       1000
Kolin       1000
Ed          1000
Birdie      1025
Alex        1025
Balrog      1025
Zangief     1050
Abigail     1100

Что, если вам нужны только персонажи со снарядом и командным захватом? Тогда для этого есть удобное предложение AND. В общем, если обе части утверждения верны, вы получите результат.

sqlite> SELECT Name, Health FROM SF5Characters WHERE Projectile = "Yes" AND Command_Grab = "Yes"  ORDER BY Health ;
Name        Health
----------  ----------
Laura       1000

Ха, только Лаура. Думаю, это делает ее уникальной. Надеюсь, вы поняли суть. В SQL подумайте о данных, которые вы хотите вернуть, и создайте запрос, который позволит вам это сделать. Немного попрактиковавшись, вы быстро освоите это. Говоря о практике, вот несколько ссылок на некоторые руководства по SQL. Самое лучшее в них то, что они бесплатны, и вам не нужно загружать базу данных, чтобы практиковаться! Насколько это аккуратно?

  1. DataCamp SQL
  2. SQLTeaching
  3. SQLBolt
  4. Codecademy SQL

Ну что ж, пока все. Имея перечисленные ресурсы, вы можете начать работу с SQL в кратчайшие сроки. Возможно, в будущем я напишу статью, которая покажет вам, как получить доступ к базе данных через R! Это должно быть весело. Если вы хотите, чтобы я кое-что прояснил, дайте мне знать.

Если вам понравилась эта статья, нажмите кнопку рекомендовать.