Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
select top 100 p.Name, c.Name as City from People p
left join (select * FROM Cities order by Name) c on c.Id=p.CityId
CREATE TABLE supir_pupir_prefix_cities ( id, name ) CREATE TABLE supir_pupir_prefix_users ( id, name, home_city REFERENCES supir_pupir_prefix_cities, current_city REFERENCES supir_pupir_prefix_cities ) SELECT user.id, user.name, home_city.name, current_city.name FROM supir_pupir_prefix_users AS user LEFT JOIN supir_pupir_prefix_cities AS home_city ON user.home_city = home_city.id LEFT JOIN supir_pupir_prefix_cities AS current_city ON user.current_city = current_city.id
SELECT user_id, user_name, city_name FROM user LEFT JOIN city ON home_city = city_id
SELECT user.id, user.name, city.name FROM user LEFT JOIN city ON home_city = city.id
SELECT user_name FROM user WHERE user_id = 5
SELECT name FROM user WHERE id = 5
SELECT field FROM t1 UNION SELECT field FROM t2 ORDER BY field LIMIT 100 выберет 100 записаей, но листаться и объединятся будут все, т.к. ORDER сработает после UNION, незнаю решат ли проблему скобочки, можно попробовать сделать что-то типа SELECT field FROM t1 UNION SELECT * FROM ( SELECT field FROM t2 ORDER BY field) tt LIMIT 100select * from emp order by sal desc NULLS FIRST; select * from emp order by sal desc NULLS LAST;
select person, city from (select /*+ ordered use_nl(p c) index(c cities$cityid) */ rownum r, p.name person, c.name city from person p left join cities c on p.cityid = c.cityid order by c.name) where r <= 100
select top 100 p.name person, c.name city from person p, cities c where p.cityid = c.cityid order by c.name
select top 100 person , city from ( select top 100 p.name person , c.name city from person p , cities c where p.cityid = c.cityid order by city , person ) union ( select top 100 p.name person , null city from person p where p.cityid is null order by person ) order by city , person
create table tmp as
select
Cities.Id
, Cities.Name
, cnt.people
from
(
select
CityId
, count(Name) people
from
People
group by
CityId
) as cnt
join Cities on (Cities.Id = cnt.CityId)
create table enough as
select
t2.Id as Id
, max(t2.Name) as Name
, sum(t1.people)+t2.people as people
from
tmp t1,
join tmp t2 on (t1.Name < t2.Name)
group by
t2.Id
having
sum(t1.people) < 100
select
top 100 p.Name PersonName
, c.Name CityName
from
People p
join enough c on p.CityId = c.Id
order by
c.Name
, p.Name
select
top 100 Name PersonName
, Name CityName
from
(select *** запрос на Стадии 3 (см.выше) ***)
union (select top 100 Name as PersonName, null as CityName from People where IdCity is null)
order by
CityName
, PersonName
О, эти планы запросов