SQl查询之单表查询,连接与嵌套查询

简介: SQl查询之单表查询,连接与嵌套查询

绪论:

     在前文我们已经介绍了有关数据库《SQL serve导入excel数据》的知识,接下

来我们要介绍有关查询的东西。

     查询是数据库的基本功能也是核心功能,我们介绍的查询功能千奇百怪,但是

从需求完成的角度来看,我更倾向于嵌套查询,因为它更有逻辑,利于开发人员

整理思路,以下几个例题作为基本操作例题。

对于查询例题,我总结了一个公式来进行代码编写:

***@author:令狐荣豪
1.看清题目指明的查询对象[select]
2.了解对象来自于哪张表[from]
3.观察对象的附加条件,筛选查询方式[where,having]

1. 查询课程的详细信息

select 
*
from
course

2.查询课程名包含“计算机”课程号和课程名

1.指明对象:cno,cname
2.来源表:course
3.附加条件:where cname like '%计算机%'

PS:----------------------通配符%-------------------------------------------------------------


%代表后面可以匹配任意个字符。

a% 可以表示以a开头的任意字符串,如:abca ,aaaa,acgfrrrrrr,akjgus,a,

%a% 可以表示一个有a的字符串, 如:a,sabbb,ddddda,edfg…

%a 可以表示以a结尾的字符串, 如:a,sa,aaaaa,defsa…


select
cno,course
from
course
where cname like '%计算机%'

ps:in,like和“=”的区别:

1.等号“=”

查找范围:字符串,日期,数字例如,查找名为“王静”的工作人员,可以使用等号进行匹配

WHERE name = ’王静’---姓名精确查询

2.LIKE 子句

查找范围:字符串

数字类型不能使用like子句的!!!

例如,查找名字中都包含汉字“燕”的工作人员,可以使用 LIKE 子句进行匹配

WHERE name LIKE ’%燕%’   ---包含姓氏的查询

3.IN子句

查找范围:数字,字符串,日期,多值查询

所谓多值查询就是查找内容包含多个值的比较、例子如下:

WHERE name IN(’王静’, ’王力刚’, ’王亚鹏’)

3.查询选修了”10003”号课程且成绩在80分以上的学生学号

select
sno
from
student
where sno in(
  select
  sno
  from
  sc
  where cno='10003' and score>80
)

写完上面才发现,自己用的嵌套查询,搞复杂了,仔细观察,其实有简单的方

法,不管多复杂,只要能享受那种逻辑带来的美就行了。

select
sno
from
sc
where cno='10003' and score>80

4.查询选课成绩为空的学生学号

"为空"指的是取值为空等价于is null

select
sno
from
sc
where score is null

5.查询有所系(结果不包含重复值)

sql查询有很多子句功能我后边单独进行总结,开一篇博客:

这里的"去重复"可以用distinct

select
distinct sdept
from
student

6.查询所有选课信息,结果按照课程号的升序,成绩降序排列

这个查询我们涉及到了排序的知识点。

排序的默认排序是升序,所以asc可以默认不写

知识点介绍:

order by分组
select
*
from
sc
order by cno asc and score desc

课程号的升序可以默认不写,asc可以默认不写。

7.查询男生学生总人数。

知识点:总人数------>count(*)

select
count(*)
from
student
where sex='男'

8.查询选修了课程的学生人数。

SELECT 
COUNT(DISTINCT Sno)
FROM SC

9.计算选修了“10001”号课程的学生平均成绩。

select
avg(score)
from
sc
where cno='10001'

10.查询每个专业的人数

select
sdept,count(*)
from
student
group by sdept

11.查询每门课程的最高成绩。

select
cno,max(score)
from
sc
group by cno

改进版:

select
cno,max(score) as score
from
sc
group by cno

12.查询“计算机系”和 “通信系”学生详细信息

看到查询条件是:

   查询计算机系通信系,我们应该用or连接词来连接!不是and!这里是个易错点!

select
*
from
student
where sdept='计算机系'or sdept='通信系'

不过博主可不是这么写的,博主用了并操作union all的思想!

select
*
from
student
where sdept='计算机系'
union all
select
*
from
student
where sdept='通信系'

13.查询选修了3门以上课程的学生学号

select
sno
from
sc
group by sno
having count(*)>3
---having count(cno)>3

14.查询有3门以上课程的分数大于等于60分的学生的学号及课程数。

SELECT Sno,COUNT(*)
FROM SC
WHERE Score>=60
GROUP BY Sno
HAVING COUNT(*)>3

15.查询每个学生及其选修课程的详细信息。

SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno

16.查询选修了“数据库原理”这门课的学生学号和学生姓名

SELECT Student.Sno,Student.Sname
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno AND Cname='数据库原理'

17.查询选修了“数据库原理”这门课的学生学号和分数,结果按分数降序来排。

SELECT Sno,Score
FROM Course,SC
WHERE Course.Cno=SC.Cno AND Cname='数据库原理'
ORDER BY Score DESC

18.查询选修“计算机基础”这门课成绩没及格(分数小于60)的学生学号,姓名和成绩。

SELECT Student.Sno,Student.Sname,Score
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno AND Cname='计算机基础' AND Score<60

19.查询每门课的间接先修课

SELECT C1.Cno, C2.Cpno
FROM Course C1,Course C2
WHERE C1.cpno=C2.Cno

20.查询与“王磊”在同一个系的学生信息

SELECT S1.*
FROM Student S1,Student S2
WHERE S1.Sdept=S2.Sdept AND S2.Sname='王磊'


目录
相关文章
|
2天前
|
SQL Java 数据库连接
如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
【10月更文挑战第6天】在代码与逻辑交织的世界中,我从一名数据库新手出发,通过不断探索与实践,最终成为熟练掌握JDBC的开发者。这段旅程充满挑战与惊喜,从建立数据库连接到执行SQL语句,再到理解事务管理和批处理等高级功能,每一步都让我对JDBC有了更深的认识。示例代码展示了如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
14 5
|
1天前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
13 3
|
22小时前
|
SQL 存储 监控
串口调试助手连接SQL数据库的技巧与方法
串口调试助手是电子工程师和软件开发人员常用的工具,它能够帮助用户进行串口通信的调试和数据分析
|
22小时前
|
SQL 监控 关系型数据库
使用SQL语句查询操作耗时的技巧与方法
在数据库管理和优化过程中,了解SQL查询操作的耗时是至关重要的
|
22小时前
|
SQL 数据库 索引
内连接(INNER JOIN)在SQL中的简单应用与技巧
在SQL查询中,内连接(INNER JOIN)是一种基本且常用的连接类型,用于从两个或多个表中检索匹配的记录
|
22小时前
|
SQL
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
|
1天前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
20天前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
3月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
75 13
|
3月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。