#include #include #define sizeofarray(A) (sizeof(A)/sizeof(A[0])) // -- STUDENT -- // create table STUDENT ( // ID int , // name varchar( 10 ) , // grade int , // course varchar( 10 ) , // ) ; // insert into STUDENT ( 1001 , 't-saitoh' , 5 , 'EI' ) ; // insert into STUDENT ( 1002 , 'sakamoto' , 4 , 'E' ) ; // insert into STUDENT ( 1003 , 'aoyama' , 4 , 'EI' ) ; struct STUDENT { int ID ; char name[ 10 ] ; int grade ; char course[ 10 ] ; } student[] = { { 1001 , "t-saitoh" , 5 , "EI" } , { 1002 , "sakamoto" , 4 , "E" } , { 1003 , "aoyama" , 4 , "EI" } , } ; // -- RESULT -- // create table RESULT ( // ID int , // subject varchar( 10 ) , // point int , // ) ; // insert into RESULT ( 1001 , 'math' , 83 ) ; // insert into RESULT ( 1001 , 'english' , 65 ) ; // insert into RESULT ( 1002 , 'english' , 90 ) ; struct RESULT { int ID ; char subject[ 10 ] ; int point ; } result[] = { { 1001 , "math" , 83 } , { 1001 , "english" , 65 } , { 1002 , "english" , 90 } , } ; int main() { // -- SELECT -- // select STUDENT.name , RESULT.subject , RESULT.point // from STUDENT , RESULT // where STUDENT.ID = RESULT.ID // and RESULT.point >= 60 // 結合 from STUDENT , RESULT for( int st = 0 ; st < sizeofarray( student ) ; st++ ) { for( int re = 0 ; re < sizeofarray( result ) ; re++ ) { // 選択 where STUDENT.ID = RESULT.ID and RESULT.point >= 60 if ( student[ st ].ID == result[ re ].ID && result[ re ].point >= 60 ) { // 射影 select STUDENT.name , RESULT.subject , RESULT.point printf( "%-10.10s %-10.10s %3d\n" , student[ st ].name , result[ re ].subject , result[ re ].point ) ; } } } return 0 ; }