SQL高级子查询

Posted w19990605

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL高级子查询相关的知识,希望对你有一定的参考价值。

一:编写子查询:

  查询学生“章涵”的班级编号,然后在学生表查询出与“章涵”的班级编号相同的学生编号、姓名、和班级编号

  1)select ClassID from studentinfo where studentname="章涵";//查询学生“章涵”的班级编号

          select id,name,ClassID from studentinfo where ClassID=(select ClassID from studentinfo where studentname="章涵");//查询与学生表某个学生的班级编号相同

       2)select a.studentname from studentinfo a

   inner join exam b

   on a.id=b.studentid

   inner join subject c

   on c.id=b.subjectid

   where c.subjectname="基于C语言理解软件编程" and b.score =90;

二:在UPDATE、DELETE、INSERT语句中使用子查询

  1)UPDATE

      UPDATE exam set score=55//全部成绩修改为55

      where studentid=(//成绩修改为55的条件

      select id from studentinfo where studentname="章涵"

      and subjectid=(

      select id from subject where subjectname="基于C语言理解软件编程"

      ))

   2)DELETE

      DELETE from exam where studentid=(

      select id from studentinfo where studentname="章涵");

    3)INSERT

      INSERT 表名 select 字段列表 from 表名

三:高级子查询

  1)IN/NOT IN 

    select a.studentname from studentinfo where id IN

    (select studentid from exam where score=90//查询成绩为90的学生编号

    and subjectid=

    (select subjectid from subject where subjectname="基于C语言理解软件编程"))//查询“基于C语言理解软件编程”课程编号

    select a.studentname from studentinfo where id NOT IN

    (select studentid from exam where score=90

    and subjectid= 

    (select subjectid from subject where subjectname="基于C语言理解软件编程"))//查询没有参加“基于C语言理解软件编程”

  2)EXISTS/NOT EXISTS

    select studentid,exam from exam where subjectid=2 and exists(select studentid from exam where exam<60);//先查询成绩不及格的id,若返回至少一行,则进行查询                成绩表中subjectid=2的id和成绩信息

    select studentid,exam from exam where subjectid=2 and  not exists(select studentid from exam where exam<60);//先查询成绩不及格的id,若无返回值,则进行查询

      成绩表中subjectid=2的id和成绩信息

  3)ALL、ANY、SOME

    select * from exam where score > ALL(select score from exam where subjectid=1)//查询科目编号为1的这门课程的所有成绩都大的学生考试信息

    select * from exam where score > ANY(select score from exam where subjectid=1)//查询科目编号为1的任意一个成绩都大的学生考试信息

    select * from exam where score > SOME(select score from exam where subjectid=1)//查询科目编号为1的任意一个成绩都大的学生考试信息

 

      

以上是关于SQL高级子查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL高级子选择查询

SQL(高级查询)

SQL高级语句(包含子查询,连接查询,视图联集等)

SQL高级语句(包含子查询,连接查询,视图联集等)

SQL编程之高级查询及注意事项

SQL 2005 使用 PHP 链接 Access 2003 DB 高级子查询