mysql语句练习50题(sqlalchmey写法)
Posted 秋华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql语句练习50题(sqlalchmey写法)相关的知识,希望对你有一定的参考价值。
为了练习sql语句,在网上找了一些题,自己做了一遍,收益颇多.很多地方换一种思路,有更好的写法,欢迎指正.
题目地址:https://blog.csdn.net/fashion2014/article/details/78826299 ,他有更好的写法
表名和字段
–1.学生表
Student(id,name,birth,sex) –学生编号,学生姓名, 出生年月,学生性别
–2.课程表
Course(id,name) – –课程编号, 课程名称
–3.教师表
Teacher(id,name,cou_id) –教师编号,教师姓名,课程id
–4.成绩表
Score(id,score,stu_id,cou_id) –成绩编号,分数,学生编号,课程编号
建表
from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String,ForeignKey,DateTime from sqlalchemy.orm import relationship,sessionmaker engine = create_engine( "mysql+pymysql://root:123456@localhost:3306/school?charset=utf8", max_overflow=20, pool_size=5, pool_timeout=30, pool_recycle=20 ) Base = declarative_base() #class Stu2Course(Base): # __tablename__ = "student_course" # id = Column(Integer,primary_key=True,autoincrement=True) # stu_id = Column(Integer,ForeignKey("student.id")) # course_id = Column(Integer,ForeignKey("course.id")) #class Stu2Teacher(Base): # __tablename__ = "student_teacher" # id = Column(Integer,primary_key=True,autoincrement=True) # stu_id = Column(Integer,ForeignKey("student.id")) # tea_id = Column(Integer,ForeignKey("teacher.id")) class Stu(Base): __tablename__ = "student" id = Column(Integer,primary_key=True) name = Column(String(32),nullable=False) birth = Column(String(32),nullable=False) sex = Column(String(5),nullable=False) grades = relationship("Grade",backref="student") #courses = relationship("Course",secondary="Stu2Course",backref="student") # teachers = relationship("Teacher",secondary="Stu2Teacher",backref="student") class Course(Base): __tablename__ = "course" id = Column(Integer,primary_key=True) name = Column(String(32),nullable=False) grades = relationship("Grade",backref="course") teachers = relationship("Teacher",backref="teacher") class Teacher(Base): __tablename__ = "teacher" id = Column(Integer,primary_key=True) name = Column(String(32),nullable=False) cou_id = Column(Integer,ForeignKey("course.id")) class Grade(Base): __tablename__ = "grade" id = Column(Integer,primary_key=True) score = Column(Integer,nullable=False) stu_id = Column(Integer,ForeignKey("student.id")) cou_id = Column(Integer,ForeignKey("course.id")) Session = sessionmaker(bind=engine) session = Session() if __name__ == "__main__": Base.metadata.create_all(engine) #Base.metadata.drop_all(engine)
插入数据
#学生表 insert into student values(‘01‘ , ‘赵雷‘ , ‘1990-01-01‘ , ‘男‘); insert into student values(‘02‘ , ‘钱电‘ , ‘1990-12-21‘ , ‘男‘); insert into student values(‘03‘ , ‘孙风‘ , ‘1990-05-20‘ , ‘男‘); insert into student values(‘04‘ , ‘李云‘ , ‘1990-08-06‘ , ‘男‘); insert into student values(‘05‘ , ‘周梅‘ , ‘1991-12-01‘ , ‘女‘); insert into student values(‘06‘ , ‘吴兰‘ , ‘1992-03-01‘ , ‘女‘); insert into student values(‘07‘ , ‘郑竹‘ , ‘1989-07-01‘ , ‘女‘); insert into student values(‘08‘ , ‘王菊‘ , ‘1990-01-20‘ , ‘女‘); #课程表 insert into course values(‘01‘ , ‘语文‘); insert into course values(‘02‘ , ‘数学‘); insert into course values(‘03‘ , ‘英语‘); #教师表 insert into teacher values(‘01‘ , ‘张三‘,‘01‘); insert into teacher values(‘02‘ , ‘李四‘,‘02‘); insert into teacher values(‘03‘ , ‘王五‘,‘03‘); #成绩表 insert into grade values(1,80,‘01‘ , ‘01‘); insert into grade values(2,90,‘01‘ , ‘02‘); insert into grade values(3,99,‘01‘ , ‘03‘); insert into grade values(4,70,‘02‘ , ‘01‘); insert into grade values(5,60,‘02‘ , ‘02‘); insert into grade values(6,80,‘02‘ , ‘03‘); insert into grade values(7,80,‘03‘ , ‘01‘); insert into grade values(8,80,‘03‘ , ‘02‘); insert into grade values(9,80,‘03‘ , ‘03‘); insert into grade values(10,50,‘04‘ , ‘01‘); insert into grade values(11,30,‘04‘ , ‘02‘); insert into grade values(12,20,‘04‘ , ‘03‘); insert into grade values(13,76,‘05‘ , ‘01‘); insert into grade values(14,87,‘05‘ , ‘02‘); insert into grade values(15,31,‘06‘ , ‘01‘); insert into grade values(16,34,‘06‘ , ‘03‘); insert into grade values(17,89,‘07‘ , ‘02‘); insert into grade values(18,98,‘07‘ , ‘03‘);
练习题和sql语句
#1 查询01课程比02课程成绩高的学生的信息以及课程分数 # 找出课程为01的学生的学生信息以及成绩 # 找出课程为02的学生的学生信息以及成绩 data_1 = session.query(Grade.stu_id,Grade.cou_id,Grade.score).filter(Grade.cou_id==1).subquery() data_2 = session.query(Grade.stu_id,Grade.cou_id,Grade.score).filter(Grade.cou_id==2).subquery() data_3 = session.query(data_1.c.stu_id).filter(data_1.c.stu_id==data_2.c.stu_id,data_1.c.score>data_2.c.score).subquery() #学生信息 data_4 = session.query(Stu).filter(Stu.id == data_3.c.stu_id).all() #课程分数 data_5 = session.query(Stu.name,data_1.c.stu_id,data_1.c.score,data_2.c.score).filter( data_1.c.stu_id==data_2.c.stu_id, data_1.c.score>data_2.c.score, Course.id==data_1.c.cou_id, Stu.id == data_1.c.stu_id, ).all() print([v for v in data_5])
以上是关于mysql语句练习50题(sqlalchmey写法)的主要内容,如果未能解决你的问题,请参考以下文章