SQL

Создание SQL запроса средствами другого SQL запроса -- пример ;)

Forums:

Когда это нужно

Ситуация возникает, когда в какой-то локальной базе, например, в одной из табилиц у вас есть полезная информация, которую хотелось бы перенести в другую БД, но накатить дамп таблицы возможности нет (например, на эту таблицу на втором сервере ссылаются внешние ключи), поэтому придётся использовать UPDATE, который перенёс бы значение "за раз".
Именно такой запрос мы и сгенерировали в этом примере.

yii2 Пример миграции с полями в т.ч: decimal, bool (логического), unsigned Not NUll, Defautl value (по умолчанию), внешний ключ


public function safeUp()
{

    //Добавляем все необходимые поля
    $this->createTable($this->tableName, [
        'id' => $this->primaryKey()->notNull(),
        'organization_id' =>  $this->integer()->notNull()
                ->comment('Связь с  организации'),
        'frmo_id' =>   $this->integer()->defaultValue(null)
            ->comment('id здания '),
        'build_name' => $this->string(256)->notNull()
            ->comment('Наименование здания'), // для строк переменной длины, напр. вместо varchar(256)

Вопрос по подзапросам -- вычисляемые поля. Когда и как выполняется подзрапрос, порядок выполнения

Forums:

В учебнике Бена Форта имеется вот такой пример к главе 11 "Использование подзапросов":

SELECT cust_name, cust_state,
(SELECT COUNT(*)
 FROM Orders
 WHERE Orders.cust_id = Customers.cust_id) AS orders
 FROM Customers
 ORDER BY cust_name;

Для ясности поясню - подразумевается выборка количества заказов (которые хранятся в таблице Orders) каждого клиента (список которых хранится в таблице Customers,). Вот отрывок из пояснения к коду:

Кортеж -- что это в программировании

Кортеж -- некий упорядоченный набор элементов фиксированной длины (общее определение).

То есть кортеж -- это несколько элементов выстроенных в строгом порядке, причем их число известно.

В СУБД

В реляционных СУБД под кортежем обычно понимают строку из любой таблицы (она как раз содержит фиксированное число значений, ведь в таких СУБД число колонок в конкретной таблице для любой строки одно и тоже) -- т.е. фактически это набор значений из строки таблицы БД.

SELECT -- структура запроса. Простой пример (sql)

Forums:

Самый простой случай

Самый простой случай -- это выборка из одной конкретной таблицы.

В общем виде схема работы SELECT следующая:

 SELECT  чтовыбираем(имена столбцов)  FROM откуда(т.е. имя таблицы);

Для конкретной реализации могут быть варианты:

mysql table already exists error -- Ошибка Решение

Forums:

table already exists

-- такая ошибка означает, то таблица уже существует.

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

  1. вы уже её развернули, а теперь пытаетесь это сделать второй раз (можно просто отказаться от этих попыток и начать работать с базой :)
  2. вы развернули не все таблицы, но какие-то развернули и из-за них возникают ошибки

Как заново развернуть дамп

Чтобы заново развернуть дамп:

Как начать изучать SQL -- разворачиваем дамп учебной базы данных

ОБНОВЛЕНИЕ: актуальная инструкция по началу в Linux тут: http://fkn.ktu10.com/?q=node/14152

[план подготовки]

Учебние по SQL для начинающих -- Бен Форта SQL 10 минут на урок (Освой самостоятельно) -- скачать

Forums:

Скачать можно:

  • отсюда: https://yadi.sk/i/EltnXWHi3Lp3Qa
  • Или в нашей группе: https://vk.com/topic-58271214_35589128

Также можно скачать дамп учебной базы данных (MySQL) для этой книги ну и вообще использовать наш SQL (MySQL) справочник.

sql Добавить в выборку значение (столбец, колонку) из подзапроса (не зависимого) -- добавить ещё одну величину. Пример SQL

Forums:

Например:

SELECT
br.name,  /* этот столбец извлекаем обычно*/
(  			
	SELECT  /* Сколь угодно сложный подзапрос, 
				возвращающий один столбец*/
		sum(CASE WHEN b.budget_plan IS NOT NULL THEN b.budget_plan ELSE 0 END) as plan
	FROM adv_brands br
	LEFT OUTER JOIN adv_booking b ON br.id=b.brand_id
	WHERE br.company_id = 1 AND br.isActive=1
)
as plan, /* для этого столбца используем значения подзапроса*/

FROM adv_brands br
LEFT OUTER JOIN adv_booking_history bh ON bh.booking_id=b.id
   WHERE  br.isActive=1;

Pages

Subscribe to RSS - SQL