powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Сравнительный анализ MS Sql и другие...
25 сообщений из 82, страница 3 из 4
Сравнительный анализ MS Sql и другие...
    #32390859
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА в sybase такого нету
Честно говоря, не понял в чем подвох. Вроде как все есть, только по другому:
вместо:
Код: plaintext
1.
insert into (Field1, Field2) values
( 1 ,  1 ),( 1 ,  2 )

будет:
Код: plaintext
1.
2.
3.
insert into (Field1, Field2) 
select  1 ,  1 
union all
select  1 ,  2 ;

вместо:
Код: plaintext
1.
select * from tt1 
where (tt1.id1,tt1.id2) in (select tt2.id1,tt2.id2 from tt2) 

будет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select tt1.*
from tt1
  inner join tt2 on tt2.id1 = tt1.id1 and tt2.id2 = tt1.id2;

 -- еще можно связать по именам полей
 
select tt1.*
from tt1
  natural join tt2;

 -- если есть FOREIGN KEY, то можно и так
 
select tt1.*
from tt1
  join tt2;

 -- ну или так
 
select *
from tt1
where exists(
  select * 
  from tt2 
  where tt2.id1 = tt1.id1 and tt2.id2 = tt1.id2);

Кстати вопрос по использованию множества полей в IN - как будет происходить обработка с NULL значениями ?
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391026
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NULL - всегда NULL
это значит что NULL<>NULL is TRUE NULL=NULL is FALSE
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391043
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть если я Вас правильно понял, то для запроса:
Код: plaintext
1.
select * from tt1 
where (tt1.id1,tt1.id2) in (select tt2.id1,tt2.id2 from tt2) 

если tt1.id1 = null и tt2.id1 = null, а tt1.id2 = tt2.id2 , то такая запись в данном запросе не вернется ? Тогда в чем отличие такой конструкции например от INNER JOIN или EXISTS ?
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391065
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2gardenman: Сравнение NULL<>NULL в Oracle даст FALSE, как и любое сравнение с NULL.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391088
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравнение NULL<>NULL в Oracle даст FALSE, как и любое сравнение с NULL
А в аксесе Null<>Null даст False (что в предложении Where работает как False)

Кстати о Null-ах.
Объясните мне, непонятливому, почему в MS SQL необязательный уникальный индекс может содержать только одну запись с Null-ом? Как же быть с тем, что Null ничему не равен (в том числе и Null-у)
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391114
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ASCRUS
Ты действительно прав. Это очень похожие вещи.

Просто у меня перед глазами)) "хороший пример" проектирования,
на Sybase когда имеется с десяток таблиц, и одна на другую завязана
последовательно. У меня в результате - десятиэтажные запросы.
Лень писать. Да и в ссылках запутаться можно. А первичные ключи сплошь
сделаны только по одному полю, которое как правило IDENTITY.
И все едва-едва ворочается...
Я не могу понять что побудило человека строить модель именно так...
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391120
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще помню фокус по Sybase, что запрос

select * from table_name where field_name is null

может использовать построенный по TABLE_NAME.FIELD_NAME индекс.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391134
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох прав.) Действительно - любое сравнение с NULL всегда FALSE
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391143
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drop procedure c1
go

create procedure c1 as
begin
declare @aa int,
@bb int
select @aa=null,@bb=null

select
case
when @aa=@bb then 'Равно'
else 'Облом'
end
end
go

c1


Результат:
-
Равно


но, когда джойним через индекс две таблицы, то))) NULL<>NULL!!!)))
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391160
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любая операция в Oracle (кроме конкатенации), в том числе и сравнение с NULL чего угодно даст NULL, а никак не FALSE, но при группировке NULL считаются равными.

Учите матчасть
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391229
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКстати о Null-ах.
Объясните мне, непонятливому, почему в MS SQL необязательный уникальный индекс может содержать только одну запись с Null-ом? Как же быть с тем, что Null ничему не равен (в том числе и Null-у)
Хм. Ради интереса сейчас попробовал на ASA. Там работает. А я по привычке после MSSQL даже это и не догадался проверить. Бум знать, спасибо за мысль :)

авторselect * from table_name where field_name is null
может использовать построенный по TABLE_NAME.FIELD_NAME индекс.
Угу, так и есть.

gardenman
Результат сравнения и обработки NULL зависит от реализации и настроек конкретной СУБД. Например в ASA Ваш пример всегда будет 'Облом', так как сравниваются 2 переменные. Если же выключить опцию ANSINULL, то в запросах, в разделах WHERE, ON и HAVING условия NULL = NULL станет истинным для сравнений значений полей с полями и переменными. Так что у Вас получается 2 переменные с NULL равны. А в ASA например, в CHECK поля или таблицы, условие NULL = 1 будет истинным :)

Мда, одно дело различная функциональность СУБД, но различия даже в способах обработки NULL выглядят печально. На лицо явная смерть стандарта SQL и образование нескольких независимых направлений SQL и их клонов в продуктах:

блокировочники
TSQL: MSSQL,Sybase ASE, Sybase ASA
WatcomSQL: Sybase ASA

версионники
PL/SQL: Oracle, PostgreSQL
Interbase SQL: Interbase, Firebird

ну наверное и т.д. (про Informix и DB2 ничего сказать не могу, к чему их отнести, так как ничего про них не слышал и не видел).
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391292
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет NULL<>NULL я опять попался, а все из-за того, что в коде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
begin
  if null<>null then
    dbms_output.put_line('THEN');
  else
    dbms_output.put_line('ELSE');
  end if;
end;
/


блок ELSE будет выполнен. Хотя запрос

select * from scott.emp where not (null <> null)

не вернет ни одной записи.

Столкнулся с MSSQL 2000. Объясните, почему:

1. 'a' like 'A' возвращает TRUE, это где-то в настройках прописывается регистронезависимое сравнение? В Oracle это будет FALSE.
2. Почему по крайней мере Query Analyzer нечуствителен к регистру написания вызываемых процедур? Если, допустим, есть процедура MyProc, то ее можно вызвать как MYPROC, myproc и т.д. Могут ли одновременно существовать процедуры с именами MyProc и myProc?
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391398
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Denis Popov

1. зависит от collation
2. зависит от настроект коннекта, см SET QUOTED_IDENTIFIER
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391530
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я писалА в аксесе Null<>Null даст False (что в предложении Where работает как False)
Тьфу блин. Разумется Null <> Null даст Null, (что в Where эквивалентно False)
Если б не замечание Глюка - так бы и не заметил.

Так кто-нить может объяснить - в чем физический (математический, логический и т.п.) смысл того, что уникальном необязательном индексе не может быть два раза Null?
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391636
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Лох Позорный

>Так кто-нить может объяснить - в чем физический (математический, логический и т.п.) смысл того, что уникальном необязательном индексе не может быть два раза Null?

Это понять нельзя, это нужно запомниить (C). В стандарте написано, что NULL уникальным индексом индексироваться не должен. Это логично. Но единственная СУБД, известная мне, позволяющая много строк с NULL в уникальном индексе, т.е соответствующая стандарту по этому пункту, это Sybase ASA.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391644
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 буквацифра
Гыы...
Ты будешь смеяться, но еще и аксес
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391650
Пьяный Лох
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, конечно, извини
В твоем понимании Аксес - не СУБД
а двигатель от паровоза
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391686
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ни странно, но Jet Access имеет полезные фичи, который отсутствуют в SQL серверах (например позволяет изменять данные, полученные на основании запросов, который в SQL серверах были бы однозначно как Static). IMHO Jet - один из лучших SQL файл-серверных движков.

Да и как клиент он в принципе не плох. Очень правдо досадно, что MS-овцы так жестко навязали в ADP проектах ему в спутники MSSQL, у меня есть знакомые, которые программят на Access, и хотели бы его и дальше использовать в качестве средства построения клиентских приложений, но уже с БД на SQL сервере. С учетом того, что в качестве СУБД им хотелось бы видеть ASA, то варианты получаются не очень красивыми - все делать через присоединенки, поменять Access на что нибудь еще (тут ближе всего стоит PowerBuilder, но все равно учить не мало) или отказаться от расширенной функциональности ASA и работать на связке MSSQL + Access ADP. Я лично считаю, что MS поступила не честно в отношении Access, которому по идее при работе через ADO по барабану с какой СУБД работать, срезав круг его применения до разработки клиентских приложений только под MSSQL.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391752
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспомнил про фичу Акесе, которой нет наверное нигде: группировочная функция First :)


2ASCRUS
> учетом того, что в качестве СУБД им хотелось бы видеть ASA, то варианты получаются не очень красивыми - все делать через присоединенки

Лучше тогда вообще не присоединять (линковать), а использовать запросу к серверу, да через DAO/ADO вызывать хранимые процедуры, используя полученные наборы в качестве источников спискво, форм, отчетов (с Акеса 2002)
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391874
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Oracle уникальный индекс может построен по полю, содержащему сколько угодно NULL-значений. Они просто не включаются в индекс, уникальный или неуникальный. Побочное следствие: запрос с WHERE COLUM_NAME IS NULL использовать такой индекс не сможет.

В Accesse по-моему есть возможность построения кросс-табличных запросов, т.е. "разворота" значений выбранных полей по горизонтали. ИМХО для аналитики может быть полезным, и больше нигде я такого не видел.

Ответьте пожалуйста на м.б. дилетантский вопрос: COLLATE в MSSQL влияет на сопоставление строчных и прописных букв (т.е. указывает, что 'd' -строчная буква с соответствующей прописной 'D'), или влияет на отработку LIKE, т.е. на результат операции 'd' LIKE 'D'?
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32391938
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Denis Popov
В Oracle уникальный индекс может построен по полю, содержащему сколько угодно NULL-значений.

Как уже сказали в Акесе можно, в сиквеле тоже можно, но только 1 значение Null

В Accesse по-моему есть возможность построения кросс-табличных запросов, т.е. "разворота" значений выбранных полей по горизонтали. ИМХО для аналитики может быть полезным, и больше нигде я такого не видел.

Угу. Есть такое - перекрестный запрос. В Юконе говорят тоже будет

Ответьте пожалуйста на м.б. дилетантский вопрос: COLLATE в MSSQL влияет на сопоставление строчных и прописных букв (т.е. указывает, что 'd' -строчная буква с соответствующей прописной 'D'), или влияет на отработку LIKE, т.е. на результат операции 'd' LIKE 'D'?

Хотя я и не большой спец в сиквеле, но думаю особо не на вру :)
Да, влияет на сопоставление (и поэтому влияет и на отбор, в т.ч. и Like): Например, COLLATE Cyrillic_General_CI_AS - без учета регистра, COLLATE Cyrillic_General_CS_AS - c учетом регистра. Можно задавать для конкретного поля.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32392014
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Denis Popov
Можно задавать даже не для поля, а для операции поиска/сравнения.
Например, поле "логин" у вас регистрозависимое. При авторизации человек должен набрать его правильно.
Но администратор при поиске хочет искать его независимо от регистра. Тогда надо написать:

WHERE [login] LIKE @login COLLATE Cyrillic_General_CI_AS
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32393011
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Senin Viktor

>в сиквеле тоже можно, но только 1 значение Null

Одно значение везде можно.

2 Denis Popov

>В Oracle уникальный индекс может построен по полю, содержащему сколько угодно NULL-значений. Они просто не включаются в индекс, уникальный или неуникальный. Побочное следствие: запрос с WHERE COLUM_NAME IS NULL использовать такой индекс не сможет.

Так и должно быть по стандарту. Не знал. А вот в DB2 (7.x) этого сделать нельзя.

>В Accesse по-моему есть возможность построения кросс-табличных запросов, т.е. "разворота" значений выбранных полей по горизонтали. ИМХО для аналитики может быть полезным, и больше нигде я такого не видел.

В Sybase ASA это можно сделать с помощью функции list.
...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32393135
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
connect to sample user db2admin using       

   Database Connection Information

 Database server        = DB2/NT  8 . 1 . 3 
 SQL authorization ID   = DB2ADMIN
 Local database alias   = SAMPLE


create table ttt1 ( id integer, name char( 35 ) )
DB20000I  The SQL command completed successfully.

create unique index ittt1 on ttt1 (id)
DB20000I  The SQL command completed successfully.

insert into ttt1 (id,name) values (NULL,'qweqwe')
DB20000I  The SQL command completed successfully.

insert into ttt1 (id,name) values (NULL,'qweqerwerwe')
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0803N  One or more values in the INSERT statement, UPDATE statement, or 
foreign key update caused by a DELETE statement are not valid because the 
primary key, unique constraint or unique index identified by  "1 " constrains 
table  "DB2ADMIN.TTT1"  from having duplicate rows for those columns.  
SQLSTATE= 23505 

insert into ttt1 (id,name) values (NULL,'qweqwerwerwe')
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0803N  One or more values in the INSERT statement, UPDATE statement, or 
foreign key update caused by a DELETE statement are not valid because the 
primary key, unique constraint or unique index identified by  "1 " constrains 
table  "DB2ADMIN.TTT1"  from having duplicate rows for those columns.  
SQLSTATE= 23505 


и не только в 7-ке и 8-ке тоже...
Что поделать - уникальный индекс всегда уникальный...

И не только в DB2, но и в Sybase ASE 12.5.03

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create table ttt1 (
	id integer,
	name char( 35 )
)

create unique index ittt1 on ttt1(id)

insert into ttt1 (id,name) values (NULL,'1111')
insert into ttt1 (id,name) values (NULL,'34531111')

Server Message:  Number   2601 , Severity   14 
Server 'pnsybase', Line  1 :
Attempt to insert duplicate key row in object 'ttt1' with unique index 'ittt1' 
Server Message:  Number   3621 , Severity   10 
Server 'pnsybase', Line  1 :
Command has been aborted. 

...
Рейтинг: 0 / 0
Сравнительный анализ MS Sql и другие...
    #32394596
с127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 gardenman

>и не только в 7-ке и 8-ке тоже... Что поделать - уникальный индекс всегда уникальный...

NULL - особое значение, он не должен индексироваться.

Поработал как-то с DB2, осталось очень хорошее впечатление, лучше даже чем от оракла, но 2 вещи мягко говоря удивили: 30 дней в месяце (это уже исправили, странно только что продержалось аж до 7-й версии) и индексация NULL.

>И не только в DB2, но и в Sybase ASE 12.5.03

Возможно, но я говорил об ASA.
...
Рейтинг: 0 / 0
25 сообщений из 82, страница 3 из 4
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Сравнительный анализ MS Sql и другие...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]