找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 2716|回复: 4

[数据库知识] 一些基本语句,希望能有帮助

[复制链接]
发表于 2010-1-11 21:44:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
create database webserver --创建数据库
drop database webserver --删除数据库

create database stusystem --创建数据库
use stusystem --打开数据库
create table student(sno nvarchar(12)primary key) --创建基本表
create table course(cno nvarchar(12)primary key) --创建基本表
create table SC(                          --创建基本表
sno nvarchar(12),
cno nvarchar(12) default'1',
grade int,
primary key(sno,cno),
foreign key(sno)references student(sno),
foreign key(cno)references course(cno),
check(grade between 0 and 100))
                         --修改基本表
alter table student add sname nvarchar(50),sage nvarchar(12)--增加新列
alter table student alter column sage int --修改列定义
alter table student drop column sage --删除列
create table age(sage int)--创建表   drop table age --删除表
truncate table sc--删除表中所有行(=delete from sc)

create unique index scindex on SC(sno asc,cno desc)--按sno升序,cno降序建立唯一索引
drop index SC.scindex --删除索引

create view 成绩总表 as select...where...with check option --创建视图(虚表)
drop view 成绩总表 --删除视图
*/
-----------------------------------------------------------------------------------------------------------------------------------------
--数据控制语言: DCL(grant,revoke)
/*
--权限设置:select 、update、insert、delete

grant update(sno),select on student to happy with grant option   --给用户happy授权并可传播该权限
revoke select on student from happy cascade --给用户happy卸权
*/
-----------------------------------------------------------------------------------------------------------------------------------------
--数据操纵语言ML(select,update,insert,delete)
------------------------------------------------------SELECT--------------------------------
--use 学生成绩管理系统 --打开数据库
--select * from 学生表A /* 检索语句 */
--select 学号,姓名,性别 from 学生表A --投影操作(针对列)
--where 性别='女' --选择操作(针对行)
--where 姓名='陈真明' --等值查询
--where 姓名 like '陈%' --模糊查询(右模糊)
--where 姓名 like '%林%' --模糊查询(左右模糊)
--where 姓名 like '%云' --模糊查询(左模糊)
--where 姓名 like '%%' --模糊查询(全模糊)
--where 姓名 like '林%' and 性别='女'
--where 姓名 like '陈%' and 性别='女' or 性别='男'
--where 姓名 like '陈%' and (性别='女' or 性别='男')

/*
第一题:
 检索所有姓“刘”的男生和所有姓名里包含“林”字的女生。
*/
select 学号,姓名,性别 from 学生表A
where 姓名 like '刘%' and 性别='男'
   or 姓名 like '%林%' and 性别='女'
/*
第二题:
 检索所有姓“陈”和姓“张”的男生记录。
*/
select 学号,姓名,性别 from 学生表A
where (姓名 like '陈%' or 姓名 like '张%') and 性别='男'
---------------------------------------------------------聚合函数-------------------

--聚合函数

/*
select count(*) as 成绩总数 from 成绩表   --计数
select avg(成绩) as 总平均 from 成绩表    --求平均值
select max(成绩) as 最高分 from 成绩表    --求最大值
select min(成绩) as 最低分 from 成绩表    --求最小值
select sum(成绩) as 总分数 from 成绩表    --求和
*/
/*
select count(*) as 成绩总条数,avg(成绩) as 总平均,
      max(成绩) as 最高分, min(成绩) as 最低分,
      sum(成绩) as 总分数
from 成绩表
*/

/*第三题:求所有籍贯为“福清”的人数。*/
--select count(*) from 学生表B where 籍贯='福清'
/*
----------------------------------------------------------排序-----------------------
select * from 成绩表
where 学期='第一学期' and 类别='考试科'
and 科目编号='300001'
--order by 成绩 ASC --升序(默认值)
order by 成绩 DESC  --降序
*/
--------------------------------------------取前n个------------------
/*
select top 5 * from 学生表A --top n:前n条
order by 性别 DESC,姓名 ASC --多字段排序
*/

/*
第四题:
    检索第四学期考试科中成绩排在前10名的成绩记录。
*/
/*
select top 10 * from 成绩表
where 学期='第四学期' and 类别='考试科'
order by 成绩 DESC
*/

/*
第五题:
    检索各学期考试科目的成绩记录,要求各学期内的成绩按
从高到低排列。
*/
/*
select * from 成绩表
where 类别='考试科'
order by 学期,成绩 DESC
*/
------------------------------------------------------分组----------
/*
select 学期,类别,avg(成绩) as 平均成绩 from 成绩表
group by 学期,类别 --分组
order by 学期,类别 --排序
*/

/*--统计各个班级的男女生人数
select 班级编号,性别,count(*) as 人数 from 学生表A
group by 班级编号,性别
order by 班级编号
*/
------------------------------------------------分组条件--------
--查看第五学期各个类别各门科目的平均成绩在80分及
--以上的记录
/*
select 学期,类别,科目编号,avg(成绩) as 平均分
from 成绩表
where 学期='第五学期'
group by 学期,类别,科目编号
having avg(成绩)>=80 --and 学期='第五学期'
order by 学期,类别,科目编号
*/
/*
分组条件规则:
    当条件表达式有包含聚合函数时,一般把条件放于having语句中,其它情况一般放于where语句中。
*/

--1、统计各个民族各个籍贯的学生人数在2人及以上的人数信息。
--(民族,籍贯,人数)
/*
select 民族,籍贯,count(*) as 学生人数 from 学生表B
group by 民族,籍贯
having count(*)>=2
order by 民族,籍贯
*/

--2、统计第一、二学期内各考查科目的平均分在75分及以上的信息。
--(学期,类别,科目编号,平均分)
/*
select 学期,类别,科目编号,avg(成绩) as 平均分 from 成绩表
where (学期='第一学期' or 学期='第二学期') and 类别='考查科'
group by 学期,类别,科目编号
having avg(成绩)>=75
order by 学期,类别,科目编号
*/

--3、检索在第六学期考试中,平均分排在前3名的相关信息。
--(学期,平均成绩)
/*
select top 3 avg(成绩) as 平均分,学期 from 成绩表
where 学期='第六学期'
group by 学期
order by avg(成绩) desc
*/

--4、检索第三学期中各考试科目最高分在90以上的相关信息。
--(学期,类别,科目编号,最高分)
/*
select 学期,类别,科目编号,max(成绩) as 最高分 from 成绩表
where 学期='第三学期' and 类别='考试科'
group by 学期,类别,科目编号
having max(成绩)>=90
order by 学期,类别,科目编号
*/

--5、检索各学期中各科目的不及格人数信息。
--(学期,科目编号,不及格人数)
/*
select 学期,科目编号,count(*) as 不及格人数 from 成绩表
where 成绩<60
group by 学期,科目编号
order by 学期,科目编号
*/

-------------------------------------------------多表查询-------
--多表查询
use 学生成绩管理系统
--检索所有籍贯为南平的姓“林”的学生记录
/*
select 学生表A.学号,姓名,性别,籍贯,通信地址
from 学生表A,学生表B
where 学生表A.学号=学生表B.学号 --等值条件
and 籍贯='南平' and 姓名 like '林%'
*/
-----------------------------------------------可视化创建视图----
/*
select * from 学生表 --学生表:视图
where 性别='男'
*/
-----------------------------------------------代码创建视图-----
/*
create view 成绩总表 --创建视图
as
select 学生表.学号,姓名,性别,通信地址,学期,科目名称,类别,成绩
from 学生表,科目表,成绩表
where 学生表.学号=成绩表.学号
and 科目表.科目编号=成绩表.科目编号
*/

--检索第一学期英语科目不及格的女生的学号、姓名、性别、
--通信地址、学期、科目名称、类别、成绩
/*
select * from 成绩总表
where 学期='第一学期' and 科目名称='英语'
and 性别='女' and 成绩<60
*/

--成绩总表------------------------------视图查询--------------
--6、检索各学期内所有英语有补考的女生记录
/*
select * from 成绩总表
where 科目名称='英语' and 性别='女' and 成绩<60
*/

--7、统计各学期内各考试科目的最高分、最低分和平均分。
/*
select 学期,科目名称,max(成绩) as 最高分,
       min(成绩) as 最低分,avg(成绩) as 平均分
from 成绩总表
where 类别='考试科'
group by 学期,科目名称
order by 学期,科目名称
*/

--8、统计各英语考试中男、女生的平均分。
/*
select 学期,科目名称,性别,avg(成绩) as 平均分
from 成绩总表
where 科目名称='英语'
group by 学期,科目名称,性别
order by 学期,科目名称,性别
*/

--9、列出所有英语科目有过补考的男生姓名
/*
select distinct 姓名 from 成绩总表
where 科目名称='英语' and 成绩<60 and 性别='男'
*/

/*--同解
select 姓名 from 成绩总表
where 科目名称='英语' and 成绩<60 and 性别='男'
group by 姓名
*/

--10、列出补考次数最多的学生的学号、姓名、性别、补考次数。
/*
select top 1 学号,姓名,性别,count(*) as 补考次数
from 成绩总表
where 成绩<60
group by 学号,姓名,性别
order by count(*) DESC
*/
-----------------------------------------------子查询--------
--子查询
--检索所有姓“林”的学生的成绩记录。
/*
select * from 成绩表
where 学号 in
(
select 学号 from 学生表A
where 姓名 like '林%'
)
*/

--创建字段
/*
select *, 成绩+30 as 附加分 from 成绩表
where 学号 in
(
select 学号 from 学生表A
where 姓名 like '林%'
)
*/

------------------------------------------------------INSERT,DELETE,UPDATE-------------
insert into <表名> [(<属性列1>[,<属性列2>...])] values(<常量1>[,<常量2>]...)
delete from <表名> [where <条件>]
update <表名> set <列名>=<表达式>[,<列名>=<表达式>]...[where <条件>]

use 学生成绩管理系统
--select * into 学生表C from 学生表 --创建新表
--select * into 成绩表C from 成绩总表 --创建新表
--insert into 学生表C(学号,姓名,性别) values('1','张三','男') --插入操作
--insert into 学生表C values('2','李四','女','南平','') --插入操作
--delete from 学生表C where 学号='1' --删除操作
--delete from 学生表C where 学号 in('1','2') --删除操作
--update 学生表C set 性别='男' where 姓名='李小苹'--更新操作
--select * from 学生表C

/*
update 成绩表C set 成绩=成绩+10
where 学期='第二学期' and 性别='女' and 科目名称='英语'
and 姓名='薛明真'

select * from 成绩表C
where 学期='第二学期' and 性别='女' and 科目名称='英语'
and 姓名='薛明真'
*/

--1、将第一学期里所有女生的英语成绩加20分。
     --(要求最高分不能超过100分)
/*
update 成绩表C set 成绩=成绩+20
where 学期='第一学期' and 性别='女' and 科目名称='英语'

update 成绩表C set 成绩=100
where 学期='第一学期' and 性别='女' and 科目名称='英语'
and 成绩>100

select * from 成绩表C
where 学期='第一学期' and 性别='女' and 科目名称='英语'
*/
--自身连接
--查询每一门课的间接选修课
select T1.Cno,T2.Cpno from Course T1,course T2
where T1.Cpno=T2.Cno   --(本例中,需要为Course表取两个别名.比如,一个用T1,另一个用T2)

--并操作UNION的使用
--查询计算机科学系的学生及年龄不大于19岁的学生
select * from Student where Sdept='CS'
UNION
select * from student where Sage<=19--(用union合并起来的,系统会自动去掉重复元组)
-----------------------------------------------------------------------------------------------------------------------------------------
--事务控制
/*
事务:1.自动提交事务
     2.显式事务(begin transaction......rollback......commit)
     3.set implicit_transactions on--打开隐式事务
       set implicit_transactions off--关闭隐式事务
     4.save transaction abc 设置保存点abc
*/

declare @k int --定义局部变量    -------全局变量@@-----------
set @k=0       --给变量赋值

begin transaction
update 成绩表C set 成绩=成绩-@k
where 学号='0404004' and 学期='第一学期' and 科目名称='英语'

if(@@rowcount=0)
    rollback transaction --事务回滚
else

update 成绩表C set 成绩=成绩+@k
where 学号='0404005' and 学期='第一学期' and 科目名称='英语'
if(@@rowcount=0)
    rollback transaction --事务回滚
else
    commit transaction    --提交事务

select * from 成绩表C
where 学号 in('0404004','0404005')
and 学期='第一学期' and 科目名称='英语'
----------------------------------------------------------------------------------------------------------------------------------------
--使用事件探查器

----------------------------------------------------------------------------------------------------------------------------------------
--存储过程:可视化创建和代码创建

--针对"成绩表C"编写--存储过程"show",求能够统计任一学期,任一科目,男生和女生的成绩最高分,最低分和平均分.
create procedure show
@xq nvarchar(50),@kmmc nvarchar(50)
as
select 学期,科目名称,性别,max(成绩)as 最高分,min(成绩)as 最低分,avg(成绩)as 平均分 from 成绩表C
where 学期 like '%'+@xq+'%' and 科目名称 like '%'+@kmmc+'%'
group by 学期,科目名称,性别
go
-----------------------------使用存储过程---------
exec show '二','英语'
------------------------------------------------------------------------------------------------------------------------------------------
--触发器:可视化创建和代码创建
/*
create trigger abc on 成绩表
for insert,update,delete
as
--if(select count(*) from deleted)>0 rollback transaction
--if(select count(*) from inserted)>0 rollback transaction
--if(select 成绩 from inserted)not between 0 and 100   rollback transaction
--if update(成绩) rollback
*/
/*
create trigger del on SC
instead of delete
as
select * from SC --可以以delete from SC来验证,将返回数据   
*/
发表于 2010-1-12 20:39:57 | 显示全部楼层
很有用谢谢了
发表于 2010-1-13 09:15:17 | 显示全部楼层
学无止境
发表于 2010-1-14 12:22:45 | 显示全部楼层
支持一下................
发表于 2010-1-15 12:31:41 | 显示全部楼层
多谢楼主 挺不错的
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-6-4 08:09 , Processed in 0.031228 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表