码迷,mamicode.com
首页 > 数据库 > 详细

MySQL中的DML和DQL

时间:2018-02-02 11:33:15      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:sel   col   获得   log   括号   插入数据   返回值   mda   字段   

  MySQL中的DML语句

  插入数据记录:INSERT     insert into ... values ...可以同时插入多条记录;

  更新数据记录:UPDATE

  删除数据记录:DELETE/TRUNCATE

 

  MySQL中的SELECT语句

  SELECT语法:查询所有、查询部分;查询使用别名、查询空值、查询使用常量

  WHERE子句:对拆线呢结果进行限定;

  LIMIT子句:对查询结果进行限定

  常用函数分类:聚合函数、字符串函数、时间日期函数、数学函数

 

  子查询:将一个查询嵌套在另一个查询中。

  1、简单子查询

  例如,查看年龄比“李斯文”小的学生。

  分析:先查出“李斯文”的出生日期;然后,利用where语句筛选出生日期比“李斯文”大的学生

SELECT studentNo,studentName,sex,birthday,address FROM student
WHERE birthday>
(SELECT birthday FROM student WHERE studentName=李斯文);

 

  这里,括号内的子查询返回的是李斯文的生日:1993-07-23——一个DATA类型的数据。

  子查询使用的比较运算符有>、=、<、>=、<=,执行时,先执行子查询,返回值;再执行整个父查询,返回最后结果。(比较运算符后面的子查询只能返回单个数值)

  子查询作为WHERE条件的一部分,还可以和UPDATE、INSERT、DELETE一起使用。

  建议在编写查询语句时,直接指定要显示的列名,而不是用*,因为后者占用的资源大,可维护性低。

 

  2、使用子查询在多表间查询符合条件的数据

  例如,查询Logic Java课程至少一次考试刚好等于60分的学生名单。

  分析:

  (1)查询subject表,获得课程的课程ID;

  (2)根据课程ID,查询result表中成绩是60分的学生的编号;

  (3)根据,学号,查询student表得到学生姓名;

select studentName from student where studentNo=
    (select studentNo from result
        inner join Subject on result.subjectNo=subject.subjectNo
            where studentResult=60 and subjectName=Logic Java);

 

 

  3、IN和NOT IN子查询:后面可跟随返回多条记录的子查询,用于检测某字段的值是否存在于某个范围中。

  现在,有多个学生的Logic Java课程考试成绩为60分,采用简单的子查询就会出现编译错误“Subquery returns more than 1 row”,即子查询返回值不唯一。

  现在使用IN子查询:

select studentName from student
    where studentNo IN
    (select studentNo from result where subjectNo =
        (select subjectNo from subject where subjectName =Logic Java)
            AND studentResult = 60);

  另一个梨例子,查询参加Logic Java课程最近一次考试的在读学生名单(四层嵌套):

  (1)获得课程编号;

  (2)根据课程编号得到最近的一次课程考试日期;

  (3)根据课程编号和最近一次的考试日期查询学生信息;

SELECT studentNo,studentName FROM student where studentNo
    IN(
        select studentNo from result where subjectNo=
            (select subjectNo from subject where subjectName=Logic Java)
            AND examDate=
                 (select MAX(examDate) from result where subjectNo=
                    (select subjectNo from subject where subjectName=Logic Java)
                  )
        );

 

 

  4、NOT IN查询

  如何查询得到没有参加Logic Java课程最近一次考试的在读学生名单?

SELECT studentNo,studentName FROM student where studentNo
    NOT IN(
        select studentNo from result where subjectNo=
            (select subjectNo from subject where subjectName=Logic Java)
            AND examDate=
                 (select MAX(examDate) from result where subjectNo=
                    (select subjectNo from subject where subjectName=Logic Java)
                  )
        )AND gradeID=(...);

  还可以在NOT IN的条件外继续AND() 添加条件~~

 

 

 

 

 

 

 

 

MySQL中的DML和DQL

标签:sel   col   获得   log   括号   插入数据   返回值   mda   字段   

原文地址:https://www.cnblogs.com/bigbigbigo/p/8403334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!