SQL Server数据库 -- 表的基础查询

news2024/11/24 14:52:39

文章目录

  • 一、单表查询基本结构
  • 二、单表查询结构语法
    • 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等所有语句。其中连接又分为内连接、自连接和外连接,默认为内连接,这三种连接区别很大,容易弄清楚。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 双周赛 107(2023/06/24)滑动窗口与离散化

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问。 往期回顾:LeetCode 单周赛第 348 场 数位 DP 模版学会了吗? T1. 最大字符串配对数目(Easy) 标签&…

FlutterUnit 已上架 iOS,暗色模式全面支持

theme: cyanosis 一、FlutterUnit 的全平台支持 FlutterUnit 是我的一个开源项目,基于 Flutter 构建的一个 全平台 应用程序。现在很荣幸地宣布: FlutterUnit 已经上架 iOS 的 App Store ,自此主流的几大平台均已提供体验。 项目地址: https://github.co…

Chrome Edge Firefox Safari 如何清除 DNS 缓存

Chrome Edge Firefox Safari 如何清除 DNS 缓存 如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari) Chrome Chromium Edge Firefox Safari clear DNS Cache, flush DNS cache 请访问原文链接:https://sysin.org/blog/clear-browser-dns-cache/,查…

前端Vue仿京东天猫商品属性选择器自定义单选按钮

前端Vue仿京东天猫商品属性选择器自定义单选按钮&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13176 效果图如下&#xff1a; # cc-radioBtnBox #### 使用方法 使用方法 <!-- attrArr&#xff1a;属性数据 clic…

改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手

高效多尺度注意力(EMA) 论文介绍简介EMA模块图像分类实验目标检测实验yolov5加入方法yolo注册yaml文件3563.pdf](https://arxiv.org/ftp/arxiv/papers/2305/2305.13563.pdf) 论文介绍 通道或空间的显著有效性 注意机制对产生更多可辨识的 特征表示的显著效果,在各种计算机视…

深度学习-数据增强与扩充

数据增强可以说是数据驱动下的深度学习必经之路,掌握数据,相当于掌握当下主流方向的自动驾驶的命脉,是人工智能不可或缺的资源。本文将介绍最新的利用大模型扩充数据的方式! 先看下变色效果: 左褐色背景图 为原图,右侧为处理后的图! ​ AI day也在自动标注数据方面,着重…

软件测试技术-期末理论知识复习速成

第一章 软件测试概述 什么是软件缺陷&#xff0c;发生软件缺陷的原因是什么&#xff1f; 答&#xff1a;软件缺陷指的是在软件开发过程中出现的错误、缺陷或故障&#xff0c;导致软件无法按照预期的功能运行或者产生错误的结果。 导致软件缺陷的原因可能有&#xff1a;&#…

AI提高软件外包开发效率

最近几年AI技术取得了很大的进步&#xff0c;在一些领域甚至有突破性的进展&#xff0c;虽然无法预测未来AI会如何影响到人们的生活&#xff0c;但可以确定的是AI会在方方面面影响到大家的生活方式&#xff0c;也许未来五年内就会有一个明显的变化。今天和大家分享AI如何提高软…

IPv6地址配置与验证实验

IPv6地址配置与验证实验 【实验目的】 启动IPv6功能。配置IPv6地址。验证配置。 【实验拓扑】 实验拓扑如下图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IPv6地址 子网掩码位数 默认网关 R1 S0/1/0 2000:f106:f208:12::1 64 N/A R2 S0/1/0 2…

【软考网络管理员】2023年软考网管初级常见知识考点(9)- 接入网技术

涉及知识点 接入网相关技术&#xff0c;XDSL 接入&#xff0c;HFC 接入&#xff0c; PON 接入&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多考点…

Spring源码:调度框架EnableSchedulingScheduled源码解析

目录 1.开启调度框架 2.ScheduledAnnotationBeanPostProcessor Bean后处理器分析 2.1 调度框架支持的Task类型 2.2 对Task进行调度执行 3.任务调度器 3.1 任务调度器获取 3.2 框架内提供的任务调度器 3.3 任务调度器执行逻辑 在实际项目开发中&#xff0c;有时会遇到定…

1、动手学深度学习——线性神经网络:线性回归的实现(从零实现+内置函数实现)

1、线性回归基本概念 回归&#xff08;regression&#xff09;是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域&#xff0c;回归经常用来表示输入和输出之间的关系。 给定一个数据集&#xff0c;我们的目标是寻找模型的权重和偏置&#xf…

selenium测试框架快速搭建(UI自动化测试)

一、介绍 selenium目前主流的web自动化测试框架&#xff1b;支持多种编程语言Java、pythan、go、js等&#xff1b;selenium 提供一系列的api 供我们使用&#xff0c;因此在web测试时我们要点页面中的某一个按钮&#xff0c;那么我们只需要获取页面&#xff0c;然后根据…

【力扣刷题 | 第十五天】

目录 前言&#xff1a; ​​​​​​​63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 343. 整数拆分 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a; 前言&#xff1a; 本篇我们主要刷动态规划的题&#xff0c;解题还是严格按照我们在【夜深人静写算法…

Linux查看文件大小

1、Linux下查看文件和文件夹大小 当磁盘大小超过标准时会有报警提示&#xff0c;这时如果掌握df和du命令是非常明智的选择。 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点&#xff0c;但对文件却无能为力。 du可以查看文件及文件夹大小。 两者配合使用&#xf…

UE中创建可脚本化编辑器工具(Scriptable Tools)

UE5.2中提供了可脚本化工具编辑模式&#xff0c;该模式下用户可以编写蓝图节点自定义界面操作模式下的逻辑&#xff0c;例如重写鼠标点击事件&#xff0c;制作自定义画刷等。 如果你不太了解UE编辑器工具&#xff0c;可以参考这篇文章&#xff1a; https://blog.csdn.net/gray…

chatgpt赋能python:Python编程计算一元二次方程——最简单的方法实现

Python编程计算一元二次方程——最简单的方法实现 前言 Python编程语言是一种优秀的开源编程语言&#xff0c;具有易于学习、代码简洁明了、易于维护等优点&#xff0c;因此在近年来得到了广泛的应用。 本文将介绍如何使用Python编写一个简单而又实用的计算一元二次方程的程…

华为认证哪个方向考的人多?考试费用是多少?

从学校毕业后&#xff0c;就要走上社会了&#xff0c;很多人就要面临就业困难&#xff0c;对于信息通信行业的人来说&#xff0c;考一份技术证书&#xff0c;是可以帮助自己提高职业竞争力、获得好工作的方法。华为云认证是华为云旗下的认证&#xff0c;其设立时间长&#xff0…

多线程爬虫实战-思路

前言 最近有很多小伙伴找到我&#xff0c;说想要王者荣耀所有英雄皮肤的照片&#xff0c;但是又不想自己去下载&#xff0c;正好借这个机会给大家讲解一下多线程的爬虫实战 由于线程爬虫会对任何服务器都有一定的影响&#xff0c;本文仅供学习交流使用&#xff0c;切勿拿去做什…

PID原理及仿真程序套用(matlab仿真与图像处理系列第3期)

PID控制器模拟器 概述: PID控制器是一种常用的反馈控制算法,用于实现系统输出与期望值之间的精确调节。PID控制器模拟器是一个工具,可以模拟和测试PID控制器的性能,并对系统进行调整和优化。 输入参数: setpoint:期望值或目标值process_variable:过程变量或实际测量…