SQL Server2000常用语句

合集下载

SQL2000数据库常用语句

SQL2000数据库常用语句
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 3
23、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
三、技巧
1、1=1,1=2的使用,在SQL语句组合时用的较多
“where 1=1” 是表示选择全部 “where 1=2”全部不选,
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

sql 2000 insert into语句

sql 2000 insert into语句

sql 2000 insert into语句在SQL Server2000中,INSERT INTO语句是一种将数据插入到表格中的常用方法。

以下是一个基本的INSERT INTO语句的语法:```INSERT INTO表名(列1,列2,列3,...)VALUES(值1,值2,值3,...);```这里,表名表示要插入数据的表格,列名和值表示要插入的数据。

例如,有一个名为“students”的表格,包含以下列:id,name,age,gender。

可以使用以下INSERT INTO语句插入一条新记录:```INSERT INTO students(id,name,age,gender)VALUES(1,'张三',20,'男');```此外,INSERT INTO语句还可以一次插入多行数据,只需在VALUES子句中用逗号分隔各行数据即可。

例如:```INSERT INTO students(id,name,age,gender)VALUES(1,'张三',20,'男'),(2,'李四',22,'女'),(3,'王五',21,'男');```以上语句将向students表格插入三条新记录。

当表格中已存在数据时,INSERT INTO语句会自动为新的数据分配一个唯一的标识符。

如果需要指定自增主键的值,可以使用SET IDENTITY_INSERT关键字。

例如:```SET IDENTITY_INSERT students ON;INSERT INTO students(id,name,age,gender)VALUES(1,'张三',20,'男');SET IDENTITY_INSERT students OFF;```在此示例中,首先开启IDENTITY_INSERT,然后插入一条新记录,最后关闭IDENTITY_INSERT。

SQL Server 2000中的SQL语言简介

SQL Server 2000中的SQL语言简介

SQL Server 2000中的SQL语言简介(一)数据操纵语言(DML)数据操纵语言是指用来查询、添加、修改和删除数据库中数据的语句,这些语句包括SELECT、INSERT、UPDATE、DELETE等。

在默认情况下,只有sysadmin、dbcreator、db_owner 或db_datawriter等角色的成员才有权利执行数据操纵语言。

1、SELECT语句SELECT语句的语法形式如下:SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ][ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BYorder_expression [ ASC | DESC ] ][COMPUTE clause][FOR BROWSE]几种常用语句的用法:SELECT子句用于指定所选择的要查询的特定表中的列,它可以是星号(*)、表达式、列表、变量等。

INTO子句用于指定所要生成的新表的名称。

FROM子句用于指定要查询的表或者视图,最多可以指定16个表或者视图,用逗号相互隔开。

WHERE子句用来限定查询的范围和条件。

GROUP BY子句是分组查询子句。

HAVING子句用于指定分组子句的条件。

GROUP BY子句、HAVING子句和集合函数一起可以实现对每个组生成一行和一个汇总值。

ORDER BY子句可以根据一个列或者多个列来排序查询结果,在该子句中,既可以使用列名,也可以使用相对列号。

ASC表示升序排列,DESC表示降序排列。

COMPUTE子句使用集合函数在查询的结果集中生成汇总行。

COMPUTE BY子句用于增加各列汇总行。

SELECT子句的语法形式如下所示:SELECT [ ALL | DISTINCT ][ TOP n [ PERCENT ] [ WITH TIES ] ]< select_list >< select_list > ::={* | { table_name | view_name | table_alias }.*| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }[ [ AS ] column_alias ]| column_alias = expression}[ ,...n ]显示居住在加利福尼亚州且姓名不为McBadden 的作者列。

SQL SERVER 2000数据查询

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 server基本语句大全及用法

sql server基本语句大全及用法

一、概述SQL Server是微软公司的一种关系型数据库管理系统,广泛应用于企业级数据库系统中。

SQL Server中包含了许多基本的SQL语句和用法,本文将对SQL Server中常用的基本语句进行详细介绍,以帮助读者更好的理解并应用SQL Server。

二、连接数据库1. 连接数据库的语句在SQL Server中,我们可以使用以下语句连接数据库:```USE database_name;```这条语句会选择并进入指定名称的数据库,之后所有的操作都会在这个数据库中进行。

2. 与数据库建立连接另外,我们还可以使用以下语句与数据库建立连接:```CONNECT database_name;```这条语句会建立一个与指定数据库的连接,可以在连接成功后进行数据操作。

三、查询数据1. 查询表中所有数据要查询表中所有的数据,可以使用以下语句:```SELECT * FROM table_name;```其中,`SELECT *`表示查询所有字段,`FROM table_name`表示从指定的表中查询数据。

2. 查询特定字段的数据如果只需要查询表中的特定字段数据,可以使用以下语句:```SELECT field1, field2 FROM table_name;这条语句将只查询指定字段的数据,可以减少数据传输和提高查询效率。

3. 条件查询在SQL Server中,可以使用以下语句进行条件查询:```SELECT * FROM table_name WHERE condition;```其中,`WHERE condition`是条件表达式,只有满足条件的数据才会被查询出来。

四、更新数据1. 更新单行数据要更新表中的单行数据,可以使用以下语句:```UPDATE table_name SET field1 = value1, field2 = value2 WHERE condition;这条语句会根据条件表达式更新表中符合条件的数据。

sql server常用语句

sql server常用语句

sql server常用语句1. select 语句:select 语句用于从数据库表中检索数据。

3. update 语句:update 语句用于更新现有记录。

8. alter table 语句:alter table 语句用于更改表结构。

10. primary key 语句:primary key 语句用于指定表中独特的列,用于标识表中的每一行。

12. join 语句:join 语句用于在不同表之间建立关系,从而把多个表中的记录组合在一起。

13. index 语句:index 语句用于添加索引,从而提高检索性能。

14. view 语句:view 语句用于创建虚拟表,只存储查询生成的结果。

15. stored procedure 语句:stored procedure 语句用于定义执行特定任务的已存储的语句。

16. trigger 语句:trigger 语句用于在指定的数据库事件发生时执行特定的语句。

17. transaction 语句:transaction 语句用于控制数据库操作的原子性,从而可以确保数据的一致性。

18. grant 语句:grant 语句用于授予用户对数据库对象的访问权限。

20. group by 语句:group by 语句用于对检索结果进行分组。

21. having 语句:having 语句用于对筛选后的结果进行过滤。

22. union 语句:union 语句用于合并多个查询的结果。

23. intersect 语句:intersect 语句用于获取两个查询的交集。

25. backup 语句:backup 语句用于备份数据库中的数据。

SQL server2000语法

SQL server2000语法

创建/修改库create database xkon primary(name=x1_data,filename='d:\xk\x1_data.mdf', size=10mb,maxsize=50mb, filegrowth=10%)log on(name=x1_log,filename='d:\x1_log.ldf',size=1mb,filegrowth=10%)exec sp_helpdb xkalter database xkadd filegroup fg1alter database xkadd file(name=x1_ndata,filename='d:\xk\x1_ndata.ndf', size=1mb,filegrowth=10%)to filegroup fg1alter database xkmodify file(name=x1_ndata,size=10mb,filegrowth=10%)alter database xkmodify file(name=x1_log,size=10)exec sp_helpdb xk删除库use xkalter database xkremove file x1_ndataalter database xkremove filegroup fg1alter database xkmodify name=lydrop database ly创建/删除表use xkcreate table student(stuno char(4) not null primary key, stuname varchar(10)not null,age tinyint,sex char(4),address varchar(20))create table course(couno char(4) not null primary key, couname varchar(20),kind varchar(20),credit tinyint,teacher varchar(10),coutime datetime)create table grade(stuno char(4) not null,couno char(4) not null,stugrade tinyint,credit tinyint)exec sp_help studentexec sp_help courseexec sp_help gradedrop table gradeinsert into studentvalues('1004','特兰克思',18,'男','南京市鼓楼区')insert into coursevalues('c004','三分归元气','拳、掌、腿、气',5,'雄霸','16:00')insert into gradevalues('1004','c004',90,10)exec sp_spaceused student /*查询表中记录数*/修改表use xkalter table studentadd phone varchar(15)alter table studentdrop column mingzualter table studentalter column sex varchar(2)exec sp_rename stu,studentexec sp_spaceused studentinsert courseselect * from newcourse /*将表newcourse内容插入表course中*/select couno,couname,teacher,coutime into newcourse from course where kind='气' /*将表course 内容插入表中newcourse*/update student set stuname='孙悟空' where stuno='1003'update grade set stuno=student.stuno from grade join student on grade.stuno=student.stunodelete from grade where credit=10insert gradevalues('1001','c001',90,10)约束use xkalter table gradeadd constraint pk_grade primary key(stuno,couno)alter table studentadd constraint uq_address unique nonclustered(address)/*唯一约束*/ sp_helpindex studentalter table studentdrop uq_addressalter table student /*默认约束*/add constraint df_stunamedefault('报名') for stunamealter table studentadd constraint ck_agecheck (age>=18 and age<=24)selectuse xkselect top 3 * from student select top 3 percent * from studentselect distinct * from student /*消除重复*/select distinct top 3 * from studentselect stuno '学号' from grade order by stugrade descselect stuno as '学号' from grade order by stugrade ascselect '学号'=stuno from grade where stugrade between 80 and 90 select stuno from grade where stuno in('1001','1003')select stuno from grade where couno not in('c002','c003')select stuno from grade where stuno is not nullselect stuno from grade where couno is null/*判断空值*/select stugrade * credit from gradeselect * from student where phone like'[58]7654321'select * from student where phone like'13[^0123]456789'select * from student where address like '南京_玄武区'select * from student where address like'%玄武%'select * from student where stuname like'孙悟[%]'select couno,sum(stugrade) '总分' from grade group by counoselect stuno,stugrade from grade order by stuno compute sum(stugrade)select stuno,stugrade,kind from grade,course order by kind compute sum(stugrade) by kind select stuno,sum(stugrade) from grade where credit>7 group by stuno having sum(stugrade)>150 select stuno from student union select couno from courseselect * into chengji from gradeselect s.stuno,s.stuname,c.couno,c.couname,c.credit,g.stugrade from grade ginner join course c on g.couno=c.counoinner join student s on g.stuno=s.stunoselect s.stuno,s.stuname,s.address,c.couno,c.couname,c.credit,g.stugrade,sum(stugrade) from grade ginner join student s on g.stuno=s.stunoinner join course c on g.couno=c.counowhere s.address like'%玄武' group by s.stuno,s.stuname,s.address,c.couno,c.couname,c.credit,g.stugradehaving sum(stugrade)>150select * from student s left join grade g on s.stuno=g.stunoselect * from student s right join grade g on s.stuno=g.stunoselect * from student s full join grade g on s.stuno=g.stunoselect * from student ,course ,gradeselect * from student where stuno not in (select stuno from grade where stugrade>=90)select * from student where stuno in (select stuno from grade where stugrade>=90)select * from student where exists(select stuno from grade where stugrade>=90)函数use xkselect sum(stugrade),avg(stugrade),count(stugrade)from grade where stuno='1001'/*返回列中记录个数*/select max(age),min(age)from studentselect left('china',3)/*返回左边3个字符*/select right('china',3)/*返回右边3个字符*/select substring('chinese',2,4)/*从第2个字符开始连续返回4个字符*/select len('china')/*返回字符个数*/select lower('CHINA')/*转换为小写*/select upper('china')/*转换为大写*/select ltrim(' abc ')/*取消左边空格*/select rtrim(' abc ')/*取消右边空格*/select space(20)/*返回20个空格*/select str(246246246,7,2)/*将字数值转换为字符型,长度为7,小数位数2位*/select str(246246246)select getdate()/*返回系统日期时间*/select day('6/24/2000 10:24:45') select day(getdate())/*返回给定时日的日*/select month('6/24/2000 10:24:45') select month(getdate())/*返回给定时日的月*/select year('6/24/2000 10:24:45') select year(getdate())/*返回给定时日的年*/select datepart(day,'6/24/2000 10:24:45') select datepart(day,getdate())/*返回给定时日的日*/select datepart(month,'6/24/2000 10:24:45') select datepart(month,getdate())/*返回给定时日的月*/select datepart(year,'6/24/2000 10:24:45') select datepart(year,getdate())/*返回给定时日的年*/ select datediff(year,'6/24/2000 10:24:45',getdate())/*计算前后时日相隔年份*/select datediff(month,'8/8/2008 8:8:8',getdate())/*计算前后时日相隔月份*/select datediff(day,'8/8/2008 8:8:8',getdate())/*计算前后时日相隔天数*/select abs(-24) select abs(24) /*返回绝对值*/select ceiling(13.2) select ceiling(13.7)/*返回大于等于给定数值的最小整数*/select floor(13.2) select floor(13.7)/*返回小于等于给定数值的最大整数*/select round(3.1415926,3)/*四舍五入*/视图use xkcreate view v_student as select * from studentselect * from v_studentcreate view v_SCG asselect s.stuno,s.stuname,s.sex,s.age,c.couno,c.couname,g.stugrade,g.credit from grade ginner join student s on g.stuno=s.stunoinner join course c on g.couno=c.counoselect * from v_SCGcreate view v_course with encryption as select * from coursealter view v_student with encryption asselect top 3 percent stuno '学号',stuname '姓名',sex '性别',age '年龄',address '住址' from student order by age descexec sp_rename v_course,v_Courseexec sp_helptext v_Courseexec sp_depends v_studentdrop view v_Course存储过程use xkcreate procedure p_student with encryption asselect * from student where address='南京市玄武区'exec p_studentcreate procedure p_grade @nomber char(4) with recompile asselect * from grade where couno=@nomberexec p_grade @nomber=c002create procedure p_grade1 @stunomber char(4),@counomber char(4) outputas set @counomber=(select couno from grade where stuno=@stunomber)print @counomberdeclare @stunomber char(4),@counomber char(4)set @stunomber='1002'exec p_grade1 @stunomber,@counomberexec sp_helptext p_studentexec sp_depends p_studentexecute p_grade 'c001' with recompileexecute sp_recompile gradealter procedure p_grade @nomber char(4) with encryption asselect * from grade where stuno=@nomberdrop procedure pro_stucreate procedure pro_stu @xh char(4)=null,@xm varchar(10)=null asif @xh is nullbegin print'你必须提供学号' return endbegin transactioninsert into stundent(stuno,stuname,age,sex,address)values(@xh,@xm,'','','')commit transactionprint'信息添加到学生表中'exec pro_stu @xh='1005',@xm='卡罗特'exec xp_cmdshell 'dir c:*'exec xp_enumgroups 'admin'exec xp_loginconfig触发器use xkcreate trigger t_stu on student for update as print'记录已修改'update student set age=22 where stuno='1001'alter trigger t_stu2 on student instead of update as print'记录没有修改'/*instead of只执行print不执行sql语句*/create trigger t_stu3 on student for update as if update(age) print'年龄已修改'create trigger t_student on student for insert as declare @xh char(4)select @xh=s.stuno from student s,inserted i where s.stuno=i.stunoinsert into grade(stuno,couno) values(@xh,'c003')insert into student(stuno,stuname) values('1005','卡罗特')create trigger t_student0 on student for delete as declare @xh char(4)select @xh=stuno from deleteddelete from grade where stuno=@xhdelete from student where stuname='卡罗特'create trigger setwillnum on grade for insert update delete asupdate course set willnum=willnum+1 where couno=(select couno from inserted) update course set willnum=willnum-1 where couno=(select couno from deleted)update grade set couno='c003' where stuno='1003' and couno='c002'delete from grade where stuno='1003'and couno='c003'insert gradevalues('1003','c002',90,10)alter trigger setwillnum on grade for insert,update,delete asupdate course set willnum=(select count(*) from grade where couno=course.couno)drop trigger setwillnumsp_rename t_stu,t_stu1alter table grade disable trigger setwillnumalter table grade enable trigger setwillnumselect * from sysobjects where type='tr'备份还原use xkexec sp_addumpdevice 'disk','xh_bak','d:\xh\xh_bak'backup database xh to xh_bak /*数据库备份*/backup database xh to xh_bak with init/*覆盖备份*/backup database xh to xh_bak with noinit/*追加备份*/backup database xh to xh_bak with differential/*数据库备份*/exec sp_addumpdevice 'disk','xh_log_bak','d:\xh_log_bak'backup log xh to xh_log_bak/*日志备份*/backup log xh to xh_log_bak with initbackup log xh to xh_log_bak with noinitrestore database xh from xh_bak/*还原数据库*/restore database xh from xh_bak with norecoveryrestore database xh from xh_bak with file=2restore database xh from xh_bak with norecovery,file=2/*还原差异*/ restore log xh from xh_log_bak/*还原日志*/restore log xh from xh_log_bak with norecovery,file=2权限use xkexec sp_addlogin 'user01'exec sp_addlogin 'user02','002'exec sp_addlogin 'user03','003','xh'exec sp_password '003','333','user03'exec sp_grantdbaccess 'user02'/*设置库权限*/exec sp_revokedbaccess 'guest01'/*取消库权限*/exec sp_grantdbaccess 'admin\guest','guest01'exec sp_droplogin 'user03'exec sp_addrole 'role01'exec sp_addrole 'role02','002'/*标准角色*/exec sp_addapprole 'approle01','001'/*应用程序角色*/grant select on student to role02grant create table to role02grant insert,update,delete on student to user02revoke create table from role02deny select,insert,update,delete on student to user01/*不可逆拒绝权限*/ exec sp_setapprole 'approle01','001'/*激活应用程序角色*/exec sp_droprole 'role01'exec sp_addrolemember 'role01','user03'/*用户加入到角色*/。

SQL_Server_2000常用命令

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("别名") 获取统的计值,其它函数运用同上。

sql server语句大全讲解

sql server语句大全讲解

SQL Server 是一种关系数据库管理系统 (RDBMS)。

它是由微软公司开发的,并且专为企业级解决方案而设计。

SQL Server 使用结构化查询语言 (SQL) 来进行数据管理和查询。

在 SQL Server 中,有许多不同类型的语句可以用来执行各种不同的操作。

下面将一一讲解这些语句,并且提供示例来帮助读者更好地理解它们的用法。

一、数据查询语句1. SELECT 语句:用于从数据库中获取数据。

示例:SELECT * FROM table_name;2. WHERE 语句:用于筛选数据。

示例:SELECT * FROM table_name WHERE column_name ='value';3. ORDER BY 语句:用于对结果进行排序。

示例:SELECT * FROM table_name ORDER BY column_name;4. GROUP BY 语句:用于对数据进行分组。

示例:SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;5. HAVING 语句:用于筛选 GROUP BY 子句的结果。

示例:SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 1;二、数据操作语句1. INSERT 语句:用于向数据库中插入新数据。

示例:INSERT INTO table_name (column1, column2) VALUES (value1, value2);2. UPDATE 语句:用于更新已存在的数据。

示例:UPDATE table_name SET column_name = 'new_value' WHERE condition;3. DELETE 语句:用于删除数据。

SQLServer2000笔记

SQLServer2000笔记

SQLServer2000笔记(韩顺平主讲)第一课理论、概念、安装等略过数字类型的数据类型的长度不是指字符个数,而是所占字节数字符类型的数据类型的长度是指字符个数GRANT:赋权限REVOKE:解除权限COMMIT:提交ROLLBACK:回滚不区分大小写select语句--1.查询工资低于10000的同志select * from hero where sal<10000;--2.把工资低于10000的人的工资提高10%(update)--语法update 表名set 字段名1=?,字段名2=? where 条件update hero set sal=sal*1.1 where sal<10000;--3.请删除性别为女的同志delete from hero where sex='女'小结:增(insert)、删(delete)、改(update)、查(select)(_下划线和汉字也可以开头)既然varchar如此智能为什么不抛弃char?什么时候用char?确切知道所用字段的长度,譬如电话号码、身份证号等这种定长的。

为什么要char? char查询时全字匹配,速度比varchar(一个一个比较)快!bit只存0和1(二进制)为什么小数不建议用float ?用float存小数会存进去很奇怪的小数如果非要用float,必须指定小数位数(范围1到53),否则极易产生很奇怪的数字,--推荐的小数保存类型numeric (共几位,其中小数占几位,如果不指定位数则自动表示整数) ,比如要求存放个人工资,单位元(20,2)--age后面没限定约束就代表默认不为空插入部分字段,则需要在表名后,指定字段列表!主键字段中插入时必须给值!如果是字符串就用单引号而不用双引号主键字段中已经存在的数值不能更改,但不存在的数值允许变更。

并没有改变空值不能用= null ,而用is null(单个条件)(多个条件)也可以用or为方便以后实践先建两张表,表结构如下:建议先建部门表(因为员工表的部门字段是从部门表引用的)插入数据:外键约束的威力体现:select *..... *号能不用尽量不用,因为数据量大的时候速度是很慢的,且浪费内存。

sql2000 if用法

sql2000 if用法

sql2000 if用法SQL Server 2000中的"IF"用法在SQL Server 2000中,"IF"关键字提供了一个条件语句,该语句允许我们在特定条件下执行特定的操作。

本文将详细介绍在SQL Server 2000中如何使用"IF"语句。

在SQL Server 2000中,"IF"语句可以有多种不同的用法,包括条件检查、条件执行、条件跳转等。

在下面的文章中,我们将详细介绍这些用法并提供具体的示例来帮助你更好地理解。

1. 条件检查:"IF"语句可以用于检查一个条件是否为真。

如果条件为真,则执行特定的操作。

如果条件为假,则跳过该操作。

以下是一个简单的示例:IF 1 = 1BEGINPRINT '条件为真!'END在上述示例中,条件`1 = 1`为真,所以`PRINT`语句会被执行并打印出"条件为真!"的消息。

2. 条件执行:"IF"语句还可以用于根据条件执行特定的操作。

如果条件为真,则执行第一个操作。

如果条件为假,则执行第二个操作。

以下是一个示例:DECLARE @num INTSET @num = 10IF @num > 5BEGINPRINT '数字大于5!'ENDELSEBEGINPRINT '数字小于或等于5!'END在上述示例中,条件`@num > 5`为真,所以`PRINT`语句会执行并打印出"数字大于5!"的消息。

3. 条件跳转:"IF"语句还可以用于根据条件跳转到不同的代码块。

如果条件为真,则执行第一个代码块。

如果条件为假,则执行第二个代码块。

以下是一个示例:DECLARE @num INTSET @num = 10IF @num > 5BEGINPRINT '数字大于5!'跳转到代码块AGOTO CodeBlockAENDPRINT '数字小于或等于5!'跳转到代码块BGOTO CodeBlockBCodeBlockA:PRINT '执行代码块A!'继续执行下面的代码CodeBlockB:PRINT '执行代码块B!'继续执行下面的代码在上述示例中,条件`@num > 5`为真,所以`PRINT`语句会执行并打印出"数字大于5!"的消息,并跳转到代码块A。

sqlserver2000上修改表结构的一些语句

sqlserver2000上修改表结构的一些语句

sqlserver2000上修改表结构的一些语句(转)用SQL语句添加删除修改字段1.增加字段alter table docdsp add dspcodechar(200)2.删除字段ALTER TABLE table_NAME DROP COLUMNcolumn_NAME3.修改字段类型ALTER TABLE table_name ALTER COLUMN column_name new_data_type4.sp_rename 改名更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。

sp_rename [ @objname = ]'object_name' ,[ @newname = ] 'new_name'[ , [ @objtype =] 'object_type' ]如:EXEC sp_rename'newname','PartStock'5.sp_help 显示表的一些基本情况sp_help 'object_name'如:EXEC sp_help 'PartStock'6.判断某一表PartStock中字段PartVelocity是否存在ifexists (select * from syscolumns whereid=object_id('PartStock') and name='PartVelocity')print'PartVelocity exists'else print 'PartVelocity not另法:判断表的存在性:select count(*) from sysobjects where type='U'and name='你的表名'判断字段的存在性:select count(*) from syscolumnswhereid = (select id from sysobjects where type='U' and name='你的表名')and name = '你要判断的字段名'一个小例子--假设要处理的表名为:tb--判断要添加列的表中是否有主键if exists(select 1 from sysobjects whereparent_obj=object_id('tb') and xtype='PK')beginprint'表中已经有主键,列只能做为普通列添加'--添加int类型的列,默认值为0alter table tb add 列名int defaultendelsebeginprint '表中无主键,添加主键列'--添加int类型的列,默认值为0altertable tb add 列名int primary key default 0end7.随机读取若干条记录Access语法:SELECT top 10 * From 表名ORDER BY Rnd(id)Sql server:select top n * from 表名order by newid() mysql select * From 表名Order By rand() Limit n8.说明:日程安排提前五分钟提醒SQL:select * from 日程安排where datediff(minute,f开始时间,getdate())>59.前10条记录select top 10 * form table1 where 范围10.包括所有在TableA 中但不在TableB和TableC 中的行并消除所有重复行而派生出一个结果表(select afrom tableA ) except (select a from tableB) except (select a from tableC)11.说明:随机取出10条数据select top 10 * from tablename order by newid()12.列出数据库里所有的表名select name from sysobjects where type=U13.列出表里的所有的字段名select name from syscolumns whereid=object_id(TableName)14.说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select中的case。

SQLServer2000知识点全集.

SQLServer2000知识点全集.

--1.SQL由什么文件和什么文件组成?/*答:SQL由数据文件和日志文件组成*/--2.SQL的数据文件分哪两类?扩展名分别是什么?分别可以有多少个? /* 答:SQL的数据文件分主数据文件和二级数据文件。

主数据文件有且只有一个,二级数据文件0-N个扩展名:主数据文件:MDF二级数据文件:NDF*/--3.SQL文件组和文件的关系?/*答:文件存放在文件组中,一个文件只能属于一个文件组;一个文件组可以有多个文件。

*/--4.用代码创建多个数据文件的数据库?/*答:CREATE DATABASE DatabaseNameprimary ON(name=逻辑名,filename=物理名, --扩展名是mdf size=初始大小,maxsize=最大值,filegrowth=增长, --多个文件组之间用逗号分隔filegroup 文件组名(name=逻辑名,filename=物理名, --扩展名是ndf size=初始大小,maxsize=最大值,filegrowth=增长log ON(name=逻辑名,filename=物理名, --扩展名是ldfsize=初始大小,maxsize=最大值,filegrowth=增长*/--5.用代码创建表?CREATE TABLE TABLE_NAME --创建表的表名([ID] int IDENTITY(1,1 PRIMARY KEY, --设置ID为自增长的主键[NAME] varchar(20 NOT NULL , --设置名字不为空[AGE] tinyint CHECK([AGE]<120 --设置年龄小于120--6.用代码实现修改数据库,添加文件组?ALTER DATABASE DATABASENAME --要修改的数据库名ADD FILEGROUP FILEGROUPNAME --要添加的文件组名--7.用代码实现修改文件,文件组?/*答:--修改文件示例ALTER DATABASE DATABASENAMEmodify file([name]='原逻辑名',[NEWNAME] = '新逻辑名',[FILENAME] = '新文件名',[SIZE] = '文件大小',[MAXSIZE] = '文件的最大值',[FILEGROWTH] = '文件增长值或增长百分比'*/--修改文件组ALTER DATABASE Demo_20091230NEWMODIFY FILEGROUP filegroup2 name = Newfilegroup_name -- 8.用代码修改表实现添加列、修改列、删除列?-- 添加列示例代码ALTER TABLE StudentADD [S_Number] Varchar(20-- 删除列例代码ALTER TABLE StudentDROP COLUMN [S_Number]-- 修改列例代码ALTER TABLE StudentALTER COLUMN [S_Name] varchar(8--修改列名通过系统存储过程SP_RENAME 'Student.S_Name' ,'S_NAME_NEW' -- 9.用代码实现查看表、数据库的信息?/*答:查看表:sp_help 表名查看数据库:sp_helpDB 数据库名*/--示例代码:--查看表:sp_help class--查看表:sp_helpdb Demo_20091230NEW-- 10.重命名数据库和表的SQL语句?--重命名表的SQL语句(调用存储过程SP_RENAME class,classNew --不添加引号SP_RENAME 'class','classNew' --添加引号--重命名表的SQL语句(ALTER DATABASEALTER DATABASE Demo_20091230NEWModify name = Demo_20091230--重命名数据库的SQL语句SP_RENAMEDB Demo_20091230NEW,Demo_20091230 --不添加引号SP_RENAMEDB 'Demo_20091230','Demo_20091230NEW' --添加引号-- 11.什么是数据库的完整性?/*答:确保数据库的一致性和精确性,可以用约束和触发器来实现。

sqlserver2000常用命令

sqlserver2000常用命令

sqlserver2000常⽤命令⼀.数据库1.创建数据库:create database Studenton(name=Student_Data,filename='f:\data\student_Data.mdf',size=10,maxsize=20,filegrowth=5),(name=Student_Data2,filename='f:\data\student_Data2.ndf',size=10,maxsize=20,filegrowth=5)log on(name=Student_Log,filename='f:\data\student_Log.ldf',size=10,maxsize=20,filegrowth=5),(name=Student_Log2,filename='f:\data\student_Log2.ldf',size=10,maxsize=20,filegrowth=5)2.修改数据库:1>添加数据⽂件:alter database studentadd file(name=Student_Data3,filename='f:\data\student_Data3.ndf',size=10,maxsize=20,filegrowth=5)2>修改数据⽂件:alter database studentmodify file(name=Student_Data,size=15)3.删除数据库:drop database student4.设置数据库选项:sp_dboption student,'single user',true5.修改数据库名:sp_renamedb 'student','students'6.查看服务器上的数据库:sp_databases7.查看数据库上的⽂件:sp_helpdbsp_helpdb students8.压缩数据库:sp_dboption student,'single user',truegoDBCC shrinkdatabase(students,50)9.断开与连接数据库:1>断开: sp_detach_db 'students'2>连接: sp_attach_db 'students','f:\students_data.mdf'10.备份和恢复数据库1>备份: backup database students to disk='h:\students_back'2>恢复: restore database students from disk='h:\students_back'⼆.表1.创建表:(先建主键表,再建外键表)create table xsxxb(xh char(10) primary key,xm char(8) ,xb char(2),csrq datetime,dh char(20))gocreate table kmxxb(kmbh char(10),kmmc char(20),primary key(kmbh))gocreate table xscjb(xh char(10),kmbh char(10),fs int,foreign key(xh)references xsxxb,foreign key(kmbh)references kmxxb)2.修改表:1>增加字段alter table xsxxbadd bz char(50) null2>删除字段alter table xsxxbdrop column bz3.删除表:(先删外键表,再删主键表)drop table xscjbdrop table xsxxbdrop table kmxxb4.复制⼀个表:select * into xsxxb2 from xsxxb5.创建临时表:(#,##)create table #xsxxb(xh char(10) primary key,xm char(8),xb char(2),csrq datetime,dh char(20))select * from #xsxxb6.创建⽤户定义数据类型:use studentsgosp_addtype sts,'varchar(20)','not null','dbo'sp_addtype sts,datatime,'null','dbo'7.删除⽤户定义数据类型:sp_droptype sts三.操作表中的数据1>使⽤ INSERT 语句向表中插⼊数据:insert into xsxxb values('008','','','')2>使⽤ UPDATE 语句修改表中的数据:update xsxxb set xm='不' where xh='001'3>使⽤ DELETE 语句删除表中的数据:delete from xsxxb where xh='001'delete from xsxxb where xh in('002','004')delete from xsxxb四.系统内置函数的使⽤1.聚合函数:1>AVG(表达式)返回表达式中所有值的平均值。

SQLServer常用近百条SQL语句(收藏版)

SQLServer常用近百条SQL语句(收藏版)

SQLServer常用近百条SQL语句(收藏版)1. sqlserver查看实例级别的信息,使用SERVERPROPERTY函数•select SERVERPROPERTY ('propertyname')2. 查看实例级别的某个参数XX的配置•select * from sys.configurations where name='XX'3. 更改实例级别的某个参数XX的值••sp_configure 'XX','0' RECONFIGURE WITH OVERRIDEsp_configure显示或更改当前服务器的全局配置设置。

RECONFIGURE表示SQL Server不用重新启动就立即生效。

使用sp_configure更改设置时,请使用RECONFIGURE语句使更改立即生效,否则更改将在SQL Server重新启动后生效。

RECONFIGURE后面加WITH OVERRIDE表示不管这个值是不是符合要求都会生效,比如recovery interval的范围值是10--60对应sys.configurations.minimum是10、sys.configurations.maximum 是60,如果sp_configure 'recovery interval', 75设置为75,超过了这个10--60规范,但是要让75生效,则必须加上WITH OVERRIDE。

4. sqlserver没有系统表可以查询所有数据库下面对象,以下只能在当前数据库下面查•••••••••select * from sys.all_objects --查询当前数据库的所有架构范围的对象select * from sys.sysobjects --查询当前数据库的所有对象--sys.all_objects、sys.sysobjects 这种的视图,在每个数据库的系统视图下面都有select * from sys.databases --在当前数据库下可以查询到所有数据库信息,包含是否on状态select * from sys.sysdatabases --在当前数据库下可以查询到所有数据库信息,不包含是否on状态,这个系统视图会在后续的版本中删除--sys.databases、sys.sysdatabases这种的视图,在每个数据库的系统视图下面都有sys.processes --没有这个视图select * from sys.sysprocesses --在当前数据库下可以查询所有正在SQL Server 实例上运行的进程的相关信息,也就是所有数据库上的线程,这个系统视图会在后续的版本中删除5. 全局系统视图、单个数据库系统视图•••sys.database_files --每个存储在数据库本身中的数据库文件在表中占用一行。

sqlserver常用语句

sqlserver常用语句

sqlserver常用语句
嘿,朋友!你知道 SQL Server 常用语句有多重要吗?就好比你出门必须要带钥匙一样!比如说,“SELECT”语句,这就像是你在一个超级
大的宝库里面挑选你想要的宝贝。

你看啊,你告诉它你要找什么,它
就乖乖地给你找出来。

“SELECT * FROM students”,这不就像是在说:嘿,给我把学生表里的所有东西都拿出来!
还有“INSERT”语句呢,这就像是给一个空盒子里放东西进去。

“INSERT INTO students (name, age) VALUES ('张三', 20)',这就是在把
张三这个名字和 20 岁这个年龄放到学生表里呀!
“UPDATE”语句也很厉害呀!比如说学生表里张三的年龄写错了,
你就可以用“UPDATE students SET age = 21 WHERE name = '张三'”,这不就像是你把之前放进去的东西又拿出来修改了一下嘛。

“DELETE”语句呢,就像是把你不想要的东西从盒子里扔掉。

“DELETE FROM students WHERE age = 20”,这不就是把年龄是 20 的
那些信息给删掉嘛。

哎呀,这些常用语句就像是你的魔法棒一样,能让你在数据库的世
界里自由翱翔!你难道不想掌握它们,成为数据库的高手吗?反正我
是觉得,学会了这些,那可真是太酷啦!没有它们,我们怎么能在数
据库的海洋里畅游呢?所以呀,一定要好好学这些 SQL Server 常用语
句哦!我的观点就是,SQL Server 常用语句是我们和数据库沟通的桥梁,掌握了它们,才能更好地利用数据库为我们服务呀!。

SQL_Server2000知识点全集1.

SQL_Server2000知识点全集1.

mysql查询语句全集--列出pet所有的列select * from pet--列出指定的列select name, owner form pet--直接进行算术运算,对字段起别名select sin(1+2) as sin--where条件select * from pet where (birth>'1980' and species='dog') or species='bird'--对null的条件select * from pet where sex is not null--所有名字第四位是n的宠物信息是select * from pet where owner like '___n%'--所有主人名叫gwen或benny的宠物select * from pet where owner in ('gwen' , 'benny')--查询出生日期在90年代是宠物,相当与 >= and <=select * from pet where birth between '1990' and '1999' --按主人姓名排序,相同的按宠物姓名倒序排列select * from pet order by owner, name desc--查询性别为公的宠物,按生日倒序排列select * from pet where sex='m' order by birth desc--char_lenngth()返回的字符的长度,length()返回字节长度SELECT owner,length(owner),char_length(owner) FROM pet p;--列出养有宠物狗的人名select distinct owner from pet where species='dog'--用两种方法查询出所有狗和猫的名字、出生年份、出生月份select name, left(birth,4) as year, mid(birth, 6, 2) as month from petwhere species='dog' or species='cat'select name, year(birth) as year, month(birth) as month from petwhere species in('dog','cat')--查询所有名字中存在字母'e'的人,将他们养的宠物按类别、年龄排序select name, species, birthfrom petwhere owner like '%e%'order by species,birth desc--数字函数select round(2.345,2), truncate(2.345,2), mod(323,5)--日期函数select now(), curdate(), curtime()select adddate('2007-02-02', interval 31 day)--求出所有宠物的年龄select name,birth,truncate(datediff(now(),birth)/365,0) as age1,year(now())-year(birth) - (dayofyear(birth)>dayofyear(now())) as age2from pet--分组函数selectmin(birth),max(birth),avg(birth),count(*),count(sex), sum(birth)from pet--每种宠物各有几只select species,count(*)from petgroup by species--查询年龄最大的宠物的信息select * from pet where birth =(select max(birth) from pet)--每年各出生了几只宠物select year(birth), count(*) from pet group by year(birth)--鸟和猫的性别比例select species, sex, count(*)from petwhere species in ('cat','bird')group by species, sex--各种宠物年龄的和select species, sum(truncate(datediff(now(),birth)/365,0)) as SumAge from petgroup by species--数量大于1的宠物种类select species, count(*) as cfrom petgroup by specieshaving c>=2--基本双表关联select ,a.species, a.sex,b.date, b.type, b.remark from pet a,event bwhere = --查询宠物产仔时的年龄select , a.species,truncate(datediff(b.date,a.birth)/365,0) as agefrom pet a,event bwhere = and b.type='litter'--90年代出生的狗的事件列表select ,birth,species,sex,date,type,remarkfrom pet a,event bwhere = and birth between '1990' and '1999' and species='dog'--活着的宠物按发生的事件类型分组,看各种事件发生的次数select type, count(*)from pet a, event bwhere = and a.death is nullgroup by type--记录的事件数量超过1条的宠物信息select ,species,sex,count(*)from pet a, event bwhere = group by having count(*)>=2--列出发生了两件事情的宠物的事件记录信息select ,type,date,remark,b.species,b.sex,b.owner from event a, pet bwhere = and in(select namefrom eventgroup by namehaving count(*)=2)--插入语句insert into pet (name,species,birth)values ('KKK','snake','2007-01-01');insert into petvalues ('KK','Diane','cat','f',null,null);insert into pet set name='k',owner='Benny'--更新语句update pet set species='snake',sex='f',birth=now() where name='k'--将事件表中生日的日期,更新到pet表中相应宠物的birth字段update pet aset birth = (select datefrom event bwhere = and b.type='birthday' )where in (select namefrom eventwhere type='birthday')--删除语句delete from pet where name like 'k%'DDL(数据定义语言)语句1,创建数据库 create database 数据库名;mysql> create database javaworld;Query OK, 1 row affected2,查看已存在数据库 show databases;mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || javaworld || mysql || test |+--------------------+4 rows in set3,选择要操作的数据库 use 数据库名; mysql> use javaworld;Database changed4,查看javaworld数据库中所有的表show tables; mysql> show tables;Empty set5,删除数据库 drop database 数据库名;mysql> drop database javaworld;Query OK, 0 rows affectedmysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || test |+--------------------+3 rows in set6,创建表 create table 表名(字段名(字段类型) 约束);mysql> create table emp(ename varchar(10), hiredate date,sal decimal(10,2), deptno int(2));Query OK, 0 rows affected7,查看表的描述 desc 表名;mysql> desc emp;+----------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra|+----------+---------------+------+-----+---------+-------+| ename | varchar(10) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | decimal(10,2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+---------------+------+-----+---------+-------+4 rows in set8,查看创建表的SQL语句(引擎和字符集也可看到)show create table 表名;mysql> show create table emp;+-------+-----------------------------------------------------------------| Table | Create Table +-------+-----------------------------------------------------------------| emp | CREATE TABLE `emp` (`ename` varchar(10) default NULL,`hiredate` date default NULL,`sal` decimal(10,2) default NULL,`deptno` int(2) default NULL) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |+-------+-----------------------------------------------------------------1 row in set9,删除表 drop table 表名;mysql> drop table emp;Query OK, 0 rows affected10,修改表<1>修改表类型如:修改emp表的ename字段定义,将varchar(10)改为varchar(20)mysql> alter table emp modify ename varchar(20);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> desc emp;+----------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra|+----------+---------------+------+-----+---------+-------+| ename | varchar(20) | YES | | NULL || hiredate | date | YES | | NULL | || sal | decimal(10,2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+---------------+------+-----+---------+-------+4 rows in set<2>增加表字段如:表emp上新增字段age,类型为int(3)mysql> alter table emp add column age int(3);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> desc emp;+----------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra|+----------+---------------+------+-----+---------+-------+| ename | varchar(20) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | decimal(10,2) | YES | | NULL | || deptno | int(2) | YES | | NULL | || age | int(3) | YES | | NULL | |+----------+---------------+------+-----+---------+-------+5 rows in set<3>删除表字段如:将字段age删除mysql> alter table emp drop column age;Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> desc emp;+----------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra|+----------+---------------+------+-----+---------+-------+| ename | varchar(20) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | decimal(10,2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+---------------+------+-----+---------+-------+4 rows in set<4>字段改名如:将ename改名为name,同时修改字段类型为varchar(10)mysql> alter table emp change ename name varchar(10);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> desc emp;+----------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra|+----------+---------------+------+-----+---------+-------+| name | varchar(10) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | decimal(10,2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+---------------+------+-----+---------+-------+4 rows in set<5>修改字段排列顺序如:将birth加在ename后mysql> alter table emp add birth date after ename;Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> desc emp;+----------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra|+----------+---------------+------+-----+---------+-------+| ename | varchar(10) | YES | | NULL | || birth | date | YES | | NULL | || hiredate | date | YES | | NULL | || sal | decimal(10,2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+---------------+------+-----+---------+-------+5 rows in set如:修改字段age,将它放在最前面mysql> alter table emp modify age int(3) first;Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> desc emp;+----------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra|+----------+---------------+------+-----+---------+-------+| age | int(3) | YES | | NULL ||| ename | varchar(10) | YES | | NULL | || birth | date | YES | | NULL | || hiredate | date | YES | | NULL | || sal | decimal(10,2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+----------+---------------+------+-----+---------+-------+6 rows in set<6>更加表名mysql> alter table emp rename emp1;Query OK, 0 rows affectedmysql> desc emp;ERROR 1146 : Table 'javaworld.emp' doesn't existmysql> show tables;+---------------------+| Tables_in_javaworld |+---------------------+| emp1 |+---------------------+1 row in setDML(数据操纵语言)语句1,插入记录insert into emp(ename,hiredate,sal,deptno) values('zzzx1','2000-01-01','2000',1);Query OK, 1 row affected也可以不指定字段名,但values中值的顺序需和字段名排列顺序一致mysql> insert into emp values('lisa','2003-02-01','3000',2);Query OK, 1 row affected或者只对部分字段插入值insert into emp(ename,sal) values('dony','1000'); Query OK, 1 row affected查看表mysql> select * from emp;+-------+------------+---------+--------+| ename | hiredate | sal | deptno |+-------+------------+---------+--------+| zzzx1 | 2000-01-01 | 2000.00 | 1 || lisa | 2003-02-01 | 3000.00 | 2 || dony | NULL | 1000.00 | NULL |+-------+------------+---------+--------+3 rows in set也可一次插入多条记录,每条记录之间用逗号分隔mysql> insert into dept values(5,'dept5'),(6,'dept6'); Query OK, 2 rows affectedRecords: 2 Duplicates: 0 Warnings: 0mysql> select * from dept;+--------+----------+| deptno | deptname |+--------+----------+| 5 | dept5 || 6 | dept6 |+--------+----------+2 rows in set2,更新记录将emp表ename为”lisa”的sal值从3000改为4000 mysql> update emp set sal=4000 where ename='lisa'; Query OK, 1 row affectedRows matched: 1 Changed: 1 Warnings: 0也可以同时更新多个表中的数据,如:同时更新emp表的字段sal和dept表的字段deptname mysql> select * from emp;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 100.00 | 1 || lisa | 2003-02-01 | 200.00 | 2 || bjguan | 2004-04-02 | 100.00 | 1 || dony | 2005-02-05 | 2000.00 | 4 |+--------+------------+---------+--------+4 rows in setmysql> select * from dept;+--------+----------+| deptno | deptname |+--------+----------+| 1 | tech || 2 | sale || 5 | fin |+--------+----------+3 rows in setmysql> update emp a, dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;Query OK, 3 rows affectedRows matched: 5 Changed: 3 Warnings: 0mysql> select * from emp;+--------+------------+---------+--------+ | ename | hiredate | sal | deptno | +--------+------------+---------+--------+ | zzx | 2000-01-01 | 100.00 | 1 | | lisa | 2003-02-01 | 400.00 | 2 | | bjguan | 2004-04-02 | 100.00 | 1 | | dony | 2005-02-05 | 2000.00 | 4 | +--------+------------+---------+--------+ 4 rows in setmysql> select * from dept;+--------+----------+| deptno | deptname |+--------+----------+| 1 | zzx || 2 | lisa || 5 | fin |+--------+----------+3 rows in set3,删除记录不加where条件会将表中所有记录删除!mysql> delete from emp where ename='dony';Query OK, 1 row affected也可一次删除多条记录,如果from后面的表名用别名,则delete 后面也要用相应的别名同时将emp表和dept表中deptno为3的记录删除mysql> select * from emp;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 100.00 | 1 || lisa | 2003-02-01 | 400.00 | 2 || bjguan | 2004-04-02 | 100.00 | 1 || bzshen | 2005-04-01 | 300.00 | 3 || dony | 2005-02-05 | 2000.00 | 4 |+--------+------------+---------+--------+5 rows in setmysql> select * from dept;+--------+----------+| deptno | deptname |+--------+----------+| 1 | zzx || 2 | lisa || 5 | fin || 3 | hr |+--------+----------+4 rows in setmysql> delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;Query OK, 2 rows affectedmysql> select * from emp;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 100.00 | 1 || lisa | 2003-02-01 | 400.00 | 2 || bjguan | 2004-04-02 | 100.00 | 1 || dony | 2005-02-05 | 2000.00 | 4 |+--------+------------+---------+--------+4 rows in setmysql> select * from dept;+--------+----------+| deptno | deptname |+--------+----------+| 1 | zzx || 2 | lisa || 5 | fin |+--------+----------+3 rows in set4,查询记录查询指定字段记录(所有记录字段名用*)mysql> select ename,hiredate,sal,deptno from emp; +--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 100.00 | 1 || lisa | 2003-02-01 | 400.00 | 2 || bjguan | 2004-04-02 | 100.00 | 1 || dony | 2005-02-05 | 2000.00 | 4 |+--------+------------+---------+--------+4 rows in set<1>查询不重复记录mysql> select distinct deptno from emp;+--------+| deptno |+--------+| 1 || 2 || 4 |+--------+3 rows in set<2>条件查询,where后面还可以使用>,<,>=,<=,!=等比较运算符,使用or,and多条件查询如:查询deptno为1的记录mysql> select * from emp where deptno=1;+--------+------------+--------+--------+| ename | hiredate | sal | deptno |+--------+------------+--------+--------+| zzx | 2000-01-01 | 100.00 | 1 |+--------+------------+--------+--------+2 rows in setmysql> select * from emp where deptno=1 and sal<300;+-------+------------+--------+--------+| ename | hiredate | sal | deptno |+-------+------------+--------+--------+| zzx | 2000-01-01 | 100.00 | 1 |+-------+------------+--------+--------+1 row in set<3>排序和限制desc降序,asc升序,默认为升序,order by后面可以有多个不同的排序字段,如果排序字段值一样,则按照第二个排序字段进行排序...mysql> select * from emp order by sal;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 2000.00 | 1 || lisa | 2003-02-01 | 4000.00 | 2 || bjguan | 2004-04-02 | 5000.00 | 1 |+--------+------------+---------+--------+4 rows in set如果只有一个排序字段,则字段相同的记录将会无序排列mysql> select * from emp order by deptno;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 2000.00 | 1 || bjguan | 2004-04-02 | 5000.00 | 1 || lisa | 2003-02-01 | 4000.00 | 2 || bzshen | 2005-02-05 | 3000.00 | 3 |+--------+------------+---------+--------+4 rows in set先将deptno升序排列,再将sal降序排列mysql> select * from emp order by deptno,sal desc; +--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| bjguan | 2004-04-02 | 5000.00 | 1 || zzx | 2000-01-01 | 2000.00 | 1 || lisa | 2003-02-01 | 4000.00 | 2 || bzshen | 2005-02-05 | 3000.00 | 3 |+--------+------------+---------+--------+4 rows in set对于排序后的字段,可使用limit显示一部分(limit在其它数据库不能用)显示前3条记录mysql> select * from emp order by sal limit 3;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 2000.00 | 1 || bzshen | 2005-02-05 | 3000.00 | 3 || lisa | 2003-02-01 | 4000.00 | 2 |+--------+------------+---------+--------+3 rows in set从第2条记录开始,显示3条记录(起始偏移量为0)mysql> select * from emp order by sal limit 1,3;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| bzshen | 2005-02-05 | 3000.00 | 3 || lisa | 2003-02-01 | 4000.00 | 2 || bjguan | 2004-04-02 | 5000.00 | 1 |+--------+------------+---------+--------+3 rows in set<4>聚合常用的聚合函数有sum求和,count(*)记录数,max最大值,min最小值从emp表统计人数mysql> select count(1) from emp;+----------+| count(1) |+----------+| 4 |+----------+1 row in set统计各部门(deptno)人数,group by表示要进行分类聚合的字段mysql> select deptno,count(1) from emp group by deptno; +--------+----------+| deptno | count(1) |+--------+----------+| 1 | 2 || 2 | 1 || 3 | 1 |+--------+----------+3 rows in set统计各部门(deptno)人数,并统计总人数,with rollup表示对分类聚合后的结果进行再汇总mysql> select deptno,count(1) from emp group by deptno with rollup;+--------+----------+| deptno | count(1) |+--------+----------+| 1 | 2 || 2 | 1 || 3 | 1 || NULL | 4 |+--------+----------+4 rows in set统计人数大于1的部门,having表示对分类后的结果再进行条件过滤mysql> select deptno,count(1) from emp group by deptno having count(1)>1;+--------+----------+| deptno | count(1) |+--------+----------+| 1 | 2 |+--------+----------+1 row in set统计员工薪水sal总额,最高,最低薪水mysql> select * from emp;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 2000.00 | 1 || lisa | 2003-02-01 | 4000.00 | 2 || bjguan | 2004-04-02 | 5000.00 | 1 |+--------+------------+---------+--------+4 rows in setmysql> select sum(sal),max(sal),min(sal) from emp;+----------+----------+----------+| sum(sal) | max(sal) | min(sal) |+----------+----------+----------+| 14000.00 | 5000.00 | 2000.00 |+----------+----------+----------+1 row in set<5>表连接当同时需要显示多个表中的字段时,就需要用到表连接,表连接分内连接和外连接,主要区别是,内连接仅选出两张表中互相匹配的记录,而外连接会选车其它不匹配的记录如:查询雇员名字和所在部门,mysql> select * from emp;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 2000.00 | 1 || bjguan | 2004-04-02 | 5000.00 | 1 || bzshen | 2005-02-05 | 3000.00 | 3 |+--------+------------+---------+--------+4 rows in setmysql> select * from dept;+--------+----------+| deptno | deptname |+--------+----------+| 1 | tech || 2 | sale || 3 | hr |+--------+----------+3 rows in setmysql> select ename,deptname from emp,dept where emp.deptno=dept.deptno;+--------+----------+| ename | deptname |+--------+----------+| zzx | tech || lisa | sale || bjguan | tech || bzshen | hr |+--------+----------+4 rows in set外连接分为左连接和右连接左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录右连接:包含所有的右边表中的记录甚至是左右边中没有和它匹配的记录如:查看emp中所有用户名和所在部门名称(左连接)mysql> select * from emp;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 2000.00 | 1 || lisa | 2003-02-01 | 4000.00 | 2 || bjguan | 2004-04-02 | 5000.00 | 1 || bzshen | 2005-02-05 | 3000.00 | 3 || dony | 2005-04-01 | 4000.00 | 4 |+--------+------------+---------+--------+5 rows in setmysql> select * from dept;+--------+----------+| deptno | deptname |+--------+----------+| 1 | tech || 2 | sale || 3 | hr |+--------+----------+3 rows in setmysql> select ename,deptname from emp left join dept on emp.deptno=dept.deptno;+--------+----------+| ename | deptname |+--------+----------+| zzx | tech || lisa | sale || bjguan | tech || bzshen | hr || dony | NULL |+--------+----------+5 rows in set右连接:mysql> select ename,deptname from dept right join emp on dept.deptno=emp.deptno;+--------+----------+| ename | deptname |+--------+----------+| zzx | tech || lisa | sale || bjguan | tech || bzshen | hr || dony | NULL |+--------+----------+5 rows in set<6>子查询某些情况下,当进行查询的时候,需要的条件是另外一个select 语句的结果,这就需要子查询,关键字有in,not in,=,!=,exists,not exists等如:从emp表中查询出所有部门在dept表中的所有记录mysql> select * from emp;+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 2000.00 | 1 || lisa | 2003-02-01 | 4000.00 | 2 || bjguan | 2004-04-02 | 5000.00 | 1 || bzshen | 2005-02-05 | 3000.00 | 3 || dony | 2005-04-01 | 4000.00 | 4 |+--------+------------+---------+--------+5 rows in setmysql> select * from dept;+--------+----------+| deptno | deptname |+--------+----------+| 1 | tech || 2 | sale || 3 | hr |+--------+----------+3 rows in setmysql> select * from emp where deptno in(select deptno from dept);+--------+------------+---------+--------+| ename | hiredate | sal | deptno |+--------+------------+---------+--------+| zzx | 2000-01-01 | 2000.00 | 1 || lisa | 2003-02-01 | 4000.00 | 2 || bjguan | 2004-04-02 | 5000.00 | 1 || bzshen | 2005-02-05 | 3000.00 | 3 |+--------+------------+---------+--------+4 rows in set<7>记录联合将两个表的数据按一个查询条件查询出来后,将结果合并到一起,用union和union all实现两者区别是,union all是把结果集直接合并在一起,而union是将union all后的结果进行一次distinct,去重复记录.如:将emp表和dept表中的部门编号的集合显示出来mysql> select * from emp;select * from dept;+--------+------------+---------+--------+ | ename | hiredate | sal | deptno | +--------+------------+---------+--------+ | zzx | 2000-01-01 | 2000.00 | 1 | | lisa | 2003-02-01 | 4000.00 | 2 | | bjguan | 2004-04-02 | 5000.00 | 1 | | bzshen | 2005-02-05 | 3000.00 | 3 | | dony | 2005-04-01 | 4000.00 | 4 | +--------+------------+---------+--------+ 5 rows in set+--------+----------+| deptno | deptname |+--------+----------+| 1 | tech || 2 | sale || 3 | hr |+--------+----------+3 rows in setmysql> select deptno from emp-> union all-> select deptno from dept; +--------+| deptno |+--------+| 1 || 2 || 1 || 3 || 4 || 1 || 2 || 3 |+--------+8 rows in setunion去重复记录mysql> select deptno from emp -> union-> select deptno from dept; +--------+| deptno |+--------+| 1 || 2 || 3 || 4 |+--------+4 rows in setmysql基本语句详细教程最佳答案看他们网上的,写得都是千篇一律,同时,好多也写得不是很好,下面是我自己总结的有关mysql的使用细节,也是我在学习过程中的一些记录吧,希望对你有点帮助,后面有关存储过程等相关操作还没有总结好,下次总结好了再发给你吧,呵呵~~~~~MySql学习笔记MySql概述:MySql是一个种关联数据库管理系统,所谓关联数据库就是将数据保存在不同的表中,而不是将所有数据放在一个大的仓库中。

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子查询*/-- 例:查询有人的公司名称和地址/*思路:本题可以分为两个步骤完成。

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

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中逗号是元素的分隔符。

相关文档
最新文档