SQL_Server_2000常用命令

SQL Server 2000常用命令,语法使用方法(1) 数据记录筛选:sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"sql="select * from 数据表 where 字段名 in ('值1','值2','值3')"sql="select * from 数据表 where 字段名 between 值1 and 值2"(2) 更新数据记录:sql="update 数据表 set 字段名=字段值 where 条件表达式"sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"(3) 删除数据记录:sql="delete from 数据表 where 条件表达式"sql="delete from 数据表" (将数据表所有记录删除)(4) 添加数据记录:sql="insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …)"sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)(5) 数据记录统计函数:AVG(字段名) 得出一个表格栏平均值COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计MAX(字段名) 取得一个表格栏最大的值MIN(字段名) 取得一个表格栏最小的值SUM(字段名) 把数据栏的值相加引用以上函数的方法:sql="select sum(字段名) as 别名 from 数据表 where 条件表达式"set rs=conn.excute(sql)用 rs("别名") 获取统的计值,其它函数运用同上。

(5) 数据表的建立和删除:CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )例:CREATE TABLE tab01(name varchar(50),datetime default now()) DROP TABLE 数据表名称 (永久性删除一个数据表)4. 记录集对象的方法:rs.movenext 将记录指针从当前的位置向下移一行rs.moveprevious 将记录指针从当前的位置向上移一行rs.movefirst 将记录指针移到数据表第一行rs.movelast 将记录指针移到数据表最后一行rs.absoluteposition=N 将记录指针移到数据表第N行rs.absolutepage=N 将记录指针移到第N页的第一行rs.pagesize=N 设置每页为N条记录2、更改表格ALTER TABLE table_nameADD COLUMN column_name DATATYPE说明:增加一个栏位(没有删除某个栏位的语法。

ALTER TABLE table_nameADD PRIMARY KEY (column_name)说明:更改表得的定义把某个栏位设为主键。

ALTER TABLE table_nameDROP PRIMARY KEY (column_name)说明:把主键的定义删除。

3、建立索引CREATE INDEX index_name ON table_name (column_name)说明:对某个表格的栏位建立索引以增加查询时的速度。

4、删除DROP table_nameDROP index_name二、的资料形态 DATATYPEssmallint16 位元的整数。

interger32 位元的整数。

decimal(p,s)p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点後有几位数。

如果没有特别指定,则系统会设为 p=5; s=0 。

float32位元的实数。

double64位元的实数。

char(n)n 长度的字串,n不能超过 254。

varchar(n)长度不固定且其最大长度为 n 的字串,n不能超过 4000。

graphic(n)和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。

这个形态是为了支援两个字元长度的字体,例如中文字。

vargraphic(n)可变长度且其最大长度为 n 的双字元字串,n不能超过 2000。

date包含了年份、月份、日期。

time包含了小时、分钟、秒。

timestamp包含了年、月、日、时、分、秒、千分之一秒。

三、资料操作DML(Data Manipulation Language)资料定义好之後接下来的就是资料的操作。

资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分别介绍他们的语法:1、增加资料:INSERT INTO table_name (column1,column2,...)valueS ( value1,value2, ...)说明:1.若没有指定column 系统则会按表格内的栏位顺序填入资料。

2.栏位的资料形态和所填入的资料必须吻合。

3.table_name 也可以是景观 view_name。

INSERT INTO table_name (column1,column2,...)SELECT columnx,columny,... FROM another_table说明:也可以经过一个子查询(subquery)把别的表格的资料填入。

2、查询资料:基本查询SELECT column1,columns2,...FROM table_name说明:把table_name 的特定栏位资料全部列出来SELECT *FROM table_nameWHERE column1 = xxx[AND column2 > yyy] [OR column3 <> zzz]三)交叉连接交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。

SELECT type,pub_nameFROM titles CROSS JOIN publishersORDER BY typeUNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。

UNION的语法格式为:select_statementUNION [ALL] selectstatement[UNION [ALL] selectstatement][…n]其中selectstatement为待联合的SELECT查询语句。

ALL选项表示将所有行合并到结果集合中。

不指定该项时,被联合查询结果集合中的重复行将只保留一行。

联合查询时,查询结果的列标题为第一个查询语句的列标题。

因此,要定义列标题必须在第一个查询语句中定义。

要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。

在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。

例如:查询1 UNION (查询2 UNION 查询3)INSERT语句用户可以用INSERT语句将一行记录插入到指定的一个表中。

例如,要将雇员John Smith的记录插入到本例的表中,可以使用如下语句:INSERT INTO EMPLOYEES valueS('Smith','John','1980-06-10','Los Angles',16,45000);通过这样的INSERT语句,系统将试着将这些值填入到相应的列中。

这些列按照我们创建表时定义的顺序排列。

在本例中,第一个值“Smith”将填到第一个列LAST_NAME中;第二个值“John”将填到第二列FIRST_NAME中……以此类推。

我们说过系统会“试着”将值填入,除了执行规则之外它还要进行类型检查。

如果类型不符(如将一个字符串填入到类型为数字的列中),系统将拒绝这一次操作并返回一个错误信息。

如果SQL拒绝了你所填入的一列值,语句中其他各列的值也不会填入。

这是因为SQL提供对事务的支持。

一次事务将数据库从一种一致性转移到另一种一致性。

如果事务的某一部分失败,则整个事务都会失败,系统将会被恢复(或称之为回退)到此事务之前的状态。

回到原来的INSERT的例子,请注意所有的整形十进制数都不需要用单引号引起来,而字符串和日期类型的值都要用单引号来区别。

为了增加可读性而在数字间插入逗号将会引起错误。

记住,在SQL中逗号是元素的分隔符。

SQL2000常用命令2008年05月26日星期一11:341. 查看数据库的版本select @@version常见的几种SQL SERVER打补丁后的版本号:8.00.194 Microsoft SQL Server 20008.00.384 Microsoft SQL Server 2000 SP18.00.532 Microsoft SQL Server 2000 SP28.00.760 Microsoft SQL Server 2000 SP38.00.818 Microsoft SQL Server 2000 SP3 w/ Cumulative PatchMS03-0318.00.2039 Microsoft SQL Server 2000 SP42. 查看数据库所在机器操作系统参数exec master..xp_msver3. 查看数据库启动的参数sp_configure4. 查看数据库启动时间select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1查看数据库服务器名和实例名print 'Server Name...............: ' + convert(varchar(30),@@SERVERNAME)print 'Instance..................: ' + convert(varchar(30),@@SERVICENAME)5. 查看所有数据库名称及大小sp_helpdb重命名数据库用的SQLsp_renamedb 'old_dbname', 'new_dbname'6. 查看所有数据库用户登录信息sp_helplogins查看所有数据库用户所属的角色信息sp_helpsrvrolemember修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程更改某个数据对象的用户属主sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner' 注意: 更改对象名的任一部分都可能破坏脚本和存储过程。

合集下载

SQLServer2000触发器

SQLServer2000触发器

SQL Server‎ 2000触发‎器一、简介触发器是一种‎特殊的存储过‎程,类似于其它编‎程语言中的事‎件函数,SQL Serve2‎000 允许为INSERT‎、UPDATE‎、DELETE‎创建触发器,当在表(视图)中插入、更新、删除记录时,触发一个或一‎系列 T-SQL 语句。

两大类:DML触发器‎和DLL触发‎器。

1、优缺点触发器的主要‎作用就是其能‎够实现由主键‎和外键所不能‎保证的复杂的‎参照完整性和‎数据的一致性‎。

除此之外,触发器还有其‎它许多不同的‎功能:<1>强化约束(Enforc‎e restri‎c tion)触发器能够实‎现比CHEC‎K语句更为复杂‎的约束。

<2>跟踪变化Au‎d iting‎change‎s触发器可以侦‎测数据库内的‎操作,从而不允许数‎据库中未经许‎可的指定更新‎和变化。

<3>级联运行(Cascad‎e d operat‎i on)。

触发器可以侦‎测数据库内的‎操作,并自动地级联‎影响整个数据‎库的各项内容‎。

例如,某个表上的触‎发器中包含有‎对另外一个表‎的数据操作(如删除,更新,插入)而该操作又导‎致该表上触发‎器被触发。

<5>存储过程的调‎用(Stored‎proced‎u re invoca‎t ion)。

为了响应数据‎库更新触,发器可以调用‎一个或多个存‎储过程,甚至可以通过‎外部过程的调‎用而在DBM‎S(数据库管理系统)本身之外进行‎操作。

由此可见,触发器可以解‎决高级形式的‎业务规则或复‎杂行为限制以‎及实现定制记‎录等一些方面‎的问题。

例如,触发器能够找‎出某一表在数‎据修改前后状‎态发生的差异‎,并根据这种差‎异执行一定的‎处理。

此外一个表的‎同一类型(INSERT‎、 UPDATE‎、 DELETE‎)的多个触发器‎能够对同一种‎数据操作采取‎多种不同的处‎理。

总体而言,触发器性能通‎常比较低。

SQLSERVER2000数据库具体操作细则

SQLSERVER2000数据库具体操作细则

SQLSERVER2000数据库具体操作细则SQLSERVER2000 数据库具体操作细则本细则主要为了平时在操作数据库时规范操作方法,避免出现误操作情况的发生。

本细则主要包括的操作有:添加单条记录、添加多条记录、删除表中数据、复制表结构、删除数据库表。

本细则的操作均分为(企业管理器方式和查询分析器方式)。

具体操作如下:一.添加单条记录1.1企业管理器方式(enterprise manager)1.1.1 启动企业管理器1.1.2 选择要进行操作的服务器,然后点选databases文件夹或者点选展开databases文件夹;然后选取要操作的数据库名称,点选开,选择tables节点,然后在控制台右侧可以选择要操作的数据库表名。

(如下图)1.1.3 右键点击所选的数据表,在弹出的菜单中具体操作:open table->return all rows。

(如下图)在点选return all rows 后会弹出一个窗体,显示出所有该表的所有记录。

(如下图)1.1.5 在上面所显示的图中点击右键,选择“new”,然后在上图中添加相应的数据。

(如下图)1.2 查询分析器方式(query analyzer)1.2.1 启动查询分析器1.2.2 选择要进行操作的数据库(如下图)1.2.3 在上图中的文字编辑区中添加SQL语句,具体语句如下:“INSERT INTO 目标表(字段1,字段2,字段3,……)value(值1,值2,值3,……)”1.2.4然后点击绿钮运行SQL语句。

二.添加多条记录添加多条记录主要是将表结构相同的两个表,将其中一个表的数据整体的添加到另一个表中。

2.1企业管理器方式(enterprise manager)2.1.1启动企业管理器2.1.2 在企业管理器中选择要进行操作的数据库表,然后右键单击该表,在弹出的菜单中选择“所有任务->import data”。

(如下图)2.1.3 点选import data 完成后,出现一个向导窗体,然后点击“下一个”按钮;然后(下图)注意:一定要将database选项,选成源数据表所在的数据库名称;然后点击“下一步”,出现窗体(如下图)选择第一项“copy table(s) and view(s) from the source database”,然后点击“下一步”,出现窗体(如下图)在上图中的source栏中选择源数据表,Destination栏中选择目标数据表。

SQL SERVER命令大全

SQL SERVER命令大全

SQL SERVER命令大全--语句功能 --数据操作SELECT --从数据库表中检索数据行和列 INSERT --向数据库表添加新数据行 DELETE --从数据库表中删除数据行 UPDATE --更新数据库表中的数据 --数据定义CREATE TABLE --创建一个数据库表 DROP TABLE --从数据库中删除表 ALTER TABLE --修改数据库表结构 CREATE VIEW --创建一个视图 DROP VIEW --从数据库中删除视图CREATE INDEX --为数据库表创建一个索引 DROP INDEX --从数据库中删除索引 CREATE PROCEDURE --创建一个存储过程 DROP PROCEDURE --从数据库中删除存储过程 CREATE TRIGGER --创建一个触发器 DROP TRIGGER --从数据库中删除触发器 CREATE SCHEMA --向数据库添加一个新模式 DROP SCHEMA --从数据库中删除一个模式 CREATE DOMAIN --创建一个数据值域 ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除一个域 --数据控制GRANT --授予用户访问权限 DENY --拒绝用户访问 REVOKE --解除用户访问权限 --事务控制COMMIT --结束当前事务 ROLLBACK --中止当前事务SET TRANSACTION --定义当前事务数据访问特征 --程序化SQLDECLARE --为查询设定游标 EXPLAN --为查询描述数据访问计划 OPEN --检索查询结果打开一个游标 FETCH --检索一行查询结果 CLOSE --关闭游标PREPARE --为动态执行准备SQL 语句 EXECUTE --动态地执行SQL 语句 DESCRIBE --描述准备好的查询---局部变量declare @id char(10) --set @id = '10010001'select @id = '10010001'---全局变量---必须以@@开头--IF ELSEdeclare @x int @y int @z int select @x = 1 @y = 2 @z=3 if @x > @yprint 'x > y' --打印字符串'x > y' else if @y > @z print 'y > z' else print 'z > y'--CASE use panguupdate employee set e_wage = casewhen job_level = ’1’ then e_wage*1.08 when job_level = ’2’ thene_wage*1.07 when job_level = ’3’ then e_wage*1.06 else e_wage*1.05 end--WHILE CONTINUE BREAK declare @x int @y int @c int select @x = 1 @y=1 while @x < 3 beginprint @x --打印变量x 的值 while @y < 3 beginselect @c = 100*@x + @y print @c --打印变量c 的值 select @y = @y + 1 endselect @x = @x + 1 select @y = 1 end--WAITFOR--例等待1 小时2 分零3 秒后才执行SELECT 语句waitfor delay ’01:02:03’select * from employee--例等到晚上11 点零8 分后才执行SELECT 语句waitfor time ’23:08:00’ select * from employee***SELECT***select *(列名) from table_name(表名) where column_name operator value ex 宿主)select * from stock_information where stockid = str(nid) stockname ='str_name'stockname like '% find this %'stockname like '[a-zA-Z]%' --------- ([]指定值的范围) stockname like '[^F-M]%' --------- (^排除指定范围)--------- 只能在使用like关键字的where子句中使用通配符) or stockpath ='stock_path' or stocknumber < 1000 and stockindex = 24 not stocksex = 'man'stocknumber between 20 and 100 stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序 order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4) --------- 子查询--------- 除非能确保内层select只返回一个行的值, --------- 否则应在外层where子句中用一个in限定符select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复 select stocknumber ,\select stockname , \--------- group by 将表按行分组,指定列中有相同的值 having count(*) = 2 --------- having选定指定的组select *from table1, table2where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示 table1.id =* table2.id -------- 右外部连接select stockname from table1union [all] ----- union合并查询结果集,all-保留重复行 select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value (\value (select Stockname , Stocknumber from Stock_table2)---value为select 语句***update***update table_name set Stockname = \Stockname = default Stockname = nullStocknumber = Stockname + 4***delete***delete from table_name where Stockid = 3truncate table_name ----------- 删除表中所有行,仍保持表的完整性 drop table table_name --------------- 完全删除表***alter table*** --- 修改数据库表结构alter table database.owner.table_name add column_name char(2) null ..... sp_help table_name ---- 显示表已有特征create table table_name (name char(20), age smallint, lname varchar(30)) insert into table_name select ......... ----- 实现删除列的方法(创建新表)alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束***function(/*常用函数*/)***----统计函数---- AVG --求平均值 COUNT --统计数目 MAX --求最大值 MIN --求最小值 SUM --求和--AVG use panguselect avg(e_wage) as dept_avgWage from employee group by dept_id--MAX--求工资最高的员工姓名 use panguselect e_name from employee where e_wage = (select max(e_wage) from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/SIN(float_expression) --返回以弧度表示的角的正弦 COS(float_expression) --返回以弧度表示的角的余弦 TAN(float_expression) --返回以弧度表示的角的正切COT(float_expression) --返回以弧度表示的角的余切 /***反三角函数***/ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)--把弧度转换为角度返回与表达式相同的数据类型可为 --INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为 --INTEGER/MONEY/REAL/FLOAT 类型 EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的自然对数值LOG10(float_expression)--返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平方根 /***取近似值函数***/CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型感谢您的阅读,祝您生活愉快。

SQL sever 2000各种查询语句和建表语句

SQL sever 2000各种查询语句和建表语句

SQL sever 2000各种查询语句和建表语句CREATE TABLE Company(CompanyID CHAR(3) NOT NULLCONSTRAINT PK_CompanyPRIMARY KEY,CompanyName NVARCHAR(10) NOT NULL,CompanyAddress NVARCHAR(50) NULL)CREATE TABLE Worker(WorkerID CHAR(5) NOT NULLCONSTRAINT PK_WorkerPRIMARY KEY,WorkerName NVARCHAR(5) NOT NULL,WorkerSex NCHAR(1) NOT NULLCONSTRAINT CK_Worker_WorkerSexCHECK (WorkerSex IN ('男', '女')),WorkerAge TINYINT NULL,WorkerJob NVARCHAR(10) NULL,Salary INT NULL,CompanyID CHAR(3) NULLCONSTRAINT FK_Worker_CompanyFOREIGN KEY REFERENCES Company(CompanyID))CREATE TABLE Project(ProjectID CHAR(3) NOT NULLCONSTRAINT PK_ProjectPRIMARY KEY,ProjectName NVARCHAR(20) NOT NULL,ProjectPlace NVARCHAR(10) NULL)CREATE TABLE Enroll(WorkerID CHAR(5) NOT NULL,ProjectID CHAR(3) NOT NULL,Job NVARCHAR(10) NULL,MonthCount INT NULL,MonthSalary INT NULL,CONSTRAINT PK_EnrollPRIMARY KEY (WorkerID, ProjectID),CONSTRAINT FK_Enroll_WorkerFOREIGN KEY (WorkerID) REFERENCES Worker(WorkerID),CONSTRAINT FK_Enroll_ProjectFOREIGN KEY (ProjectID) REFERENCES Project(ProjectID))INSERT INTO Company (CompanyID, CompanyName, CompanyAddress)VALUES ('A01', '北京公司', '北京海淀区')INSERT INTO Company (CompanyID, CompanyName, CompanyAddress)VALUES ('B24', '上海公司', '上海闵行区')INSERT INTO Company (CompanyID, CompanyName, CompanyAddress)VALUES ('C13', '福建公司', '福建福州鼓楼区')INSERT INTO Company (CompanyID, CompanyName, CompanyAddress)VALUES ('D00', '台湾%公司', '台北县台北市')INSERT INTO Worker (WorkerID, WorkerName, WorkerSex, WorkerAge, WorkerJob, Salary, CompanyID)VALUES ('A0101', '黄伟强', '男', 33, '工程师', 2100, 'A01')INSERT INTO Worker (WorkerID, WorkerName, WorkerSex, WorkerAge, WorkerJob, Salary, CompanyID)VALUES ('A0102', '陈至', '男', 36, '高级工程师', 4300, 'A01')INSERT INTO Worker (WorkerID, WorkerName, WorkerSex, WorkerAge, WorkerJob, Salary, CompanyID)VALUES ('B2424', '林发清', '女', 43, '高级工程师', 5000, 'B24')INSERT INTO Worker (WorkerID, WorkerName, WorkerSex, WorkerAge, WorkerJob, Salary, CompanyID)VALUES ('C1313', '陈华仁', '男', 35, NULL, 2500, 'C13')INSERT INTO Worker (WorkerID, WorkerName, WorkerSex, WorkerAge, WorkerJob, Salary, CompanyID)VALUES ('C1315', '傅星', '女', 23, '助理工程师', 2000, 'C13')INSERT INTO Worker (WorkerID, WorkerName, WorkerSex, WorkerAge, WorkerJob, Salary, CompanyID)VALUES ('X0001', '赵苑言', '女', NULL, NULL, 3000, NULL)INSERT INTO Project (ProjectID, ProjectName, ProjectPlace)VALUES ('101', '国道', '四川成都')INSERT INTO Project (ProjectID, ProjectName, ProjectPlace)VALUES ('202', '高速公路', NULL)INSERT INTO Project (ProjectID, ProjectName, ProjectPlace)VALUES ('303', '大桥', '天津南开区')INSERT INTO Enroll (WorkerID, ProjectID, Job, MonthCount, MonthSalary) VALUES ('A0101', '101', '项目经理', 18, 1000)INSERT INTO Enroll (WorkerID, ProjectID, Job, MonthCount, MonthSalary) VALUES ('A0101', '202', NULL, 12, 800)INSERT INTO Enroll (WorkerID, ProjectID, Job, MonthCount, MonthSalary) VALUES ('A0102', '101', NULL, 23, 800)INSERT INTO Enroll (WorkerID, ProjectID, Job, MonthCount, MonthSalary) VALUES ('A0102', '202', NULL, 17, 650)INSERT INTO Enroll (WorkerID, ProjectID, Job, MonthCount, MonthSalary) VALUES ('C1313', '303', '施工员', 14, 800)INSERT INTO Enroll (WorkerID, ProjectID, Job, MonthCount, MonthSalary) VALUES ('C1315', '202', '施工员', 15, 900)INSERT INTO Enroll (WorkerID, ProjectID, Job, MonthCount, MonthSalary) VALUES ('X0001', '101', '监理', 20, 1000)-- 1.SELECT * FROM Worker-- 2.SELECT WorkerName AS 姓名, Salary FROM Worker-- 3SELECT WorkerID, Salary/22.5 FROM WorkerSELECT WorkerID, Convert(Int, Salary/22.5) FROM WorkerSELECT WorkerID, CAST(Salary/22.5 AS INT) FROM WorkerSELECT WorkerID, Salary/22.5 AS DaySalary FROM WorkerSELECT WorkerID AS 员工号, Salary/22.5 AS 日工资FROM Worker SELECT WorkerID 员工号, Salary/22.5 日工资FROM WorkerSELECT 员工号=WorkerID, 日工资=Salary/22.5 FROM WorkerSELECT [INT 员"工"号]=WorkerID, Salary/22.5 "日[工]资"FROM Worker-- 4.Select * From EnrollWhere MonthCount > 15-- 5.Select *From CompanyWhere 'A01' = CompanyID-- 6Select ProjectNameFrom ProjectWhere ProjectPlace = '四川'--7Select *From WorkerWhere WorkerName LIKE '陈%'--8Select *From WorkerWhere WorkerName LIKE '%言'--9Select *From WorkerWhere WorkerName LIKE '张%言'--10Select *From CompanyWhere CompanyName LIKE '%司%'Select *From CompanyWhere CompanyName LIKE '%%%'Select *From WorkerWhere WorkerID LIKE '_01_2'Select *From WorkerWhere WorkerName LIKE '陈__'--11Select *From WorkerWhere WorkerName LIKE '[傅赵]%' --12Select *From WorkerWhere WorkerName LIKE '[^傅赵]%'Select *From WorkerWhere WorkerName NOT LIKE '[傅赵]%'Select *From WorkerWhere NOT WorkerName LIKE '[傅赵]%'--13Select *From CompanyWhere CompanyAddress IN ('北京海淀区', '上海闵行区')--13.5Select *From CompanyWhere CompanyName LIKE '%+%%' ESCAPE '+'--14Select *From WorkerWhere WorkerAge Between 20 And 30--15Select *From WorkerWhere WorkerAge NOT Between 20 And 30Select *From WorkerWhere NOT WorkerAge Between 20 And 30--17Select *From WorkerWhere WorkerAge IS NULLSelect *From WorkerWhere WorkerAge IS NOT NULL--19Select *From WorkerOrder By SalarySelect *From WorkerOrder By Salary ASC--20Select *From WorkerOrder By Salary DESC--21Select *From WorkerOrder By CompanyID, Salary DESC--22Select TOP 1 *From WorkerOrder By WorkerAge Asc--23Select Distinct CompanyIDFrom Worker/***************************** 回顾** 索引的概念* 简单查询* 选择全部、部分字段* 计算字段* 字段重命名* 选择查询WHERE* 基本的比较条件> < = >= <= <> !> !< !=* 多个条件的逻辑连接NOT AND OR* 字符串的LIKE匹配% _ [] [^] [acegh] [A-Z] * IN和BETWEEN的范围比较* 空值的判断IS [NOT] NULL* 结果排序* ORDER BY* TOP n [PERCENT] (SQL Server)* LIMIT (mysql)* ROWID (Oracle)****************************/-- ANSI: yyyy-MM-dd HH:mm:ss.tttSELECT MONTH('2009-9-27 10:24:36.234')/***************************** 本次计划** 分组查询* 聚合函数* GROUP BY 子句* HAVING 子句* 混合使用** 连接查询* 等值连接* 不等值连接* 自连接****************************//*之前的查询,无论怎么过滤,都是针对原始数据的假如要查询统计数据,则需要使用聚合函数*/-- 例:查询工程师的平均年龄SELECT WorkerAgeFROM WorkerSELECT AVG(WorkerAge) AS AvgAgeFROM Worker-- 例:查询工程师的最大、最小年龄SELECT MAX(WorkerAge) AS MaxAge, MIN(WorkerAge) AS MinAge FROM Worker-- 例:查询在编号101的项目中工作的工程师人数SELECT COUNT(WorkerID) AS WorkerCountFROM EnrollWHERE ProjectID = '101'聚合函数对符合条件的记录的指定字段进行统计查询五个聚合函数:MIN、MAX、COUNT、SUM、AVERAGE注意各自的特点可以先用WHERE进行记录选择*/-- 例:求工程师年龄的个数,和工程师个数-- 以及性别的种类数SELECT COUNT(WorkerAge) AS AgeCount,COUNT(*) AS WorkerCount,COUNT(DISTINCT WorkerSex) AS SexCountFROM Worker/*注意观察:聚合函数对空值(NULL)的处理*/-- 例:查询各个项目所发放的总工资-- 思路,即将各工程师参加项目的月津贴乘以月份,再累加SELECT SUM(MonthSalary * MonthCount) AS TotalSalary FROM Enroll/*假如要对不同类型的数据分别进行统计,怎么进行?*/-- 例:计算每个工程师参加的项目数量SELECT WorkerID, COUNT(*) AS ProjectCountFROM EnrollGROUP BY WorkerID/*GROUP BY 子句首先将记录根据指定的字段进行分组然后对各个组分别计算汇总*/-- 例:查询每个项目参与的工程师数量,以及月工资总和SELECT ProjectID, COUNT(*) AS WorkerCount,SUM(MonthSalary) AS SalarySumFROM EnrollGROUP BY ProjectID/*特别的,分组查询时,在SELECT中出现的字段只能是以下两种分组字段聚合函数如:SELECT WorkerName FROM Worker GROUP BY CompanyID是非法的,为什么?*//*在进行聚合查询之前,可以用WHERE子句对记录进行选择那么假如需要对聚合后的结果进行选择,用什么办法?HAVING 子句:用于对分组后的结果进行筛选*/-- 例:查询公司人数超过2人的公司编号,以及平均工资SELECT CompanyID, AVG(Salary) AS AvgSalaryFROM WorkerGROUP BY CompanyIDHAVING COUNT(*) >= 2/*注意HAVING和WHERE的区别*//*以上各种查询可以混合使用*/-- 例:查出拥有高级员工(指工资超过3000的工程师)-- 超过2人的公司-- 并计算高级员工的人数、平均工资和最高工资/*当包含多个子句进行查询时,各子句被执行的顺序是:FROM --> WHERE --> GROUP BY -->HAVING -->SELECT --> ORDER --> TOP*//*连接查询连接查询就是对多个表进行连接,将多个表的数据结合在一起通常,连接的表都是有外键关系的表连接查询就是关系连接运算的实现连接运算是为了将设计时拆分的表组合起来*/-- 例:查询出每个工程师的信息,以及他工作的单位信息SELECT Worker.WorkerName, panyNameFROM Worker INNER JOINCompany ON panyID = panyID/*连接查询的主要工作在FROM子句中基本语法为:FROM <表1> <连接类型> JOIN <表2> ON <连接条件> 连接类型包括:内连接、外连接、交叉连接等下面叙述的主要针对内连接连接条件,往往是两个表之间的关联字段,一般是等值比较*/-- 例:查询包括工程师信息的参加工作情况/*对于连接查询而言,经过JOIN的两个表,构成了一个新表我们在之前所讲述的所有查询手段,都可以应用于这个新表*/-- 例:查询工资超过3000的工程师的姓名和公司名称、电话/*在连接查询中,字段可以用<表名>.<字段名>来引用尤其对于两边同名的字段,必须加表名进行限定对于重名的字段,往往需要用字段别名的方式在结果中加以区分名称不重复的字段,可以不限定,但是建议限定单表查询也可以在字段名前加表名进行限定,但是往往不需要*//*查询中为了简化书写,可以给表起别名FROM <表> [AS] <别名>哪怕是单表查询也可以加别名,但是没有太大意义别名往往用简单的字母A、B、C等,但往往用表名的简称*/-- 例:用表别名的方式重写上面的例子SELECT w.WorkerName, panyNameFROM Worker w INNER JOINCompany co ON panyID = panyID/*自然连接在数据库的设计中,关联的字段(外键)往往会采取和主键表相同的命名此时我们可以写成自然连接语法:FROM <外键表> NATURAL JOIN <主键表>不需要说明任何条件,自动找同名字段进行等值连接但是:SQL Server不提供本语法,以上语法在Oracle中提供通常我们用INNER JOIN替代*//*在实际应用中,参与连接的表可以不止两个,可以为多个多表连接,一般是分部进行的,以内连接为例,语法如下:FROM <表1> INNER JOIN <表2> ON <条件> INNER JOIN <表3> ON <条件> 我们可以理解为先连接前两个,形成一个新表,然后新表再连接第三个表*/-- 例:查询完整的参加工作情况,包括工程师、公司和工程项目信息/*多表连接时,我们可以用括号指定连接顺序对于内连接,因为满足交换律、结合律,因此都是等价的*/-- 例:查询在上海的公司中工资超过3000的工程师的人数、平均工资/***************************** 预习* 自连接* 外连接* 嵌套查询(子查询)****************************/-- 1.SELECT * FROM Worker-- 2.SELECT WorkerName AS 姓名, Salary FROM Worker-- 3SELECT WorkerID, Salary/22.5 FROM WorkerSELECT WorkerID, Convert(Int, Salary/22.5) FROM Worker SELECT WorkerID, CAST(Salary/22.5 AS INT) FROM WorkerSELECT WorkerID, Salary/22.5 AS DaySalary FROM WorkerSELECT WorkerID AS 员工号, Salary/22.5 AS 日工资FROM Worker SELECT WorkerID 员工号, Salary/22.5 日工资FROM WorkerSELECT 员工号=WorkerID, 日工资=Salary/22.5 FROM WorkerSELECT [INT 员"工"号]=WorkerID, Salary/22.5 "日[工]资"FROM Worker-- 4.Select * From EnrollWhere MonthCount > 15-- 5.Select *From CompanyWhere 'A01' = CompanyID-- 6Select ProjectNameFrom ProjectWhere ProjectPlace = '四川'--7Select *From WorkerWhere WorkerName LIKE '陈%'--8Select *From WorkerWhere WorkerName LIKE '%言'--9Select *From WorkerWhere WorkerName LIKE '张%言'--10Select *From CompanyWhere CompanyName LIKE '%司%'Select *From CompanyWhere CompanyName LIKE '%%%'Select *From WorkerWhere WorkerID LIKE '_01_2'Select *From WorkerWhere WorkerName LIKE '陈__'--11Select *From WorkerWhere WorkerName LIKE '[傅赵]%'--12Select *From WorkerWhere WorkerName LIKE '[^傅赵]%'Select *From WorkerWhere WorkerName NOT LIKE '[傅赵]%'Select *From WorkerWhere NOT WorkerName LIKE '[傅赵]%'--13Select *From CompanyWhere CompanyAddress IN ('北京海淀区', '上海闵行区')--13.5Select *From CompanyWhere CompanyName LIKE '%+%%' ESCAPE '+'--14Select *From WorkerWhere WorkerAge Between 20 And 30--15Select *From WorkerWhere WorkerAge NOT Between 20 And 30Select *From WorkerWhere NOT WorkerAge Between 20 And 30--17Select *From WorkerWhere WorkerAge IS NULLSelect *From WorkerWhere WorkerAge IS NOT NULL--19Select *From WorkerOrder By SalarySelect *From WorkerOrder By Salary ASC--20Select *From WorkerOrder By Salary DESC--21Select *From WorkerOrder By CompanyID, Salary DESC--22Select TOP 1 *From WorkerOrder By WorkerAge Asc--23Select Distinct CompanyIDFrom WorkerCreate Table City(CityID Char(4) Primary Key,CityName nvarchar(10),UpCityID Char(4))INSERT INTO City(CityID, CityName, UpCityID)VALUES ('0590', '福建', NULL)INSERT INTO City(CityID, CityName, UpCityID)VALUES ('0591', '福州', '0590')INSERT INTO City(CityID, CityName, UpCityID)VALUES ('0592', '厦门', '0590')SELECT * FROM CitySELECT *FROM City c1 INNER JOIN City c2 ON c1.UpCityID = c2.CityID/************************************************************ * 回顾** ** 分组查询** 聚合函数** GROUP BY 子句** HAVING 子句** 混合使用** ** 连接查询** 等值连接*************************************************************//*聚合函数:SUM([ALL|DISTINCT] <字段>)AVG([ALL|DISTINCT] <字段>)COUNT(* | [ALL|DISTINCT] <字段>)MIN(<字段>)MAX(<字段>)注意:聚合函数对空值(NULL)的处理*//*GROUP BY 子句首先将记录根据指定的字段进行分组然后对各个组分别计算汇总*//*特别的,分组查询时,在SELECT中出现的字段只能是以下两种分组字段聚合函数*//*HAVING 子句:用于对分组后的结果进行筛选注意HAVING和WHERE的区别*//*以上各种查询可以混合使用*//*当包含多个子句进行查询时,各子句被执行的顺序是:FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER -> TOP *//*连接查询连接查询就是对多个表进行连接,将多个表的数据结合在一起连接查询的主要工作在FROM子句中基本语法为:FROM <表1> <连接类型> JOIN <表2> ON <连接条件> 连接类型包括:内连接、外连接、交叉连接等对于连接查询而言,经过JOIN的两个表,构成了一个新表之前所讲述的所有查询手段,都可以应用于这个新表*//*在连接查询中,字段可以用<表名>.<字段名>来引用尤其对于两边同名的字段,必须加表名进行限定对于重名的字段,往往需要用字段别名的方式在结果中加以区分名称不重复的字段,可以不限定,但是建议限定单表查询也可以在字段名前加表名进行限定,但是往往不需要*//*查询中为了简化书写,可以给表起别名FROM <表> [AS] <别名>哪怕是单表查询也可以加别名*//************************************************************* 本次课** ** 连接查询** 自然连接** 多表连接** 连接分组查询** 不等值连接** 自连接** 外连接、交叉连接** 多表外连接** ** 嵌套查询(子查询)** 概念** IN谓词** 相关子查询与不相关子查询*************************************************************//*自然连接在数据库的设计中,关联的字段(外键)往往会采取和主键表相同的命名此时我们可以写成自然连接语法:FROM <外键表> NATURAL JOIN <主键表>不需要说明任何条件,自动找同名字段进行等值连接但是:SQL Server不提供本语法,以上语法在Oracle中提供通常我们用INNER JOIN替代*//*在实际应用中,参与连接的表可以不止两个,可以为多个多表连接,一般是分部进行的,以内连接为例,语法如下:FROM <表1> INNER JOIN <表2> ON <条件> INNER JOIN <表3> ON <条件> 我们可以理解为先连接前两个,形成一个新表,然后新表再连接第三个表*/-- 例:查询完整的参加工作情况,包括工程师、公司和工程项目信息SELECT *FROM Worker wINNER JOIN Company c ON panyID = panyIDINNER JOIN Enroll e ON w.WorkerID = e.WorkerIDINNER JOIN Project p ON e.ProjectID = p.ProjectID-- 例:查询各个公司参与的项目情况,列出公司名称和项目名称SELECT panyName, p.ProjectNameFROM Worker wINNER JOIN Company c ON panyID = panyIDINNER JOIN Enroll e ON w.WorkerID = e.WorkerIDINNER JOIN Project p ON e.ProjectID = p.ProjectID/*多表连接时,有时某些表只是起到中间过度作用,在最终结果中不出现*//*多表连接时,我们可以用括号指定连接顺序对于内连接,因为满足交换律、结合律,因此都是等价的*/SELECT panyName, p.ProjectNameFROM ((Worker wINNER JOIN Company c ON panyID = panyID)INNER JOIN Enroll e ON w.WorkerID = e.WorkerID)INNER JOIN Project p ON e.ProjectID = p.ProjectIDSELECT panyName, p.ProjectNameFROM (Worker w INNER JOIN Company c ON panyID = panyID) INNER JOIN(Enroll e INNER JOIN Project p ON e.ProjectID = p.ProjectID)ON w.WorkerID = e.WorkerID/*连接查询可以和分组等查询相结合*/-- 例:查询在上海的公司中工资超过3000的工程师的人数、平均工资SELECT COUNT(*) AS WorkerCount, AVG(Salary) AS AvgSalaryFROM Worker wINNER JOIN Company c ON panyID = panyIDWHERE panyAddress LIKE '%上海%'AND w.Salary >= 2000-- 例:查询各公司名称,以及各公司人数、平均工资SELECT *FROM Worker wINNER JOIN Company c ON panyID = panyIDSELECT panyName,COUNT(*) AS WorkerCount, AVG(w.Salary) AS AvgSalaryFROM Worker wINNER JOIN Company c ON panyID = panyIDGROUP BY panyNameSELECT panyName,COUNT(*) AS WorkerCount, AVG(w.Salary) AS AvgSalaryFROM Worker wINNER JOIN Company c ON panyID = panyIDGROUP BY panyIDSELECT panyName,COUNT(*) AS WorkerCount, AVG(w.Salary) AS AvgSalaryFROM Worker wINNER JOIN Company c ON panyID = panyIDGROUP BY panyID, panyNameSELECT MIN(panyName) AS CompanyName,COUNT(*) AS WorkerCount, AVG(w.Salary) AS AvgSalaryFROM Worker wINNER JOIN Company c ON panyID = panyIDGROUP BY panyID/*注意:本例中的公司名称问题!!*/-- 例:计算每位工程师在工程项目中每个月能获得的总收入-- 不包括其基本工资/*连接的另外一种写法:将条件写在WHERE中这种做法基本上是等价的,但是不建议这样做,因为容易将选择条件和连接条件混在一起,不利于阅读*/-- 例:将上面几个查询用WHERE改写SELECT panyName, p.ProjectNameFROM Worker w, Company c, Enroll e, Project pWHERE panyID = panyID ANDw.WorkerID = e.WorkerID ANDe.ProjectID = p.ProjectIDSELECT COUNT(*) AS WorkerCount, AVG(Salary) AS AvgSalaryFROM Worker w, Company cWHERE panyAddress LIKE '%上海%' ANDw.Salary >= 2000 ANDpanyID = panyID/*在连接中,连接条件为不等号时,称为不等值连接不等值连接比较少用*//*自连接当参加连接的两个表是同一个表的时候,称为自连接自连接往往用于表中的记录自己和自己有关联的时候在自连接中,至少一个表要用别名表示*/-- 例:给工程师表添加一个“主管编号”字段,并分配主管工程师-- 然后从查询每个人的情况以及其主管姓名/*特别的,连接条件也可能和实体内在的联系(外键等)无关可能只是和其他附属属性有关*/-- 例:查询出在同一个公司,但是工资比自己高的人的姓名和工资/*外连接:内连接的要求是连接的双方必须都存在当一方在对方找不到符合条件的数据时,该记录会被忽略保留这种不匹配记录的方法,就是使用外连接外连接分为左外连接、右外连接、全外连接等三种FROM <表1> LEFT | RIGHT | FULL [OUTER] JOIN <表2> ON <连接条件> */-- 例:查询员工姓名及其所在的公司名称-- 包括自由员工和无人公司SELECT *FROM Worker wLEFT OUTER JOIN Company c ON panyID = panyIDSELECT *FROM Worker wRIGHT OUTER JOIN Company c ON panyID = panyIDSELECT *FROM Worker wFULL OUTER JOIN Company c ON panyID = panyID/*不附加任何条件,直接进行笛卡尔积的连接,叫做交叉连接语法:FROM <表1> CROSS JOIN <表2>或:FROM <表1>, <表2>纯粹的交叉连接非常少用,往往会附加一些其他条件*/-- 例:列举所有可能的工程师参加项目的组合SELECT *FROM Worker CROSS JOIN ProjectSELECT *FROM Worker , Project/*多表外连接:涉及多个表的外连接和普通多表连接基本相同但是要注意连接顺序,否则可能发生信息丢失*/-- 例:计算每位工程师在工程项目中每个月能获得的总收入-- 不包括其基本工资,未参加项目的工程师收入填0/*CASE表达式的使用*//***********************************************************//*嵌套查询即在一个查询的内部某个部位,有另外一个查询出现外部的查询语句称为外查询,里面的查询语句称为子查询*//*IN子查询*/-- 例:查询有人的公司名称和地址/*思路:本题可以分为两个步骤完成。

SQL_Server2000操作示意图

SQL_Server2000操作示意图


在“外键表”列表框中选择表学生必修成绩,在下面 的列列表框中选择学号列作为外键列。

外键还可以通过关系图来创建。展开学生成绩数据库 ,点击“关系图”节点,在右侧的面板中右击鼠标, 在弹出的菜单点击“新建数据库关系图”。

这时可以使用“创建数据库关系图向导”来创建关系 图。首先出现的欢迎创建显示了向导的功能,阅读后 点击下一步按钮。
在设计面板的空白处右击鼠标,在弹出对话框中选择 “属性”,查看表的属性。

在出现的表属性对话框中,选择“索引/键”标签页 。可以看到在“选定的索引”列表中的项目为PK_学 生信息,这表明已经成功创建了一个主键。
创建外键

启动企业管理器,展开学生成绩数据库,在学生信息 表上右击鼠标,在弹出的菜单中点击“设计表”,进 入表设计的窗口。

在设计面板的空白处右击鼠标,在弹出的菜单中选择 “关系”。

可以看到如下的对话框,由于现在数据库中没有创建 人和的关系,所以窗口中的大部分项目都是以灰色显 示的的关系取了一个 以FK_开始的名称,显示在“关系名”文本框中。

在“主键表”列表框中选择一个现有的表,此处选择 表“学生信息”,在下面的列列表框中选择“学号” 列作为主键列。

在“约束表达式”框中,为CHECK约束键入SQ L表达式,如将创建日期列的数据限制在大于等于当 天日期之间。

关闭设计表学生信息的设计器,系统将提示是否保存 对表学生信息的更改,点击“是”按钮,保存所创建 的CHECK约束。

在表学生信息属性对话框中,选择“索引/键”标签 页。

点击“新建”按钮,系统分配的名称出现在“索引名 ”文本框中。

在“列名”下展开列的列表,选择要约束附加到的列 姓名。若要约束附加到多个列,在后续行中选择其他 的列。选择“创建UNIQUE”复选框。选择“约 束”选项。

SQL_SERVER_2000_alter_命令的使用(1)

SQL_SERVER_2000_alter_命令的使用(1)

SQL SERVER 2000 alter 命令的使用注意COLUMN 关键字是多余的,可以省略。

如果用ADD COLUMN 增加一个字段,那么所有表中现有行都初始化为该字段的缺省值(如果没有声明DEFAULT 子句,那么就是NULL)。

用一个非空缺省增加一个字段或者是改变一个字段的现有类型会要求整个表的重写。

对于大表来说,这个操作可能会花很长时间;并且它还临时需要两倍的磁盘空间。

增加一个CHECK 或者NOT NULL 约束要求扫描该表以保证现有的行复合约束要求。

提供在一个ALTER TABLE 里面声明多个修改的主要原因是原先需要的对表的多次扫描和重写可以组合成一个回合。

DROP COLUMN 命令并不是物理上把字段删除,而只是简单地把它标记为SQL 操作中不可见的。

随后对该表的插入和更新将在该字段存储一个NULL。

因此,删除一个字段是很快的,但是它不会立即缩减你的表在磁盘上的大小,因为被删除了的字段占据的空间还没有回收。

这些空间将随着现有的行的更新而得到回收。

ALTER TYPE 要求重写整个表的特性有时候是一个优点,因为重写的过程消除了任何表中的没用的空间。

比如,要想立刻回收被一个已经删除的字段占据的空间,最快的方法是ALTER TABLE table ALTER anycol TYPE anytype;这里anycol 是任何在表中还存在的字段,而anytype 是和该字段的原类型一样的类型。

这样的结果是在表上没有任何可见的语意的变化,但是这个命令强迫重写,这样就删除了不再使用的数据。

ALTER TYPE 的USING 选项实际上可以声明涉及该行旧值的任何表达式;也就是说,它可以引用除了正在被转换的字段之外其它的字段。

这样,我们就可以用ALTER TYPE 语法做非常普遍性的转换。

因为这个灵活性,USING 表达式并没有施用于该字段的缺省值(如果有的话);结果可能不是缺省表达式要求的常量表达式。

SQL SERVER 2000数据查询


第4章 数据查询
5.使用查询列表 如果列值的取值范围不是一个连续的区间,而是一些 离散的值,就应使用SQL Server提供的另一个关键字IN。 其语法形式为: 等价于: column_name [ NOT ] IN (value1,value2,…) SELECT SaleID,SaleName,Sex,Birthday,HireDate,Address 例4-17 查询salers表中saleID为s01,s05,s07的销售人员 FROM salers WHERE 的信息。 SaleID ='S01' OR SaleID='S05' OR SaleID='S07' SELECT SaleID,SaleName,Sex,Birthday,HireDate,Address FROM salers WHERE SaleID IN ('S01','S05','S07')
第4章 数据查询
例4-3 从Products表中检索出产品ID(ProductID)、产品名 称 ( ProductName ) 、 产 品 单 价 ( Price ) 、 产 品 库 存 量 (Stocks)及产品的总价值,查询如图4-2所示。 SELECT ProductID,ProductName,Price,Stocks,Price*Stocks FROM Products 例4-4 从pubs数据库的authors表查询作者的姓和名,以及作 者所居住的州和城市的名字,查询结果如图4-3所示。 USE pubs GO SELECT au_lname+'.'+au_fname,city+','+state FROM authors

SQL server2000的使用 批处理和流程控制语句


例如:按要求编写程序。先定义一个INT类型 例如:按要求编写程序。先定义一个INT类型 @num变量,CHAR类型@cnum变量,然 @num变量,CHAR类型@cnum变量,然 后分别赋值2004,最后使用PRINT语句将 后分别赋值2004,最后使用PRINT语句将 这两个变量的值输出。 DECLARE @num int,@cnum char(10) SET @NUM=2004 SET @CNUM=‘2004’ PRINT @NUM PRINT @CNUM
局部变量的声明 DECLARE <@变量名1><数据类型>[,<@变 <@变量名1><数据类型>[,<@变 量名2><数据类型>……] 量名2><数据类型>……] 例如:DECLARE 例如:DECLARE @x int,@y int 局部变量的显示 SELECT <@变量名表> <@变量名表> PRINT <@变量名> <@变量名> 例如:SELECT 例如:SELECT @X,@Y 在此,若使用SELECT显示,则返回结果在 在此,若使用SELECT显示,则返回结果在 “网格”中;若使用PRINT显示,则返回 “网格”中;若使用PRINT显示,则返回 结果在“消息”中。
批处理和流程控制语句
批处理
所谓批处理是指从客户机传递到服务器上的一组完 整的数据和SQL指令。在一个批处理中,可以只 整的数据和SQL指令。在一个批处理中,可以只 包含一条SQL指令,也可以包含多条指令。批处 包含一条SQL指令,也可以包含多条指令。批处 理的所有语句被当作一个整体 ,而被成批地分析、 编译和执行,若这一批处理中存在一个语法错误, 则所有的语句都无法通过编译。 所有的批处理指令以GO作为结束的标志,当编 所有的批处理指令以GO作为结束的标志,当编 译器读到GO时,它就会把GO前面的所有指令当 译器读到GO时,它就会把GO前面的所有指令当 作一个批处理,并包装成一个数据包发送给服务 器。

SQLServer2000编程之触发器


李四
1000 0002 20001
检查deleted和inserted表中的数据,确定是 否需要回滚或执行其他操作
UPDATE触发器示例
问题:
跟踪用户的交易,交易金额超过20000元,则取消交易,并 给出错误提示。
分析:
在bank表上创建UPDATE触发器 修改前的数据可以从deleted表中获取 修改后的数据可以从inserted表中获取
inserted 和deleted 表
修改操作
inserted表 deleted表
增加 (INSERT)记 录
存放新增的记 录
------
删除 (DELETE)记 录
-----
存放被删除的 记录
修 (U改PDATinEs)e记rted表存 记和放录d更ele新te后d表的存放存记的放录信更息 新前的
从deleted表中 获取被删除的
交易记录
IF NOT EXISTS(SELECT * FROM sysobjects
WHERE name='backupTable')
SELECT * INTO backupTable FROM deleted
ELSE
INSERT INTO backupTable
SELECT * FROM deleted
帐户信息表bank
张三开户1000元, 李四开户1元
张三取钱200
问题:
交易信息表transInfo
没有自动修改张三的余额
最优的解决方案就是采用触发器:
它是一种特殊的存储过程
也具备事务的功能
它能在多表之间执行特殊的业务规则
1.什么是触发器
赵二退休 删除
员工表

SQLServer2000使用指南

1. SQL Server 2000使用指南1.1 SQL Server 2000简介SQL Server是微软公司开发的企业级关系型数据库管理系统,其目前的最高级版本是SQL S erver 2000。

该数据库管理系统通过对高端硬件平台以及最新网络和存储技术的支持,为最大的Web站点和企业级的应用提供了可扩展性和高可靠性。

SQL Server 2000可以将数据库连接到Internet,并通过Web浏览器显示数据操作,因此它是一个真正的客户机/服务器结构的管理系统。

它具有完全的Web功能,支持扩展标记语言(XML)并且拥有一个新的、集成的数据挖掘引擎,使用户可以快速创建下一代的可扩展电子商务和数据仓库解决方案。

SQL Server 2000还可与Microsoft的其他产品以及第三方产品方便地实现无缝操作,具有良好的兼容性,因此它深得用户青睐,成为数据库产品中的杰出代表。

1.基于图形的管理工具作为一个SQL S erver的初学者,图形化管理工具使得在SQL S erver中管理服务器变得非常容易。

主要图形用户接口工具是SQL Enterprise Manager。

这个工具利用了微软管理控制台(MMC)的功能。

MMC是微软发布的用来从一个位置管理所有运行于Windows NT的服务的工具。

它可利用单个应用程序管理Windows NT、Internet Information Server 、SQL Server和其他产品。

2.集中式的管理不管SQL S erver服务器相距多远,都可以在中心位置使用SQL E nterprise Manager 来管理服务器。

例如,有十台服务器,相距数百里,但是能使用一台计算机来管理所有的服务器。

这将大大降低维护多台服务器的费用,因为这只需一名管理员来管理所有服务器。

3.支持多客户应用程序SQL Server提供了一组标准应用程序,可以用它们来管理服务器和修改数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档