欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySql查询——Select

程序员文章站 2024-01-15 21:39:52
...

数据库的查询,我们从表里选出我们想要的数据,查询结构仍是一个表

查询时,我们需要使用select语句,配合

  • from
  • where
  • order by
  • group by
  • having

除了这些子句使用,还有一些库为我们提供的函数可以使用,增强我们的检索能力

  • avg
  • sum
  • max
  • min
  • count

单标查询

一、基本查询(无条件查询)

1、查询全体学生的学号、姓名和年龄

select 学号(SNo),姓名(SN),年龄(Age)
from 表名(S);

2、查询学生的全部信息

select * 
from 表名;

” * ” 代表显示全部信息
上面的查询均为不使用where子句的无条件查询,也称为投影查询

二、条件查询

当要在表中找出满足某些条件的行时,则需使用where子句指定查询条件

where

1、查询选修课程号为‘C1’的学号和成绩

select 学号,成绩
from 表名
where 课程号='C1'
;

2、查询成绩高于85分的学生的学号、课程号和成绩

select 学号,课程号,成绩
from 表名
where 成绩>85
;

3、查询选修C1或C2且分数大于等于85分学生的学号、课程和成绩

select 学号,课程,成绩
from 表名
where(课程号='C1'or课程号='C2')and(成绩>=85)
;

in

4、查询没有选修C1,也没有选修C2的学生的学号、课程号和成绩

select 学号,课程号,成绩
from 表名
where 课程号 not in('C1','C2')

like

5、查询所有姓张的教师的教师号和姓名

select 教师号,姓名
from 表名
where 姓名 like '张%'
;

order by

排序,往往在语句的最后,desc为降序,asc为升序

group by & having & count

having往往和group by配合使用,对group by结果进行过滤

6、查询选修两门以上(含两门)课程的学生的学号和选课门数

select 学号,count(*)
from 表名
group by 学号
having (count(*)>=2)
;

7、求选课在三门以上(含三门)且各门课程均及格的学生及其总成绩,查询结果按总成绩降序排列
MySql查询——Select

select 学号,sum(成绩)
from 表名
where(成绩>=60)
group by 学号
havingcount(*)>=3)
order by sum(成绩) desc
;

程序执行过程:

  1. from 表名,取出整个表
  2. where 筛选出成绩>=60的
  3. group by 将选出的,按学号分组
  4. having 筛选出选课三门以上的分组
  5. select 在剩下的组中提取学号和总成绩
  6. order by 将选取结果排列

order by在句子的最后


多表查询(连接查询)

如果一个查询需要对多个表进行操作,就称为连接查询
连接查询实际就是通过各个表之间共同列的关联性来查询数据的
MySql查询——Select

当前有三个表,如图,学生、课程、学习
根据题目我们要用教学金和分数对数据进行筛选,但这两个东西并没有在一张表里,所以我们要进行连个表的联合查询

select 学号,姓名,专业
from 学生,学习
where 成绩>95 and 奖学金 is not null and 学生的学号=学习的学号

例:查询“刘伟”老师所讲授的课程,要求列出教师号、教师姓名和课程号

select 教师号(TNo),姓名(TN),课程号(CNo)
from1(T) 表2(TC)
where (表1.教师号(T.TNo)=表2.教师号(TC.TNo))and(姓名='刘伟')

上面的操作是将T表中的TNo和TC表中的TNo相等的行进行连接,
同时选取TN为“刘伟”的行,然后再在TNo、TN、CNo列上投影,
这是连接、选取和投影操作的组合