草庐IT

用SQL语句进行数据库查询(简单查询)

初阶牛 2023-11-26 原文

前言

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻推荐专栏: 🍔🍟🌯 c语言初阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:
讲解使用SQL语句进行简单的数据查询、条件查询等.
✨✨✨学习是一个慢慢成长的过程,不要心急,路就在那里.,只要坚持下来,总会达到的.加油吧!💗💗💗

目录

🐻简单查询

上一篇我们介绍了如何用SQL语句创建表、修改表以及向表中插入数据.现在我们可以通过SQL语句对表中的数据按照自己的需求来进行查询.
废话不多说,直接上栗子🌰

1.查询数据表中的全部信息

🌰查询学生表(student)的全体学生所有信息(相当于查询整张表)

select* from Student

运行结果:

补充知识:
’ * '(字符星号)代表所有.

2.查询数据表中的部分属性

🌰查询全体学生的学号(Sno)和姓名(sname)(查询表中的部分属性)

select Sno,sname--表示需要查找的属性
from Student--属性所属表格

3.用中文显示需要查询的属性.

查询学生的姓名(Sname),学号(Sno),家庭地址信息(home_addr),并且以中文提示显示出来.

select Sname as 学生姓名,Sno as 学号,home_addr as 家庭地址
from Student

运行结果:

补充知识:
as别名关键字,有时候也可以省略.用于做属性解释.

一般用法:

select  字段  as  别名  from  表名

🐼条件查询

当然实际生活中我们不仅仅只是需要查询表中的全部值或几个值那么简单,我们还往往需要查询表中满足某一特定条件的值.这类查询被称为条件查询.
例如:
(1)查询成绩>80学生的学号(Sno)、课程号(Cno)和成绩(grade)

select Sno as 学号,Cno as 课程号,grade as 成绩
from sc
where Grade>80--只有满足条件的数据才会被显示出来

(2)查询选修了课程号为”002”,且成绩大于80的学生的学号.

select Sno as 学号
from sc
where Cno='002'and Grade>80-
-and相当于c语言中的逻辑与(&&),只有左右两边条件都满足才行.
--or相当于c语言中的的逻辑或(||),只要左右两边条件满足任何一个或者都满足都会执行.

(3)查询选修了课程没有参加考试的学生的学号和相应的课程号.

select Sno as 学号,Cno as 姓名
from SC
where Grade is null--null表示为空

1.基于IN字句的数据查询

IN 的用法-- 查询匹配多个字段(也可单个),允许我们在 WHERE 子句中规定多个值。
查询单个字段

–从课程表中查询出高数c语言程序设计的所有信息.
提示:Cname表示课程名

select *from Course
where Cname in ('C语言程序设计' ,'高数')--表示课程名可以为(里面的数据)

运行结果:

2.基于BETWEEN…AND子句的数据查询

BETWEEN A AND B :表示查询 A B 之间的数据,即[A,B].
例如:
–查询成绩在75到80(闭区间)之间的学生的学号课程号成绩

select Sno as 学号,Cno as 课程号,grade as 成绩
from sc
where Grade between 75 and 80

3.基于LIKE子句查询

(1)从学生表中分别检索出姓张的所有同学的资料或者名字的第二个字是”红”或”虹”的所有同学的资料.
补充知识:
SQL中的通配符:
①:‘%’ 包含零个或多个字符的任意字符串:
②:‘_’(下划线) 任何单个字符:

select *from Student
where Sname LIke '张%' or Sname LIKE '_红%' or Sname LIKE '_虹%'
--张% 表示姓张的信息.
--_红%和_虹%分别代表名字的第二个字是”红”或”虹”的信息

(2)查询课程名为Visual_Basic的课程的学分.
由于’‘_ ‘’(下划线)是通配符,所以在搜索的时候要将’‘(下划线)转义为普通字符
ESCAPE 表示转义字符,让后面的通配符’
'(下划线)为普通字符

select  Credit from Course
where Cname LIKE 'Visual/_Basic' ESCAPE'/'--表示让'/'字符后的字符为转义字符

4.使用TOP关键字查询

补充知识:
TOP关键字的用法:
1)返回确定数目的记录个数

语法格式:SELECT TOP n <列表名>FROM<表名>[查询条件]

例如:从选课表中检索出前3个课程的信息.

Select Top 3 *
From Course

2)返回结果集中指定百分比的记录数

语法格式:SELECT TOP n PERCENT<列表名>FROM<表名>[查询条件]

例如:从课表中检索出前20%的课程信息.

select top 20 percent *from Course

5…消除重复行(distinct)

关键词 distinct用于返回唯一不同的值。

格式:
1.作用于单列 select distinct name from A
2.作用于多列 select distinct name, id from A

检索出学生已选课程的课程号,要求显示的课程不重复.

select distinct Cno from Course

6.时间函数:getdate().

getdate() 函数取得日期/时间信息,可用于获取当前时间,不需要带参数.
方法一:

select getdate()   --取当前时间

方法二:

print getdate()--注意:在SQL语句中,打印是print与c语言中的printf不同.

结果2:

用例:
查询全体学生的姓名及其年龄
我们的表中并没有年龄这一属性,但是我们有学生的出生日期,这样我们可以通过计算(当前日期-出生日期)得到年龄.

select Sname as 姓名 ,year (getdate())-year(Birth) as 年龄 from Student

补充知识:

select year(getdate())--表示获取年份 2022
,month(getdate())--表示获取月份  12
,day(getdate())--表示日期天数  11

7.使用ORDER BY语句对查询的结果进行排序.

补充知识:
1.desc是descend降序意思 ,asc 是ascend 升序意思,
2.ORDER BY是排序的意思
3.getdate()表示获取当前时间,year(时间)表示精确到’年’
(1)显示所有学生的姓名基本信息,按班号排列,班号相同则按学号排列.

select *from Student
order by Classno,Sno--表示按班号排列,班号相同则按学号排列

(2)查询全体学生的姓名及年龄,并按学生的年龄降序排列.

select Sname as 姓名 ,year (getdate())-year(Birth) as 年龄 from Student
order by '年龄'desc--表示按降序排列

运行结果:

🐶使用聚合函数

count函数

补充知识:
COUNT()函数返回表中的行数。 COUNT()函数允许您对表中符合特定条件的所有行进行计数。
COUNT()函数返回由SELECT语句返回的结果集中的行数。COUNT()函数计算中包含NULL非NULL值的行,也就是用计算所有行.
(1)查询学生总人数.

select count (distinct Sno) as 学生总人数 from Student--distinct表示计算不同学号的行数,即学生总人数.

(2)计算”002”号课程的学生平均成绩、最高分、最低分.

  • avg()函数用于计算平均值
  • max()函数用于计算最大值
  • min()函数用于计算最小值
select avg(Grade) as 平均分,max(Grade) as 最高分,min(Grade) as 最低分 from sc
where Cno='002'

运行结果:

使用Group子句进行查询

group如字面意思一样,表示分组,group by表示按某规则分组.将一个数据集分为若干个小区域.
例如:
(1)查询各班级学生总人数.
提示:按班级分类

select Classno as 班级,COUNT(*)as 学生人数
from Student
group by classno--按班级分类

运行结果:

(2)汇总总分大于150分的学生的学号及总成绩.
补充知识:
having 作用类似于where,差别是

where:删选符合条件的行,
having:删选符合条件的组.

select Sno as 学号,sum (Grade) as 总成绩
from sc
group by Sno
having sum (Grade)>150

(3)查询各个课程号相应的选课人数.

select Cno as 课程号,count(*) as 学生人数
from SC
group by Cno--按课程号分类

运行结果:

好了,今天的SQL Server知识就分享到这里了.下一篇会将稍微复杂一些的查询,牛牛会继续坚持的.
希望这篇文章对大家有帮助。欢迎小伙伴们私信提意见和提问哦!
最后,小伙伴们的点赞就是给牛牛最大的支持,能不能给牛牛来一个一键三连呢?谢谢支持。

有关用SQL语句进行数据库查询(简单查询)的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  3. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  6. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  7. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  8. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  9. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  10. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

随机推荐