Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Объяснить суть запроса SQL.

414
09 марта 2013 года
CassandraDied
763 / / 24.05.2012
Хай.
Есть запрос:

 
Код:
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,
    W2.city, W2.temp_lo AS low, W2.temp_hi AS high
    FROM weather W1, weather W2
    WHERE W1.temp_lo < W2.temp_lo
    AND W1.temp_hi > W2.temp_hi;
Он обращён к одной таблице — city, которая хранит имя города, самую высокую температуру и самую низкую.
Результатом запроса будет такая выборка:

Что с чем сравнивается и какой вообще у запроса смысл?
414
09 марта 2013 года
CassandraDied
763 / / 24.05.2012
Чтобы не создавать отдельный топик.
В Oracle PL\SQL необходимо выполнить создание двух таблиц, при этом, если одна из таблиц не создалась, то откатить создание другой. Как это можно сделать без написания функции? То есть, выполнить только блок BEGIN END, в котором будут два CREATE TABLE и обработчик исключений, который и сделает rollback? Неудобно, что создание таблицы необходимы записывать как одну строку(execute immediate ведь не умеет работать с многострочными командами?). Какие ещё варианты реализации этого задания есть или чем можно заменить execute immediate, чтобы он понял многострочную команду?
327
09 марта 2013 года
UserNet2008
748 / / 03.04.2010
Цитата:
Как это можно сделать без написания функции?


Ни как!!!
Дело в том,что таблица-таблице розьн(таблица-это есть переменная)
Надо создавать функцию для проверки, что первая таблица создана и подходит к вашим условиям.

414
09 марта 2013 года
CassandraDied
763 / / 24.05.2012
Цитата: UserNet2008
Цитата:
Как это можно сделать без написания функции?


Ни как!!!
Дело в том,что таблица-таблице розьн(таблица-это есть переменная)
Надо создавать функцию для проверки, что первая таблица создана и подходит к вашим условиям.



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

327
09 марта 2013 года
UserNet2008
748 / / 03.04.2010
Цитата:
эксепшонов


Можно это на английском.
В вашей трех вопросах разные требования.

И еще Ваше:
Хай на Русском сайте это лишнее. (Замените на Hello или Хелло)
Я хоть и иностранец, но знаю, что такое 1941-1945г для USSR.

А фото не при делах.

414
09 марта 2013 года
CassandraDied
763 / / 24.05.2012
Цитата: UserNet2008

В вашей трех вопросах разные требования.


[offtop]
А, это снова вы. А я вас помню...Было это года два назад. Вы тогда ещё писали, какой коднет ужасный и как тут недобро к новичкам относятся и обещались покинуть сию обитель и свалить обратно в свой уютный ГДР.
[/offtop]
Не отрицаю — возможно, в вопросе про Oracle требования и странные и неоднородные...но это оттого, что я не знаю, как мне было бы удобнее этим пользоваться, хотя имею представление о нескольких направлениях решения моей задачи. Мне не хочется писать длинные запросы в одну строчку и создавать кучу функций на каждый чих. И все действия мне придётся выполнять из веб интерфейса, где хотелось бы просто выделить необходимый блок и выполнить(если такое возможно, конечно, для блоков begin end).

327
09 марта 2013 года
UserNet2008
748 / / 03.04.2010
Цитата:
[offtop]
А, это снова вы. А я вас помню...Было это года два назад. Вы тогда ещё писали, какой коднет ужасный и как тут недобро к новичкам относятся и обещались покинуть сию обитель и свалить обратно в свой уютный ГДР.
[/offtop]


Не далекий Вы человек, раз решили разгласить переписку из 'Личной Почты'.
Я не писал, что свалию обратно в свой уютный ГДР.(у меня есть оригиналы переписки. Это было 15 июня 2012 года и 19 июня 2012 года)
Ладно проехали.

412
10 марта 2013 года
grgdvo
323 / / 04.07.2007
Что-то вы, мужики, ругани тут понаписали... "Давайте жить дружно" (C)

Во-первых, DDL (create, alter, drop) выражения _НЕ ОТКАТЫВАЮТСЯ_. Во всяком случае в Oracle (после каждого DDL идет автокомит). Возможно это предусмотрено в MS SQL, но это уже другая история.

Во-вторых, рассмотрите вариант создания ваших таблиц через CREATE SCHEMA. Это, конечно, не совсем то, что вы спрашиваете в вопросе, но может и подойдет вам. И опять же см. пункт 1.

В-третьих, есть распространенная пркатика работы с DDL (в Oracle). Перед конструкцией CREATE использовать конструкцию DROP.
Например

 
Код:
DROP TABLE table1
CREATE TABLE table1 ...
DROP ...
CREATE ...
Поругается первый раз на отсутствие искомых объектов, но скрипт выполнит до конца.

Про ваш запрос в первом посте... Во-первых, таблицы city нет, есть таблица weather. Видимо вы ошиблись при написании.
1. Берется декартово произведением всех записей двух таблиц. Думаю, не надо объяснять что такое декартово произведение.
2. Для каждой пары (из дек. произв.) проверяются указанные условия.
3. В результат выборки попадают, только те, которые удовлетворяют указанным условиям, то есть будут просто две пары городов с подходящим значениями.

Вывод, ваш запрос не имеет какого-либо смысла. Если вы таким образом пытались найти максимальную или минимаульную температуру, то это в корне неверно.
414
10 марта 2013 года
CassandraDied
763 / / 24.05.2012
Да, ошибся при написании — таблицы city не существует, есть только weather. Вот, именно условие мне и непонятно. Оно бессмысленно? Это не мой запрос, я разбираю пример из этого мануала. Где разбирается self join вид запросов.
Спасибо за разъяснения про Oracle, надо будет попробовать ещё раз с drop table, мне казалось, что выполнение блока завершается при попытке удалить несуществующую таблицу.
412
10 марта 2013 года
grgdvo
323 / / 04.07.2007
Для изучения JOIN'ов - оно показательно. Ибо простой JOIN, что и изображено в запросе - есть дек. произв.
И потом. Не советовал бы изучать ORACLE по мануалам PostgreSQL'я. SQL, в многих, вещах у них похож (так как стандарт), но всякие "фенечки" в корне разные. И у ORACLE таких фенечек больше будет. Есть правда такая штука как EnterpriseDB - это коммерческое направление постгреса. Для него поддерживается порт пакеджей, и вполне приличный порт.

По смыслу - ну это набор "первичных" записей с некоторым условием для, например...
1. Если отсортировать указанные выборку в прямом порядке по W1.lo (ORDER BY W1.lo), то в первой записи должны получить минимальную температуру.
2. Если отсортировать указанные выборку в обратном порядке по W1.lo (ORDER BY W1.lo DESC), то в первой записи должны получить температуру максимальную по минимальной границе.
и т.д.
414
10 марта 2013 года
CassandraDied
763 / / 24.05.2012
Но ведь получить минимальную или максимум из минимальных температур можно и другим, более понятным способом, зачем тут применять именно self join?
Я не учу postgres по мануалам oracle. :) Это просто так совпало, что в данный момент занимаюсь и тем, и другим, вот и спросил сразу обо всём.
412
11 марта 2013 года
grgdvo
323 / / 04.07.2007
Да, Вы правы, можно более понятным способом.
Я перечитал мануал, там вообще-то автор не стремился найти макс. или мин. температуру... речь просто об некотором диапазоне.
На мой взгляд пример не очень удачный, да еще и автоперевод недоправленный.
414
11 марта 2013 года
CassandraDied
763 / / 24.05.2012
Спасибо за объяснение.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог