文章目录

  • 一、单表查询基本结构
  • 二、单表查询结构语法
    • select
    • 聚合函数
    • where
    • 模糊查询
    • order by
    • group by
    • having
  • 三、多表查询基本结构
  • 四、多表查询结构语法
    • 内连接
    • 自连接
    • 外连接
  • 五、总结


前言

        学习了数据库,在以后公司等地方,你可能不会用到创建数据库或者表格,但是你一定会使用查询,公司的账单、学校的成绩单等等。所以学习数据库最重要的就是会查询,本章的查询只是一个很简单的操作,后面会写更深的高级查询!

查询了解清楚最重要的东西:顺序


一、单表查询的基本结构

        查询语句是数据库操作中最基本也是最重要的语句之一,其功能是从数据库中检索满足条件的数据。查询的数据源可以来自一张表,也可以来自多张表甚至可以来自视图。查询的结果是由0行或多行数据组成的一个数据集合,且允许选择一个或多个字段作为输出字段。

查询语句的基本结构可简单描述如下:

       select 字段、聚合函数、top...  from  表

                where               --条件过滤

                group  by          --表格分组

                having              --分组后进行过滤

                order  by           --表格排序


二、单表查询结构语法

1、select

查询学生表student的全部内容

select *from student

 

 查询学生表student的学生学号id、姓名name、性别gender

select id 学号,name 姓名,gender 性别 from student

 top用法

查询学生表student前3行数据

select top 3 *from student

 查询学生表student前百分之50的数据

select top 50 percent *from student

 

 2、聚合函数

 较为常用的聚合函数有:sum()、avg()、max()、min()、count()。

下面演示其用法

求student表中的学生人数

select count(id) from student

 求学生的平均成绩,最高成绩和总分

select avg(grade) 平均成绩,max(grade) 最高分,
sum(grade) 总分 from student

3、where

where的主要功能是对我们查询的数据进行过滤,得到我们想要的一些数据!!!

之后的语法会越来越多,想要弄懂整个流程,顺序很重要!

数据库执行的顺序是:先from找到学生表,然后对表格where过滤,最后用   *   来显示全部信息!!!

显示成绩大于80分的学生的基本信息

select *from student
where grade>80

 显示全部女生的信息

select *from student
where gender = '女'

显示成绩在80~90之间的学生信息

select *from student
where grade between 80 and 90

4、模糊查询

模糊查询的语法:在where后面加like  或 not like 表示   像这样  或  不像这样

‘_’  代表一个符号,用来记述一个事物

列出所有姓刘的所有学生

select *from student
where name like '刘%'

 列出所有不姓王的所有学生

select *from student
where name not like '王%'

 列出姓“张”且全名为2个汉字的学生

select *from student
where name like '张_'

查询出年龄含有“1”字串的所有学生基本信息 

select *from student
where age like '%1%'

5、order by

order by 可以用来排列表格的数据。可以分为desc降序排列和asc升序排列,表格默认是升序排列!!

如果:

order by a  b,表示先以a升序排列,再以b升序排列!!!

order by desc a  b,表示先按a降序排列,然后再以b升序排列!!!

列出学生表中全部信息,按年龄的降序排列

select *from student
order by age desc

 先按照年龄升序排列,然后按成绩降序排列学生表

select *from student
order by age ,grade desc

6、group by

gourp by 是将表格进行分组。在有些表例如课程表中,有些学生选多个课程因此会多次出现同一个学号,这时我们可以把学号进行分组,去统计每个学生的选课数目或者总成绩。

注意:在group by 中的select 语句中,只能出现分组依据列和聚合函数

因为分组之后每个只会显示一行数,聚合函数也只会出现一个数从而不产生矛盾!!

关键词:每个、每门、不同等等

首先查询院系表

在院系表中,统计每个学生的选课门数和总成绩

select sno,count(Cno) 门数,sum(Grade) 总成绩 from sc
group by Sno

7、having 

having语句是对分组之后的数据进行过滤,而且只能使用分组列和聚合函数

而where语句是对原始表格进行过滤,只能使用字段不能使用聚合函数

where 必须在having的前面!!

排列顺序为:where  ->  group by  ->  having  ->  order  by  

统计选课门数超过2门的学生学号、门数和总成绩,并且以选课门数降序排列

select sno,count(Cno) 门数,sum(Grade) 总成绩 from sc
group by sno
having count(Cno)>2
order by count(Cno) desc


三、多表查询的基本结构

    多表查询首要目的是将多个表连接起来,在再去进行查询。连接的基本结构为:

select *from A join B 

on   A.字段 =  B.字段     //这样就将A表与B表连接起来了

join C

on   C.字段 = A.字段    //看C表与哪个表字段相同则去连接,

这样就形成了三表相连,以此类推

连接查询又分为:内连接、自连接、外连接、全外连接。我们默认连接属于内连接!!!

这种连接在整体上看是一种横向连接,即左右相连,后面会将纵向连接union联合!!

连接后的表是一个整体表,也是一个临时表。依然可以进行单表的所有操作,where、having等依然可以使用!!!


四、多表查询的结构语法

1、内连接

内连接是最常用的一种连接类型。关键词为:inner,使用内连接时,如果两个表的相关字段满足连接条件,则可以把这两个表中提取数据并组合成一个新的临时表!!!

表中连接默认为内连接,其关键词inner 可以省略不写!!

查询课程表,将学生表与课程表用内连接方式连接起来

 课程表如下:

select *from student inner join course 
on course.sno = student.sno

 查询学生张三所选的选课名称

select sname from student inner join course 
on course.sno = student.sno
where name = '张三'

2、  自连接 

自连接是一种特殊的内连接,它是指的表既可以看成是一张表,也可以看成是两张表。

由于要把一张表当成两种表,以此,在使用自连接时一定要为表取别名!!!

查询和张三爱好相同的学生的学生姓名和爱好

select s2.name,s2.love from student s1  join student s2 
on s1.love = s2.love
where s1.name = '张三' and s2.name!='张三'

3、外连接

外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件。

例如正常连接条件为选课号相同,只连有选课号的所有学生,但外连接可以显示没有选课号的学生,选课号会自动显示为null。

外连接分为左外连接和右外连接,其关键词分别为:left outer 和  right outer ,其中outer可以省掉不写!!!

查询全体学生的选课情况,包括选修了课程的学生和没有选修课程的学生

select * from student left outer join course 
on student.sno = course.sno

使用内连接第8行数据是不会显示的!!!


五、总结

      查询的基础语言其实很简单,只需要这些语法的顺序和语句就能很快上手,从上到下首先是找出这张表from 表,然后想要这张表的某些内容 select sno...,或者总分、个数等聚合函数、前几名top语句;

      接下来需要对表格进行过滤,用到where语句,注意where只能用普通字段不能使用聚合函数,完了还想把表格分成一些组,则用到group by 语句,分组后想进一步则需要having语句来过滤,但是having只能用聚合函数和分组条件,不能用其他的=字段。

      以上只是对一张表格进行操作,要想使用多张表则需要把表连接起来形成一张大的临时表,临时表也是一张表,依然可以用到where等所有语句。其中连接又分为内连接、自连接和外连接,默认为内连接,这三种连接区别很大,容易弄清楚。

      学完基础查询后,后面还会学到高级查询,包括子查询和联合,在查询语句里面嵌套查询,之后我会写一篇去解释,如果这篇文章对你有帮助,请一键三连谢谢!!!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐