Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Открыть новую тему     Написать ответ в эту тему

greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KurkSS

Цитата:
Взаимно прочитал  

тогда в догонку. прочитайте про план разбора запроса (очень часто увидите такую интересную вещь как JOIN), оптимизация.
ну и вообще- то сравнивать join с subquery это как теплое с мягким
перечитал ради интереса Тома Кайта (в силу работы в основном с ораклом)

Цитата:
Use a subquery when you need no columns from the tables referenced in the subquery.
Use a join when you do need some of the columns.
 

ЗЫ а вы говорите экзотика

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 10:23 14-10-2009 | Исправлено: greenpc, 10:27 14-10-2009
KurkSS

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

 
Оптимизация это круто, только сдесь расговор не о людях у которых не получаеться сделать оптимизацию, а у которых не получаеться хоть както запросить данные....
 
вы приняли слово экзотика как что-то нереальное... поэтому хочу внести ясность....
я имел ввиду, что тем у кого не получаеться хоть как-то запросить нужные данные, понять сущность реляционной модели и хорошо разобраться с ней как с таковой
 
а вот потом в теме для супероптимизаторов прочитать чьюто статью, с чего начинаеться супер оптимизация.
 
ЗЫ
Давайте тогда ещо расмотрим факт оптимизационности СУБД, как приближение их к сетевой модели, и тому у кого не получаеться запросить данные у базы, раскажем как можно используя внутрение языки програмирования(расширения SQL) и оптимизационности добиться супер производительности....  
greenpc, предлагаю переехать в личку!
 

Всего записей: 73 | Зарегистр. 22-05-2008 | Отправлено: 15:40 14-10-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А объясните мне такую штуку, делаю SQL запрос

Код:
 
SELECT Menu.name, Razdel.name FROM `Menu` , `Razdel`  
 

Получаю

Цитата:
 
name                            name  
-- Сделайте выбор -- Компьютеров  
Главная                     Компьютеров  
Обслуживание           Компьютеров  
Кулинария                 Компьютеров  
-- Сделайте выбор -- Физ. лиц  
Главная                     Физ. лиц  
Обслуживание           Физ. лиц  
Кулинария                 Физ. лиц  
-- Сделайте выбор --  Юр. лиц  
Главная                      Юр. лиц  
Обслуживание            Юр. лиц  
Кулинария                 Юр. лиц  
-- Сделайте выбор -- Пироги  
Главная                     Пироги  
Обслуживание           Пироги  
Кулинария                 Пироги  
-- Сделайте выбор --  Борщ  
Главная                     Борщ  
Обслуживание           Борщ  
Кулинария                 Борщ  
-- Сделайте выбор -- Суп  
Главная                     Суп  
Обслуживание           Суп  
Кулинария                 Суп  
-- Сделайте выбор -- Торт  
Главная                     Торт  
Обслуживание           Торт  
Кулинария                 Торт  
 

Я ожидал получить что то  типо такого:
Главная
Обслуживание    Юр. лиц
                          Физ.лиц
Кулинария          Пирог
                          Борщ
                          Суп
                          Торт
Структура таблиц

Код:
CREATE TABLE `Menu` (  
  `id` int(11) NOT NULL auto_increment,  
  `name` tinytext,  
  PRIMARY KEY  (`id`)  
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;  
 
CREATE TABLE `Razdel` (  
  `id` int(11) NOT NULL auto_increment,  
  `name` tinytext NOT NULL,  
  `menu_id` int(11) NOT NULL,  
  PRIMARY KEY  (`id`)  
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 19:15 14-12-2009 | Исправлено: DarkSmoke, 19:16 14-12-2009
derelict



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо было дописать условие для связи:

Код:
 
SELECT Menu.name, Razdel.name FROM `Menu` , `Razdel`  WHERE `Menu`.`id`=`Razdel`.`menu_id`
 

А так у вас получилось декартово произведение.

Всего записей: 232 | Зарегистр. 11-06-2006 | Отправлено: 20:07 14-12-2009
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день.
Подскажите, как правильно сделать запрос.  
есть таблица новостей:

Код:
CREATE TABLE `News` (
  `id` int(11) NOT NULL auto_increment,
  `title` tinytext,
  `news` text NOT NULL,
  `date` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=19 ;

Нужно из нее вывести 10 последних новостей и в архиве новостей вывести еще 10 новостей.
Вот можно ли это сделать одним SQL запросом?
Или даже не так.
Вот такой вот у меня запрос
Код:
SELECT * FROM `News` ORDER BY `id` DESC
Я так понимаю что его надо разделить как то.

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 12:46 09-01-2010 | Исправлено: DarkSmoke, 13:28 09-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
10 последних новостей  

Код:
SELECT TOP 10 [чего-нибудь] FROM News ORDER BY date DESC

А вот какие новости должны в архив выводится непонятно. Судя по косвенным признакам и постановке вопроса, архивные новости хранятся в другом table. Если так, то тогда используем такой же запрос из архивного table и UNION оба запроса.
Или архивные - это новости после первых 10-ти?  Тогда просто TOP 20.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 20:44 09-01-2010 | Исправлено: dneprcomp, 20:45 09-01-2010
DarkSmoke



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Все хранится в той же таблице. Т.е. Последние 10 новостей мы выводим на страницу а вот уже с 11  по 20 новость помещаем в архив новостей.(Т.е. там типо одни заголовки и дата будет)

Всего записей: 962 | Зарегистр. 08-10-2005 | Отправлено: 21:35 09-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
Тогда TOP 20 и в коде работы с рекордсетом считаем рекорды. После 10-го показываем только одни заголовки и дату

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:47 09-01-2010 | Исправлено: dneprcomp, 21:48 09-01-2010
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DarkSmoke
с 11  по 20 новость можно выбрать так
 
SELECT TOP 20 [чего-нибудь] FROM News  
where
id not in (SELECT TOP 10 id FROM News)
ORDER BY date DESC

Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 09:50 11-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33
Т.e. предлогаете вместо 1 запроса выполнить 3 ?
Можно конечно, но тут уж кому что больше нравится.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 22:38 11-01-2010 | Исправлено: dneprcomp, 22:40 11-01-2010
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
почему 3
все один запрос и один вложенный в сумме =2

Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 13:35 12-01-2010 | Исправлено: SIgor33, 13:36 12-01-2010
snike555



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33
dneprcomp
А вы уверены что от отхватит именно 10 верхних новостей, а не первых попавшихся?
Я бы сделал так:
 
SELECT TOP 10 "date", "title", "news" FROM (select * from News ORDER BY date DESC)
Union all  
SELECT TOP 10 "date", "title", " - " FROM (select * from News where id not in (SELECT TOP 10 id FROM News ORDER BY date DESC) ORDER BY date DESC)

Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 18:55 12-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33
A получать запросом первые 10 уже не надо?
 
snike555

Цитата:
А вы уверены что от отхватит именно 10 верхних новостей, а не первых попавшихся?  
Я бы сделал так:  

А я бы не делал. 'ORDER BY date DESC' для чего стоит?
 
PS. Честно говоря сбился со счета, сколько всего SELECT-ов в предложенном UNION.  
То ли 5, то ли 6.
Первaя строкa вообще черти что делает.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 23:50 12-01-2010 | Исправлено: dneprcomp, 23:56 12-01-2010
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
первые 10 получать можно имеенно как вы написали я только описал вторую часть запроса

Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 09:25 13-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SIgor33
Ну так и получается что для решения всей задачи нужно будет в сумме 3 запроса.
Хотя такой подход тоже имеет право на существование и работать будет. В какой-то степени даже оригинальное решение.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 10:17 13-01-2010
MbIJIO



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите как создать план выполнения запроса.
запрос такой  
 
select "Практика", "Руководитель", вид
   from
     (  
        select о.Название"Практика", л.Фамилия"Руководитель", в.вид, count(р.id_вида_практики) PR,  
        max(count(р.id_вида_практики)) over (partition by о.Название,л.Фамилия) maxPR
         
        from Результ_практ р,Люди л, Контактные_лица к, Объект_практики о, вид_практики в
         
        where р.ID_вида_практики=в.ID_вида_практики and  р.id_контакт_лица=к.id_контакт_лица  
        and л.id_человека=к.id_человека and р.id_объекта_пр=о.id_объекта_пр
        group by о.Название,л.Фамилия, в.вид  
     
     )  qw
   where pr=maxPR
 
по возможности расскажите если кто знает как это делать в ORACLE DATABASE 10g EXPRESS EDITION
 

Всего записей: 175 | Зарегистр. 12-12-2006 | Отправлено: 11:06 13-01-2010 | Исправлено: MbIJIO, 11:10 13-01-2010
SIgor33

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Извените, что ложанулся не посчитав первый запрос. Согласен три запроса

Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 16:15 13-01-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Делаю INSERT. Sourse - текстовый файл. База - MS SQL Server. Одно из полей в файле - ID, вида 000012345
Как количество 0, так и цифр - величина переменная.  
 
1.Необходимо сравнить с имеющимися ID в table и если уже такое ID есть, то, во избежание дубликатов, последовательно заменять нули на 1,2,3 и т.д. с постоянной проверкой на существование.  
Что можно использовать, кроме cursor?

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 06:34 24-02-2010 | Исправлено: dneprcomp, 23:48 24-02-2010
SerBUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть две таблицы с одинаковыми полями. Не могу сообразить - как написать sql-запрос, чтоб данные выводились из обеих таблиц последовательно, т.е. сначала из одной таблицы, потом из другой. Подскажите, плиз - как сделать?

Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 05:29 18-03-2010
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerBUser
 
Используй UNION

Код:
SELECT * FROM table1
UNION
SELECT * FROM table2

Можно еще добавить в SELECT поле-идентификатор для последующего сортинга  
по нескольким полям
Код:
SELECT *, 1 as tableSource FROM table1
UNION
SELECT *, 2 as tableSource FROM table2


Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 05:37 18-03-2010 | Исправлено: dneprcomp, 05:40 18-03-2010
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru