当前位置:   article > 正文

数据库基础知识02_(2)查询cs系年龄小于20岁的女同学的人数。

(2)查询cs系年龄小于20岁的女同学的人数。

基础查询
查询所有字段
    语法格式
    select * from 表名;
    列:查询所有学生数据
    select * from students;
查询部分字段
    语法格式
    select 字段1,字段2,... from 表名;
    列:查询所有学生的姓名、性别、年龄
    select name,sex,age from students
起字段别名
    语法格式:
    select 字段1 as '别名1' from students;
    列:给名字取别名
    select name as '别名1' from students;
    select name 别名1 from students;【as 关键字可以省略】
去重
    语法格式:
    select distinct 字段1,... from 表名;
    列:显示所有学生的性别,不显示重复的数据
    select distinct sex from students;

复杂查询
条件查询:按照一定条件筛选需要的结果
    语法格式:
    select 字段1,字段2... from 表名 where 条件;
    条件构成(where后面支持多种运算符,进行条件的处理)
      比较运算
    等于:=、大于:>、大于等于:>=、小于:<、小于等于:<=、不等于:!= 或 <>
    列1:查询小巧的年龄
    select age from students where name='小巧';
    列2:查询20岁以下的学生
    select * from students where age<20;
    列3:查询家乡不在北京的学生
    select * from students where hometown!='北京';

 逻辑运算
    and、or、not
    列1:查询年龄小于20的女同学
    select * from students where age<20 and sex='女';
    列2:查询女学生或'1班'的学生;
    select * from stidents where sex='女' or class='1班';
    列3:查询非天津的学生
    select * from students where not hometoem='天津';

模糊查询
    like、%标识任意多个任意字符、_表示一个任意字符
    列1:查询姓孙的学生
    select * from students where name like '孙%';
    列2:查询姓孙且名字是一个字的学生
    select * from students where name like '孙_';
    列3:查询姓名以乔结尾的学生
    select * from students where name like '%乔';
    列4:查询姓名含白的学生
    select * from students where name like '%白%';

范围查询
    in表示在一个非连续的范围内,格式为in(......)
    between...and... 表示在一个连续的范围内
    列1:查询家乡是北京或上海或广东的学生
    select * from students where hometown in('北京','上海','广东')
    列2:查询年龄为18至20的学生
    select * from students where age between 18 and 20;

      判断空
    判空is null
    判非空is not null
    列1:查询没有填写身份证的学生
    select * from students where card is null;
    列2:查询填写了身份证的学生
    select * from students where card is not null;

排序:按照一定的排序规则筛选所需结果
    语法格式:
    select * from 表名
    order by 列1 asc|desc,列2 asc | desc,...
    默认按照列值从小到大排序
    asc从小到大排序,既升序
    desc从大到小排序,既降序
    列1:查询所有学生信息,按年龄从小到大排序
    select * from students order by age
    列2:查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
    select * from students order by age desc,studentNo

聚合函数:对一组数据进行计算得到一个结果的实现方法
    使用聚合函数方便进行数据统计
    聚合函数不能在where子句中使用
      常用聚合函数
    count():查询总记录数
    max():查询最大值
    min():查询最小值
    sum():求和
    avg():求平均值
      查询总记录数
    列:查询学生总数
    select count(*) from students;

分组:在同一属性(字段)中,将值相同的放到一组的过程
    语法格式:
    select 字段1,字段2,聚合... from 表名 group by 字段1,字段2...
    注意:
    1.一般情况,使用哪个字段进行分组,那么只有该字段可以在 * 的位置处使用
    2.分组操作多和聚合函数配合使用
    列1:查询各种性别的人数
    select sex,count(*)from students group by sex;
    列2:查询每个班级中各种性别的人数
    select class,sex,count(*)from students group by class,sex
      分组后的数据筛选
    语法格式
    select 字段1,字段2,聚合... from 表名
    group by 字段1,字段2,字段3...
    having 字段1,... 聚合...
    列:查询男生总人数
    select count(*) from students where sex='男'
    select sex,count(*) from students group by sex having sex='男'
【where与having】
【where是对from后面指定的表进行数据筛选,属于对原始数据的筛选】
【having是对group by 的结果进行筛选】
【having后面的条件中可以用聚合函数,where后面不可以】

分页:对大批量数据进行设定数量展示的过程
    语法格式:
    select * from 表名 limit start,count
    limit 分页
    从start开始,获取count条数据
    start索引从0开始
    列:查询前3行学生信息
    select * from students limit 0,3

【数据库的表名规范为:项目简称+表的内容+附加内容】
【例如:tp_goods_attr】
【含义:thshop商城_商品_属性】


连接查询:将不同的表通过特定关系连接的过程
    分为:内连接、左连接、右连接、自关联
      内连接:查询的结果为两个表匹配到的数据
      左连接:查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null
      右连接:查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null

      内连接
    语法格式
    select * from 表1
    inner join 表2 on 表1.列=表2.列
    注意:两张表中有对应关系的数据都会显示出来,没有对应关系的数据均不在显示
    举例说明:
    列1:查询学生信息及学生的成绩
    select * from students stu
    inner join scores sc on stu.studentsNo = sc.studentNo
    扩充:给表起别名(1>缩短表名利于编写 2>用别名给表创建副本)
    列2:查询课程信息及课程的成绩
    select * from courses cs inner join scores sc on cs.courseNo = sc.courseNo
    列3:查询学生信息及学生的课程对应的成绩
    select * from students stu inner join scores sc on studentNo = sc.studentNo
    inner join coures cs on cs.courseNo = sc.courseNo
    列4:查询王昭君的成绩,要求显示姓名、课程号、成绩
    select stu.name,sc.courseNo,sc.score from students stu 
    inner join scores sc on stu.studentNo = sc.studentNo where stu.name ='王昭君'

      左连接
    语法格式
    select * from 表1
    left join 表2 on 表1.列=表2.列
    注意:以 left join 关键字为界,关键字左侧表为主表(都显示),而关键字右侧的表为从表(对应内容显示,不对应为null)
    举例说明:
    列1:查询所有学生的成绩,包括没有成绩的学生
    select * from students stu left join scores sc on stu.studentNo = sc.studentsNo
    列2:查询所有学生的成绩,包括没有成绩的学生,需要显示课程名
    select * from students stu left join scores sc on stu.studentsNo = sc.studentsNo
    left join courses cs on cs.courseNo = sc.courseNo

      右连接
    语法格式
    select * from 表1
    right join 表2 on 表1.列=表2.列
    注意:以 right join 关键字为界,关键字右侧表为主表(都显示),而关键字左侧的表为从表(对应内容显示,不对应为null)
      补充:存在左右连接的必要性
      说明:能够体现左右连接必要性的场景为:至少为三张表进行查询
      注意:实际工作中,最多就三张表连接查询

自关联:将同一表通过特定关系连接的过程
      注意:1>数据表只有一张 2>数据表中至少有两个字段之间有某种联系
      方式:通过给表起别名的形式,将原本只有一张的数据表变为两张,然后通过对应字段实现连接查询即可

子查询:在一个查询套入另一个查询的过程
      子查询:在一个 select 语句种,嵌入了另一个 select 语句,那么嵌入的 select 语句称之为子查询语句
      作用:子查询是辅助主查询的,要么充当条件,要么充当数据源
    列1:查询大于平均年龄的学生
        查询班级学生平均年龄
        select avg(age) from students
        查询大于平均年龄的学生
        select * from students where age > (select avg(age) from students);
    列2:查询小明的成绩,要求显示成绩
        学生表中查询小明的学号
        select tudentsNo from students where name='小明'
         成绩表种根据学号查询成绩
        select * from scores where studentNo = '001'
        select * from scores
        where studentNo = (select tudentsNo from students where name='小明');

学习sql练习题获取网站
力扣、牛客网

【以上均为网上视频学习笔记,如有侵权请告知,立马删】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/40116
推荐阅读
  

闽ICP备14008679号