我是靠谱客的博主 成就绿茶,最近开发中收集的这篇文章主要介绍T SQL语言基础语句T SQL语言基础语句,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

T SQL语言基础语句

/*创建数据库*/
create database JXGL
on(
	name=JXGL,
	filename='c:SQLtestJXGL.mdf',
	size=5,
	maxsize=unlimited,
	filegrowth=1
)
log on(
	name=JXGL_log,
	filename='c:SQLtestJXGL_log.ldf',
	size=1,
	maxsize=20,
	filegrowth=10%
)
--------------------------------------
/*修改原来数据库*/
go
alter database JXGL
modify file(
	name=JXGL,
	size=10
)
go
--------------------------------------
/*增加数据库文件*/
go 
alter database JXGL
add file(
	name=JXGL_1,
	filename=c:SQLtestJXGL_l1.ndf,
	size=5,
	maxsize=30,
	filegrowth=5%
)
go
--------------------------------------
/*删除数据库文件*/
go
alter database JXGL
remove file JXGL_1
go
---------------------------------------
/*修改数据库名称*/
go
sp_renamedb 'JXGL','GX_JXGL'
go
//删除数据库
go
drop database JXGL
go
--------------------------------------
/*创建表*/
use JXGL
go
create table s(
	sno char(9) primary key,	//主键约束:不允许输入重复值,不能输入空值。
	sname char(8) unique,	//唯一性约束:不允许输入重复值,但可以输入空值。
	sex char(2) check(sex='男' or sex='女'),		//check约束:用来强制数据的域完整性,它使用逻辑表达式来限制表中的列可以接受哪些数据值。实现用户定义完整性。
	age smallint default 17,	//默认值约束:可以通过使用default约束自动为某列输入指定值。实现用户定义完整性。
	sdept varchar(50)
)
--------------------------------------
create table c(
	cno char(4) primary key,
	cname varchar(50),
	cdept varchar(50),
	tname char(8)
)
--------------------------------------
create table sc(
	/*---列级约束---*/
	sno char(9) not null references s(sno),		
	cno char(4) not null references c(cno),		
	grade tinyint,
	/*---表级约束---*/
	primary key(sno,cno),	
/*	foreign key(sno)references s(sno),	//外键约束:是用于建立和加强两个表数据之间的连接的一列或多列。外键约束能实现数据的参照完整性。
	foreign key(cno)references c(cno)	//外键约束	*/
)
--------------------------------------
/*修改表中原始长度*/
use jxgl
go
alter table s
alter column sex  char(1) null
go
--------------------------------------
/*在学生表S中,将AGE列名改为BIRTHDAY,数据类型为DATE*/
ues jxgl
go
alter table s
drop column age
go
alter table s
add birthday date
go
--------------------------------------
/*为学生表的sanme添加唯一约束*/
use jxgl
go 
alter table s
add constraint uk_sname  unique(sname)

//添加检查约束
alter table sc
add constraint ck_grade check(grade>=0 and grade<=30)
--------------------------------------
/*删除表*/
use jxgl
go
drop table s
go
--------------------------------------
/*插入表数据*/
use jxgl
insert into s(sno,sname,sex,age,sdept)
values('s1','张三','f','21','cs')
go
-----
use jxgl
insert into s
values('s1','张三','f','21','cs')
go
--------------------------------------
/*修改表数据*/
use jxgl
update s
set sname='王二',age=22
where sno='s2'
go
--------------------------------------
/*删除表数据*/
use jxgl
delete from s
where sname='张三'
go
--------------------------------------
----------select用法-----------------
/*查询全体学生的学号和姓名*/
use jxgl
go
select/*all,distinct,top n,precent*/ sno,sname
from s

/*查询s表中学生的姓名和出生年份*/
use jxgl
select sname,YEAR(getdate())-age from s

/*查询年龄在17-20之间的学生*/
use jxgl
select * from
where age between 17 and 20
//where age>=17 and age<=20

//确定集合 in not in
select * from s
where sdept in('ma')
//字符匹配 like not like
select * from s
where sname like '李%'//查询全部姓李的
where sname like '李_'//查询李*
//空值 is null   is not null
select * from sc
where grade is null
-----------------------------------------
/*查询考试成绩不及格的学生的学号*/
use jxgl
go
select distinct sno from sc
where grade<60

/*查询cs,ma,is系学生的姓名和性别*/
use jxgl
go
select sname,sex from s
where sdept in('cs','ma','is')
--------------------------------------
-------含有group by子句的查询------
/*查询选修了课程的人数*/
use jxgl
go
select count(distinct sno)人数 from sc
/*查询开设的课程数*/
select count(*) from c
/*查询课程号为'c1'的最高分,最低分,总和,平均分*/
use jxgl
select max(grade)最高分,min(grade)最低分,sum(grade)总分,avg(grade)平均分 from sc where cno='c1'
/*统计女生的人数*/
select count(*) from s 
where sex='女'
//查询s表中男,女学生的人数
select sex,count(*)人数 from s 
group by sex
//查询选修每门课程的课程号及参加该门课程考试的学生总人数
use jxgl
go
select cno,count(*)人数  from sc 
where grade is not null group by cno
//查询出选课人数超过2人的课程号
select cno,count(*) from sc 
group by cno having count(*)>=2
//查询选修了2门以上课程的学生的学号
select sno from sc
group by sno having count(*)>=2

------------带有order by子句的查询------asc|desc
/*查询选修了课程号为’C3’课程的学生的学号及成绩,查询结果按分数的降序排列。*/
use jxgl
select sno,grade from sc
where cno='c3' order by grade desc
/*查询全体学生情况,查询结果按所在系的系部名升序排序,同一系部中的学生按年龄降序排列。*/
select * from s
order sdept asc,age desc
//从sc表中输出学习’C1’号课程的成绩在前3名的学生的学号和成绩。
select top 3 sno,grade from sc
where cno='c1' order by grade desc
//将sc表中所有成绩不及格的学生的学号都存入grade_npass表中
select distinct sno into grade_npass from sc
where grade<80

***************联合查询************************************
//集合并运算
/*查询S表中姓'张'的学生姓名和c表中以'数'开头的信息*/
use jxgl
select sname from s
where sname like'张%'
union
select cname from c
where cname like '数%'
/*查询既选修了'c1'号课程又选修了'c4'号课程的学生的学号*/
use jxgl
select sno from sc
where cno='c1'
intersect
select sno from sc
where cno='c4'
/*查询选修了'c1'号课程但没有选'c3'号课程的学生的学号*/
use jxgl
select sno from sc
where cno='c1'
except
select sno from sc
where cno='c3'


***********连接查询**************************************
/*查询每个学生及其选修课程的情况*/
use jxgl
select s.*,sc.* from s 
 join sc on s.sno=sc.sno
/*查询学生的学号、姓名、课程号和成绩*/
use jxgl
select s.sno,sname,cno,grade 
from s join sc on s.sno=sc.sno
//查询学生的学号、姓名、课程名和成绩
use jxgl
select s.sno,sname,cname,grade 
from s join sc on s.sno=sc.sno
join c on c.cno=sc.cno
/*查询系别为cs的学生所选课程的课程号和平均成绩(为了使平均成绩四舍五入保留两位小数,引入了函数ROUND())*/
use jxgl
select sc.cno,round(avg(sc.grade),2) as 'average'
from s  join sc
on s.sno=sc.sno and s.sdept='cs'
group by cno

/*在SC表中,查询选修“C3”课程成绩高于学号为“S4”同学成绩的所有学生元组,并按成绩降序排列。*/
use jxgl
select a.sno,a.cno,a.grade 
from sc a inner join sc b
on a.cno='c3' and a.grade>b.grade and b.sno='s4' and b.cno='c3'
order by grade desc

/*查询90分以上学生的学号、姓名、选修课程号、选修课程名和成绩。 */
use jxgl
select s.sno,s.sname,sc.cno,c.cname,sc.grade
from s join sc on s.sno=sc.sno and grade>=90
join c on sc.cno=c.cno
/*查询与“陈晓晴”在同一个系学生的学号、姓名和所在系。*/
use jxgl
select a.sno,a.sname,a.sdept
from s a join s b on a.sdept=b.sdept and b.sname='陈晓晴'
/*查询比“姜云”年龄大的学生的姓名和性别。*/
select a.sname,a.sex from s a join s b
on a.age>b.age and b.sname='姜云'
/*在SC表中,查询选修“C3”课程的成绩高于学号为“S4”的同学成绩的所有记录*/
select a.sno,a.cno,a.grade from sc a join sc b
on a.grade>b.grade 
where a.cno='c3' and b.sno='s4' and b.cno='c3'

***************外连接***********************************
//左外连接:左外连接是对连接条件左边的表不加限制。当左边表元组与右边表元组不匹配时,与右边表的相应列值取NULL。
/*查询每个学生及其选修课程的成绩情况(含未选课程的学生信息)*/
use jxgl
select s.*,cno,grade
from s left join sc
on s.sno=sc.sno
//右外连接:右外连接是对连接条件右边的表不加限制。当右边表元组与左边表元组不匹配时,与左边表的相应列值取NULL。
select s.*,cno,grade
from sc right join s
on s.sno=sc.sno
//全外连接:全外连接是对连接条件的两个表都不加限制。当一边表元组与另一边表元组不匹配时,与另一边表的相应列值取NULL
use jxgl
select s.*,cno,grade
from s full join sc
on s.sno=sc.sno
//交叉连接:交叉连接(cross join)也称为笛卡尔积,它是在没有连接条件下的两个表的连接,包含了所连接的两个表中所有元组的全部组合。
/*查询所有学生可能的选课情况。*/
use jxgl
select s.*,sc.cno,grade
from s cross join sc
*****************嵌套查询***************************************
//嵌套查询:  嵌套查询(subquery)是指在一个SELECT查询语句中包含另一个SELECT查询语句,即一个SELECT语句嵌入到另一个SELECT语句中。其中,外层的SELECT语句称为父查询或外查询,嵌入内层的SELECT语句称为子查询或内查询。因此,子查询也称为嵌套查询(nested query)。
all:如果一系列的比较都为 TRUE,那么就为 TRUEany:如果一系列的比较中任何一个为 TRUE,那么就为 TRUE
between:如果操作数在某个范围之内,那么就为 TRUE
exists:如果子查询结果包含一些行(结果不空),那么就为 TRUE
in:如果操作数等于表达式列表中的一个,那么就为 TRUE
not:对任何其它布尔运算符的值取反
some:如果在一系列比较中,有些为 TRUE,那么就为 TRUE
****************无关子查询************************************
//无关子查询:无关子查询的执行不依赖于父查询。它执行的过程是:首先执行子查询语句,得到的子查询结果集传递给父查询语句使用。无关子查询中对父查询没有任何引用。
/*查询与“程晓晴”在同一个系学习的学生学号、姓名和所在系。*/
use jxgl
select sno,sname,sdept
from s
where sdept in
	(select sdept from s
	where sname='陈晓晴')
--
use jxgl
select b.sno,b.sname,b.sdept
from s a join s b
on a.sdept=b.sdept and a.sname='陈晓晴'
------------------------------------------------------------------
/*查询选修了“C3”号课程的学生的姓名和所在专业。*/
use jxgl
select sname,sdept
from s
where sno in
	(select sno from sc where cno='c3')
/*查询其它系中比计算机科学系(CS)某一学生年龄小的学生姓名和年龄。*/
use jxgl
select sname,age
from s
where age<any(select age from s 
	        where sdept='cs')
and sdept<>'cs'
/*查询每一位学生比所有选课学生平均成绩高的所有成绩,并输出的学生的学号、课程号和成绩。*/
use jxgl
select sno,cno,grade
from sc 
where grade>=
	(select avg(grade) from sc)

**********************相关子查询*************************
//相关子查询:相关子查询的执行过程与无关子查询不同,无关子查询中子查询只执行一次,而相关子查询中的子查询需要重复地执行。
/*查询每一位学生比自己平均成绩高的所有成绩,并输出的学生的学号、课程号和成绩。*/
use jxgl
select sno,cno,grade
from sc a
where grade>=
	(select avg(grade)
	 from sc b
	 where a.sno=b.sno)
/*查询没有选修课程的学生的学号、姓名和系别。分析:在父查询中进行测试,只要学号不在sc表中,即为没有选修课程的学生。*/
use jxgl
select sno,sname,sdept
from s where not exists
	(select * from sc
	where s.sno=sc.sno)

***********************SQL程序设计**************************
/*声明一个长度为10 个字符串的变量“id”并赋值。*/
declare @id char(10)
select @id='10010001'
---
set @id='10010001'
/*将S表中的学生“程晓晴”的学号赋给局部变量@sid,并输出。*/
declare @sid char(9)
select @sid=sno from s
where sname='陈晓晴'
print @sid

/*在教学管理数据库中,如果“C1”号课程的平均成绩高于80分,则显示“C1号课程的平均成绩还不错”,否则显示“C1号课程的平均成绩一般”。*/
if(select avg(grade) from sc where cno='c1')>80
	print 'c1号课程的平均成绩还不错'
else
	print 'c1号课程的平均成绩一般'
/*在教学管理数据库中,查询S表中学生所在系的中文名称。如“姜云”的系部是“信息系”。*/
select sname as '姓名',
case sdept
	when 'cs' then '计算机科学系'
	when 'is' then '信息系'
	when 'ma' then '数学系'
end as '系部'
from s
where sname='姜云'
/*在教学管理数据库中,显示学生“C1”课程的“成绩等级”。*/
SELECT SNAME AS '姓名',  
       CASE 
         WHEN GRADE>=90 THEN '优秀'
         WHEN GRADE>=80 THEN '良好' 
         WHEN GRADE>=70 THEN '中等'
         WHEN GRADE>=60 THEN '及格'
         WHEN GRADE<60 THEN '不及格'
      END AS '成绩等级'
    FROM S JOIN SC ON S.SNO=SC.SNO AND CNO='C1'
/*求1~100之间的所有数之和,并输出结果。分析:先定义两个变量,分别存放计数变量和存放和的变量*/
declare @i int,@sum int
set @i=1
set @sum=0
while(@i<=100)
begin
	set @sum=@sum+@i
	set @i=@i+1
end
print @sum
/*在SC表中分别查询选修课程学生成绩高于所有学生平均成绩的信息和低于所有学生平均成绩的信息。*/
declare @cj int
select @cj=AVG(grade) from sc
print '高于平均成绩的信息如下:'
select * from sc where grade>@cj
print'低于平均成绩的信息如下:'
select * from sc where grade<@cj


*******************************视图***************************************
//视图:视图是从一个或几个基本表中导出来的表,是基本表的部分行和列数据的组合。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。因此,它是一个虚表。
/*建立查询“计算机科学系”(CS)学生的学号(sno)、姓名( sname)和年龄(age),性别(sex)的视图V_CS。并要求进行修改和插入操作时仍需保证该视图只有计算机科学系的学生。 */
use jxgl
go
create view v_cs
as select sno,sname,age,sex
from s
where sdept='cs'
with check option
/*创建查询学生选修课程的门数和平均成绩的视图C_G*/
use jxgl
go
create view c_g(sno,c_num,avg_grade)
as
select sno,count(cno),avg(grade)
from sc
group by sno
/*修改视图V_CS,查询计算机科学系男学生的学号(sno)、姓名(sname)、性别(sex)和年龄(age)*/
use jxgl
go
alter view v_cs
as
select sno,sname,sex,age from s
where sdept='cs' and sex='男'
/*视图V_CS的列分别为sno,sname,sex,age ,使用该视图查询计算机科学系男学生的姓名、性别和年龄。*/
use jxgl
select sname,sex,age from v_cs
where sex='男'
------
select sname,sex,age from s
where sex='男' and sdept='cs'
/*视图C_G列分别为sno,c_num,avg_grade,其中sno为学号,c_num为课程门数,avg_grade为平均成绩,使用该视图查询平均成绩大于80分的学号和课程门数。*/
use jxgl
select sno,c_num from c_g
where avg_grade>80
-----
select sno,count(cno) from sc
group by sno having avg(grade)>80
/*使用计算机科学系视图V_CS,其列分别为sno,sname,sex,age ,将学生张三丰的名字改为“张四丰”*/
use jxgl
go
update v_cs set sname='张四丰'
where sname='张三丰'
-----
use jxgl
go
update s set sname='张四丰'
where sname='张三丰' and sdept='cs'
/*使用视图C_G,该视图的列分别为sno,c_num,avg_grade,其中sno为学号,c_num为课程门数,avg_grade为平均成绩,使用该视图,将视图中学号为“S1”的学生的平均成绩改成90分。*/









最后

以上就是成就绿茶为你收集整理的T SQL语言基础语句T SQL语言基础语句的全部内容,希望文章能够帮你解决T SQL语言基础语句T SQL语言基础语句所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部