在前文我们已经介绍了有关数据库《SQL serve导入excel数据》的知识,接下
来我们要介绍有关查询的东西。
查询是数据库的基本功能也是核心功能,我们介绍的查询功能千奇百怪,但是
从需求完成的角度来看,我更倾向于嵌套查询,因为它更有逻辑,利于开发人员
整理思路,以下几个例题作为基本操作例题。
对于查询例题,我总结了一个公式来进行代码编写:
***@author:令狐荣豪
1.看清题目指明的查询对象[select]
2.了解对象来自于哪张表[from]
3.观察对象的附加条件,筛选查询方式[where,having]
select
*
from
course
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 '%计算机%'
1.等号“=”
查找范围:字符串,日期,数字
例如,查找名为“王静”的工作人员,可以使用等号进行匹配
WHERE name = ’王静’---姓名精确查询
2.LIKE 子句
查找范围:字符串
数字类型
是不能使用like子句的!!!
例如,查找名字中都包含汉字“燕”的工作人员,可以使用 LIKE 子句进行匹配
WHERE name LIKE ’%燕%’ ---包含姓氏的查询
3.IN子句
查找范围:数字,字符串,日期,多值查询
所谓多值查询就是查找内容包含多个值的比较、例子如下:
WHERE name IN(’王静’, ’王力刚’, ’王亚鹏’)
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
"为空"指的是取值为空等价于is null
select
sno
from
sc
where score is null
sql查询有很多子句功能我后边单独进行总结,开一篇博客:
这里的"去重复"可以用distinct
select
distinct sdept
from
student
这个查询我们涉及到了排序的知识点。
排序的默认排序是升序,所以asc
可以默认不写
知识点介绍:
order by分组
select
*
from
sc
order by cno asc and score desc
课程号的升序可以默认不写,asc
可以默认不写。
知识点:总人数------>count(*)
select
count(*)
from
student
where sex='男'
SELECT
COUNT(DISTINCT Sno)
FROM SC
select
avg(score)
from
sc
where cno='10001'
select
sdept,count(*)
from
student
group by sdept
select
cno,max(score)
from
sc
group by cno
改进版:
select
cno,max(score) as score
from
sc
group by cno
看到查询条件是:
查询计算机系和通信系,我们应该用or
连接词来连接!不是and
!这里是个易错点!
select
*
from
student
where sdept='计算机系'or sdept='通信系'
不过博主可不是这么写的,博主用了并操作union all
的思想!
select
*
from
student
where sdept='计算机系'
union all
select
*
from
student
where sdept='通信系'
select
sno
from
sc
group by sno
having count(*)>3
---having count(cno)>3
SELECT Sno,COUNT(*)
FROM SC
WHERE Score>=60
GROUP BY Sno
HAVING COUNT(*)>3
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno
SELECT Student.Sno,Student.Sname
FROM Student,SC,Course
WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno AND Cname='数据库原理'
SELECT Sno,Score
FROM Course,SC
WHERE Course.Cno=SC.Cno AND Cname='数据库原理'
ORDER BY Score DESC
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
SELECT C1.Cno, C2.Cpno
FROM Course C1,Course C2
WHERE C1.cpno=C2.Cno
SELECT S1.*
FROM Student S1,Student S2
WHERE S1.Sdept=S2.Sdept AND S2.Sname='王磊'