MySQLでall、any、someクエリのケース

5241 ワード

1、データテーブルとデータの準備
CREATE TABLE `exam` (
  `examid` int(11) NOT NULL AUTO_INCREMENT,
  `studentId` varchar(20) NOT NULL,
  `subjectId` varchar(20) NOT NULL,
  `score` int(11) NOT NULL,
  PRIMARY KEY (`examid`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
--                    
INSERT INTO exam VALUES (NULL,'123456',1,60),(NULL,'126556',1,75),(NULL,'12156',2,93),(NULL,'654054',1,86),(NULL,'652314',2,80),(NULL,'645874',2,95),(NULL,'654321',2,93)


2、ALLはサブクエリの前に、比較演算子によって1つの式または列の値をサブクエリが返す1列の値の各行と比較し、1回の比較の結果がFALSEであれば、ALLテストはFALSEを返す.
ケース1:科目番号が「1」のこのコースのすべての成績よりも成績が大きい学生の試験情報を調べる
SELECT * FROM exam WHERE score> ALL(SELECT score FROM exam WHERE subjectId=1)

説明:>ALLは各値より大きいことを示します.すなわち、最大値より大きいことを示す.例えば、>ALL(1,2,3)は3より大きいことを示す.
3、ANYがサブクエリと一緒に使用される場合、サブクエリの結果の各ローは、比較演算子、式、またはフィールドに従って計算および比較されます.一度条件を満たすことがあれば、ANYの結果は本当です.ケース2:科目番号が「1」のいずれの成績よりも成績が大きい試験情報を調べる
SELECT * FROM exam WHERE score> ANY(SELECT score FROM exam WHERE subjectId=1)

注意:「=ANY」演算子は「IN」と同等です.「<>ANY」演算子は「NOT IN」とは異なります.「<>ANY(A,B,C)」は、Aに等しくない、またはBに等しくない、またはCに等しくないことを表す.「NOT IN(A,B,C)」は、Aに等しくなく、Bに等しくなく、Cに等しくないことを表す.ALL「NOT IN」と同じ意味
4、someとanyの使い方は同じですが、ここではあまり紹介しません.