SQL2000 笔记(一)

来源:互联网 发布:淘宝卖家花呗被关闭了 编辑:程序博客网 时间:2024/06/06 03:32

建表

CREATETABLE 学生信息

(

 学号 varchar(14) PRIMARY KEY,

 姓名 varchar(8) UNIQUE NOT NULL,

 班级编号 varchar(14) ,

 年级 int null,

 性别 varchar(2) CHECK(性别 in ('男’','女’')),

 民族 varchar(20) DEFAULT '未知该生民族',

 籍贯 varchar(50)

)

2.修改表

1)重命名表:

EXEC sp_rename oldname,newname

2)修改列属性:

ALTER TABLE 学生信息

ALTER COLUMN 姓名varchar(20)NOT NULL

3)添加列:

ALTER TABLE 学生信息

ADD 家庭住址nvarchar(20) NULL

4)删除列:

ALTER TABLE 学生信息

DROP COLUMN 家庭住址CASCADE

 

删除表

drop tablename

查询

select namefrom Sysobjects where type = 'u' order by name

//显示该数据库所有用户表

(selectcourse_id from section where semester = 'fall') union (select course_id fromsection where semester = 'spring');

//并运算,或运算,(还有交运算intersect,差运算 except)

select avg(PatientOld) as 'pingjunnianling' from Tbl_PatientInfo where PatientID between 20and 45  //as 可省略

聚集查询

select count(disrinct ID) from teachers where semester = 'Spring' and year =2013;

//基本聚集查询,distinct--去掉重复

 

select dept_name, cout(disinct ID)as instr_count from instructor naturaljoin teachers where semester ='Spring' and year = 2013 group by dept_name;

//group by字句可以给出的一个或多个属性是用来构造分组的,在group by 字句中所有属性上值相同的元组将被分在一个组中!

 

select dept_name,avg(salary) asavg_salary from instructor group by dept_name having avg(salary) >42000;

//having是针对group by 字句构成的分组查询,having 字句中的为此在形成分组后才起作用!

 

“对于2009年将受的每个课程段,如果该课程段至少有2名学生选课,找出该选课的所有学生的总分”

select course_id, semester,year,sec_id,avg(tot_cred)  from takes natural joinstudent where year= 2009 group by  course_id,semester,year,sec_id having count(ID) >=2;

//如果出现where子句,where子句将应用到from子句结果关系上,如果出现group by ,满足where谓词的元组通过group by子句,形成分组,如果没有groupby ,满足where 为此元组将被分为一个分组

 

 

嵌套子查询

 

集合

where子句

select distinct course_id from section where semester = 'Fall' and year= 2009 and course_id in (select course_id from section where semester ='Spring' and year = 2010 );

//in后面是集合,也可以是(‘121’,‘212 12’,‘211’)...

select name from insructor where salary > some (select salaryfrom onstructor where dept_name = 'Biology');

//至少比有些大

select  namefrom instructor where salary > all (selectsalary from instructor where dept_name = 'Biology')

select course_id from section as S where semester = 'fall' and year =2009 and exists (select *from section as T where semester = 'Spring'and year = 2010 and S.course_id = T.course_id);

//exists 存在

from子句

select depart_name,avg_salary from  (selectdept_name ,avg(salary) as avg_salary from instructor group by dept_name) where avg_salary >42000;

select depart_name,avg_salary from  (selectdept_name ,avg(salary) as avg_salary from instructor group by dept_name)  as dept_avg(dept_ name ,avg_salary) where avg_salary >42000;

//相当于select dept_name,avg(salary) as avg_salary from instructor groupby dept_name having avg(salary) > 42000;

 

with子句

withmax_budget(value) as (select max(buget) from department) select budget fromdepartment,max_budget where department.budget = max_budget.value;

//with子句提供定义临时关系的方法

 

 

 

数据库删除

delete fromR where;

 

 

数据库插入

insert intocourse values('','','',...);

 

insert into instructor selectID,name,depart_name,18000 from student where dept_name = 'Music' andtot_cred>144;

//假设我们想Music系每个修满144的学生成为Music系教师,其工资为18000;

 

 

 

 

数据库更新

updata  instructor set salary=salary*1.15;

//

updatainstructor set salary = salary*1.15 where salary>7000;

//

updatainstructor 

set salary= case

 when salary <=10000 thensalary*1.15

   else salary *1.05

 end;

//         

p� ot��8�2\clip_image012.png"width=437 height=176 alt=0159>

(1)在Edit菜单上点击。

(2)点击Repeat项。

(3)在键盘上按Delete键或从MenuDesigner快捷菜单中选择“Delete”删掉此项,该项消失,其余项目上移。

(4)删除PasteSpecial项。

对Edit菜单还未处理完,继续之前提一下MenuDesigner中有用用的特性。就是Shift + ClickCtrl + Click。这个技术可用于在Windows资源管理器中选择文件。MenuDesigner支持这个技术。

(1)Edit菜单应该仍在显示着,若没有,点击Edit菜单来显示Edit菜单。

(2)点击菜单项Go to

(3)按下Shift键,点击菜单项Object,这两个之间的所有项都已经选定。

(4)按Delete键一次消去所有项。

(5)点击Help菜单,删除中间两项,保留Contents项和About项。

可见Shift+Click技术用于快速删除不想要的菜单项。

5、插入菜单项

插入菜单项非常直接,就在要插入新项的菜单项上点击,在键盘上按Insert键或从MenuDesigner快捷菜单中选择Insert。空菜单项即被插入了,可以像以前一样改变Name属性和Caption属性。

下面在Edit菜单中插入一项。

(1)点击Edit显示Edit菜单。

(2)点击Find菜单项。

(3)按键盘Insert键插入一个新菜单项,所有在新项目下面的项都向后移动。

(4)改变Name属性为EditSelectAll,并改变Caption属性为“Select &All”。

(5)点击Edit菜单底端的空占位符,增加菜单分隔符。

恶魔

再点击占位符以增加新项,设置Name属性为EditWordWrap,Caption属性为“&Word Wrap”。

现在Edit菜单看起来如下:

0160

6、移动菜单项

需要时能容易移动菜单项,可以在它们所在弹出菜单中上下移动,或者移出弹出菜单。

有两种方式移动菜单项:

  • 第一种使用Cut和Paste。
  • 第二种是把它拖动到新位置然后释放。

下面来试试,把SelectAll菜单项放到Undo项的下面,这是很容易的,只要移动它。

(1)点击Edit显示Edit菜单。

(2)点击SelectAll项,拖动它知道Undo项下的分隔线亮起来。

(3)释放鼠标,菜单项移动了。

这就是Delphi,非常容易。

7、批量修改属性

有时想一次改变几个菜单项的属性,例如,在ScratchPad应用程序中,有几个菜单项不准备这次完成,比如不准备支持打印,也不准备完成帮助系统。因此需要屏蔽这些菜单项。

(1)在MeunDesigner中选择Help | Contents

(2)改变其Enabled属性为False,该菜单项目被屏蔽。

(3)点击File菜单。

(4)点击Print菜单项,按住Shift键,点击PrintSetup菜单项,两个项目都被选定。

(5)在ObjectInspector中,改变它们的Enabled属性为False,两个菜单项都被屏蔽了。

恶魔

重复(4)、(5)步来屏蔽Edit菜单上的Find和 Replace菜单项。

用这种方法可以一次改变一组菜单项,只需要选择想要改变的项,按要求改变其属性。

8、增加位图到菜单栏

可以容易地增加位图到菜单上。在想增加位图的菜单上点击,然后在ObjectInspector中Bitmap属性的Value栏中双击,弹出PictureEditor对话框,选择要显示的位图即可。位图可以是单个图像或者图像列表。如果使用图像列表,还应该设置ImageIndex属性为要显示的图像列表中的索引号。

Note

在设计阶段,菜单项目位图不显示在Menu Designer中或者窗体上,必须运行程序来看位图菜单。

9、创建子菜单

创建子菜单没有什么特别或需要技巧的地方。子菜单是一种菜单项,点击时能扩展显示更多的菜单选项。子菜单是以菜单项标题附近的右向箭头标记的。可从MenuDesigner快捷菜单中选Create Submenu或按住Ctrl+右箭头建立子菜单。如下:

0161

建立子菜单时,空菜单项安排在菜单项的右边。可往子菜单增加菜单项,就想生成主菜单一样。也可以插入菜单模板建立子菜单。如下:

0162

10、增加快捷键

可通过改变ObjectInspector中的ShortCut属性来增加菜单项的快捷键。以前插入的Edit菜单已有内部快捷键。例如,Cut的快捷键是Ctrl+X,如果看Edit菜单,会看到Ctrl+ X列在Cut项目旁边。

0163

在Cut菜单项上点击,在ObjectInspector的ShortCut属性中看到其值为Ctrl + X。点击ShortCut属性的Value栏,会看到下拉按钮,点击按钮列出所有的快捷键列表。要为菜单项设置快捷键,只要从表中选择即可。

image

SelectAll菜单项目的标准快捷键是Ctrl + A,因此我们为Select All菜单项增加快捷键。

(1)从MenuDesigner中选择 Edit | Select All

(2)在ObjectInspector中点击ShortCut属性。

(3)从列表中选择Ctrl + A,则Select All项显示出Ctrl + A来。如下:

0164

这时所有要做的,以后Delphi来照顾它,快捷键不需要编写任何代码。

11、最后的工作

下载来完成菜单。

首先,WordWrap菜单项用于打开或关闭换行的。当该项打开时,Word Wrap菜单项前面有一个对勾;当该项关闭时,则没有对勾。通过设置WordWrap菜单项的Checked属性为True来表示换行特性的打开。如下:

image

另一件事情就是改变从模板插入的所有菜单项目的Name属性。默认插入时都是缺省值,需要把它们改为更为有意义的名字。

(1)点击Edit | Undo菜单项,更改Name属性为EditUndo。如果使用的是缺省值,则需要在Undo1基础上,在前面加上Edit前缀,然后删除掉结尾处的1。

(2)可使用命名惯例但要前后一致,对Cut、Copy、Paste、Find及Replace菜单项Name属性进行修改,依次为EditCut,EditCopy,EditPaste、EditFind及EditReplace

(3)现在更改Help菜单,将其中Contents菜单项的Name属性改为HelpContents,About菜单项Name属性改为HelpAbout

这就快要完成菜单了,在检查一遍,如果发现错误就做必要的修改。当一切没有问题了,点击关闭框关闭MenuDesigner。

Note

可双击任何菜单项直接从Menu Designer中访问Code Editor,双击菜单项是,CodeEditor将显示该项的OnClick事件,这时可以开始输入代码。在一下讲解中,我将要编写菜单代码。

以上代码均在Delphi 7中测试通过,截止到本讲示例代码下载:ScratchPad(菜单设计器之一).rar

(请继续下一讲)