开发者

从0到1学会MySQL单表查询

开发者 https://www.devze.com 2023-11-19 09:02 出处:网络 作者: Dawn黎明开始
目录1.查询表中若干列(1)查询全部列(2)查询经过计算的值(3)使用列别名改变查询结果的列标题(AS可以省略)2.查询表中若干元组(1)消除取值重复的行(2)比较大小(3)确定范围(4)确定集合(5)字符匹配(1)匹配串含固定字符串(
目录
  • 1.查询表中若干列
    • (1)查询全部列
    • (2)查询经过计算的值
    • (3)使用列别名改变查询结果的列标题(AS可以省略)
  • 2.查询表中若干元组
    • (1)消除取值重复的行
    • (2)比较大小
    • (3)确定范围
    • (4)确定集合
    • (5)字符匹配
      • (1)匹配串含固定字符串
      • (2)匹配串为含通配符的字符串
      •  (3)使用换码字符将通配符转义为普通字符
    • (6)涉及空值的查询
    • 3.ORDER BY子句
      • 特点
        • 例子
          • 例1
          • 例2
      • 4.聚焦函数
        • (1)统计元组个数
          • (2)统计一列中值的个数
            • (3)计算一列值的总和(此列必须为数值型)
              • (4)计算一列值的平均值(此列必须为数值型)
                • (5)求一列中的最大值和最小值
                • 5.GROUP BY子句
                  • 特点
                    • HAVING短语与WHERE子句的区别
                    • 总结

                      1.查询表中若干列

                      例如:查询全体学生的学号和姓名

                      select sno,sname
                      from student;

                      (1)查询全部列

                      (例如:查询全体学生的信息)

                      方法一:在select关键字后面列出所有列名

                      代码如下

                      select  sno,sname,ssex,sage,sdept
                      from student;

                      方法二:将<目标列表表达式>指定为*

                      代码如下

                      select *
                      from student;

                      (2)查询经过计算的值

                      select子句中的<目标列表达式>不仅可以为表中的属性列,也可以是表达式

                      例如:查询全体学生的姓名及其出生年份

                      代码如下

                      select sname,2023-sage
                      from student;

                       运行结编程客栈

                      从0到1学会MySQL单表查询

                      (3)使用列别名改变查询结果的列标题(AS可以省略)

                      代码如下

                      SELECT Sname AS NAME,'Year of Birth:' AS BIRTH, 
                             2014-Sage AS BIRTHDAY,LOWER(Sdept)  AS DEPARTMENT
                      	FROM Student;

                      运行结果

                      从0到1学会MySQL单表查询

                      2.查询表中若干元组

                      (1)消除取值重复的行

                      如果没有指定DISTINCT关键字,则缺省为ALL

                      例如:(查询选修了课程的学生学号)

                      未指定DISTINCT关键字

                      代码如下

                      SELECT sno
                      FROM sc;
                      /*
                      SELECT ALL sno
                      FROM sc;
                      */

                      运行结果

                      从0到1学会MySQL单表查询

                      指定DISTINCT关键字

                      代码如下

                      SELECT DISTINCT sno
                      FROM sc;

                      运行结果

                      从0到1学会MySQL单表查询

                      (2)比较大小

                      例如:查询计算机科学系全体学生的名单

                      代码如下

                      SELECT sname
                      FROM student
                      WHERE sdept='cs';

                      运行结果

                      从0到1学会MySQL单表查询

                      例如:所有年龄在20岁以下的学生姓名和年龄

                      代码如下

                      SELECT sname,sage
                      FROM student
                      WHERE sage<20;

                      运行结果

                      从0到1学会MySQL单表查询

                       例如:查询考试成绩有不及格的学生的学号

                      代码如下

                      SELECT DISTINCT sno
                      FROM sc
                      WHERE grade<60;
                       

                      (3)确定范围

                      谓词:between   and,not between   and

                      例如:查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名,年龄

                      代码如下

                      SELECT snajsme,sage
                      FROM student
                      WHERE sage BETWEEN 20 AND 23;

                      运行结果

                      从0到1学会MySQL单表查询

                      (4)确定集合

                      谓词: in<值表>,not in<值表>

                      代码如下

                      SELECT sname ,ssex,sdept
                      FROM student
                      WHERE sdept IN ('CS','MA','IS');

                      运行结果

                      从0到1学会MySQL单表查询

                      (5)字符匹配

                      谓词:[not]like'<匹配串>'[ESCAPE'<换码字符>']

                      <匹配串>可以是一个完整的字符串,也可以含有通配符%和_

                      %(百分号)代表任意长度(长度可以为0)的字符串

                      例如:a%b表示以a开头,以b结尾的任意长度的字符串

                      _(下划线)代表任意单个字符

                      例如:a_b表示以a开头,以b结尾的长度为3的任意字符串

                      -----------------------------------

                      (1)匹配串含固定字符串

                      例如:查询学号为201215121的学生的详细情况

                      代码如下

                      SELECT *
                      FROM student
                      WHERE sno='201215121';

                      运行结果

                      从0到1学会MySQL单表查询

                      (2)匹配串为含通配符的字符串

                      例如:查询所有姓刘学生的姓名,学号,性别

                      代码如下

                      SELECT sname ,sno,ssex
                      FROM student
                      WHERE sname LIKE '刘%';

                      运行结果

                      从0到1学会MySQL单表查询

                      例如:查询姓"欧阳&qupythonot;且全名为三个汉字的学生的姓名

                      代码如下

                      SELECT sname
                      FROM student
                      WHERE sname LIKE '欧阳_';

                      例如:查询名字中第二个字为"阳"字的学生的姓名和学号

                      代码如下

                      SELECT sname,sno
                      FROM student
                      WHERE sname LIKE '_阳%';

                      例如:查询所有不姓刘的学生姓名,学号和性别

                      代码如下

                      SELECT sname ,sno,ssex
                      FROM student
                      WHERE sname NOT LIKE '刘%';

                       (3)使用换码字符将通配符转义为普通字符

                      ESCAPE'/'表示"/"为换码字符

                      例如:查询DB_Design课程的课程号和学分

                      代码如下

                      select cno,ccredit
                      from course
                      where cname like'DB/_Design'ESCAPE'/';

                      例如:查询以"DB_"开头,且倒数第3个字符为i的课程的详细情况

                      代码如下

                      select *
                      from course
                      where cname like 'DB/_%i__'ESCAPE'/';

                      (6)涉及空值的查询

                      谓词: is null 或 is  not null

                      注意:"is"不能用 "="代替

                      例如:某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩

                      查询缺少成绩的学生的学号和相应的课程号

                      代码如下

                      select sno,cno
                      from sc
                      where grade is null;

                      3.ORDER BY子句

                      特点

                      可以按一个或多个属性列排序

                      升序:ASC;降序:DESC;缺省值为升序

                      对于空值,排序时显示的次序由具体系统实现来决定

                      例子

                      例1

                      (查询选修了3课程的学生的学号及其成绩,查询结果按分数降序排列)

                      SC表如下

                      从0到1学会MySQL单表查询

                      代码如下

                      SELECT Sno,Grade
                      FROM SC
                      WHERE Cno='3'
                      ORDER BY grade DESC;

                      运行结果

                      从0到1学会MySQL单表查询

                      例2

                      (查询全体学生情况,查询结果按所在系的系好升序排列,同一系中的学生按年龄降序排列)

                      Student表如下

                      从0到1学会MySQL单表查询

                      代码如下

                      SELECT *
                      FROM Student
                      ORDER BY Sdept,Sage DESC;

                      运行结果

                      从0到1学会MySQL单表查询

                      4.聚焦函数

                      (1)统计元组个数

                      COUNT(*)

                      例如:(查询学生总人数)

                      代码如下

                      SELECT COUNT(*)
                      FROM student;

                      运行结果

                      从0到1学会MySQL单表查询

                      (2)统计一列中值的个数

                      COUNT([DISTINCT|ALL]<列名>)

                       例如:(查询选修了课程的学生人数)

                      代码如下

                      SELECT COUNT(DISTINCT sno)
                      FROM sc;

                      运行结果

                      从0到1学会MySQL单表查询

                      (3)计算一列值的总和(此列必须为数值型)

                      SUM([DISTINCT|ALL]<列名>)

                       例如:(查询学生201215012选修课程的总学分数)

                      代码如下

                      SELECT SUM(Ccredit)
                      FROM sc,course
                      WHERE sno='201215012' AND sc.`Cno`=course.`Cno`;

                      (4)计算一列值的平均值(此列必须为数值型)

                      AVG([DISTINCT|ALL]<列名>)

                       例如:(查询选修1号课程的学生平www.devze.com均成绩)

                      代码如下

                      SELECT  AVG(Grade)
                      FROM sc
                      WHERE cno='1';

                      (5)求一列中的最大值和最小值

                      MAX([DISTINCT|ALL]<列名>)

                       例如:(查询选修1号课程的学生最高分数)

                      代码如下

                      SELECT MAX(Grade)
                      FROM sc
                      WHERE cno='1';

                      MIN([DISTINCT|ALL]<列名>)

                       例如:(查询选修1号课程的学生最低分数)

                      代码如下

                      SELECT MIN(Grade)
                      FROM sc
                      WHERE cno='1';​

                      5.GROUP BY子句

                      特点

                      细化聚焦函数的作用对象

                      如果未查询结果分组,聚焦函数将作用于整个查询结果

                      对查询结果分组后,聚焦函数将分别作用于每个组

                      按指定的一列或多列值分组,值相等的为一组

                      代码如下

                      SELECT sno, AVG(Grade)
                      FROM sc
                      GROUP BY sno

                      运行结果

                      从0到1学会MySQL单表查询

                      HAVING短语与WHERE子句的区别

                      (1)作用对象不同

                      (2)WHERE子句作用于基表或视图,从中选择满足条件的元组

                      (3)HAVING短语作用于组,从中选择满足条件的组

                      例如:(查询平均成绩大于等于85分的学生学号和平均成绩)

                      错误代码:

                      SELECT sno, AVG(Grade)
                      FROM sc
                      WHERE AVG(grade)>=85
                      GROUP BY sno

                      正确代码如下

                      SELECT sno, ApythonVG(Grade)
                      FROM sc
                      GROUP BY sno
                      HAVING AVG(grade)>=85

                      注意:WHERE子句中是不能用聚焦函数作为条件表达式

                      总结

                      到此这篇关于mysql单表查询的文章就介绍到这了,更多相关MySQL单表查询内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

                      0

                      精彩评论

                      暂无评论...
                      验证码 换一张
                      取 消

                      关注公众号