Кажется, вы предполагаете, что строки таблицы имеют внутренний порядок. Это не вариант. Таблицы представляют собой режим неупорядоченных наборов строк , нет никакого порядка по умолчанию.
Если вы не добавите в свой запрос предложение order by
, порядок, в котором будут возвращаться строки, не определен: база данных может возвращать строки в любом порядке - это может или не может, быть последовательным при последовательном выполнении одного и того же запроса. То же самое касается строк, возвращаемых запросом union
(который фактически создает производную таблицу).
Итак, если вы хотите упорядочить, используйте предложение order by
: это неясно какой столбец следует использовать, поэтому я помещаю в запрос ?
.
select *
from (
select * from calculus_class
union all
select * from stats_class
) t
order by ?
Если вам сначала нужны строки из первой таблицы, вы можете сделать:
select *
from (
select 1 rn, c.* from calculus_class c
union all
select 2 rn, s.* from stats_class
) t
order by rn
Обратите внимание, что я изменено union
на union all
: если вы не хотите удалять дубликаты в двух таблицах (что является целью union
), union all
более эффективен, и его следует использовать всегда.