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写法)的主要内容,如果未能解决你的问题,请参考以下文章

sql语句练习50题(Mysql版-详加注释)

sql语句练习50题

sql语句经典练习50题

sql语句经典练习50题

小菜菜mysql练习50题解析——数据准备

MySQL--内联语句练习