Базы данных | Практическое занятие 4
Выборка данных и выполнение операций с использованием логических операторов в PostgreSQL
Введение
В этом руководстве мы сосредоточимся на извлечении конкретных данных из базы данных с помощью оператора SELECT
в SQL, уделяя особое внимание фильтрации данных с использованием логических операторов, таких как AND
, OR
и NOT
. Эти операторы позволяют нам комбинировать несколько условий для выбора именно тех данных, которые нам нужны. Мы будем использовать PostgreSQL в качестве системы управления базами данных и pgAdmin 4 в качестве интерфейса для выполнения запросов.
К концу этого руководства вы сможете:
- Писать базовые операторы
SELECT
для извлечения данных из таблицы. - Использовать предложение
WHERE
для фильтрации данных на основе определенных условий. - Комбинировать условия с помощью логических операторов
AND
,OR
иNOT
. - Понимать важность круглых скобок в сложных запросах.
Это руководство предполагает, что вы уже знакомы со следующими темами:
- Установка и настройка PostgreSQL.
- Проектирование баз данных и понимание диаграмм сущность-связь.
- Создание, изменение и удаление таблиц в SQL.
Настройка примера базы данных
Чтобы следовать примерам, мы сначала создадим пример таблицы под названием students
и заполним ее данными. Эта таблица послужит основой для всех запросов в этом руководстве.
- Откройте pgAdmin 4 и подключитесь к вашему серверу PostgreSQL.
- Выберите Tools > Query Tool (Инструменты > Инструмент запросов), чтобы открыть редактор SQL.
- Выполните следующие команды SQL, чтобы создать и заполнить таблицу
students
:
CREATE TABLE students (
student_id SERIAL PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
age INTEGER,
major VARCHAR(50),
gpa DECIMAL(3,2)
);
INSERT INTO students (first_name, last_name, age, major, gpa) VALUES
('John', 'Doe', 20, 'Computer Science', 3.5),
('Jane', 'Smith', 22, 'Mathematics', 3.8),
('Alice', 'Johnson', 19, 'Physics', 3.2),
('Bob', 'Brown', 21, 'Chemistry', 2.9),
('Charlie', 'Davis', 23, 'Biology', 3.6),
('Diana', 'Miller', 20, 'Computer Science', 3.7),
('Eve', 'Wilson', 22, 'Mathematics', 3.9),
('Frank', 'Taylor', 19, 'Physics', 3.1),
('Grace', 'Anderson', 21, 'Chemistry', 3.0),
('Hank', 'Thomas', 23, 'Biology', 3.4);
Это создаст таблицу с 10 записями о студентах, каждая из которых содержит идентификатор студента, имя, фамилию, возраст, специальность и средний балл (GPA).
Оператор SELECT
Оператор SELECT
используется для извлечения данных из базы данных. Его базовый синтаксис:
SELECT column1, column2, ... FROM table_name WHERE condition;
column1, column2, ...
: Столбцы, которые вы хотите извлечь. Используйте*
, чтобы выбрать все столбцы.table_name
: Имя таблицы, из которой нужно извлечь данные.WHERE condition
: Необязательное предложение для фильтрации данных на основе определенных критериев.
Например, чтобы выбрать все столбцы из таблицы students
:
SELECT * FROM students;
Чтобы выбрать только столбцы first_name
и last_name
:
SELECT first_name, last_name FROM students;
Фильтрация данных с помощью предложения WHERE
Предложение WHERE
позволяет фильтровать данные на основе определенных условий. Например, чтобы выбрать студентов, специализирующихся на ‘Computer Science’ (Информатика):
SELECT * FROM students WHERE major = 'Computer Science';
Этот запрос возвращает всех студентов, у которых major
(специальность) равна ‘Computer Science’.
Важные замечания:
- Строковые значения в условиях должны быть заключены в одинарные кавычки (например,
'Computer Science'
). - Числовые значения не требуют кавычек (например,
20
или3.5
). - Сравнения строк в PostgreSQL чувствительны к регистру, поэтому
'Computer Science'
отличается от'computer science'
.
Логические операторы: AND
, OR
и NOT
Логические операторы позволяют комбинировать несколько условий в предложении WHERE
:
AND
: Возвращает true (истина), только если оба условия истинны.OR
: Возвращает true, если хотя бы одно из условий истинно.NOT
: Отрицает условие, возвращая true, если условие ложно.
Использование AND
Оператор AND
объединяет два или более условий, и запрос возвращает строки, только если все условия истинны.
Пример: Чтобы выбрать студентов, специализирующихся на ‘Computer Science’ со средним баллом выше 3.5:
SELECT * FROM students WHERE major = 'Computer Science' AND gpa > 3.5;
Вы также можете использовать несколько операторов AND
:
SELECT * FROM students WHERE major = 'Computer Science' AND gpa > 3.5 AND age < 22;
Этот запрос выбирает студентов, которые удовлетворяют всем трем условиям.
Использование OR
Оператор OR
объединяет два или более условий, и запрос возвращает строки, если хотя бы одно из условий истинно.
Пример: Чтобы выбрать студентов, специализирующихся либо на ‘Computer Science’, либо на ‘Mathematics’:
SELECT * FROM students WHERE major = 'Computer Science' OR major = 'Mathematics';
Использование NOT
Оператор NOT
отрицает условие.
Пример: Чтобы выбрать студентов, которые не специализируются на ‘Physics’:
SELECT * FROM students WHERE NOT major = 'Physics';
Это эквивалентно:
SELECT * FROM students WHERE major <> 'Physics';
Однако в этом руководстве мы сосредоточимся на использовании NOT
с условиями.
Комбинирование логических операторов
Вы можете комбинировать AND
, OR
и NOT
в одном запросе. При этом крайне важно использовать круглые скобки, чтобы указать порядок операций и избежать путаницы.
Пример: Чтобы выбрать студентов, которые специализируются на ‘Computer Science’ или ‘Mathematics’ и имеют средний балл выше 3.5:
SELECT * FROM students WHERE (major = 'Computer Science' OR major = 'Mathematics') AND gpa > 3.5;
Без круглых скобок запрос может быть неверно истолкован из-за приоритета операторов.
Приоритет операторов:
В SQL оператор AND
имеет более высокий приоритет, чем OR
. Это означает, что в выражении без круглых скобок AND
вычисляется перед OR
. Например:
SELECT * FROM students WHERE major = 'Computer Science' OR major = 'Mathematics' AND gpa > 3.5;
Это эквивалентно:
SELECT * FROM students WHERE major = 'Computer Science' OR (major = 'Mathematics' AND gpa > 3.5);
Чтобы избежать двусмысленности, всегда используйте круглые скобки в сложных условиях.
Другой пример с NOT
:
Чтобы выбрать студентов, которые не специализируются на ‘Computer Science’ или ‘Mathematics’:
SELECT * FROM students WHERE NOT (major = 'Computer Science' OR major = 'Mathematics');
Этот запрос возвращает студентов, специализирующихся в любой другой области.
Практические упражнения
Чтобы закрепить понимание, попробуйте написать и выполнить следующие запросы:
- Выберите студентов, которые старше 20 лет и имеют средний балл ниже 3.5.
SELECT * FROM students WHERE age > 20 AND gpa < 3.5;
- Выберите студентов, которые специализируются на ‘Biology’ (Биология) или ‘Chemistry’ (Химия) и моложе 22 лет.
SELECT * FROM students WHERE (major = 'Biology' OR major = 'Chemistry') AND age < 22;
- Выберите студентов, которые не специализируются на ‘Physics’ (Физика).
SELECT * FROM students WHERE NOT major = 'Physics';
- Выберите студентов, которые специализируются на ‘Computer Science’ со средним баллом выше 3.5 или специализируются на ‘Mathematics’ со средним баллом выше 3.8.
SELECT * FROM students WHERE (major = 'Computer Science' AND gpa > 3.5) OR (major = 'Mathematics' AND gpa > 3.8);
Поэкспериментируйте с изменением этих запросов, чтобы увидеть, как меняются результаты. Это поможет вам понять, как логические операторы влияют на выборку данных.