MySQL数据库基础(数据表的SELECT操作)

偏执的太偏执、 2023-02-11 04:41 89阅读 0赞

文章目录

    • 数据表的操作
        • 1、创建成绩表
        • 2、select表达式
        • 3、查询
        • 4、修改(AS)
        • 5、筛选(WHERE)
        • 6、排序(ORDER)
        • 7、分组(GROUP)
        • 8、过滤(HAVING)
        • 9、聚合函数
        • 10、限制取值(LIMIT)

本篇是延续上一篇文章的内容,依旧是关于数据表操作方面的内容,这方面内容相对较多,毕竟操作数据表才是学习数据库的核心。

数据表的操作

1、创建成绩表

  1. --创建成绩表
  2. CREATE TABLE ExamResult(
  3. id INT PRIMARY KEY auto_increment,
  4. name VARCHAR (20),
  5. JavaScript DOUBLE ,
  6. jQuery DOUBLE ,
  7. C_language DOUBLE
  8. );
  9. --添加数据到表中
  10. INSERT INTO ExamResult VALUES (1,"Luffy",98,98,98),
  11. (2,"Nami",35,98,67),
  12. (3,"Zoro",59,59,62),
  13. (4,"Chopper",88,89,82),
  14. (5,"ViewIn",88,98,67),
  15. (6,"ZaHuw",86,100,55);

1

2、select表达式

  • select查询:SELECT *|field1,filed2 … FROM tab_name
  • where筛选:WHERE 条件
  • 分组:GROUP BY field
  • having过滤:HAVING 筛选
  • 排序:ORDER BY field
  • 限制个数:LIMIT 限制条数
    注意:
    select只是一个显示效果,不会真正去除或者删除数据库中的数据

3、查询

其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列;
distinct用来剔除重复行。

  1. --只查所有名字
  2. select name from ExamResult;
  3. --看名字和JavaScript的成绩
  4. select name, JavaScript from ExamResult;
  5. --去除重复的内容:去除所有重复的的name,只留一个
  6. select distinct name from ExamResult;

2

4、修改(AS)

UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。

  1. --修改数据来显示:将成绩分别加102030
  2. select name, JavaScript+10, jQuery+20, C_language+30 FROM ExamResult;
  3. --用as来修改显示:修改name和科目名称
  4. select name as "NAME", JavaScript as JS, jQuery as JQ, C_language as CC from ExamResult;

3

5、筛选(WHERE)

WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。

  • 多个条件逻辑运算符:and or not
    关系运算:> < >=(大等于) <=(小等于) !=(不等于)
    in运算:表示在某些数据中任选一个
    like运算:以某字符开头的字段

    —筛选语句:
    —将JS成绩大于85的name和JS成绩显示出来
    SELECT name, JavaScript from examresult where JavaScript>85;

    —筛选JS成绩在70到100之间的name和JS成绩
    SELECT name, JavaScript from ExamResult where JavaScript between 70 and 100;

    —筛选JS成绩不是88的name和JS成绩
    select name, JavaScript from ExamResult where JavaScript!=88;

    —筛选JS成绩是88和98的name和JS成绩
    select name, JavaScript from ExamResult where JavaScript in(88,98);

    —筛选name是z开头的name与JS成绩
    select name, JavaScript from examresult where name like “z%”;

  1. --只添加名字,不添加成绩
  2. insert into ExamResult (name) values ( "new_one" );
  3. --删除JS成绩为空的name
  4. select name from ExamResult where JavaScript is null;

4

6、排序(ORDER)

  1. --排序(默认升序):按照JS成绩高低排序
  2. select name, JavaScript from ExamResult order by JavaScript;
  3. --过滤之后再排序(desc降序):JS成绩大于70nameJS成绩从低到高排序
  4. select name, JavaScript from ExamResult where JavaScript>70 order by JavaScript desc;
  5. --对总分进行排序:总成绩从高到低排序
  6. SELECT name, JavaScript+jQuery+C_language as SUM from ExamResult order by SUM desc;
  7. --精确定位:对nameZaHuwJS成绩在50分以上的总成绩进行从高到低排序
  8. SELECT name, JavaScript+jQuery+C_language as SUM from ExamResult where name="ZaHuw" and JavaScript>=50 order by SUM desc;

5

7、分组(GROUP)

  1. --按照name来分组,实际上就是分成了6组,同一个名字为一组
  2. select * from ExamResult group by name;
  3. --按照JS成绩来分,同一个成绩为一组
  4. select * from ExamResult group by JavaScript;
  5. --分组之后进行操作(函数):通过name分组之后对每一组的JS成绩进行求和操作
  6. select name, sum(JavaScript) from ExamResult group by name;

这是原数据表:
6
分组求和过后的表:
7

8、过滤(HAVING)

having和where的区别:
having对分组过后的数据进行过滤(而where是分组之前的),不过能用where的地方都可以用having替换

  1. --用name分组过后,求每一组jquery的成绩总和,最后筛选jQuery成绩总和大于150的成绩对应的name
  2. select name, sum(jQuery) from ExamResult group by name having sum(jQuery)>150;
  3. --统计JS成绩大于80name的个数
  4. select count(name) from ExamResult where JavaScript>80;
  5. --计算所有nameJS平均分:JavaScript总分/name个数
  6. select sum(JavaScript)/count(name) from ExamResult;

8

9、聚合函数

  1. --简单化的求平均分:AVG
  2. select AVG(JavaScript) FROM ExamResult;
  3. --最大值:MAX
  4. select MAX(JavaScript) from ExamResult;
  5. --最小值:MIN,排除nullifnull(JavaScript,0),意思是如果JS成绩是null,则当做0
  6. select MIN(ifnull(JavaScript,0)) FROM ExamResult;
  7. --求总成绩的最大值
  8. select MAX(JavaScript+jQuery+C_language) from ExamResult;
  9. --求分组过后总成绩的最大值和组名
  10. select name, MAX(JavaScript+jQuery+C_language) from ExamResult group by name;

9

10、限制取值(LIMIT)

  1. --只取id排序前三的数据
  2. select * from ExamResult limit 3;
  3. --从第二个开始,取5个(类似索引一样,从0开始算的)
  4. select * from ExamResult limit 1,4;

10
本篇结束,谢谢大家!
所有select的基本操作都介绍完了,不过学习这种事情主要还是需要自己去练习,得出结果才印象深刻,效果才好。

发表评论

表情:
评论列表 (有 0 条评论,89人围观)

还没有评论,来说两句吧...

相关阅读