nongzihong
--使用数据库
use date
go

--创建表班级表
create table classInfo
(
classNo int primary key identity(1,1),--主键约束使用primary key identity
className varchar(10) not null--非空约束
)
go
--创建学员表
create table stuInfo         --标识列约束使用identity
(
stuNo int primary key identity(1,1),--主键约束要求主键数据唯一并且不允许为空
stuname varchar(10)not null unique,--唯一约束使用unique关键字允许为空,但只能出现一个空值
age int check(age>10 and age<100),--检查约束使用check设置年龄
sex nchar(1)default\'\',--默认约束
class int foreign key references classInfo(classNo)--外键约束用于两表之间建立关系,需要指定引用主表的那一列

)
go
--插入数据
insert into classInfo values(\'S2S147\'),(\'S2S148\')
insert into stuInfo values
(\'田七\',18,\'\',null),
(\'张三\',38,\'\',null),
(\'王五\',20,\'\',null),
(\'赵六\',30,\'\',null)


--修改表中的数据
update  stuInfo  set class=1
--删除表中的数据
delete stuInfo where  stuNo=1

--修改朱茂深的年龄和性别
update stuInfo set age=18,sex=\'\'where stuname=\'张三\'

--查询表中的数据
select * from stuInfo
select * from classInfo

--查询性别为女的数据
select * from stuInfo where sex=\'\'

--模糊查询使用like --查询\'朱\'字开头的名字
select * from stuInfo where stuname like \'张%\'

--查询年龄18到20之间的数据
select * from stuInfo where age=18 or age=20
--使用in的效果一样
select  * from stuInfo where age in(18,20)
select  * from stuInfo  where age between 18 and 20
--查询姓名年龄
select \'姓名\'=stuname,\'年龄\'=age from stuInfo where   age between 18 and 20

--查询男生的人数(使用聚合函数)
select count(*) as 人数 from stuInfo where sex=\'\' 

--sum(求和)、avg(平均值)、max(最大值)、min(最小值)、count(计算总数)

--查询男生女生分别多少人(分组)(group by 统计函数联合使用)
 select 性别=sex, 人数=count(*) from stuInfo group by sex
 --查询年龄18到20之间的个数大于等于2的数
 select 性别=sex, 人数=count(*) from stuInfo 
 where age in (18,20) group by sex
 having COUNT(*)>=2
 
 --order by(作用是升降序 (ASC升从小到大排列)(Desc降)从大到小排列)
 select * from stuInfo order by  age asc
 select * from stuInfo order by  age desc
 
 --使用top查询前三条数据  
 --查询降序后的三条数据
 select top 3 * from stuInfo order by age desc
 
--查询出男生的 姓名 年龄 性别
select 姓名=stuname,年龄=age,性别=sex
 from stuInfo,classInfo 
where stuInfo.class=classInfo.classNo and sex=\'\'

--内链接查询
--查询 姓名 年龄 性别 班级
select 姓名=stuname,年龄=age,性别=sex,班级=className
from stuInfo inner join classInfo 
on stuInfo.class=classInfo.classNo  
where sex=\'\'

--左外连接查询使用(left join)
select stuname,age,sex,className 
from stuInfo left join classInfo 
on stuInfo.class=classInfo.classNo

--右外连接查询 使用(right join)如果不满足条件的则返回null(空值)
select stuname,age,sex,classname 
from stuInfo right join classInfo
 on stuInfo.class=classInfo.classNo


--全外连接查询使用(full outer join)outer可以不写
select stuname,age,sex,classname 
from stuInfo full join  classInfo 
on stuInfo.class=classInfo.classNo


--交叉链接查询(笛卡尔积)就是查询所指定要查询的值
select stuname,age,sex,classname 
from stuInfo cross join classInfo

--自连接查询查询张三所在班级的所有学员信息
select 
姓名=s1.stuname ,
年龄=s1.age,
性别=s1.sex 
from stuInfo s1,stuInfo s2
where s1.class=s2.class
and s2.stuname=\'张三\'

select 
姓名=s1.stuname,
年龄=s1.age,
性别=s1.sex,
班级=c3 .className
from stuInfo s1, stuInfo s2 ,classInfo c3
where s1.class=s2.class 
and s2.stuname=\'张三\'
and s1.class=c3.classNo


--子查询
select 
姓名=stuname,
年龄=age,
性别=sex,
班级=class
from stuInfo
where class=(select class  from stuInfo where stuname=\'张三\')


select
姓名=stuname,
年龄=age,
性别=sex,
班级=(select classname from classInfo where classNo=class)
from stuInfo 
where class=
(select class from stuInfo where stuname=\'张三\')

 

分类:

技术点:

相关文章: