Вопрос по SQL

BS11

1)
Есть таблица покупателей(Customers).
Написать запрос, который выводит всех покупателей, чьи имена начинаются с буквы, попадающей в диапазон от "A" до "D".
Я думаю можно написать так:
SELECT *
FROM Customers
WHERE cname LIKE 'A%' OR LIKE 'B%' OR LIKE 'C%' OR LIKE 'D%';
Думаю можно написать проще. Корректно ли будет при этом использование оператора BETWEEN? или IN?
Например, можно ли писать BETWEEN LIKE 'A%' AND LIKE 'D%';, или LIKE перед BETWEEN; или IN('A%','B%','C%','D%');?(Но, как известно, групповые символы("_" и "%") используются вместе с оператором LIKE) Вобщем как можно упростить?
2)
Запрос: Найти все записи в таблице покупателей(Customers поле city которых не пусто.
Вот что написано в книжке:
SELECT *
FROM Customers
WHERE city NOT NULL;
Но ведь NULL используется вместе IS. Поэтому, думаю, может не
WHERE city NOT NULL;
а
WHERE city IS NOT NULL;?

otvertka07

1 - LIKE '[a-d]%'
2 - is not null

BS11

спасибо!

sergey_m

1 - LIKE '[a-d]%'
RLIKE '^[A-D]'

otvertka07

это надо понимать unix-way (т.е. через жопу) ?

BS11

Это еще один вариант?

sergey_m

Я че то не уверен, что то, что ты написал схавается например программой MySQL 3.x. Про другие программы не знаю.

otvertka07

а в вопросе не указывается, какой стандарт или какая (кривая) реализация sql стандарта подразумевается

и мне кажется, что скорее rlike не будет работать, чем мой вариант

BS11

BETWEEN и IN никак не могут использоваться в примере 1, т.к. оба оперируют с конкретными значениями, а не шаблонами, правильно я понимаю?

otvertka07

х3, BETWEEN 'a%' AND 'e%' - работает в mssql

stm5981037

SELECT *
FROM Customers
WHERE cname REGEXP '^[A-D]'
Оставить комментарий
Имя или ник:
Комментарий: