C#基础之SQL Server(4)常用数据查询

(一)数据的基本查询

1)查询过程与基本原理

  • 查询与响应过程
    在这里插入图片描述

  • 理解查询

    • 服务器执行命令,在原始数据表中查找符合条件的数据,产生一个虚拟表;
    • 虚拟表是数据组合后的重新展示,而不是原始的物理数据;
  • 简单查询过程:
    在这里插入图片描述

2)查询基本语法结构

查询一般有四个基本组成部分:

在这里插入图片描述

基本查询语法框架:

在这里插入图片描述

基本查询

(1)查询全部行和列
select * from Students
(2)查询部分行

在这里插入图片描述

(3)使用“AS”或使用“=”重新命名字段

在这里插入图片描述

(4)使用‘+’进行列的合并

在这里插入图片描述

(5)查询空列

在这里插入图片描述

(6)使用常量列

在这里插入图片描述

(7)限制固定行数

在这里插入图片描述

(8)返回百分之多少行

在这里插入图片描述

(9)升序排列

这里用到了(CSharp+5)这是直接在原来分数上都加上5分;
在这里插入图片描述

(10)降序排序

在这里插入图片描述

多个排序规则用“,”分隔;

select StudentId, CSharp as C#, DB = SQLServer
from ScoreList
order by SQLServerDB DESC, CSharp DESC

在这里插入图片描述

(二)模糊查询

1)模糊查询-like

  • 特点:使用like进行查询时,字段中的不同内容并不一定与查询内容完全匹配,只要字段中含有这些内容即可;
  • 注意%的使用,还有单引号的使用;

在这里插入图片描述

模糊查询-between

  • 把某一字段中的值在特定范围内的记录查询出来;
  • 包含端点值;
  • 日期要加上单引号;
    在这里插入图片描述

模糊查询- in

  • 把某一字段中内容与所列出的查询内容列表匹配的记录查询出来;
    在这里插入图片描述

(三)查询函数的使用

1)聚合函数

对某一列求和、对满足条件的记录总数求和;
在这里插入图片描述

求最值、平均值:
在这里插入图片描述

(四)多表之间的数据查询

1)内连接查询

  • 内连接查询:查询的结果是两个源表中严格满足连接条件的记录相连;【两个表之间有主外键关系】
    在这里插入图片描述
代码实现:
  • inner…join…后面的实际上就是两个表之间的主外键关系,先写哪一个无所谓;
  • 下面的例子中Students 与ScoreList 是主外键关系;
  • 由于StudentId是两个表所共有的,所以查询的时候要明确来自于哪一个表格;
select ScoreList.StudentId, StudentName,CSharp成绩 = CSharp
from ScoreList
inner join Students on Students.StudentId = ScoreList.StudentId
where CSharp>80
注意:
  • 清楚需要连接的表;
  • 两个表连接的条件(主外键);
  • 表中相同的字段,必须说明来自哪一个表;
多表连接:

多表查询:只需要使用inner join 将多个表按照条件连接即可;
在这里插入图片描述

2)左外连接查询

举例:
  • 两个原始的表格,分别查询的结果:
    在这里插入图片描述

  • 使用左外连接查询:
    在这里插入图片描述

内涵:
  • 查询的结果包含:连个表 所有满足连接条件的记录 + 左表中所有不满足连接条件的记录【这些不满足连接条件的左表记录,在查询结果的右表中,全部填上NULL值】

3)右外连接查询

  • 查询的结果包含:连个表 所有满足连接条件的记录 + 右表中所有不满足连接条件的记录【这些不满足连接条件的左表记录,在查询结果的右表中,全部填上NULL值】
    在这里插入图片描述

(五)分组查询与统计

1)使用Group By 分组:

在这里插入图片描述

注意:所查询的字段必须出现在Group By 中,或者必须是可以汇总的(比如按照班级分组,所查询的内容可以是班级最高分、平均分、总人数等,但是不能是每个人的姓名)

在这里插入图片描述

注意:NULL值是不参与运算的;但是这种情况有时候并不是我们想要的,我们可能需要将这个NULL补为0,通常情况下在临时表上进行操作;

2)分组统计筛选–having

  • 使用having筛选分组统计后的结果;不能使用where;
    在这里插入图片描述

3)重复数据的查询

<1>知道重复字段的情况下

找出数量大于1的分组;

select StudentId from ScoreList Group by StudentId 
having COUNT(*)>1
<2>查看具体重复的内容:

在前一步的基础上;

select * from ScoreList
where StudentId in(select StudentId from ScoreList Group by StudentId having COUNT(*)>1)
order by StudentId

在这里插入图片描述

3)分组查询对比

  • where子句:

    • 从数据源中去掉不符合其搜索条件的数据;
  • group by 子句:

    • 搜集数据行到各个组中;
    • 统计函数为各个组计算统计值;
  • having子句:

    • 在分组结果中,去掉不符合其搜索条件的各组数据行;

在这里插入图片描述

发布了66 篇原创文章 · 获赞 2 · 访问量 6674

猜你喜欢

转载自blog.csdn.net/forever_008/article/details/104139654