База по базам. SQL для тестировщика

В комплект обязательных скиллов Junior QA уже уверенно входит знание основ баз данных. Именно тестированием БД вряд ли придется заниматься, по крайней мере сразу, но ввиду громадной конкуренции в Trainee и Junior-сегментах будет не лишним расширить скилл-сет. Это вводный гайд по базам данных от QAMadness, дополненный гайдом по SQL от ArtofTesting.

(Если вы искали не гайд/практикум по SQL для новичков, а что-то по тестированию баз данных, то этому посвящен отдельный очень подробный гайд.)

Вводный гайд по базам данных для QA

Что такое база данных?

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

Доступ к информации в БД осуществляется с помощью СУБД (DBMS) — систем управления базами данных. СУБД-система предоставляет удобные методы работы с данными в БД для пользователей и программ. 

SQL — язык программирования, предназначенный для управления данными в БД.

Какие существуют типы БД

Типов баз данных существуют десятки, среди них выделяют:

  • Реляционные базы данных, основным признаком которых служит то, что данные в таких БД организованы в виде набора таблиц, состоящих из строк и столбцов — что обеспечивает эффективный доступ к этим упорядоченным данным. «Табличное» устройство — отличительный признак реляционных БД.
  • В объектно-ориентированных базах данных данные представляются в виде объектов, как в объектно-ориентированном программировании.
  • Базы данных типа Datastore, приспособленные для быстрого анализа и выполнения запросов.
  • Распределенные базы данных хранят свои данные распределенно, на нескольких устройствах, которые могут находиться в одном месте или быть рассредоточены, составляя «сетевую БД».
  • Графовые базы данных хранят свои данные в системе из сущностей (entities) и взаимосвязей между ними (графов); в таком виде данные могут храниться например в социальных сетях и сервисах рекомендаций/подсказок; что удобнее чем в табличных реляционных БД.
  • БД, организованные по иерархической модели, в которых данные представляются в виде древовидной (иерархической) структуры, состоящей из объектов различных уровней.
  • Нереляционные базы данных (NoSQL) предназначены для хранения и обработки неструктурированных/частично структурированных данных и данных со сложной структурой.
  • Аналитический тип БД предназначен для обработки большого количества операций, одновременно выполняемых большим количеством пользователей.

Еще несколько подвидов БД:

  • Автономные базы данных
  • Облачные базы данных
  • Базы данных с открытым исходным кодом
  • Документальные базы данных (JSON-типа)
  • Мультимодельные базы данных

Наиболее часто используемый софт для БД (то есть «бренды» в мире БД, которые нужно знать):

  • MySQL
  • Oracle Database
  • Microsoft Access
  • Microsoft SQL Server
  • MongoDB
  • ElasticSearch

Самые распространенные системы управления базами данных

Многие СУБД поддерживают формат данных как SQL, так и NoSQL.

Из чего состоит база данных

Из пяти основных компонентов: аппаратная часть (Hardware), программная часть (Software), собственно данные (Data), процедур (Procedures), и языка доступа к данным (Database access language).

  • Аппаратная часть: физические устройства, на которых хранится база данных. К ним относятся компьютеры, серверы, жесткие диски, процессоры и сетевые устройства.
  • Программная часть для работы с базами данных позволяет создавать, редактировать и управлять файлами, содержащимися в базе данных. Также создавать отчеты, управлять доступом и обеспечивать безопасность.
  • Данные: это информация, которая хранится в базе данных. Существует три типа данных: структурированные, полу-структурированные, и неструктурированные. 
  • Язык доступа к данным: язык программирования, который используется для доступа, обновления, удаления и извлечения данных. Наиболее распространенным языком баз данных является Язык Структурированных Запросов (SQL), который был первоначально разработан в 1970-х годах компанией IBM.
  • Процедуры: набор правил или инструкций, которые заданы для базы данных. Они определяют, как должны выполняться действия с ней.

Реляционные и нереляционные базы данных

Реляционные базы данных

Реляционные базы данных, или базы данных на основе SQL, изобретены в 1970 году в компании IBM, и это все еще основной тип БД. Они используют язык SQL для управления данными и выполнения запросов. Данные в реляционной базе данных организованы в соответствии со схемой — «чертежом», который описывает, как будут храниться данные.

Данные в этих таблицах связаны друг с другом, поэтому БД называются реляционными. К примеру, в одной таблице собрана информация о клиентах, в другой — об их заказах, и эти таблицы связаны в рамках одной БД, при помощи первичных ключей (Primary Key) — уникальных значений, идентифицирующих определенные строки в таблице. Когда первичный ключ добавляется в другую таблицу, для связывания данных, он называется «внешним ключом» (ниже первичный ключ — CustomerID):

И есть другая таблица в этой же БД, в которой содержатся инвойсы:

Вторая таблица дважды ссылается на данные в первой таблице. Ключ «CustomerID» делает эту связь возможной.

Пример реляционной БД

Итак, табличное представление облегчает операции с БД, делая их нагляднее:

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

Распространенные реляционные базы данных:

  • Oracle
  • Microsoft SQL Server
  • PostgreSQL
  • MySQL
  • SAP HANA
  • IBM Db2

Преимущества реляционных БД:

  • Соответствие стандарту ACID: Соответствие стандарту Atomicity, Consistency, Isolation and Durability (ACID) гарантирует согласованность (консистентность) транзакций. При сбое одной части транзакции происходит сбой всей транзакции, и база данных возвращается к предыдущей итерации.
  • Нормализация: Нормализация уменьшает избыточность данных и повышает их целостность, поскольку позволяет эффективно организовать данные. Это снижает затраты на хранение данных.
  • Точность данных: Использование первичных и внешних ключей предотвращает дублирование записей. Это обеспечивает высокий уровень точности данных, по сравнению с другими типами баз данных.
  • Надежность: Реляционные базы данных используют язык SQL, который является широко распространенным и признанным языком программирования.

Недостатки реляционных баз данных:

  • Высокая стоимость: Создание реляционной базы данных требует больших затрат. Вам потребуется приобрести аппаратное и программное обеспечение. Также необходимо нанять технического специалиста для настройки и обслуживания системы, а это дорого, особенно для малого бизнеса.
  • Сложности с масштабированием: Данные в реляционной базе данных хранятся в строках и столбцах, что занимает много физической памяти. Масштабирование по вертикали (добавление дополнительных ресурсов на сервер) возможно, но это также приведет к удорожанию системы.
  • Проблемы с производительностью: Добавление большего количества данных в реляционную базу данных повышает ее сложность, что может привести к замедлению времени отклика.
  • Ограничения: Реляционные базы данных отлично подходят для хранения структурированных данных. Но они не идеальны, если вам нужно хранить неструктурированные данные, такие как изображения и текстовые файлы.

Нереляционные базы данных

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

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

Существует четыре типа баз данных NoSQL: документ, граф, ключ-значение и колоночные.

Подробнее:

  • Документ: Базы данных, ориентированные на хранение документов, построены по гибкой схеме. Они хранят данные в виде JSON-документа — стандартного текстового формата хранения различных типов данных. Информация об объекте и связанные с ним метаданные хранятся в одном документе.
  • Граф: Графовые базы данных (или семантические базы данных) имеют графовую структуру. Они хранят данные в узлах и отображают их взаимосвязи в ребрах. Этот тип базы данных предлагает гибкий способ хранения данных, поскольку можно постоянно добавлять в БД новые узлы и ребра.
  • Ключ-значение: Базы данных типа «ключ-значение» — одна из самых простых баз данных типа NoSQL. Они хранят ключи со значениями, которые могут быть разных типов: числа, строки или более сложные объекты. Они передают данные, извлекая значение, связанное с их уникальным ключом.
  • Колоночные: Колоночные (или столбцовые) базы данных похожи на реляционные базы данных тем, что хранят данные в таблицах, столбцах и строках. Однако названия и формат столбцов могут быть разными для каждой строки. Этот тип базы данных хорошо подходит для больших данных и хранения аналитических данных, так как хорошо подходит для хранения больших наборов данных (датасетов).

Преимущества нереляционных БД:

  • Масштабируемость: Нереляционные базы данных отличаются высокой степенью масштабируемости. Вместо того чтобы «в лоб» расширять БД, жертвуя объемом хранилища, их легко масштабировать «горизонтально», добавляя дополнительные хранилища когда понадобится. Реляционные базы данных тоже можно масштабировать горизонтально, но сделать это сложнее (и дороже).
  • Гибкая структура данных: Реляционные базы данных ограничивают тип данных, которые вы можете хранить. В нереляционных базах данных можно хранить самые разные типы данных — текст, мейлы, фотографии, видео и звук.
  • Высокоскоростная обработка данных: При правильной настройке нереляционные БД способны обрабатывать очень большие объемы данных из различных источников. Разработчики могут быстрее получать доступ к данным.

Недостатки нереляционных баз данных:

  • Проблема стандартизации: Одним из существенных недостатков нереляционных БД является отсутствие стандартизации. Не существует общего стандарта, определяющего роли и правила. Язык запросов также сильно различается для разных нереляционных БД.
  • Несоответствие ACID-принципу: Соответствие ACID обеспечивает согласованность транзакций. Однако не все нереляционные базы данных поддерживают ACID-стандарт, что может негативно влиять на целостность данных.
  • Рост количества неиспользуемых данных: Хотя нереляционные базы данных позволяют легко обрабатывать очень большие объемы данных, их применение может привести к появлению так называемых «темных данных» — неиспользуемых данных, которые хранят, но не извлекают из них никакой пользы. Это может привести к проблемам с качеством данных и увеличению затрат на их хранение.

Пример нереляционной БД

Итак, данные хранятся не в виде строк и столбцов, а в виде пар ключ-значение. Например, в парах ключ-значение — объекты, представляющие каждого пользователя:

Иерархические базы данных

Иерархическая база данных хранит данные в виде дерева (ветвящейся структуры со связями между элементами типа «родитель-ребенок»). Данные хранятся в виде записей или узлов, соединенных между собой связями. Иерархическая СУБД позволяет создавать и управлять базами данных такого типа.

Четыре основных операции CRUD

Иногда от QA-команды требуется в том числе тестирование баз данных, в основном это сводится к проверке целостности данных и корректности их обновления. 

Чаще всего тестировщик имеет дело с табличными, то есть реляционными БД.

Фронтенд и бекенд любого приложения неразрывно связаны, поэтому когда определенное действие пользователя (или тестировщика в нашем случае) выполняется на фронтенде приложения — соответствующее действие производится на бекенде, в виде выполняемого запроса.

Распространенная задача в QA: проверить, были ли обновлены записи после действия пользователя, и корректно ли сработал бекенд.

Чтобы запомнить четыре главных операции с БД, используется мнемоника CRUD (Create, Read, Update, Delete).

  • C (Create): Когда пользователь сохраняет транзакцию, база данных выполняет операцию INSERT.
  • R (Read): Когда пользователь просматривает/ищет сохраненную транзакцию, база данных выполняет операцию SELECT.
  • U (Update): Когда пользователь редактирует существующую запись, база данных выполняет операцию UPDATE.
  • D (Delete): Когда пользователь удаляет запись, база данных выполняет команду DELETE.

Типы тестирования БД

  • Тестирование структуры БД подразумевает использование таблиц, столбцов и схем БД для тестирования хранимых процедур и триггеров.
  • Функциональное тестирование БД — проверка работоспособности БД с точки зрения пользователя. Это может быть тестирование по принципу белого ящика или черного ящика.
  • Нефункциональное тестирование БД включает в себя тестирование производительности (нагрузочное и другие подтипы), рисков связанных с БД, а также анализ минимальных системных требований.

Что такое транзакция, триггер и процедура

Следует ознакомиться с некоторыми терминами, имеющими отношение к базам данных: транзакции, триггеры и процедуры.

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

Типичные сценарии тестирования БД

Теперь перейдем к более практическим вещам. Наиболее часто используемые сценарии тестирования БД:

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

Во второй части гайда, более практической, рассмотрим типы данных и операторы SQL.

Гайд по SQL для QA

Важность SQL для тестировщиков

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

QA-инженер должен (как минимум) уметь писать стандартные SQL-запросы получения, обновления и вставки данных. Уровень требований постоянно повышается, от джунов требуют то, что 10 лет назад не всегда умел QA-миддл, поэтому изучение SQL сейчас важно не только для администраторов баз данных и SQL-разработчиков как раньше, но и для QA-специалистов. 

Гайд рассчитан на Junior, уже имеющих какое-то представление об SQL. Освежим основы, затем перейдем к базовым концепциям SQL, и плотнее рассмотрим часто используемые команды (операторы) SQL, с примерами.

Еще раз о БД и СУБД

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

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

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

СУБД определяет правила обработки и проверки этих данных. 

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

Еще раз о реляционных БД (RDBMS)

Как мы уже знаем, реляционные СУБД — самый распространенный тип СУБД. Подобная система управления базами данных использует реляционную модель организации своих данных.

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

Таблицы, строки и колонки

Таблицы

Таблица — это набор данных, связанных друг с другом в виде строк и столбцов.

Строки

Строка представляет собой набор полей, которые в итоге образуют запись (record) в базе данных.

Столбец

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

Что такое SQL

SQL означает «язык структурированных запросов», что отражает его суть и предназначение. Это язык программирования, который используется для обработки информации в базах данных, в первую очередь для управления данными в реляционных БД. SQL позволяет выполнять такие действия с базой, как вставка данных, их удаление, выборка, сортировка и т. д.

SQL широко распространен и остается стандартом в мире БД, поскольку с помощью этого языка удобно создавать, хранить и обрабатывать данные. Кроме того, блоки кода на SQL могут встраиваться в код на других языках программирования с помощью библиотек и модулей.

Типы данных SQL

В SQL существуют типы данных:

Тип данныхОписание
VARCHAR(size)Символьные данные переменной длины
CHAR (size)Символьные данные фиксированной длины
BINARY (size)Двоичные байтовые строки
NUMBER(a,b)Числовые данные переменной длины
DATEЗначения даты и времени
LONGСимвольные данные переменной длины до 2 Гб
CLOBСимвольные данные до 4 гигабайт
RAWНеобработанные двоичные данные
BLOBДвоичные данные до 4 гигабайт
BFILEДвоичные данные, которые хранятся во внешнем файле объемом до 4 гигабайт
ROWID64-базовая система счисления для уникального адреса строки в таблице

Примечание: В разных базах данных типы данных могут иметь разные названия. И даже если имя одинаковое, размер и другие детали могут достаточно сильно отличаться. (Например, MySQL не поддерживает ни одного типа данных Unicode, а Oracle не поддерживает «datetime»). Всегда проверяйте документацию.

Операторы: арифметические, сравнения, логические

Арифметические операторы

ОператорЧто делает
+Сложение значений операндов
Вычитание значений операндов
*Умножение значений операндов
/Деление значений операндов
%Целочисленный остаток от деления

Операторы сравнения

В таблице ниже, если условие выполняется, то возвращается булево значение «True».

Оператор Описание
=Проверяет, равны ли значения операндов.
!=Проверяет, НЕ равны ли значения операндов.
>Проверяет, больше ли левый операнд, чем правый.
<Проверяет, больше ли правый операнд, чем левый.
>=Проверяет, больше или равен ли левый операнд, чем правый.
<=Проверяет, больше или равен ли правый операнд, чем левый.
!>Проверяет, не больше ли правый операнд, чем левый.
!<Проверяет, не больше ли левый операнд, чем правый.

Логические операторы

ОператорОписание
ORВозвращает true, если один из операндов истинен. Возвращает false, если оба операнда ложны.
ANDВозвращает true, если оба операнда истинны. Возвращает false, если один или оба операнда ложны.
NOTВозвращает true, если условие ложно, и возвращает false, если условие истинно.

Команды SQL — общая схема

Create Database

Оператор CREATE DATABASE используется для создания новой базы данных SQL. Ниже приведен синтаксис.

CREATE DATABASE database_name;

Drop Database

Команда DROP DATABASE предназначена для сброса или удаления существующей базы данных SQL. Синтаксис —

DROP DATABASE database_name;

Rename Database

Команда RENAME DATABASE — для переименования существующей базы данных.

RENAME DATABASE old_database_name TO new_database_name;

Select * From

Команда SELECT DATABASE используется для выбора всех полей в существующей базе данных. 

SELECT * FROM database_name;

Create table

Команда CREATE TABLE используется для создания новой таблицы.

CREATE TABLE <table_name> (<Field><Datatype><(Width)><constraint>,..);

Drop Table

Команда DROP TABLE используется для удаления существующей таблицы. Синтаксис —

DROP TABLE <table_name>;

Rename Table

Команда RENAME TO используется для изменения имени существующей таблицы — 

RENAME old_table_name TO new_table_name;

Truncate Table

Команда TRUNCATE TABLE используется для удаления всех строк из таблицы с сохранением самой таблицы и ее структуры —

TRUNCATE TABLE <table_name>;

Select * Into

Для копирования таблицы в другую таблицу в той же базе данных. Синтаксис —

SELECT * INTO <required_table> FROM <source_table>;

Alter Table

Команда ALTER может использоваться для различных манипуляций с базой данных. Ниже перечислены:

  1. Ниже приведен синтаксис для добавления столбца в таблицу.

ALTER TABLE <table_name> ADD <field_name> <Type> <(width)>; 

ALTER TABLE department ADD dep_name varchar (20);

  1. Ниже приведен синтаксис для изменения атрибутов данных в поле таблицы.

ALTER TABLE <table_name> MODIFY (<column_name > < new_data_type>); 

ALTER TABLE department MODIFY dep_name varchar (15);

  1. Удаление поля таблицы:

ALTER TABLE <table_name> DROP COLUMN < column_name>; 

ALTER TABLE department DROP column address;

  1. Ниже приведен синтаксис переименования столбца.

ALTER TABLE <table_name> RENAME COLUMN <old_column_name> TO <new_column_name>;

ALTER TABLE department RENAME COLUMN dep_id to department_id;

  1. Удаление таблицы и всего ее содержимого:

DROP TABLE <Table_name>; 

DROP TABLE department;

  1. Truncate таблицы — удаление всех строк из таблицы, но сохранение ее структуры.

TRUNCATE TABLE <table_name> 

TRUNCATE TABLE department;

  1. Синтаксис переименования таблицы.

RENAME <old_tablename> TO <new_table_name> 

RENAME dep_name TO department_name;

Ограничения (Constraints) в SQL

ОграничениеОписание
NOT NULLУказывает, что столбец должен иметь значение
UNIQUEУказывает, что столбцы должны иметь уникальные значения
PRIMARY KEYОпределяет столбец или набор столбцов, которые однозначно идентифицируют строку; не допускает нулевых (null) значений
FOREIGN KEYЭто столбец (столбцы), который ссылается на столбец (столбцы) таблицы
CHECKЗадает условие, которому должны удовлетворять все строки таблицы

Команды вставки (Insert)

Команды вставки SQL используются для вставки данных в базу. 

  1. Вставка значений, заданных пользователем — для вставки определенных значений, заданных пользователем, в таблицу. Синтаксис:

INSERT INTO <table_name> VALUES ( val1,val2 …); 

INSERT INTO department VALUES(20, 'HR', 'MOSСOW');

  1. Вставка значений в определенный столбец таблицы — Синтаксис:

INSERT INTO <Table_Name> (column_name1, column_name2, column_name3,..) VALUES (val1, val2, val3,…..); 

INSERT INTO department (dept_id , dep_name) VALUES(20, 'finance');

Операции выбора — оператор SELECT

SELECT *

Оператор SELECT в SQL предназначен для выбора нужных данных из таблиц в БД и отображения их пользователю. 

Ниже приведен синтаксис для получения всех полей:

SELECT * FROM table_name;

Select Distinct

Этот SQL-запрос используется для выбора всех уникальных (не повторяющихся) значений, хранящихся в таблице. Синтаксис —

SELECT DISTINCT column_name FROM table_name;

Select Count

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

SELECT COUNT (column_name) FROM table_name WHERE condition;

SELECT COUNT (dep_sal) FROM department WHERE dep_sal>10000;

Select Top

Для выбора заданного количества первых (верхних) записей в таблице.

SELECT TOP number_of_records FROM table_name WHERE condition;

SELECT TOP 4 FROM department WHERE dep_sal>10000;

Select As

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

SELECT column_name AS new_column_name FROM table_name;

SELECT dep_id AS department_id FROM department;

Select In

IN используется для указания нескольких значений в WHERE-части запроса.

SELECT column_name FROM table_name WHERE column_name IN (val1, val2, …);

SELECT dep_name FROM department WHERE dep_id IN (1020, 1044);

Select GETDATE()

Запрос GETDATE () используется для возврата текущей даты и времени в базе данных, формат которых — ГГГГ-ММ-ДД чч:мм:сс.ммм.

SELECT GETDATE();

Select Sum

Запрос SUM() используется для возврата общей суммы указанного столбца, состоящего из чисел.

SELECT SUM column_name FROM table_name WHERE condition;

SELECT SUM dep_sal FROM department WHERE dep_sal>10000;

Select Null

Для выбора всех записей с нулевыми (null-) значениями.

SELECT column_name FROM table_name WHERE condition IS NULL;

SELECT dep_sal FROM department WHERE dep_sal>10000 IS NULL;

SQL-операторы Where, Group и подобные (SQL Clauses)

Where

Оператор WHERE используется для отбора только тех записей, которые удовлетворяют заданному условию:

SELECT column_name FROM table_name WHERE condition;

SELECT dep_sal FROM department WHERE dep_sal>10000;

And

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

SELECT column_name FROM table_name WHERE condition1 AND condition2 …;

SELECT dep_sal FROM department WHERE dep_sal>10000 AND dep_name=HR;

Or

OR — оператор, который используется для выбора записей по более чем одному условию. Оператор OR возвращает значения, если одно из указанных условий равно TRUE.

SELECT column_name FROM table_name WHERE condition1 OR condition2 …;

SELECT dep_sal FROM department WHERE dep_sal>10000 OR dep_name=HR;

Group By

GROUP BY используется для группировки строк в соответствии с заданным условием или указанным именем столбца. GROUP BY обычно используется с такими функциями, как MAX, IN, AVG, SUM, COUNT.

SELECT column_name FROM table_name WHERE condition GROUP BY column_name;

SELECT COUNT(dep_sal) FROM department GROUP BY dep_name;

Having

Оператор HAVING используется, когда мы хотим задать условие для отбора записей с помощью таких функций, как MAX, IN, AVG, SUM, COUNT, поскольку с этими функциями нельзя использовать WHERE-оператор.

SELECT column_name FROM table_name GROUP BY column_name HAVING condition;

SELECT COUNT (dep_id) FROM department GROUP BY dep_name HAVING dep_sal>10000;

Order By

ORDER BY используется для сортировки по возрастанию или убыванию.

SELECT column_name FROM table_name ORDER BY column_name  ASC/DESC;

SELECT dep_name FROM department ORDER BY dep_id ASC;

Update

UPDATE используется для изменения или модификации любых существующих полей (записей) в таблице.

UPDATE table_name SET column_name1 = val1, column_name2 = val2… WHERE condition;

UPDATE department SET dep_name="travel" WHERE dep_id=1020;

Delete

Удаление полей (записей) из таблицы.

DELETE FROM table_name WHERE condition;

DELETE FROM department WHERE dep_name="Travel";

Union

UNION используется для объединения результирующего набора данных двух или более операторов SELECT.

SELECT column_name FROM table_name1 UNION SELECT column_name FROM table_name2;

SELECT dep_name FROM department UNION SELECT emp_name FROM employee;

Intersect

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

SELECT column_name FROM table_name1 INTERSECT SELECT column_name FROM table_name2;

SELECT dep_name FROM department INTERSECT SELECT emp_dep FROM employee;

Except

Используется между двумя операторами SELECT. Этот оператор выбирает те строки, которые присутствуют в первом операторе SELECT и отсутствуют во втором операторе SELECT.

SELECT column_name FROM table_name EXCEPT SELECT column_name FROM table_name;

SELECT dep_name FROM department EXCEPT SELECT emp_dep FROM employee;

SQL-команда Join

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

Inner Join

Для объединения общих записей в двух наборах данных.

SELECT column_name FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name = table_name2.column_name ;

SELECT dep_name FROM department INNER JOIN employee ON department.dep_name = employee.emp_dep;

Left Join

Для объединения записей из левой таблицы и общих записей обеих таблиц.

SELECT column_name FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name = table_name2.column_name;

SELECT dep_name FROM department LEFT JOIN employee ON department.dep_name = employee.emp_dep;

Right Join

Для объединения записей из таблицы 2(справа) и общих записей из обеих таблиц.

SELECT column_name FROM table_name2 RIGHT JOIN table_name1 ON table_name2.column_name = table_name1.column_name;

SELECT emp_name FROM employee RIGHT JOIN department ON department.dep_name = employee.emp_dep;

Full Outer Join

Используется для объединения всех записей из обеих таблиц, если между ними есть общие записи.

SELECT column_name FROM table_name1 FULL OUTER JOIN table_name2 ON table_name1.column_name = table_name2.column_name;

SELECT dep_name FROM department FULL OUTER JOIN employee ON department.dep_name = employee.emp_dep;

Self Join 

Для объединения таблицы с самой собой путем создания временной таблицы из самой себя и ее объединения с самой собой.

SELECT column_name FROM table1 table_alias1, table2 table_alias2 WHERE condition;

Cross Join

Для объединения двух таблиц, при этом полученный набор результатов будет представлять собой перекрестное произведение количества строк в первой таблице и количества строк во второй таблице. Такой набор результатов называют декартовым произведением.

SELECT * FROM table_name1 CROSS JOIN table_name2;

SELECT * FROM department CROSS JOIN employee;

Подзапросы SQL

Подзапрос SQL — это запрос, вложенный в другой запрос. Эти подзапросы помещаются в такие запросы, как WHERE, HAVING, WITH, FROM и т. д.

Сначала выполняются подзапросы, и результат, полученный после выполнения подзапроса, используется для выполнения внешнего (основного) запроса.

SELECT column_name FROM table_name WHERE condition OPERATOR (SELECT column_name FROM table_name WHERE condition);

В приведенном примере запрос, вложенный внутри предложения WHERE, является подзапросом.

SELECT dep_name FROM department WHERE dep_name in (SELECT dep_name FROM department WHERE dep_sal>1000);

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

Однострочные комментарии в SQL начинаются с двух тире — и продолжаются до конца строки:

-- Однострочный комментарий 

Многострочные комментарии в SQL напоминают комментирование в Java. Они начинаются со слеша и звёздочки /* и заканчиваются звёздочкой со слешем */:

/*

 Многострочный SQL-комментарий

*/

SELECT * FROM users

Примечание: Синтаксис комментариев зависит от системы, к которой выполняется запрос.

Шпаргалки по SQL

Ссылка на PDF (для больших экранов — очень мелкий шрифт)

Источники: 1,2,3,4,5,6

Какой была ваша первая зарплата в QA и как вы искали первую работу?

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

2 КОММЕНТАРИИ

Подписаться
Уведомить о
guest

2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Евгений
Евгений
3 месяцев назад

Закрыт статью сразу после того, как прочитал, что SQL — это язык программирования
Хотя бы читали перед тем, как выложить статью)

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас