Как я могу объединить эти операторы в одном выражении SQL?
select city from station where city like 'a%';
select city from station where city like 'e%';
select city from station where city like 'i%';
select city from station where city like 'o%';
select city from station where city like 'u%';
Очевидным методом является union all
:
select city from station where city like 'a%' union all
select city from station where city like 'e%' union all
. . .
Возможно, почти так же очевидно:
where city like 'a%' or city like 'e%' or . . .
Вы также можете использовать другой подход, например:
where left(city, 1) in ('a', 'e', 'i', 'o', 'u')
(Примечание: не все базы данных поддерживают left()
.)
Более типичным методом будет некоторая форма регулярного выражения, но этот синтаксис зависит от базы данных.
where SUBSTR(city,1,1) in ('a', 'e', 'i', 'o', 'u')
или использовать left(city, 1)
если ваша база данных поддерживает его.
Вы всегда можете использовать union
/union all
между операторами или like 'a%' or like 'e%'....
но я предпочитаю использовать substr
или left
в таких случаях
LIKE
вполне может оказаться, что простое полное сканирование таблицы намного быстрее, чем путаница в поиске индекса.
ИМХО лучшим методом, который также будет использовать существующий индекс, будет использовать OR:
select city from station
where
city like 'a%' OR
city like 'e%' OR
city like 'i%' OR
city like 'o%' OR
city like 'u%';
ПРИМЕЧАНИЕ. В MS SQL-сервере и postgreSQL это создает лучший план выполнения.