Simple SQL
Dict-like
Cache
Class
#%%
try: get_ipython()
except: display = print
sql = SQL()
sql
#%%
# 학생 테이블 생성
sql('''CREATE TABLE IF NOT EXISTS students
(id INTEGER PRIMARY KEY, name TEXT, age INTEGER, grade INTEGER)''')
# 과목 테이블 생성
sql('''CREATE TABLE IF NOT EXISTS courses
(id INTEGER PRIMARY KEY, name TEXT, professor TEXT)''')
# 수강 테이블 생성 (학생과 과목의 관계)
sql('''CREATE TABLE IF NOT EXISTS enrollments
(student_id INTEGER, course_id INTEGER,
FOREIGN KEY(student_id) REFERENCES students(id),
FOREIGN KEY(course_id) REFERENCES courses(id))''')
sql
#%%
# 학생 데이터 삽입
sql('INSERT INTO students (name, age, grade) VALUES (?, ?, ?)', ('김철수', 20, 2))
sql('INSERT INTO students (name, age, grade) VALUES (?, ?, ?)', ('이영희', 22, 4))
sql('INSERT INTO students (name, age, grade) VALUES (?, ?, ?)', ('박민수', 19, 1))
# 과목 데이터 삽입
sql('INSERT INTO courses (name, professor) VALUES (?, ?)', ('데이터베이스', '홍길동'))
sql('INSERT INTO courses (name, professor) VALUES (?, ?)', ('알고리즘', '이순신'))
sql('INSERT INTO courses (name, professor) VALUES (?, ?)', ('인공지능', '강감찬'))
# 수강 데이터 삽입
sql('INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)', (1, 1))
sql('INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)', (1, 2))
sql('INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)', (2, 2))
sql('INSERT INTO enrollments (student_id, course_id) VALUES (?, ?)', (3, 3))
print("Students:")
display(sql.students)
print("\nCourses:")
display(sql.courses)
print("\nEnrollments:")
display(sql.enrollments)
#%%
# JOIN을 사용하여 학생별 수강 과목 조회
print("\n학생별 수강 과목:")
enrollments_df = sql('''
SELECT students.name AS student_name, courses.name AS course_name
FROM students
JOIN enrollments ON students.id = enrollments.student_id
JOIN courses ON enrollments.course_id = courses.id
''')
display(enrollments_df)
#%%
# 특정 과목을 수강하는 학생 수 조회
course_name = '알고리즘'
result = sql('''
SELECT COUNT(*) as student_count
FROM enrollments
JOIN courses ON enrollments.course_id = courses.id
WHERE courses.name = ?
''', (course_name,))
print(f"\n'{course_name}' 과목을 수강하는 학생 수: {result['student_count'].iloc[0]}")
#%%
# 가장 많은 학생이 수강하는 과목 조회
most_popular_course = sql('''
SELECT courses.name, COUNT(*) as enrollment_count
FROM enrollments
JOIN courses ON enrollments.course_id = courses.id
GROUP BY courses.id
ORDER BY enrollment_count DESC
LIMIT 1
''')
print(f"\n가장 인기 있는 과목: {most_popular_course['name'].iloc[0]} (수강생 {most_popular_course['enrollment_count'].iloc[0]}명)")
#%%
# 최종 상태 출력
print("\n최종 상태:")
print("Students:")
display(sql('SELECT * FROM students'))
print("\nCourses:")
display(sql('SELECT * FROM courses'))
print("\nEnrollments:")
display(sql('SELECT * FROM enrollments'))