基本使用 limit 数字

limit 后面跟上 数字,表示对返回的结果进行限制显示的个数。
比如 limit 1 表示只显示一条结果。

  1. 按照age 进行倒序,只显示第一条结果;
    1. select * from students
    2. order by age desc
    3. limit 1;
    limit 的使用方式
    Mysql limit 限制结果 - 图1

  1. 查询所有男同学,按照age 排序, 显示前5条数据。

    select * from students where sex='男'
    order by age
    limit 5;
    
  2. 查询出最高的分数是多少?

    select score from students 
    order by score desc 
    limit 1;
    
  3. 查询出最低的分数是多少?

    select score from students
    order by score asc
    limit 1;
    

    limit m,n

    在做查询结果的时候 limit 后面可以跟两个数字。

Mysql limit 限制结果 - 图2

查询 第4-8条数据

select * from students 
limit 3,5;
  1. 查询第2-5 条数据

    select * from students
    limit 1,4;
    
  2. 查询第3条 (不是前3条)

    select * from students
    limit 2,1;
    
  3. 查询第2条 (不是前2条)

    select * from students
    limit 1,1;
    
  4. 查询第5-10条数据

    select * from students
    limit 4,6;
    

经典问题

  1. 查找年龄最大的同学(有可能两个同学的年龄一样大。如果是这样的话,两个同学都要被查找到)

在解决这类问题的时候,首先学会分析问题:

  1. 因为可能有多人age 同样年纪的人比较多。
  2. 如果我知道 最大的年龄是多少。

    select age from students
    order by age desc
    limit 1;
    

    image.png

  3. 根据年龄可以找到符合条件的所有人。

    select * from students
    where age = 90;
    

    image.png


解决这个问题 可以使用两条语句找到。但是最好一条解决。

两条sql 可以这样合并;
image.png
90 是从上面一句获取到的。
可以将 90 替换为上面的sql 语句。

select * from students
where age = 
    (SELECT age from students
            ORDER BY age desc
            LIMIT 1
        );

image.png
执行的时候 先执行 () 中的语句。

  1. 查找最小的年龄的人有哪些。

分析问题:

  1. 找到最小的年龄。
    select age from students
    order by age asc
    limit 1;
    
    b. 根据年龄,找出符合年龄的所有人。
    select * from students
    where age = (select age from students
    order by age asc
    limit 1);
    
  1. 找出成绩最高的所有学员。

分析问题:

  1. 先找到最高的成绩;

    select score from students
    order by score desc
    limit 1;
    
  2. 根据成绩找到对应的人员。

    select * from students
    where score = (select score from students
    order by score desc
    limit 1);
    
  1. 查找数学成绩最高的学员。

分析问题:

  1. 找到最高的数学分数

    select score from students
    where course="数学"
    order by score desc
    limit 1;
    
  2. 根据分数找人。

    select * from students
    where course="数学" and score = (select score from students
                                where course="数学"
                                order by score desc
                                limit 1);
    

思维导图

单表查询.png
单表查询.xmind

作业

根据students表进行如下操作

  1. 查询姓名为三个字的同学 并按照age 排序;
  2. 查询所有姓王 有数学成绩的同学信息;
  3. 以语文成绩从大到小进行排序;
  4. 按照age 降序,score 升序进行排序;
  5. 男生同学的数学成绩,按照score 降序,age升序排序;
  6. 查询男生的前5条
  7. 查找男生中 第2-5 条数据
  8. 查找男生中成绩最高分是多少 (分数)
  9. 查找女生中成绩最低分是多少 (分数)
  10. 分数最高的同学 (所有符合条件的同学信息)
  11. 分数最低的同学 (所有符合条件的同学信息)
  12. 语文成绩最高的同学
  13. 数学成绩最低的男同学
  14. 分数第二高的同学
  15. 数学分数第二高的同学

  16. 查询姓名为三个字的同学 并按照age 排序;

    select * from students where username like "___" order by age
    
  17. 查询所有姓王 有数学成绩的同学信息;
    SELECT * FROM students WHERE username like '王%' ANd course='数学';
    
  18. 以语文成绩从大到小进行排序;
    select * from students where course="语文" order by score desc
    
  19. 按照age 降序,score 升序进行排序;
    SELECT * FROM students ORDER BY age DESC, score asc;
    
  20. 男生同学的数学成绩,按照score 降序,age升序排序;
    select * from students where sex="男" and course="数学" order by score desc, age asc
    
  21. 查询男生的前5条
    SELECT * FROM students WHERE sex='男' LIMIT 5;
    
  22. 查找男生中 第2-5 条数据
    select * from students where sex="男" limit 1,4
    
  23. 查找男生中成绩最高分是多少 (分数)
    SELECT score FROM students WHERE sex='男' ORDER BY score desc LIMIT 1;
    
  24. 查找女生中成绩最低分是多少 (分数)
    select score from students where sex="女" order by score asc limit 1;
    
  25. 分数最高的同学 (所有符合条件的同学信息)

    SELECT * FROM students WHERE score =(SELECT score FROM students ORDER BY score desc LIMIT 1);
    
  26. 分数最低的同学 (所有符合条件的同学信息)

    select * from students where score=(select score from students order by score asc limit 1);
    
  27. 语文成绩最高的同学
    SELECT * FROM students WHERE course='语文' and score=(SELECT score  FROM students WHERE course='语文' ORDER BY score desc LIMIT 1);
    
  28. 数学成绩最低的男同学
    select * from students where sex="男" and course= "数学" and score=
    -- 最低分
    (select score from students where course="数学" and sex= "男" order by score asc limit 1)
    
  29. 分数第二高的同学
    SELECT * FROM students WHERE score=(SELECT DISTINCT (score) from students ORDER BY score desc LIMIT 1,1);
    
  30. 数学分数第二高的同学
    select * from students where course="数学" and score=(select distinct (score) from students where course="数学" order by score desc limit 1,1)
    

下面根据 jobs 表进行操作

  1. 按照工作年限(workyear)进行降序排序;
    select * from jobs order by workyear desc;
    
  2. 查询符合如下条件之一的同学
    a. 本科学历 3年及以上工作经验
    b. 专科学历 4年及以上工作经验
    select * from jobs where (degree = '本科' and workyear >=3) or (degree = '专科' and workyear >=4);
    
  3. 按学历统计人数。
    select degree ,count(*) from jobs group by degree;
    
  4. 工作年限最高的学历为专科的人员。
    select * from jobs where degree = '专科' and workyear = (select workyear from jobs where degree ='专科' order by workyear desc limit 1);
    
  5. 工作年限最低的人员信息;
    select * from jobs where workyear =(select workyear from jobs  order by workyear limit 1);
    
  6. 工作年限去重。
    select distinct (workyear) from jobs;
    

Linux作业

  1. 统计 /etc/man_db.conf 文件中有多少个 man 字符?

使用grep 命令
https://www.runoob.com/linux/linux-comm-grep.html

grep -o "man" /etc/man_db.conf | wc -l

使用vi命令

:%s/man//gn

image.png
image.png

  1. 查看服务器的端口号使用什么命令?

    netstat -anpt
    
  2. 将 /var/log/messages 文件中的第10-90 行内容 保存到 /tmp/log.txt

cat -n /var/log/messages | head -90 | tail -81 > /tmp/log.txt

git作业

将上面的作业整理成文档 提交到自己的 仓库里面。