student_fee
列がどこにあるかを示すテーブルが1つあります。
id_fee
id_student
student_name
fee_month
ここでは、毎月の授業料を支払った学生に基づいたデータを挿入しています。これから、どの学生が月額料金を支払ったかを簡単に照会できます。1月の料金をQuery Like:Select * From student_fee Where fee_month = "January";
しかし、1月だけに月額料金を支払わなかった学生を検索するにはどうすればよいですか?
通常、学生の名前を何度も何度も保存しないように、正規化されたデータベーステーブルが必要です。
<!-- sql -->
CREATE TABLE students ( id INTEGER, name varchar(60));
INSERT INTO students ( id , name ) VALUES (1, 'stud_1');
INSERT INTO students ( id , name ) VALUES (2, 'stud_2');
INSERT INTO students ( id , name ) VALUES (3, 'stud_3');
INSERT INTO students ( id , name ) VALUES (4, 'stud_4');
INSERT INTO students ( id , name ) VALUES (5, 'stud_5');
CREATE TABLE student_fee (id INTEGER, studentId INTEGER, month varchar(20));
INSERT INTO student_fee (id , studentId , month ) VALUES (1, 1, 'january');
INSERT INTO student_fee (id , studentId , month ) VALUES (2, 2, 'january');
INSERT INTO student_fee (id , studentId , month ) VALUES (4, 2, 'february');
INSERT INTO student_fee (id , studentId , month ) VALUES (5, 3, 'february');
INSERT INTO student_fee (id , studentId , month ) VALUES (6, 4, 'february');
そして、あなたはそれを次のように照会します:
select *
from students
where not exists (
select 1
from student_fee
where students.id = studentid
and month = 'january')
出力:
id name
3 stud_3
4 stud_4
5 stud_5
(SQL構文はmysqlであり、sqliteについてはよくわかりません)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加