数据库查询和索引

时间:2015-04-09 11:32:56

标签: mysql sql database indexing clustered-index

鉴于两种关系:

      Students = (St-Id, Name, Address, CourseNo, Cgpa)
      Courses = (CourseN0, CourseName, Credits)

其中主键为St-IdCourseNo。学生关系中的CourseNo是外键引用Courses关系。

假设经常出现以下问题:

问题:每个学生学习的课程(CourseNo和CourseName)是什么?

SELECT Students.Name, Courses.CourseName, Course.CourseNO
FROM Students
INNER JOIN Courses
ON Students.CourseNo=Course.CourseNo;

使用连接操作是正确的查询吗?

由于课程编号,它是一个主要索引。我们可以将courseNo作为主要指标视为规则吗?它也聚集在一起?群集和主索引有什么区别?

问题:每个学生的Cgpa是什么?

答案:Select Cgpa and name from students

4 个答案:

答案 0 :(得分:2)

我同意rcl的simon,你的设计只允许每个学生一门课程。尝试在学生和课程之间放置一个交叉表。

Students = (St-Id, Name, Address, Cgpa)
Courses = (CourseN0, CourseName, Credits)
StudentCourse = (St-Id, CourseN0)

答案 1 :(得分:0)

  1. 如果表具有主键,则聚簇索引与主键相同。如果它没有主键,InnoDB将自己创建一个聚簇索引。 {(3}}。

  2. 描述了用于决定如何执行此操作的规则
  3. 您的语法不太正确。要从表格中选择多个列,请使用逗号分隔,而不是and。所以它应该是:

    SELECT name, cpga FROM student
    

答案 2 :(得分:0)

此外,如果St-id是学生的主键,那么学生只能有一门课程。你的设计看起来有点缺乏。

答案 3 :(得分:0)

SELECT 
     name
    ,cgpa
FROM
   students
WHERE 
   1=1

试试这个