SQL 2000数据库常用命令中英文对照
- 格式:doc
- 大小:24.50 KB
- 文档页数:1
[code=SQL][/code]--语句功能--数据操作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 intselect @x = 1 @y = 2 @z=3if @x > @yprint 'x > y' --打印字符串'x > y'else if @y > @zprint 'y > z'else print 'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = '1' then e_wage*1.08 when job_level = '2' then e_wage*1.07 when job_level = '3' then e_wage*1.06 else e_wage*1.05end--WHILE CONTINUE BREAK declare @x int @y int @c intselect @x = 1 @y=1while @x < 3beginprint @x --打印变量x 的值while @y < 3beginselect @c = 100*@x + @yprint @c --打印变量c 的值select @y = @y + 1endselect @x = @x + 1select @y = 1end--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 valueex:(宿主)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 < 1000and stockindex = 24not stocksex = 'man'stocknumber between 20 and 100stocknumber 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 ,"stocknumber + 10" = stocknumber + 10 from table_nameselect stockname , "stocknumber" = count(*) from table_name group by 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 ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)---value为select语句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname = defaultStockname = 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(/*常用函数*/)***----统计函数----A VG --求平均值COUNT --统计数目MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求工资最高的员工姓名use panguselect e_namefrom employeewhere 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 类型FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π 即3.1415926535897936RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全部转换为小写UPPER() --函数把字符串全部转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运行结果如下----------- -----------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------- -----------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST() 函数语法如下CAST() (<expression> AS <data_ type>[ length ])CONVERT() 函数语法如下CONVERT() (<data_ type>[ length ], <expression> [, style])select cast(100+99 as char) convert(varchar(12), getdate())运行结果如下补上...----日期函数----DAY() --函数返回date_expression 中的日期值MONTH() --函数返回date_expression 中的月份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date>)--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF(<datepart> ,<number> ,<date>)--函数返回两个指定日期在datepart 方面的不同之处DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理日期ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(<expression1>, <expression2>)--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值--------------------------------------------------------------------------------。
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子查询*/-- 例:查询有人的公司名称和地址/*思路:本题可以分为两个步骤完成。
1server 服务器2create 创建3database 数据库4file 文件5size 大小6file growth 文件增长7file name 文件名称8alter 修改9remove 移除10drop 删除11modify 修改12add 加入13exec—execute 执行14rename 改名15primary key 主键约束16foreign key 外键约束17default 默认18unique 唯一19check 检查20references 参考21date time 日期22identity 标识23values 值24insert 插入25select 查询26char—character 特性特征27vary 变化28dec—decimal 数字29constraint 约束30rule 规则31column 行栏杆32update 更新33union 联合34set 设置35delete 删除36top 顶端37percent 百分比38distinct 唯一的独一无二的39order by 排序40descent 下降41ascent 上升42null 空43count 计数44avg—average 平均45sum 求和46group by 分组47cube 方块立方48rollup 累积成49compute by 计算50between 和~~~之间51join on 连接52score 分数53course 过程54left outer join 左外连接55right outer join 右外连接56full outer join 全外连接57outer join 外连接58inner join 内连接59master 主管60model 模板61temp db 临时62pubs—publishers 出版63max size 最大值64unlimited 无限增长65int—integer 整数类型66tinyint 微小67smallint 小68begint 大69decimal 精确70money 货币71date time 日期72rename 改名73where 条件74view 视图75indes 索引76clustered 聚集索引77if,,,else 如果78exists 存在79while 当…时候80print 打印81return 返回82begin,,,,,,end 开始,,,,,结束83space 空间84abs 绝对值85pi 圆周率86square 平方87SQRT 平方根88Cast 切换89convert 转换90year 年91month 月92getdate 当前时间93datename 日期名94datebart 日期部分95quarter 季度96dayofyear 一年中的第几天97day 天98wake 周99dayweek 星期几100hour 小时101minute 分秒102second 秒103millisecond 微秒104function 函数功能。
select sno,sname from student从学生资料表中查询全体学生的学号、姓名select sname,sno,sdept from student从学生资料表中查询全体学生的姓名、学号和系别select * from student从学生资料表中查询全体学生的详细信息select sname,2006-sage from student从学生资料表中查询全体学生的姓名及其出生年月select sname,2006-sage as '出生年月' from student从学生资料表中查询全体学生的姓名及其出生年月select sname as'姓名',2006-sage as '出生年月' from student从学生资料表中查询全体学生的姓名及其出生年月select sname 姓名,2006-sage 出生年月from student从学生资料表中查询全体学生的姓名及其出生年月select distinct sno from student从学生资料表中查询所有不同的学号select sname from student where sdept='计算机系'从学生资料表中查询所在系为计算机系的学生姓名select sname,sage from student where sage<20从学生资料表中查询年龄在20岁以下的学生姓名及其年龄select sname,sdept,sage from student where sage between 20 and 23从学生资料表中查询年龄在20至23岁(包括20岁和23岁)之间的学生姓名、系别和年龄select sname,sdept,sage from studen t where sage>=20 and sage<=23从学生资料表中查询年龄在20至23岁(包括20岁和23岁)之间的学生姓名、系别和年龄select sname,sdept,sage from student where sage not between 20 and 23从学生资料表中查询年龄不在20至23岁之间的学生姓名、系别和年龄select sname,sdept,sage from student where sage<20 or sage>23从学生资料表中查询年龄年龄小于20岁或者大于23岁的学生姓名、系别和年龄select sname,ssex from student where sdept in ('信息系','数学系','计算机系')从学生资料表中查询信息系、数学系和计算机系学生的姓名和性别select sname,ssex from studen t where sdept='信息系' or sdept='数学系' or sdept='计算机系'从学生资料表中查询信息系或者数学系或者计算机系学生的姓名和性别select sname,ssex from student where sdept not in ('信息系','数学系','计算机系')从学生资料表中查询既不是信息系、数学系又不是计算机系的学生的姓名和性别select sname,ssex from student where sdept!='信息系' or sdept!='数学系' or sdept!='计算机系'从学生资料表中查询不是信息系或者不是数学系或者不是计算机系的学生的姓名和性别select sname,ssex from student where sdept!='信息系' and sdept!='数学系' and sdept!='计算机系'从学生资料表中查询既不是信息系、数学系又不是计算机系的学生的姓名和性别select * from student where sname like'张%'从学生资料表中查询所有姓张学生的详细信息select * from student where sname like'[张李刘]%'从学生资料表中查询所有姓张、李、刘的学生的详细信息select * from student where sname like'_[小大]%'从学生资料表中查询名字中第2个字为小或者大字的学生的详细信息select * from student where sname not like'刘%'从学生资料表中查询不姓刘的学生的详细信息select * from student where sno like'%[^2-6]'从学生资料表中查询学号不以2-6任意一个字符结尾的学生的详细信息select * from sc where grade is null从学生成绩表中查询无成绩的学生的详细信息select * from sc where grade is not null从学生成绩表中查询有成绩的学生的详细信息select * from student where sdept='计算机系' and sage<20从学生资料表中查询计算机系且年龄小于20岁的学生的详细信息select * from studen t order by sage从学生资料表中查询所有学生的详细信息,查询结果按年龄升序排列select * from studen t order by sage desc从学生资料表中查询所有学生的详细信息,查询结果按年龄降序排列select sno,grade from sc where cno='c02' order by grade desc从学生成绩表中查询课程号为c02的所有学生的学号和成绩,查询结果按成绩降序排列select * from student order by sdept,sage desc从学生资料表中查询所有学生的详细信息,查询结果按系别升序排列,同一系中的学生按年龄降序排列select count(*) from student从学生资料表中查询学生的总人数select count(distinct sno) from sc从学生成绩表中查询选修了课程的学生人数select sum(grade) from sc where sno='9512101'从学生成绩表中查询并计算学号为9512101的学生的总成绩select avg(grade) from sc where cno='c01'从学生成绩表中查询并计算课程号为c01的学生的平均成绩select max(grade),min(grade) from sc where cno='c01'从学生成绩表中查询课程号为c01的学生最高分数和最低分数select cno as 课程号,count(sno) as 选课人数from sc group by cno从学生成绩表中查询并计算各个课程号及相应的选课人数select sno 学号,count(*) 选课门数,avg(grade) 平均成绩from sc group by sno从学生成绩表中查询并计算各个学号及对应的选课门数并求平均成绩select sno from sc group by sno having count(*)>3从学生成绩表中查询选修了3门及以上课程的学生学号select sno,avg(grade),count(*) from sc group by sno having count(*)>=4从学生成绩表中查询选修了4门及以上的学生学号、平均成绩及课程数select * from studen t inner join sc on student.sno=sc.sno从学生资料表和成绩表中查询每个学生及其选修课程的情况select student.sno,sname,ssex,sage,sdept,cno,grade,xklb from student join sc on student.sno=sc.sno从学生资料表和成绩表中查询每个学生及其选修课程情况的学生学号、姓名、姓名、年龄、课程号、成绩和相关类别select sname,cno,grade from student join sc on s tudent.sno=sc.sno where sdept='计算机系'从学生资料表和成绩表中查询计算机系的每个学生及相应选修课程的学生姓名、课程号和成绩。
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 表达式并没有施用于该字段的缺省值(如果有的话);结果可能不是缺省表达式要求的常量表达式。
sqlserver2000函数大全SQL其实还是蛮重要的,省掉了许多程序中的处理,快捷方便字符串函数:●ASCII('a')=97---返回字母a对应的ASCII码●CHAR('48')=0---返回48这个ASCII码对应的字符●LCASE('ABcdE')="abced" 或LOWER('ABcdE')="abced"(将给定字符串转为小写)●UCASE('ABcdE')="ABCDE" 或UPPER('ABcdE')="ABCDE"(将给定字符串转为大写)●LTRIM(' fgf g h ')="fgf gh "(去掉给定字符串左边的空格)●RTRIM(' fgf gh ')=" fgf gh"(去掉给定字符串右边的空格)●LEN('sde123-TRE')=10(返回给定字符串的长度)●LEFT('sde123-TRE',5)="sde12"(从给定字符串左边开始,取指定长度的字符)●RIGHT('sde123-TRE',4)="-TRE"(从给定字符串右边开始,取指定长度的字符)●SUBSTRING('sde123-TRE',3,6)="e123-T"(从给定字符串的指定位置开始,取指定长度的字符)●CHARINDEX('23-','sde123-TRE')=5(返回第一个字符串在第二个字符串中出现的首位置,如果未出现则返回0)(注意:CHARINDEX('23T','sde123-TRE')=0)(注意:CHARINDEX('TRE','DFTRE345TREDGS')=3而CHARINDEX('TRE','DFTRE345TREDGS',4)=9,因为第三个参数未写则查找从第一个字符开始;否则从第三个参数指定的位置开始查找;第二个例子是从第4位开始查找,找到的第一个"TRE"位于第9位)●REVERSE('SDF463')="364FDS"(将给定字符串反转)●REPLACE('abcdefghicde','cde','xx')="abxxfghixx"(用第三个字符串替换第一个字符串中的所有第二个字符串)●STR(123.457,5,2)="123.46"(将数字转为字符串,第一个参数是要转换的数字,第二个参数是转换后的字符串的最大长度,第三个参数指定保留几位小数,请注意,这种转换是四舍五入的)(注意:STR(123.457,2,2)="**"------因为5小于123.457的长度)●STUFF('I AM NIMMY,WEI COME!',6,5,'RWM')="I AM RWM,WEI COME!"(将给定字符串中的某一部分删除并插入指定的字符串,第一个参数是待操作的字符串;第二个参数是要删除部分的起始位置;第三个参数是要删除部分的长度;第四个参数是要插入的字符串)(注意它和REPLACE的区别:STUFF('ERTY23TY',3,2,'K')='ERK23TY"而REPLACE('ERTY23TY','TY','K')="ERK23K")●REPLICATE('ab',6)="abababababab"(返回指定数量的指定字符串)●SPACE(6)=" "(返回指定数量的空格)***********************************************************日期函数●DATEPART() 返回给定日期的指定部分DATEPART(yy,'2003-12-27')=2003-------year/yyyy同义函数:year('2003-12-27')=2003DATEPART(mm,'2003-12-27')=12----month/m同义函数:month('2003-12-27')=12DATEPART(dd,'2003-12-27')=27----day/d同义函数:day('2003-12-27')=27DATEPART(dw,'2003-12-27')=7-----weekday(该日是一周的第七天,即星期六)DATEPART(hh,'13:55:34')=13------hourDATEPART(mi,'13:55:34')=55------minute/nDATEPART(ss,'13:55:34')=34------second/s●DATEADD(mm,2,'2003-12-27')="2003-2-27"(返回给定日期之后或之前的日期,第一个参数是递增的刻度,可以是年月日时分秒<见上>,第二个参数是递增数目,第三个参数是给定日期)●DATEDIFF(dd,'2003-12-23','2003-12-27')=4(返回两个给定日期之差,第一个参数指明差别的刻度,可以是年月日时分秒<见上>,第二个参数是开始日期,第二参数是结束日期)●DATENAME(dw,'2003-12-27')="星期六"(返回给定日期的指定名称,第一个参数指明要返回的名称类型,可以是年月日星期时分秒<见上>,第二个参数是给定日期)***************************************************************数学函数●ABS(-2)=2 返回一个数字的绝对值●返回大于等于参数的最小整数CEILING(1.2)=2/CEILING(1.7)=2/CEILING(2)=2CEILING(-1.2)=-1/CEILING(-1.7)=-1/CEILING(-1)=-1●返回小于等于参数的最大整数FLOOR(1.2)=1/FLOOR(1.7)=1/FLOOR(1)=1FLOOR(-1.2)=-2/FLOOR(-1.7)=-2/FLOOR(-2)=-2●返回四舍五入的指定位数的小数ROUND(1.2,0)=1/ROUND(1.7,0)=2/ROUND(2,0)=2ROUND(-1.2,0)=-1/ROUND(-1.7,0)=-2/ROUND(-2,0)=-2ROUND(1.3536,2)=1.35/ROUND(1.3536,3)=1.354●SQUARE(9)=81/ 返回参数的平方●SQRT(9)=3/ 返回参数的平方根●SIGN(0.01)=1/SIGN(1000)=1/SIGN(0)=0/SIGN(-0.3)=-1/SIGN(-10000)=-1判断参数是正数,负数还是0聚集函数:avg,求平均值count,统计记录的条数max,求最大值min,求最小值range,计算所选行的最大值与最小值的差stdev,计算所选行的标准偏差sum,求和函数variance,函数返回值样本的方差做为所有选择行的方差的无偏估计。
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)》常有命令中英文对照
DB=database 数据库;C/S客户机/服务器结构;(第一章)
Create 创建;alter 修改;drop 删除;add 添加;modify 增长;shrink 减小;parimary 首要的;filegrowth 增量;EXEC sp_help 显示;EXEC sp_rename 重命名;EXEC sp_dboption 配置选项;DBCC fileshrink 缩减文件大小;(第二章)
Table 表;column 列;constraint 约束;null 空值约束;parimary key 主键约束;unique 唯一约束;default 默认约束;check 检查约束;foreign key 外键约束;(第三章)
Select 查询;top 顶上的;distinct 非重复;where 条件表达式;into 到…里面;like 像…;join…inner 连接到…里面;union 联合;insert…values 插入…到…;update 更改;delete 删除;(第四章)
Index 索引;view 视图;clustered 聚集索引;nonclustered 非聚集索引;as 别名为…;(第五章)Trigger 触发器;(第七章)
Grant 权限授予;revoke 权限收回;deny 权限拒绝;(第八章)。