Изучите один из самых популярных языков данных
Привет всем. Надеюсь, у тебя все хорошо. Сегодня мы рассмотрим 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
Все запросы заканчиваются точкой с запятой. Запросы состоят из операторов (слов в верхнем регистре), которые структурируют то, как вы хотите, чтобы данные возвращались. Четыре наиболее распространенных утверждения:
- ВЫБРАТЬ: Выбрать эти данные
- ОБНОВЛЕНИЕ: изменить эти данные
- ВСТАВИТЬ: Добавить новые данные
- УДАЛИТЬ: удалить эти данные
Также для тех, кто не знаком с SF5, вот что означают некоторые столбцы.
- Здоровье: сколько урона может получить персонаж.
- Оглушение: урон, который может получить персонаж до того, как он будет «оглушен» или обездвижен.
- Происхождение: В какой игре Street Fighter дебютировал персонаж.
- Снаряд: имеет ли персонаж движение типа «огненный шар».
- 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. Самое лучшее в них то, что они бесплатны, и вам не нужно загружать базу данных, чтобы практиковаться! Насколько это аккуратно?
Ну что ж, пока все. Имея перечисленные ресурсы, вы можете начать работу с SQL в кратчайшие сроки. Возможно, в будущем я напишу статью, которая покажет вам, как получить доступ к базе данных через R! Это должно быть весело. Если вы хотите, чтобы я кое-что прояснил, дайте мне знать.
Если вам понравилась эта статья, нажмите кнопку рекомендовать.