SQL за 20 минут

R

Renelio

Original poster
Предлагаем вашему вниманию статью с кричащим названием «SQL за 20 минут». Конечно, весь SQL за 20 минут вы не освоите, но хороший старт получите.

Каждый уважающий себя веб-разработчик должет знать

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

. Хоть он и существует аж с 70-х годов прошлого века, он до сих пор очень широко используется, и без него будет сложно создать нечто серьёзное. Большинство full-stack фреймворков умеют работать с SQL. В их числе:

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

,

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

,

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

и многие другие. Несмотря на это, иногда приходится «замарать руки» и пуститься в настоящий SQL.

Именно поэтому мы подготовили короткое вступление, в котором мы пройдёмся по фундаментальным вещам в SQL. Мы настоятельно рекомендуем вам попробовать все приведённые ниже примеры самостоятельно, ведь, как известно, теория — ничто без практики.

Что ж, приступим!

Создаём таблицу

Для того, чтобы создать таблицу в SQL, используется выражение CREATE TABLE. Он принимает в качестве параметров все колонки, которые мы хотим внести, а также их типы данных.

Давайте создадим табличку с названием «Months», в которой будет три колонки:
  • id — иными словами, порядковый номер месяца (целочисленный тип или int)
  • name — название месяца (строка или varchar(10) (10 символов — максимальная длина строки))
  • days — число дней в конкретном месяце (целочисленный тип или int)
Код будет выглядеть вот так:
Код:
CREATE TABLE months (id int, name varchar(10), days int);

Также, когда создаются таблицы, принято добавлять так называемый primary key. Это колонка, значения в которой уникальны. Чаще всего primary key колонкой является id, но в нашем случае это может быть и name, так как имена всех месяцев уникальны. Для более подробной информации предлагаем перейти по этой

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

.

Ввод данных

Теперь давайте добавим пару месяцев в нашу табличку. Сделать это можно с помощью команды INSERT. Есть два разных способа использовать INSERT:

Первый способ не подразумевает указания названий колонок, а лишь принимает значения в том порядке, в котором они указаны в таблице.
Код:
INSERT INTO months VALUES (1,'January',31);

Первый способ короче второго, однако если в будущем мы захотим добавить дополнительные колонки, все предыдущие запросы работать не будут. Для решения данной проблемы следует использовать второй способ. Его суть в том, что перед вводом данных мы указываем названия колонок.
Код:
INSERT INTO months (id,name,days) VALUES (2,'February',29);

В случае, если мы не укажем одну из колонок, на её место будет записано NULL или заданное значение по умолчанию, но это уже совсем другая история.

Select

Данный запрос используется в случае, если нам нужно показать данные в таблице. Наверное, самым простым примером использования SELECT будет следующий запрос:
Код:
SELECT * FROM characters

Результатом данного запроса будет таблица со всеми данными в таблице characters. Знак звёздочки (*) означает то, что мы хотим показать все столбцы из таблицы без исключений. Так как в базе данных обычно больше одной таблицы, нам необходимо указывать название таблицы, данные из которой мы хотим посмотреть. Сделать это мы можем, используя ключевое слово FROM.

Когда вам нужны лишь некоторые столбцы из таблицы, то вы можете указать их имена через запятую вместо звёздочки.
Код:
SELECT name, weapon FROM characters

Также иногда нам нужно отсортировать выводимые данные. Для этого мы используем ORDER BY «название столбца». ORDER BY имеет два модификатора: ASC (по возрастанию) (по умолчанию) и DESC (по убыванию).
Код:
SELECT name, weapon FROM "characters" ORDER BY name DESC

Where

Теперь мы знаем, как показать только конкретные столбцы, но что если мы хотим включить в вывод лишь некоторые конкретные строки? Для этого мы используем WHERE. Данное ключевое слово позволяет нам фильтровать данные по определённому условию.

В следующем запросе мы выведем только тех персонажей, которые в качестве оружия используют пистолет.
Код:
SELECT *
FROM characters
WHERE weapon = 'pistol';

И/или

Условия в WHERE могут быть написаны с использованием логических операторов (AND/OR) и математические операторы сравнения (=, <, >, <=, >=, <>).

К примеру, у нас есть табличка, в которой записаны данные о 4 самых продаваемых музыкальных альбомах всех времён. Давайте выведем только те, жанром которых является рок, а продажи которых были меньше, чем 50 миллионов копий.
Код:
FROM albums
WHERE genre = 'rock' AND sales_in_millions <= 50
ORDER BY released

In/Between/Like

Условия в WHERE могут быть записаны с использованием ещё нескольких команд, которыми являются:
  • IN — сравнивает значение в столбце с несколькими возможными значениями и возвращает true, если значение совпадает хотя бы с одним из значением
  • BETWEEN — проверяет, находится ли значение в каком-то промежутке
  • LIKE — ищет по шаблону
К примеру, мы можем сделать запрос для вывода данных об альбомах в жанре pop или soul:
Код:
SELECT * FROM albums WHERE genre IN ('pop','soul');

Если мы хотим вывести все альбомы, которые были выпущены в промежутке между 1975 и 1985 годом, мы можем использовать следующую запись:
Код:
SELECT * FROM albums WHERE released BETWEEN 1975 AND 1985;

Также, если мы хотим вывести все альбомы, в названии которых есть буква ‘R’, мы можем использовать следующую запись:
Код:
SELECT * FROM albums WHERE album LIKE '%R%';

Знак % означает любую последовательность символов (0 символов тоже считается за последовательность).

Если мы хотим вывести все альбомы, первая буква в названии которых — ‘R’, то запись слегка изменится:
Код:
SELECT * FROM albums WHERE album LIKE 'R%';

В SQL также есть инверсия. Для примера, попробуйте самостоятельно написать NOT перед любым логическим выражением в условии (NOT BETWEEN и так далее).

Функции

В SQL полно встроенных функций для выполнения разных операций. Мы же покажем вам только наиболее часто используемые:
  • COUNT() — возвращает число строк
  • SUM() — возвращает сумму всех полей с числовыми значениями в них
  • AVG() — возвращает среднее значение среди строк
  • MIN()/MAX() — возвращает минимальное/максимальное значение среди строк
Чтобы вывести год выпуска самого старого альбома, в таблице можно использовать следующий запрос:
Код:
SELECT MAX(released) FROM albums;

Обратите внимание, что если вы напишете запрос, в котором вам, к примеру, нужно будет вывести имя и среднее значение чего-либо, то вы получите ошибку на выводе.

Допустим, вы пишете такой запрос:
Код:
SELECT name, avg(age) FROM students;

Чтобы избежать ошибки, вам следует добавить следующую строку:
Код:
GROUP BY name

Причиной тому является, что запись avg(age) является совокупной (aggregated), и вам необходимо групировать значения по имени.

Вложенные Select

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

Вывести эти столбцы можно, используя следующий запрос:
Код:
SELECT artist, album, released FROM albums;

Также мы знаем, как получить самый ранний год из имеющихся:
Код:
SELECT MIN(released) FROM album;

Объеденить эти запросы можно в WHERE:
Код:
SELECT artist,album,released
FROM albums
WHERE released = (
SELECT MIN(released) FROM albums
);

Присоеденение таблиц

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

В таблице video_games есть столбец developer_id, в данном случае он является так называемым foreign_key. Чтобы было проще понять, developer_id — это связывающее звено между двумя таблицами.

Если мы хотим вывести всю информацию об игре, включая информацию о её разработчике, нам необходимо подключить вторую таблицу. Чтобы это сделать, можно использовать INNER JOIN:
Код:
SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country
FROM video_games
INNER JOIN game_developers
ON video_games.developer_id = game_developers.id;

Это, наверное, самый простой пример использования JOIN. Есть ещё несколько вариантов его использования. Для более подробной информации предлагаем перейти по

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

.

Псевдонимы

Если вы взгляните на предыдущий пример, то вы заметите, что есть два столбца, названных одинаково: «name». Часто это может запутать. Решением данной проблемы являются псевдонимы. Они, к слову, помогают сделать название столбца красивее или понятнее в случае необходимости.

Чтобы присвоить столбцу псевдоним, можно использовать ключевое слово AS:
Код:
SELECT games.name, games.genre, devs.name AS developer, devs.country
FROM video_games AS games
INNER JOIN game_developers AS devs
ON games.developer_id = devs.id;

Update

Зачастую нам нужно изменить данные в таблице. В SQL это делается с помощью UPDATE.

Исполльзование UPDATE включает в себя:
  • выбор таблицы, в которой находится поле, которое мы хотим изменить
  • запись нового значения
  • использование WHERE, чтобы обозначить конкретное место в таблице
Предположим, у нас есть таблица с самыми высокооценёнными сериалами всех времён. Однако у нас есть проблема: «Игра Престолов» обозначена как комедия и нам определённо нужно это изменить:
Код:
UPDATE tv_series
SET genre = 'drama'
WHERE name = 'Game of Thrones';

Удаление записей из таблицы

Удаление записи из таблицы через SQL — очень простая операция. Всё, что нужно — это обозначить, что именно мы хотим удалить.
Код:
DELETE FROM tv_series
WHERE id = 4;

Примечание: убедитесь, что используете WHERE, когда удаляете запись из таблицы. Иначе вы удалите все записи из таблицы, сами того не желая.

Удаление таблиц

Если мы хотим удалить все данные из таблицы, но при этом оставить саму таблицу, нам следует использовать команду TRUNCATE:
Код:
TRUNCATE TABLE table_name;

В случае, если мы хотим удалить саму таблицу, то нам следует исользовать команду DROP:
Код:
DROP TABLE table_name;

Заключение

На этой ноте мы завершаем данный SQL-туториал. Само собой, это не всё, и для полного освоения нужно ещё много изучить, однако данное вступление даст вам толчок для дальнейшего изучения.

Более подробные уроки по SQL вы можете найти, перейдя по следующим ссылкам:
 
N

Nicko77

Original poster
Рекомендую тем , кто изучает языки использовать сайт

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

(не реклама , они в этом не нуждаются) . Там все доходчиво и интуитивно понятно + там можно попрактиковаться . Правда будут необходимо базовые знания английского языка
 
B

BlackMonkey

Original poster
Кому интересно, есть довольно хороший материал на sql-tutorial.ru
 
L

Labean74

Original poster
А статейка то очень хорошая, если чуть-чуть вникнуть можно и страницу подламать!! :) +
Годная тема, жду продолжений!
 
K

KROWIEL

Original poster
Почему бы еще не освятить UNION, бывают ситуации когда он бывает очень полезен. Для тех кто не шарит UNION совмещает 2(или более) таблицы в 1 и мы можем делать более обширную выборку данных с куда более сложными условиями.
Для объединения результатов двух и более SQL-запросов в единую таблицу применяется ключевое слово UNION. Запросы должны возвращать одинаковое число и последовательность совместимых типов данных в соответствующих столбцах.

Синтаксис применения SQL запроса UNION
Оператор UNION размещается между SQL запросами :

select user_id, userName, phone from users
UNION [ALL]
select city_id, cityName, region from cities
UNION [ALL]
select company_id, companyName, address from companies
В представленном примере в одну кучу свалили информацию из трех таблиц, имеющих однотипные столбцы, что, конечно, неправильно, но это работает.

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

UNION может быть использован совместно с оператором ALL для получения всех записей. Но необходимо отметить, что UNION ALL работает быстрее, чем просто UNION, поскольку при использовании оператора UNION проводится дополнительная фильтрация результата аналогичная SELECT DISTINCT, а при использовании UNION ALL — нет.

Правила применения UNION
При использовании UNION необходимо соблюдать несколько правил, регламентирующих порядок применения оператора :

  • совместимость типов данных в соответствующих столбцах запросов;
  • одинаковое число столбцов во всех объединяемых запросах;
  • запрет пустых значений (NULL) в любом столбце объединения;
  • нельзя использовать UNION в подзапросах.
Тип столбцов нескольких запросов может не совпадать, но обязательно должен быть совместимым путем неявного преобразования. Следует помнить, что столбцы с типом данных XML должны быть эквивалентными, т.е. тип столбцов должен быть определен либо в XML-схеме, либо быть нетипизированными. Типизированные столбцы должны относиться к одной и той же коллекции XML-схе
 
Название темы
Автор Заголовок Раздел Ответы Дата
vulcanixx XDumpGO v1.5 - Fastest SQL injection based dumper Бруты/Парсеры/Чекеры 0
Emilio_Gaviriya Статья Гайд по SQL-инъекциям. Уязвимости и взлом 0
Emilio_Gaviriya Статья Что такое SQL-инъекции (ч.1). Уязвимости и взлом 0
F как искать sql уязвимые сайты Вопросы и интересы 4
U [sib-panel/sql dumper][Url parser 500k - 1000 руб Доступы - FTP, shell'ы, руты, sql-inj, БД 2
S SQLi-DB-SQL Injection Dork Scanner v1.0 Уязвимости и взлом 2
N SQLi-DB-SQL Injection Dork Scanner v1.0 Корзина 0
N SQLi-DB-SQL Injection Dork Scanner v1.0 Способы заработка 0
B [Udemy, Максим Гузив] SQL от Михаила. Лучший курс по SQL (2019) Полезные статьи 0
B [Специалист] Анализ данных на языке SQL (2019) Полезные статьи 0
U Проверено SQL-inj MultiTool Доступы - FTP, shell'ы, руты, sql-inj, БД 1
T Обучение SQL-инъекциям в видеоуроках Софт для работы с текстом/Другой софт 1
F sql Другое 0
K [Специалист] Практикум (МАСТЕР): Полнотекстовый поиск в SQL Server (2018) Другое 1
S Обучение SQL-инъекциям Уязвимости и взлом 0
1 Курс по SQL injection Полезные статьи 0
G SQLMAP-обнаружение и эксплуатация SQL инъекции: детальное разъяснение (часть 1) Полезные статьи 0
K [geekbrains] Базы Данных Для Профессионалов И Язык Sql Другое 0
K PHP/SQL: back-end разработка и базы данных Другое 0
K Инструкция по использованию jSQL Injection — многофункционального инструмента поиска и эксплуатации SQL-инъекций в Kali Linux Уязвимости и взлом 0
G JSQL - Java инструмент для автоматизации SQL инъекций Kali Linux 0
G Skipfish - Сканер безопасности веб-приложений для определения XSS, SQL инъекции, а также Shell инъекции Kali Linux 0
D phyton sql Вопросы и интересы 0
Y SQL атака с помощью кали линукс Уязвимости и взлом 5
Little_Prince Чем импортировать в sql ? Другие ЯП 0
J SQL injection Spam/DDOS/Malware 0
W SQL Hunter1.2 (парсер для Google и поиск уязвимостей sql) Spam/DDOS/Malware 12
L 5 сайтов для оттачивания навыков написания SQL запросов Другие ЯП 0
I W3af Web Security Scanner - Программа для поиска и эксплуатации уязвимостей sql-injection Софт для работы с текстом/Другой софт 17
Danzila Мануал SQL. Полезные статьи 0
M SQL инъекции. Проверка, взлом, защита Уязвимости и взлом 0
N Лёгкий метод SQL - Injektion Spam/DDOS/Malware 14
J Вопрос по sql injection на время 2016 года Вопросы и интересы 11
Admin Курс по sql инъекциям Полезные статьи 0
Support81 Санкции и награда за голову: США объявляет войну иранским хакерам Новости в сети 0
Support81 FISA 702: власти США продолжат следить за гражданами под предлогом «нацбезопасности»? Новости в сети 1
V Заплачу дропу(дропше) 10 000 рублей за прохождение верификации на вебмани.Год рождения 1977 или старше. Корзина 0
Support81 «Крыша» за криптовалюту: экс-полицейский МВД России в розыске за взятки на 4,9 млрд рублей Новости в сети 0
Support81 Срочно отключите iMessage: эксплойт за $2 млн дает контроль над iPhone без единого клика Новости в сети 0
Support81 Экс-сотрудник ФСБ на службе у хакеров: 9 лет тюрьмы за крышевание преступников Новости в сети 0
Support81 Инженер Amazon осужден за взлом и кражу $5 млн. Новости в сети 0
Support81 Новый вымогатель SEXi: $140 млн за расшифровку серверов VMWare ESXi Новости в сети 0
El_IRBIS Интересно Отключаем Google Ad Topics в Chrome: Шаг за шагом инструкция с практическим применением. Анонимность и приватность 0
Support81 Check Point сорвала маски с хакеров, ответственных за вредоносную кампанию Agent Tesla Новости в сети 0
Support81 DinodasRAT - новый инструмент китайского шпионажа за правительствами Новости в сети 0
Support81 Кибервойна 2.0: Китай против США - битва за мировое господство Новости в сети 0
Support81 Хакеры сами устраняют уязвимость BIG-IP: борьба за эксклюзивный доступ к зараженным системам Новости в сети 0
Support81 Разведка за кадром, или Аквариум спецслужб Новости в сети 0
Support81 Непальский хакер возглавил Зал славы, взломав Facebook за 1 час Новости в сети 0
turbion0 Мошенник украл сотни тысяч шекелей, выдавая себя за известных людей. Новости в сети 0

Название темы