SQL entre, MySQL entre datas, não entre
O operador SQL BETWEEN é usado junto com os operadores SQL IN usados de maneira sequencial. Os valores são definidos como parte do intervalo BETWEEN são inclusivos, ou seja, os valores mencionados no intervalo são incluídos nos valores inicial e final. Vamos discutir em detalhes sobre o operador BETWEEN. Conforme mencionado acima, o operador BETWEEN pode ser usado junto com valor numérico, valor de texto e data. Discutiremos todos os três em detalhes abaixo.
SQL Entre Sintaxe
SELECT Column(s) FROM table_name WHERE column BETWEEN value1 AND value2;
Usando a sintaxe mencionada acima, podemos definir valores como parte do operador BETWEEN. Além disso, a sintaxe mencionada acima permanece a mesma para uso com valor numérico, valor de texto e valor de data.
Operador SQL BETWEEN para valor numérico
Vamos entender a sintaxe acima mencionada com mais detalhes através de alguns exemplos de valor numérico. Vamos considerar a seguinte tabela Aluno para fins de exemplo.
RollNo | StudentName | StudentGender | StudentAge | StudentPercent | AdmissionDate |
---|---|---|---|---|---|
1 | George | M | 14 | 85 | 2018-01-01 |
2 | Monica | F | 12 | 88 | 2018-01-31 |
3 | Jessica | F | 13 | 84 | 2018-01-15 |
4 | Tom | M | 11 | 78 | 2017-12-15 |
Estou usando o banco de dados MySQL e aqui está o script para criar e inserir registros de exemplo na tabela Aluno.
CREATE TABLE `Student` (
`rollno` int(11) unsigned NOT NULL,
`studentname` varchar(20) DEFAULT NULL,
`studentgender` varchar(5) DEFAULT NULL,
`studentage` int(3) DEFAULT NULL,
`studentpercent` int(3) DEFAULT NULL,
`admissiondate` date DEFAULT NULL,
PRIMARY KEY (`rollno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `Student` (`rollno`, `studentname`, `studentgender`, `studentage`, `studentpercent`, `admissiondate`)
VALUES
(1, 'George', 'M', 14, 85, '2018-01-01'),
(2, 'Monica', 'F', 12, 88, '2018-01-31'),
(3, 'Jessica', 'F', 13, 84, '2018-01-15'),
(4, 'Tom', 'M', 11, 78, '2017-12-15');
Cenário: obtenha a porcentagem de alunos com idade entre 11 e 13 anos.
SELECT StudentPercent FROM Student WHERE StudentAge BETWEEN 11 AND 13;
Saída:
StudentPercent |
---|
88 |
84 |
78 |
Operador SQL NOT BETWEEN para valor numérico
O operador SQL NOT BETWEEN é usado para obter os valores como parte do conjunto de resultados que está fora do intervalo especificado pelo operador BETWEEN. Cenário: obtenha a porcentagem de alunos cuja idade não está entre 11 e 13 anos.
SELECT StudentPercent FROM Student WHERE StudentAge NOT BETWEEN 11 AND 13;
Saída:
StudentPercent |
---|
85 |
Operador SQL BETWEEN para valor de texto
Cenário: obtenha RollNo, StudentName e StudentAge, onde StudentName está entre George e Jessica.
SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName BETWEEN 'George' AND 'Jessica';
Saída:
RollNo | StudentName | StudentAge |
---|---|---|
1 | George | 14 |
3 | Jessica | 13 |
Operador SQL NOT BETWEEN para valor de texto
Cenário: Obtenha RollNo, StudentName e StudentAge onde StudentName não está entre George e Jessica.
SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName NOT BETWEEN 'George' AND 'Jessica';
Saída:
RollNo | StudentName | StudentAge |
---|---|---|
2 | Monica | 12 |
4 | Tom | 11 |
Operador SQL BETWEEN para valor de data
Cenário: obtenha a idade dos alunos cuja admissão é entre 1º de janeiro de 2018 e 31 de janeiro de 2018.
SELECT StudentAge FROM Student WHERE admissiondate BETWEEN str_to_date('2018-01-01', '%Y-%m-%d') AND '2018-01-31';
Saída:
StudentAge |
---|
14 |
12 |
13 |
SQL NOT BETWEEN Operador para valor de data
Cenário: obtenha a idade dos alunos cuja admissão não é entre 1º de janeiro de 2018 e 31 de janeiro de 2018.
SELECT StudentAge FROM Student WHERE admissiondate NOT BETWEEN str_to_date('2018-01-01', '%Y-%m-%d') AND '2018-01-31';
Saída:
StudentAge |
---|
11 |
MÚLTIPLOS ENTRE operadores
Também podemos usar múltiplos operadores. Sua sintaxe é:
SELECT Column(s) FROM table_name WHERE
column_name BETWEEN value1 AND value2
AND
column_name BETWEEN value3 and value4
...
AND
BETWEEN column_name BETWEEN valueN and valueM;
Usando a sintaxe mencionada acima, podemos usar vários operadores BETWEEN. Cenário: Pegue o nome do aluno com idade entre 10 e 13 anos e notas entre 80 a 85 por cento.
SELECT StudentName FROM Student WHERE
StudentAge BETWEEN 10 AND 13
AND
StudentPercent BETWEEN 80 AND 85;