← Назад к вопросам

Что вернется если сделать SELECT?

1.3 Junior🔥 272 комментариев
#Базы данных и SQL

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Общая концепция выполнения SELECT

Если просто написать оператор SELECT без указания таблицы и условий, результат будет зависеть от конкретной СУБД и контекста выполнения. В большинстве реляционных баз данных простой SELECT без FROM считается невалидным синтаксисом и вызовет ошибку. Однако есть важные исключения и особенности.

Поведение в различных СУБД

MySQL и MariaDB

В MySQL/MariaDB можно выполнить SELECT без FROM для вычисления выражений:

SELECT 1 + 1;
-- Вернет: 2
SELECT NOW(), VERSION();
-- Вернет текущее время и версию СУБД

PostgreSQL

PostgreSQL также поддерживает SELECT без FROM:

SELECT 2 * 3;
-- Вернет: 6

SQLite

SQLite ведет себя аналогично:

SELECT 'Hello' || ' World';
-- Вернет: 'Hello World'

Oracle Database

В Oracle требуется указать FROM, но можно использовать специальную псевдотаблицу DUAL:

SELECT 1 + 1 FROM dual;
-- Вернет: 2

Microsoft SQL Server

До версии 2017 требует FROM, но с 2017+ можно использовать:

SELECT 1 + 1;
-- В новых версиях вернет: 2

Примеры практического использования

Вычисление выражений

-- MySQL/PostgreSQL/SQLite
SELECT 
    10 * 5 AS multiplication,
    PI() AS pi_value,
    CURRENT_DATE AS today;

Тестирование подключения

Часто используется для проверки работоспособности БД:

SELECT 1;
-- Простой способ проверить, что БД отвечает

Инициализация переменных (в некоторых СУБД)

-- MySQL
SELECT @variable := 100;
SELECT @variable;

Важные технические детали

Структура возвращаемых данных

Даже при SELECT без FROM возвращается стандартный набор результатов:

  • Заголовки столбцов (имена или выражения)
  • Одна строка данных с результатами вычислений
  • Метаданные о типах возвращаемых значений

Контекст в PHP приложении

В PHP коде это может выглядеть так:

<?php
// Пример для MySQL
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->query('SELECT 1 + 1 AS result');

$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo $row['result']; // Выведет: 2

// Или для получения скалярного значения
$result = $pdo->query('SELECT COUNT(*) FROM users')->fetchColumn();
?>

Типичные ошибки и исключения

Синтаксические ошибки

-- В некоторых СУБД это вызовет ошибку:
SELECT *;
-- Ошибка: Не указана таблица для FROM

Логические ошибки

-- Даже если синтаксис верный, логика может быть неочевидной
SELECT 1/0;
-- В большинстве СУБД вернет NULL или вызовет ошибку деления на ноль

Практические рекомендации для backend-разработчика

  1. Всегда указывайте таблицу для реальных запросов к данным
  2. Используйте SELECT без FROM только для:
    • Тестовых запросов
    • Вычислений констант
    • Проверки подключения к БД
  3. Учитывайте специфику СУБД - переносимость кода между разными базами данных
  4. Экранируйте и валидируйте все пользовательские данные перед подстановкой в запрос

Безопасность и производительность

Даже простой SELECT без FROM выполняется на сервере БД и:

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

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