• 【数据库系统】单表数据查询


    选择表中的若干列:

    查询指定列

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

    1. select Sno,Sname
    2. from Student;

    例:查询学生的姓名、学号和所在系

    1. select Sname,Sno,Sdept
    2. frmo Student;

    查询全部列

    例:查询全体学生的详细记录

    select * from Student;

    查询经过计算的值

    例:查全体学生的姓名和出生年份

    1. select Sname,2022-Sage
    2. from Student;

    例:查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名

    1. select Sname,'Year of Birth:',2014-Sage,lower(Sdept)
    2. from Stduent;

    使用列别名改变查询结果的列标题

    1. select
    2. Sname (as) NAME,
    3. 'year of birth:' (as) birth,2014-Sage (as)birthday,
    4. lower(Sdept) (as)department
    5. from Student

    选择表中的若干数组

    消除取值重复的行

    1. select distinct Sno
    2. from SC;

    查询满足条件的元组

    比较:= ,> ,< ,<= ,!=

    确定范围:between and ,not between and 

    确定集合:(not)in

    字符匹配:(not)like

    空值:is (not)null

    逻辑运算:and,or,not 

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

    select * from Student where Sdept='CS';

    查询所有年龄在20岁以下学生姓名及其年龄

    1. select Sname,Sage
    2. from Student
    3. where Sage<20;

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

    1. select distinct Sno
    2. from SC
    3. where Grade<60;

    注意去重

    between and

    查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄

    1. select Sname,Sdept,Sage
    2. from Student
    3. where Sage between 20 and 23;

    查询年龄不再20~23岁之间学生姓名、系别和年龄

    1. select Sname,Sdept,Sage
    2. from Student
    3. where age not between 20 and 23;

    in:

    查询CS系,MA系,IS系学生的姓名和性别

    1. select Sname,Ssex
    2. from Student
    3. where Sdept in ('CS'.'MA','IS');
    4. where Sdept='CS' or Sdept='MA' or Sdept='IS'

    查询既不是CS系,MA系,也不是IS系的学生的姓名和性别

    1. select Sname,Ssex
    2. from Student
    3. where Sdept not in('IS','MA','CS');

    通配符:

    %任意多个字符,_匹配一个字符

    查询所有刘姓学生姓名、学号和性别

    1. select Sname,Sno,Ssex
    2. from Student
    3. where Sname like '刘%';

    查询姓'欧阳'且全名为三个汉字的学生的姓名

    1. select Sname
    2. from Student
    3. where Sname like '欧阳_';

    查询名字中第2个字为‘阳’字学生的姓名和学号

    1. select Sname,Sno
    2. from Student
    3. where Sname like '_阳%';

    查询所有不姓刘的学生姓名

    1. select Sname
    2. from Student
    3. where Sname not like '刘%';

    空值:

    查询缺少考试成绩的学生的学号和课程号

    1. select Sno,Cno
    2. from SC
    3. where Grade is null

    逻辑运算符:

    and 优先级高于OR,可以使用括号改变优先级

    例:查询计算机系年龄在20岁以下的学生姓名

    1. select Sname
    2. from Student
    3. where Sdept='CS' and Sage<20;

    order by子句:

    例:查询选修3号课程的学生的学号及成绩,查询结果按分数降序排序

    1. select Sno,Grade
    2. from SC
    3. where Cno='3'
    4. order by Grade desc;

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

    1. select *
    2. from Student
    3. order by Sdept,Sage desc;

    聚集函数:

    count(*)统计元组个数

    sum():计算一列值的总和

    avg():计算一列值的平均值

    max():求一列中最大值

    min():求一列中最小值

    查询学生总人数: 

    1. select count(*)
    2. from Student;

    查询选修了课程的学生人数

    1. select count(distinct Sno)
    2. from SC;

    计算1号课程的学生平均成绩:

    1. select avg(Grade)
    2. from SC
    3. where Cno='1';

    查询选修1号课程的学生最高分数

    1. select max(Grade)
    2. from SC
    3. where Cno='1';

    group by:

    group  by用于细化聚集函数的作用对象

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

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

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

     例:求各个课程号对应的选课人数

    1. select Cno,count(*)
    2. from SC
    3. group by Cno;

    例:查询选修了3门以上课程的学生学号

    1. select Sno
    2. from SC
    3. group by Sno
    4. having count(*)>=3;

    having 选择满足条件的组

    where作用于表,从中选择满足条件的元组

    例:查询平均成绩大于等于90分的学生学号和平均成绩

    1. select Sno,avg(Grade)
    2. from SC
    3. group by Sno
    4. having avg(Grade)>=90

  • 相关阅读:
    位运算 科普
    @Version乐观锁配置mybatis-plus使用(version)
    gcc编译选项
    copulas对涉及时间连续随机过程的时变可靠性的影响研究(Matlab代码实现)
    【C语言编码练习】01要点:数组输入、除法类型转换
    NSS [HNCTF 2022 WEEK2]ohmywordpress(CVE-2022-0760)
    【已解决】Python打包文件执行报错:ModuleNotFoundError: No module named ‘pymssql‘
    669. 修剪二叉搜索树 ●●
    Leetcode 2431.最小偶倍数
    Redisi消息队列
  • 原文地址:https://blog.csdn.net/m0_52043808/article/details/127397386