常用SQL语句积累---
一、常用的语句格式积累:
Select top 3 * from class order by id desc 表示查询前3条的数据并且按降来排
select distinct 年龄 from class 去除重复行的查询select top 2 * from class order by newid() 表示随便查询2行数据
select * from class where 年龄=20 or 年龄=19 and 性别='男' 表示先查询年龄等于19 并且是男的 在查询所有年龄等于20的人 先执行AND查询 再执行OR
select * from class where id not in (select id from class1) 表示查询表一中在表2中没有的数据
select * from class where id between 1 and 5 表示查询1到5的数据
select * from class where id not between 1 and 5 表示查询不是1到5的数据
select * from class where 姓名like '刘%' 表示查询刘开头的人
select * from class where 姓名like '%丹%'查询包含丹的人
select * from class where 姓名like '[刘丹]%'查询以刘或者以丹开头的数据
select * from class where 姓名like '[%刘丹]%'查询包含丹或者刘的数据
select * from class where 年龄like '[^1-2]%'查询数据不是以1到2之间开头的
select * from class where 年龄like '[^刘陈]%' 查询不是以刘或者陈开头的数据
select * from class where 工作地址is null 表示查询工作地址不是空值的数据
select * from class where 工作地址is not null 查询不是空植的数据
select * from class where id <> all(select id from class1)表示查询表2在表一中没有的ID数据
select * from class where id = any(select id from class1) 查询表一中和表2相同的ID
elect * from class where (性别not in ('男'))and (not (年龄between 18 and 21))
not语句的查询 在条件语句前面加上NOT
select top 3 * from class order by id 前面最三个数据
use liudan
select top 3 * from class order by id desc 最后三个的数据
select ltrim(rtrim(姓名)) from class 里面函数RTRIM代表删除结尾空格数据 外面函数 ltrim 删除前面空格的数据
select 姓名+',' as 姓名,lower(gege) as gege from class 给姓名的每条数据加上 ,; 把gege 列转换为小写
select 姓名+',' as 姓名,upper(gege) as gege from class 后面函数把数据全部转换为大写
select * from class where month(日期)=9 and year(日期)=1993 and day(日期)=9
分别是三个函数 第一个是对指定的日期 月 ,年,日
select 年龄-id as a from class 表示用每一行的数据用年龄-id得到的数据+ - * / 都可以用
select sum(年龄) as a from class 求和
select * from class where 年龄>(select avg(年龄) from class) 求年龄大于平均值的数据
select * from class where 年龄= (select max(年龄) from class) 求年龄最大的、
select * from class where 年龄= (select min(年龄) from class) 年龄最小的人
select count(*) from class 表中数据总条数
select count(年龄) from class 查询年龄不为空的
select sum(年龄) from class where 性别='男' 得到性别为男的的总年龄数
select 年龄,count(*) from class group by 年龄 表示对年龄进行汇总,就是说 对相同年龄的人人数进行汇总
select 年龄,count(*) from class group by 年龄having 年龄>20 对年龄大于20的才进行汇总
select 年龄,count(*) from class group by 年龄having (年龄 in (20)) 年龄在20范围内的汇总
select * from class union select * from class3 将两个表连接到一起来 删除重复的行
select * from class union all select * from class3 保留重复的行
select id from class intersect
select id from class1 两个表相同的数据 这里因为没有两个相同的表所以只查询ID相同的
select * from class except select * from class3 两个相同的表的不相同的数据
insert into class3 (姓名)values ('dadad') 表示在表中的姓名列插入一个数据 只所以要写是哪个列的数据 是因为不用我插入id了 我门一般设置id是自动生成的 所以再这里要注明;;
update class3 set 工作地址='湖北' where id=2 对ID=2的行 的工作地址的列进行修改
update class3 set 工作地址='湖北' 对所有工作地址的列进行修改
delete top(1) class 删除表中前1条的数据
delete from class3 where id=2删除ID=2的行
select top 3 * from class order by newid() 随机查询3条数据
select * from class order by 名字 collate chinese_prc_cs_as 按音序查询
二、常用的例子收集--
Student(S#,Sname,Sage,Ssex)学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
问题:
、查询“”课程比“”课程成绩高的所有学生的学号;
a.S# ( s#,score
SC C#) a,(s#,score
SC C#)b
a.scoreb.score
a.s#b.s#;
、查询平均成绩大于60分的同学的学号和平均成绩;
S#,(score)
sc
S# (score) ;
、查询所有同学的学号、姓名、选课数、总成绩;
Student.S#,Student.Sname,(SC.C#),(score)
Student
SC Student.S#SC.S#
Student.S#,Sname
、查询姓“李”的老师的个数;
((Tname))
Teacher
Tname
;
、查询没学过“叶平”老师课的同学的学号、姓名;
Student.S#,Student.Sname
Student
S# ( ( SC.S#)
SC,Course,Teacher SC.C#Course.C#
Teacher.T#Course.T#
Teacher.Tname);
、查询学过“”并且也学过编号“”课程的同学的学号、姓名;
Student.S#,Student.Sname Student,SC Student.S#SC.S#
SC.C#
( SC SC_2
SC_2.S#SC.S#
SC_2.C#);
、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
S#,Sname
Student
S# ( S#
SC ,Course ,Teacher SC.C#Course.C# Teacher.T#Course.T#
Teacher.Tname
S# (SC.C#)(
(C#)
Course,Teacher Teacher.T#Course.T#
Tname));
、查询课程编号“”的成绩比课程编号“”课程低的所有同学的学号、姓名;
S#,Sname (Student.S#,Student.Sname,score ,( score
SC SC_2 SC_2.S#Student.S#
SC_2.C#) score2
Student,SC Student.S#SC.S#
C#) S_2
score2 score;
、查询所有课程成绩小于60分的同学的学号、姓名;
S#,Sname
Student
S# ( Student.S# Student,SC S.S#SC.S#
score);
、查询没有学全所有课的同学的学号、姓名;
Student.S#,Student.Sname
Student,SC
Student.S#SC.S#
Student.S#,Student.Sname
(C#)
( (C#) Course);
、查询至少有一门课与学号为“”的同学所学相同的同学的学号和姓名;
S#,Sname Student,SC
Student.S#SC.S#
C# C# SC S#;
、查询至少学过学号为“”同学所有一门课的其他同学学号和姓名;
SC.S#,Sname
Student,SC
Student.S#SC.S#
C# ( C#
SC S#);
、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
SC score(
(SC_2.score)
SC SC_2
SC_2.C#SC.C# )
Course,Teacher Course.C#SC.C#
Course.T#Teacher.T#
Teacher.Tname);
、查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;
S# SC
C# ( C#
SC S#)
S# ()(
() SC S#);
、删除学习“叶平”老师课的SC表记录;
Delect SC
course ,Teacher
Course.C#SC.C#
Course.T# Teacher.T#
Tname;
、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“”课程的同学学号、、
号课的平均成绩;
SC S#,,(
(score)
SC C#) Student
S# ( S# SC
C#);
、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分
S# 学生ID
,( score SC
SC.S#t.S# C#) 数据库
,( score SC
SC.S#t.S# C#)
企业管理
,( score SC
SC.S#t.S# C#) 英语
,()
有效课程数,(t.score)
平均成绩
SC t
S#
(t.score)
、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
L.C# 课程ID,L.score
最高分,R.score 最低分
SC L ,SC R
L.C# R.C#
L.score ((IL.score)
SC IL,Student IM
L.C# IL.C# IM.S#IL.S#
IL.C#)
R.Score
( (IR.score)
SC IR
R.C# IR.C#
IR.C#
);
、按各科平均成绩从低到高和及格率的百分数从高到低顺序
t.C# 课程号,(course.Cname) 课程名,((score),)
平均成绩
, (
(score,)
)()
及格百分数
SC T,Course
t.C#course.C#
t.C#
(
(score,)
)()
、查询如下课程平均成绩和及格率的百分数(用"1行"显示):企业管理(),马克思(),OOUML(),数据库()
(
C#
score
)(C#
) 企业管理平均分
, ( C#
score
)( C#
) 企业管理及格百分数
,( C#
score )(C#
) 马克思平均分
, ( C#
score
)( C#
) 马克思及格百分数
,( C#
score )
( C#
) UML平均分
, ( C#
score
)( C#
) UML及格百分数
,( C#
score )(C#
) 数据库平均分
,
(
C# score
)( C#
) 数据库及格百分数
SC
、查询不同老师所教不同课程平均分从高到低显示
(Z.T#)
教师ID,(Z.Tname) 教师姓名,C.C#
课程ID,(C.Cname)
课程名称,(Score) 平均成绩
SC T,Course
C ,Teacher Z
T.C#C.C#
C.T#Z.T#
C.C#
(Score)
、查询如下课程成绩第 名到第
名的学生成绩单:企业管理(),马克思(),UML(),数据库()
,,企业管理,马克思,UML,数据库,平均成绩
SC.S# 学生学号,
Student.Sname 学生姓名,
T1.score 企业管理,
T2.score 马克思,
T3.score UML,
T4.score 数据库,
(T1.score,)
(T2.score,)
(T3.score,)
(T4.score,)
总分
Student,SC
SC T1
SC.S# T1.S# T1.C#
SC
T2
SC.S# T2.S# T2.C#
SC
T3
SC.S# T3.S# T3.C#
SC
T4
SC.S# T4.S# T4.C#
student.S#SC.S#
(T1.score,)
(T2.score,)
(T3.score,)
(T4.score,)
(
TIES
(T1.score,)
(T2.score,)
(T3.score,)
(T4.score,)
sc
sc
T1
sc.S# T1.S# T1.C#
sc
T2
sc.S# T2.S# T2.C#
sc
T3
sc.S# T3.S# T3.C#
sc
T4
sc.S# T4.S# T4.C#
(T1.score,) (T2.score,)
(T3.score,)
(T4.score,)
);
、统计列印各科成绩,各分数段人数:课程ID,课程名称,,,,
SC.C# 课程ID,Cname
课程名称
,( score
)
,( score
)
,( score
)
,( score
)
SC,Course SC.C#Course.C#
SC.C#,Cname;
、查询学生平均成绩及其名次
((
平均成绩)
( S#,(score)
平均成绩
SC
S#
) T1
平均成绩 T2.平均成绩)
名次,
S# 学生学号,平均成绩
( S#,(score) 平均成绩
SC
S#
) T2
平均成绩
;
、查询各科成绩前三名的记录:(不考虑成绩并列情况)
t1.S# 学生ID,t1.C# 课程ID,Score
分数
SC t1
score (
score
SC
t1.C# C#
score
)
t1.C#;
、查询每门课程被选修的学生数
c#,(S#)
sc C#;
、查询出只选修了一门课程的全部学生的学号和姓名
SC.S#,Student.Sname,(C#)
选课数
SC ,Student
SC.S#Student.S#
SC.S# ,Student.Sname
(C#);
、查询男生、女生人数
(Ssex)
男生人数 Student
Ssex Ssex;
(Ssex)
女生人数 Student
Ssex Ssex;
、查询姓“张”的学生名单
Sname Student
Sname ;
、查询同名同性学生名单,并统计同名人数
Sname,()
Student Sname ();;
、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)
Sname, ((),(,Sage))
age
student
((),(,Sage));
、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
C#,(score)
SC C#
(score),C# ;
、查询平均成绩大于85的所有学生的学号、姓名和平均成绩
Sname,SC.S# ,(score)
Student,SC
Student.S#SC.S#
SC.S#,Sname
(score);
、查询课程名称为“数据库”,且分数低于60的学生姓名和分数
Sname,(score,)
Student,SC,Course
SC.S#Student.S#
SC.C#Course.C# Course.Cname
score ;
、查询所有学生的选课情况;
SC.S#,SC.C#,Sname,Cname
SC,Student,Course
SC.S#Student.S#
SC.C#Course.C#;
、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;
student.S#,student.Sname,SC.C#,SC.score
student,Sc
SC.score
SC.S#student.S#;
、查询不及格的课程,并按课程号从大到小排列
c# sc
scor e
C# ;
、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;
SC.S#,Student.Sname SC,Student SC.S#Student.S#
Score
C#;
、求选了课程的学生人数
()
sc;
、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩
Student.Sname,score
Student,SC,Course C,Teacher
Student.S#SC.S#
SC.C#C.C#
C.T#Teacher.T# Teacher.Tname
SC.score(
(score) SC
C#C.C# );
、查询各个课程及相应的选修人数
()
sc C#;
、查询不同课程成绩相同的学生的学号、课程号、学生成绩
A.S#,B.score
SC A ,SC B A.ScoreB.Score
A.C# B.C# ;
、查询每门功成绩最好的前两名
t1.S# 学生ID,t1.C# 课程ID,Score
分数
SC t1
score (
score
SC
t1.C# C#
score
)
t1.C#;
、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列
C# 课程号,()
人数
sc
C#
() ,c#
、检索至少选修两门课程的学生学号
S#
sc
s#
()
、查询全部学生都选修的课程的课程号和课程名
C#,Cname
Course
C# ( c#
sc c#)
、查询没学过“叶平”老师讲授的任一门课程的学生姓名
Sname Student
S# ( S# Course,Teacher,SC
Course.T#Teacher.T# SC.C#course.C#
Tname);
、查询两门以上不及格课程的同学的学号及其平均成绩
S#,((score,))
SC S# ( S# SC
score
S# ()) S#;
、检索“”课程分数小于60,按分数降序排列的同学学号
S# SC
C# score
score ;
、删除“”同学的“”课程的成绩
Sc S# C#;