SQLのBetween、MySQLのBetween Dates、Not Between
SQLのBETWEEN演算子は、WHERE句と一緒に使用され、値の範囲を提供するために使用されます。値は数値、テキスト、日付のいずれかにすることができます。SQLのBETWEEN演算子は、シーケンシャルに使用されるSQLのIN演算子とほぼ同様です。範囲として定義された値は、開始値と終了値で指定された値を含みます。BETWEEN演算子について詳しく説明しましょう。前述したように、BETWEEN演算子は数値、テキスト、日付と共に使用することができます。以下でそれぞれについて詳しく説明します。
SQLのBETWEEN句の構文
SELECT Column(s) FROM table_name WHERE column BETWEEN value1 AND value2;
上記の構文を使って、BETWEEN演算子の一部として値を定義することができます。また、上記の構文は、数値、テキスト、日付の値との使用においても同様です。
数値の範囲に対するSQLのBETWEEN演算子
上記の構文について、数値の例を通じてもう少し詳しく理解しましょう。以下の学生テーブルを例に考えましょう。
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 |
私はMySQLデータベースを使用しており、以下はStudentテーブルに例としてレコードを作成および挿入するスクリプトです。
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');
シナリオ:11歳から13歳の間の学生の割合を求めます。
SELECT StudentPercent FROM Student WHERE StudentAge BETWEEN 11 AND 13;
出力:
StudentPercent |
---|
88 |
84 |
78 |
数値の範囲に当てはまらないSQLのBETWEEN演算子
SQLのNOT BETWEEN演算子は、BETWEEN演算子で指定された範囲外の結果セットの一部として値を取得するために使用されます。シナリオ:年齢が11歳から13歳の間ではない学生の割合を取得してください。
SELECT StudentPercent FROM Student WHERE StudentAge NOT BETWEEN 11 AND 13;
出力:
日本語で自然に言い換えてください、ただ1つのオプションが必要です。
StudentPercent |
---|
85 |
テキスト値のSQL BETWEEN演算子
シナリオ:GeorgeとJessicaの間のStudentNameを持つRollNo、StudentName、StudentAgeを取得する。
SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName BETWEEN 'George' AND 'Jessica';
出力:
RollNo | StudentName | StudentAge |
---|---|---|
1 | George | 14 |
3 | Jessica | 13 |
テキスト値のためのSQLの「BETWEEN演算子」の逆を日本語にパラフレーズすると:「SQL NOT BETWEEN演算子」です。
シナリオ:ジョージとジェシカの間にある学生の名前を除いて、ロール番号、学生の名前、学生の年齢を取得してください。
SELECT RollNo, StudentName, StudentAge FROM Student WHERE StudentName NOT BETWEEN 'George' AND 'Jessica';
出力:
RollNo | StudentName | StudentAge |
---|---|---|
2 | Monica | 12 |
4 | Tom | 11 |
日本語で以下を表現すると、以下のようになります:
日付値のためのSQLのBETWEEN演算子
シナリオ:2018年1月1日から2018年1月31日の間に入学した学生の年齢を取得する。
SELECT StudentAge FROM Student WHERE admissiondate BETWEEN str_to_date('2018-01-01', '%Y-%m-%d') AND '2018-01-31';
出力:
StudentAge |
---|
14 |
12 |
13 |
日付値のためのSQL NOT BETWEEN演算子
シナリオ:2018年1月1日から2018年1月31日の間に入学した学生の年齢を取得しない。
SELECT StudentAge FROM Student WHERE admissiondate NOT BETWEEN str_to_date('2018-01-01', '%Y-%m-%d') AND '2018-01-31';
結果:
StudentAge |
---|
11 |
複数のBETWEEN演算子
私たちは複数のbetween演算子も使用することができます。その構文は次のようです。
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;
上記の構文を使用することで、複数のBETWEEN演算子を使うことができます。シナリオ:年齢が10歳から13歳で、かつ成績が80%から85%の生徒の名前を取得します。
SELECT StudentName FROM Student WHERE
StudentAge BETWEEN 10 AND 13
AND
StudentPercent BETWEEN 80 AND 85;