between é um operador lógico que retorna true se um valor estiver entre dois valores e é normalmente usado junto com o operador where.
Usaremos a tabela countries do banco nation pra os exemplos.
+---------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+---------------+------+-----+---------+----------------+ | country_id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(50) | YES | | NULL | | | area | decimal(10,2) | NO | | NULL | | | national_day | date | YES | | NULL | | | country_code2 | char(2) | NO | UNI | NULL | | | country_code3 | char(3) | NO | UNI | NULL | | | region_id | int(11) | NO | MUL | NULL | | +---------------+---------------+------+-----+---------+----------------+
#1 O exemplo a seguir usa o operador between para encontrar países que têm áreas entre 1.566.500 e 2.780.400:
select name, area from countries where area between 1566500 and 2780400;
MariaDB [nation]> select name, area from countries where area between 1566500 and 2780400; +--------------------------------------+------------+ | name | area | +--------------------------------------+------------+ | Argentina | 2780400.00 | | The Democratic Republic of the Congo | 2344858.00 | | Algeria | 2381741.00 | | Greenland | 2166090.00 | | Indonesia | 1904569.00 | | Iran | 1648195.00 | | Kazakstan | 2724900.00 | | Libyan Arab Jamahiriya | 1759540.00 | | Mexico | 1958201.00 | | Mongolia | 1566500.00 | | Saudi Arabia | 2149690.00 | | Sudan | 2505813.00 | +--------------------------------------+------------+
a consulta acima é equivalente à seguinte consulta:
select name, area from countries where area >= 1566500 and area <= 2780400 order by area;#2 usar o operador between para encontrar países que têm dias nacionais que caem entre 17 de agosto de 1945 e 09 de novembro de 1953:
select national_day from countries where national_day between ‘1945-08-17’ and ‘1953-11-09’;
MariaDB [nation]> select national_day from countries where national_day between '1945-08-17' and '1953-11-09'; +--------------+ | national_day | +--------------+ | 1945-08-17 | | 1947-08-15 | | 1948-01-00 | | 1946-05-25 | | 1953-11-09 | | 1953-10-22 | | 1948-02-04 | | 1948-01-04 | | 1947-08-14 | | 1946-04-17 | | 1945-09-02 | +--------------+
#3 podemos usar not between para listar dados que não estão entre um intervalo.
select national_day from countries where national_day not between ‘1945-08-17’ and ‘1953-11-09’;
Neste tutorial, você aprendeu como usar o operador between para testar se um valor está entre dois outros valores.