Filtro entre 2 campos data

Banco de dados MySQL
Sei que para pesquisar em um campo data posso usar o seguinte código:

ou

Mas quando tenho 2 campos data com os nomes datainicial e datafinal como eu filtraria pelo intervalo dessas 2 datas?
Ex: Cadastro preço de quartos em um intervalo de datas por temporada.
Tabela datasdatemporada com os campos:iddatasdatemporada,dtinicial,dtfinal,temporadas_idtemporada
tenho os seguintes registros cadastrados:
1, ‘2012-04-15’, ‘2012-04-30’, 2
2, ‘2012-05-01’, ‘2012-06-30’, 2
3, ‘2012-07-01’, ‘2012-07-31’, 1
4, ‘2012-08-01’, ‘2012-11-30’, 2
5, ‘2012-12-01’, ‘2012-12-31’, 1

Eu quero filtrar pela data inicial e final.
Eu digito a data de chegada(aqui no formato do BD já): 2012-06-11 e
data de saída:2012-06-16

Na lógica teria que me retornar o intervalo
2, ‘2012-05-01’, ‘2012-06-30’, 2
mas não retorna nada. Perceba que o intervalo está entre
2012-05-01 até 2012-06-30

Como ficaria o código SQL correto para esse caso, sendo o nome da tabela
datasdatemporada?

O select fez a lógica correta, pois
2012-05-01 < 2012-06-11
(1 de maio é menor que 11 de junho)

Portanto não deveria aparecer resultado nenhum mesmo.

Mas isso aqui 2012-05-01 até 2012-06-30
Tinha que aparecer sim esse registro acima. O problema é que como são 2 campos diferentes, ele não retorna nenhum registro. Se fosse filtrado por um só campo ele retornaria. Seria assim: nesse mês 05 até o mês 06 do dia 30 tem temporada cadastrada e portanto deveria aparecer isso na lógica sem o BD. Talvez eu tenha então que ter apenas um campo com as datas da temporada e adicionar de 1 por um as datas. Por ex: Eu seleciono de 2012-05-01 a 2012-05-15 e ele adicionaria no bd várias data até chegar no 15. 2012-05-01|2012-05-02| até o 2012-05-15. Assim quando eu filtrar entre datas ele me retornaria as datas no intervalo correto que eu queria, mas não da maneira que eu queria.

Em outro fórum consegui resolver esse problema. A resposta foi essa:

select * from datasdatemporada where '2012-06-11' between dtinicial and dtfinal and '2012-06-16' between dtinicial and dtfinal;

Tive o mesmo problema, entretanto todas as linhas que possuem o intervalo devem retornar de acordo com o filtro.

select * from teste
where ( ( data_ini between '2015-06-01' and '2015-07-20' ) or ( data_fin between '2015-06-01' and '2015-07-20' ) ) or
      ( ( '2015-06-01' between data_ini and data_fin ) or ( '2015-07-20' between data_ini and data_fin ) )