SQL简单查询语句

sql语言使用SELECT语句来实现数据的查询,并按要求检索数据,将查询结以表格的形式返回

SELECT 查询语句结构

SELECT select_list
[INTO new_table_name] //将查询出的结果集创建并存至新表中
FROM tablename
WHERE 限定返回行的搜索条件
GROUP BY  结果集的分组条件
HAVING  结果集的附加筛选条件
ORDER BY 排序方法(DESC OR ASC)

SELECT 子句

1.定义别名(AS 关键字 或 空格)

SELECT studname AS 学生姓名,studbirthday 出生日期,classid 所属班级
FROM Studinfo

2.列连接

sqlsever用 +,oracle 用 ||

SELECT studno || studname AS studindex ,studsex
FROM Studinfo

3.DISTINCT关键字

使用distinct关键字去除重复记录

SELECT DISTINCT(studname),studno,studname,studsex,studbirthday,classid 
From Studinfo;

4.空值判断(is NULL)

SELECT * FROM Studinfo
WHERE studbirthday is null //查询生日信息为空值的的学生信息    

5.Top-N分析

当我们要取前10条记录时

sqlsever 使用TOP关键字

SELECT TOP10 × FROM Studinfo

oracle没有TOP关键字但可以通过ROWNUM取前几条数据

SELECT * FROM Sstudinfo
where rownum<=10

WHERE子句

where字句用于限制返回的行的查询条件

1.比较查询 (>,<=,between..and.. , ….)

SELECT * FROM Studscore WHERE STUDSCORE >90 

2.逻辑运算(and,or,not)

SELECT * FROM Stuinfo
where studsx='女' and classid = '201611520'

3.模糊查询(LIKE关键字)

%包含零个或多个字符的任意字符串
_单个字符串

SELECT * FROM Studinfo WHERE studname like '杨%'
//查询姓杨的学生的学生信息
SELECT * FROM Studinfo WHERE studname like '_浩_'
//查询名字为3个字,且第二个字为‘浩’的同学的基本信息

GROUP BY 子句

结果集的分组条件

按指定的条件进行分类汇总,如果SELECT子句中包含聚合函数则,计算每组的汇总值

  • 注意

    在使用GROUP BY 子句时,在SELECT子句中,只能出现GROUP BY分组字段和聚合函数

SELECT studno,count(*) FROM Studinfo
GROUP BY Studno  //从学生成绩表查询,各同学所参考的课程门数

HAVING 子句

附加筛选条件

SELECT studno,avg(score) Avgscore
FROM studscoreinfo 
WHERE avg(studscore)<60
GROUP BY studno 
HAVING  COUNT(*)>10
//统计重修10门课程以上的学生平均成绩

ORDER BY 子句

ASC升序; DESC降序

SELECT studno,AVG(Studscore)
FROM Studinfo
GROUP BY Studno
ORDER BY DESC 
//统计各学生所有课程平均分,并按降序排序

实战

1.写出在学生信息表(StudInfo)中得到不重复姓名,性别的 SQL 语句。

select distinct studname,studsex from studinfo

2. 写出在学生成绩信息表(StudScoreInfo)中查询学号为 20010505001 并且课程成绩大于 80
的学生成绩记录的 SQL 语句。

select * from studscoreinfo
where studno=20010505001 and studscore>80

3. 写出在学生成绩信息表(StudScoreInfo)中查询成绩在 80 到 90 之间的所有学生成绩记录
的 SQL 语句。(利用 BETWEEN…And 或>=、<=两种方法实现)

select * from studscoreinfo
where studscore between 80 and 90




select * from studscoreinfo
where studscore>=80 and studscore<=90

4.写出在学生成绩信息表(StudScoreInfo)中查询成绩不在 80 到 90 之间的所有学生成绩记
录的 SQL 语句。(利用 NOT 或 OR 两种方法实现)

select * from studscoreinfo
where studscore not between 80 and 90



select * from studscoreinfo
where studscore<80 or studscore>90

5.写出在学生信息表(StudInfo)查询姓名为程竹、李丹、王飞的学生信息记录(用 IN、OR
两种方法实现)。

select * from studinfo
where studname in ('程竹','李丹','王飞')



select * from studinfo
where studname='程竹' or studname='李丹' or studname='王飞'

6.写出在学生信息表(StudInfo)中查询姓名中含有丽字的所有学生信息的 SQL 语句。

select * from studinfo
where studname like '%丽%'

7.写出在学生信息表(StudInfo)中查询姓名中第三个字为丽的所有学生信息的 SQL 语句。

select * from studinfo
where studname like '__丽'

8. 在学生成绩表(StudScoreInfo)中,写出查询学号为 990708012 前 5 门课程成绩记录的 SQL
语句

select  *  from studscoreinfo
where studno='990708012' and rownum <=5

9. 写出在学生信息表(StudInfo)中查询出生日期为空值的 SQL 语句。

select * from studinfo
where studbirthday is null

10.在学生成绩表(StudScoreInfo)中,将学号为 20010505001 的成绩按高低排序。

select * from studscoreinfo
where studno = 20010505001
order by studscore desc 

11.在学生成绩表(StudScoreInfo)中,将学号为 990708012 且成绩低于 60 的成绩提高 50%

显示。

select studno,courseid,studscore*1.5 as studscoreimprove 
from studscoreinfo
where studno='990708012' and studscore<60

12. 写出在学生信息表(StudInfo)中,查询 1986 年 10 月以后出生的学生信息,要求学
号与姓名连接在一起取别名。

select studno || studname as studnoname ,studbirthday
from studinfo
where studbirthday>=to_date('1986-11-01','yyyy-mm-dd')

13. 写出在学生成绩信息表(StudScoreInfo)中统计学号为 20010505001 的成绩总分、成
绩平均分、所修课程门数的 SQL 语句。

select sum(studscore) as sumscore, avg(studscore) as avgscore , count(courseid) countcourse
from studscoreinfo
where studno='20010505001'

14. 写出在学生成绩信息表(StudScoreInfo)中统计各学生平均分的 SQL 语句,并按平均
分高低排序。

select studno,avg(studscore) as avgscore 
from studscoreinfo
group by studno
order by avgscore desc

15. 写出在学生成绩信息表(StudScoreInfo)中统计各学生平均分、课程门数的 SQL 语
句。

select studno ,avg(studscore) 平均成绩,count(*) 课程门数
from studscoreinfo
group by studno

16. 写出在学生成绩信息表(StudScoreInfo)中统计各课程平均分、参考人数、最高分、
最低分的 SQL 语句。

select courseid 课程编号,avg(studscore) 平均成绩,count(*) 参考人数, max(studscore) 最高成绩, min(studscore) as 最小成绩
from studscoreinfo
group by courseid

17. 在学生成绩信息表(StudScoreInfo)中,统计学号以 20010505 开头的平均分 80 以下
的学生成绩信息。

select studno 学号, avg(studscore)  平均成绩 
from studscoreinfo 
where studno like '20010505%'
group by studno
having avg(studscore)<85

18. 在学生成绩信息表(StudScoreInfo)中,统计平均分为 85 以上,所修课程为 30 门以
上的学生成绩记录。

select studno,avg(studscore) 平均成绩,count(*) 所修课程门数
from studscoreinfo
group by studno
having avg(stuscorescore)>80 and count(*)>30

19. 在学生成绩信息表(StudScoreInfo)中,统计重修(成绩小于 60)门数为 10 门以上
的学生成绩信息。

select studno,avg(studscore) avgscore
from studscoreinfo
where studscore<60
group by studno
having count(*)>10

20. 双表关联查询,在学生信息表(StudInfo)和学生成绩表(StudScoreInfo)中,查询出学号、姓名、成绩、课程编号。

select s.studno,studname,si.studscore,courseid
from studinfo s,studscoreinfo si
where s.studno=si.studno

21. 多表关联查询,在学生信息表(StudInfo)、学生成绩表(StudScoreInfo)、班级信息表
(ClassInfo)、课程信息表(CourseInfo)中找出学号、姓名、班级编号、班级名称、课程编
号、课程名称、课程成绩。

select s.studno,studname,c.courseid,coursename,studscore
from studinfo s,studscoreinfo si,courseinfo c
where s.studno=si.studno and si.courseid=c.courseid

22. 双表关联统计,例如:在学生成绩信息表(StudScoreInfo)和课程信息表(CourseInfo)中,写出统计各门课程平均分、所修人数、课程最高分、课程最低分的 SQL语句,包括课程编号、课程名称、课程平均分、课程最高分、课程最低分、所修人数查询字段,并按平均分高低排序。

select s.courseid 课程编号,c.coursename 课程名称,
avg(studscore) 平均分,count(*) 所修人数 ,max(studscore) 最高分,min(studscore) 最低分
from studscoreinfo s,courseinfo c
where s.courseid=c.courseid
group by s.courseid,c.coursename
order by 平均分 desc
    原文作者:留心的话没有小事
    原文地址: https://www.jianshu.com/p/3b02f99c7ce8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞