空愁居@十万图纸.军史资料
Would you like to react to this message? Create an account in a few clicks or log in to continue.

常用sql命令列表

向下

常用sql命令列表 Empty 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:31 am

--SQL常用命令
--数据的增删改查
--增加数据(插入数据)
insert into [表名]([字段],[字段]..) values(值,值,值..) --按需要字段填写
insert into [表名] values(值,值,值..) --插入全部字段,自动增长列不写

--删除数据(记得有外键先删除主键表里的相应内容)
--删除表里的内容
delete from [表名]
--要是想删某一行就加where条件
delete from [表名] where [字段]=值

--修改数据(更新数据)
--修改整个表内的数据
update [表名] set [字段]=值
--要是想修改某一行就加where条件
update [表名] set [字段1]=值1 where [字段2]=值2

--查询
select [字段],[字段] from [表名]
--条件查询
select [字段],[字段] from [表名] where [字段]=值

--升降序(一般加在查询语句末尾)
--升序(默认)
order by [字段] asc
--降序
order by [字段] desc
--例子
select [字段],[字段] from [表名] order by [字段] desc


--设置使用的数据库
use [数据库名]

--建立命令
--建立数据库
create database [数据库名]
on
(--数据库信息
NAME='aaa', --逻辑名称aaa
FILENAME='d:\bbb.mdf', --物理名称bbb(写全路径)
SIZE=5mb, --数据库初始大小
MAXSIZE=100mb, --增长的最大值
FILEGROWTH=15%, --增长率
)
log on
(--日志信息
NAME='aaa', --逻辑名称aaa
FILENAME='d:\bbb.ldf', --物理名称bbb(写全路径)
SIZE=2mb, --数据库初始大小
FILEGROWTH=1mb, --增长率
)

--建立表
create table [表名]
(
--[字段] [数据类型] [列的特征],
id int identity(1,1) not null,--identity(1,1) 是自动增长(起始值,递增值) ,not null 是不许为空(默认允许为空)
name varchar(20) not null,
)
--给表添加约束
alter table [表名]
add constraint [约束名]
--添加主键(pk) PriMary key([字段名])
--唯一约束(uq) Unique ([字段名])
--默认约束(df) default('默认文字') for [字段名]
--检查约束(ck) check([字段名] between 15 and 40) --填写的数字在15-40之间
--外键约束(fk) foreign key([字段名]) references [表名]([字段名])


--删除数据库
--exists检查是否存在
if exists(select * from sysdatabases where name = '[要删除的数据库名]')
drop database [要删除的数据库名]

if exists(select * from sysobjects where name = '[要删除的储存过程名]')
drop database [要删除的储存过程名]

--变量的使用 (声明和使用要一起进行不然会找不到变量)
declare @[变量名] [数据类型]
--如 declare @name varchar(Cool
declare @age int

--变量赋值
set @name =值
select @name =值

--例子
--查询信息 查找张三的信息
declare @name varchar(Cool
set @name = '张三'
select * from [表名] where [字段] = @name

--赋值查询 查询与张三同龄的人
declare @name varchar(Cool
declare @age int
set @name = '张三'
select @age = [字段] from [表名] where [字段]=@name
select * from [表名] where [字段]=@age


--全局变量 (两个@)
@@error 最后一个T-SQL错误的错误号
@@identity 最后一次插入的标识值
@@rowcount 上一个sql语句影响行数


--事务
--开始
begin transaction
--提交
commit transaction
--回滚
rollback transaction

--例子
begin transaction
declare @errorsum int --纪录错误
@errorsum = 0    --初始化没有错误
--SQL语句
set @errorsum=@errorsum+@@error --累计是否出错
--SQL语句
set @errorsum=@errorsum+@@error
--SQL语句
set @errorsum=@errorsum+@@error
if @errorsum <>0 --如果有错
begin
rollback transaction
end
else
begin
commit transaction
end
GO

--储存过程
--建立
create procedure [储存过程名]
as
declare @xx int ,
declare @yy varchar(Cool output (带有output为输出参数,否则视为输入参数)
--SQL语句
--SQL语句
--SQL语句
select @yy=值 ...
GO
--调用储存过程
--无参数
exec [储存过程名]
--有参数(顺序不能变,变量在储存过程内部的值为默认值)
exec [储存过程名] @xx=[参数],@yy=[参数]
--有输出参
declare @yy varchar(Cool
exec [储存过程名] 值,@yy output
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:32 am

SQL命令大全-中英文对照
--语 句 功 能
--数据操作
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 --定义当前事务数据访问特征
--程序化SQL
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划
OPEN --检索查询结果打开一个游标
FETCH --检索一行查询结果
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
---局部变量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以@@开头

--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'

--CASE
use pangu
update employee
set e_wage =
case
when 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.05
end

--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印变量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end

--WAITFOR
--例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay '01:02:03'
select * from employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time '23:08:00'
select * from employee
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:32 am

waitfor time '23:08:00'
select * from employee
***SELECT***
select *(列名) from table_name(表名) where column_name operator value
ex常用sql命令列表 Sad宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--------- 只能在使用like关键字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列号
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查询
--------- 除非能确保内层select只返回一个行的值,
--------- 否则应在外层where子句中用一个in限定符
select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*) from table_name group by stockname
--------- group by 将表按行分组,指定列中有相同的值
having count(*) = 2 --------- having选定指定的组
select *
from table1, table2
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id -------- 右外部连接
select stockname from table1
union [all] ----- union合并查询结果集,all-保留重复行
select stockname from table2
***insert***
insert into table_name (Stock_name,Stock_number) value ("***","***x")
value (select Stockname , Stocknumber from Stock_table2)---value为select语句
***update***
update table_name set Stockname = "***" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4
***delete***
delete from table_name where Stockid = 3
truncate 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(/*常用函数*/)***
----统计函数----
***G --求平均值
COUNT --统计数目
MAX --求最大值
MIN --求最小值
SUM --求和
--***G
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id
--MAX
--求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)
--STDEV()
--STDEV()函数返回表达式中所有数据的标准差
--STDEVP()
--STDEVP()函数返回总体标准差
--VAR()
--VAR()函数返回表达式中所有值的统计变异数
--VARP()
--VARP()函数返回总体变异数
----算术函数----
/***三角函数***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的余切
/***反三角函数***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度转换为角度返回与表达式相同的数据类型可为
--INTEGER/MONEY/REAL/FLOAT 类型
RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
--INTEGER/MONEY/REAL/FLOAT 类型
EXP(float_expression) --返回表达式的指数值
LOG(float_expression) --返回表达式的自然对数值
LOG10(float_expression)--返回表达式的以10 为底的对数值
SQRT(float_expression) --返回表达式的平方根
/***取近似值函数***/
CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为
--INTEGER/MONEY/REAL/FLOAT 类型
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.1415926535897936
RAND([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_name
into newtable
from oldtable*/
ISDATE() --函数判断所给定的表达式是否为合理日期
ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换
ISNUMERIC() --函数判断所给定的表达式是否为合理的数值
NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值
NULLIF(<expression1>, <expression2>)
--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:32 am

select - sql 命令
示例 请参阅

从一个或多个表中检索数据。

语法

SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]]
[Alias.] Select_Item [AS Column_Name]
[, [Alias.] Select_Item [AS Column_Name] ...]

FROM [FORCE]
[DatabaseName!]Table [[AS] Local_Alias]
[[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN
DatabaseName!]Table [[AS] Local_Alias]
[ON JoinCondition …]

[[INTO Destination]
| [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT]
| TO SCREEN]]

[PREFERENCE PreferenceName]

[NOCONSOLE]

[PLAIN]

[NOWAIT]

[WHERE JoinCondition [AND JoinCondition ...]
[AND | OR FilterCondition [AND | OR FilterCondition ...]]]

[GROUP BY GroupColumn [, GroupColumn ...]]

[H***ING FilterCondition]

[UNION [ALL] SELECT命令]

[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]

参数

SELECT

在 SELECT 子句中指定在查询结果中包含的字段、常量和表达式。

ALL

查询结果中包含所有行 ( 包括重复值 )。ALL 是默认设置。

DISTINCT

在查询结果中剔除重复的行。

注意 每一个 SELECT 子句只能使用一次 DISTINCT。

TOP nExpr [PERCENT]

在符合查询条件的所有记录中,选取指定数量或百分比的记录。TOP 子句必须与 ORDER BY 子句同时使用。ORDER BY 子句指定查询结果中包含的列上由Top字句决定的行数, TOP 子句根据此排序选定最开始的 nExpr个或 nExpr% 的记录。

您可以指定选取 1 到 32767 个记录。使用 ORDER BY
子句指定的字段进行排序,会产生并列的情况,比如,可能有多个记录,它们在选定的字段上相同;所以,如果您指定 nExpr 为
10,在查询结果中可能多于 10 个记录,因为可能有几个记录位置并列。

如果包含 PERCENT 关键字指定查询结果中的记录数,得到记录数的可能是小数,这时进行取整。包含 PERCENT 关键字时,nExpr 的范围是 0.01 到 99.99。

Alias.

限定匹配项的名称。 Select_Item 指定的每一项在查询结果中都生成一列。如果多个项具有相同的名称,则应在这些项名前加上表的别名和一个句点,以防止出现重复的列。

Select_Item 指定包括在查询结果中的项。一个项可以是:

FROM 子句所包含的表中的字段名称。


一个常量,查询结果中每一行都出现这个常量值。


一个表达式,可以是用户自定义函数名。
AS Column_Name

指定查询结果中列的标题。当 Select_Item 是一个表达式或一个字段函数时,如果要给此列取一个有含义的名称,一般可以使用这个子句。Column_Name可以是一个表达式,但不能包含那些表字段名称中不允许出现的字符(如空格)。

FROM

列出所有从中检索数据的表。如果没有打开表, Visual FoxPro 显示“打开”对话框以便指定文件位置。表打开以后,直到查询结束时才关闭。

如果您包含 FORCE 关键字,Visual FoxPro 在建立查询时会严格按照您在FROM 子句中声明的顺序连接表;若不包含 FORCE
关键字,Visual FoxPro 会试图对查询进行优化。使用 FORCE 子句,避免了优化过程,可能加快查询执行的速度。

DatabaseName!

当包含表的数据库不是当前数据库时,DatabaseName! 指定这个数据库的名称。如果数据库不是当前数据库,就必须指定包含表的数据库名称。应在数据库名称之后表名之前加上感叹号(!)分隔符。

[AS] Local_Alias

为 Table 中的表指定一个临时名称。如果指定了本地别名,那么在整个SELECT 语句中必须都用这个别名代替表名。本地别名不影响 Visual FoxPro环境。INNER JOIN 只有在其他表中包含对应记录(一个或多个)的记录才出现在查询结果中。

INNER JOIN 只有在其他表中包含对应记录(一个或多个)的记录才出现在查询结果中。

LEFT [OUTER] JOIN 在查询结果中包含:JOIN 左侧表中的所有记录,以及JOIN 右侧表中匹配的记录。OUTER 关键字可被省略;包含 OUTER 强调这是一个外连接 (outer join)。

RIGHT [OUTER] JOIN 在查询结果中包含:JOIN 右侧表中的所有记录,以及 JOIN 左侧表中匹配的记录。OUTER 关键字可被省略;包含 OUTER 强调这是一个外连接接 (outer join)。

FULL [OUTER] JOIN 在查询结果中包含:JOIN 两侧所有的匹配记录,和不匹配的记录;包含 OUTER 强调这是一个外连接 (outer join)。

ON JoinCondition 指定连接条件。

INTO Destination

指定在何处保存查询结果。如果在同一个查询中同时包括了 INTO 子句和 TO 子句,则 TO 子句不起作用。如果没有包括 INTO 子句,查询结果显示在“浏览”窗口中。也可以用 TO 将查询结果定向输出到打印机或文件。

Destination 可以是下列子句之一:

ARRAY ArrayName ,将查询结果保存到变量数组中。如果查询结果中不包含任何记录,则不创建这个数组。


CURSOR CursorName将查询结果保存到临时表中。如果指定了一个已打开表的名称,则 Visual FoxPro 产生错误信息。执行完
SELECT 语句后,临时表仍然保持打开、活动但只读。一旦关闭临时表,则自动删除它。临时表作为 SORTWORK
指定驱动器上的一个临时文件存在。
包含NOFILTER是为了创建一个能用在后来的询问中的指针。在Visual燜oxPro以前的版本需要一个额外的常量或表达式作为过滤器去创建一个能用在后来的询问中的指针。

SELECT *, .T. FROM customers INTO CURSOR myquery

包含NOFILTER能够减少询问的发生是因为临时表是建立在磁盘上的,当临时表被删除,指针就要被关闭。

DBF TableName | TABLE TableName ,将查询结果保存到一个表中。如果指定的表已经打开,并且 SET SAFETY
设置为 OFF,则 Visual FoxPro 在不给出警告的情况下改写该表。如果没有指定扩展名,Visual FoxPro 指定表的扩展名是
.DBF。SELECT 语句执行结束后,表仍然保持打开活动状态。
包含DATABASE DatabaseName 以指定添加了表的数据库。包含NAMELongTableName 可以为该表命一个最多可包括128个字符的并且可以在数据库中代替短名字的长名。

TO FILE FileName

如果命令中包括了 TO 子句,但没有包括 INTO 子句,则查询结果定向输出到名为FileName 的 ASCII 码文件、打印机或 Visual FoxPro 主窗口。

ADDITIVE 把查询结果定向输出到由TO FILE FileName指定的文本文件的现存目录上。

TO PRINTER [PROMPT] 使查询结果定向输出到打印机。在打印开始之前,使用可选的 PROMPT 子句显示一个对话框。您可以根据当前安装的打印机驱动程序调整打印机的设置。将 PROMPT 子句放置在紧跟 TO PRINTER 之后。

TO SCREEN 使查询结果定向输出到 Visual FoxPro 主窗口或活动的用户自定义窗口中。

PREFERENCE PreferenceName

如果查询结果送往浏览窗口,就可以使用 PREFERENCE 保存浏览窗口的属性和选项以备后用。PREFERENCE 把特征属性或参数选项长期保存在 FOXUSER 的资源文件中,任何时侯都可以对它们进行检索。

第一次执行有 PREFERENCE PreferenceName 的 SELECT 命令时创建参数选项。以后执行有相同参数选项名的 SELECT 命令时便将浏览窗口恢复到原来的参数选项状态。当浏览窗口关闭时,更新参数选项。

如果您按下CTRL+Q+W 键退出“浏览”窗口,您对“浏览”窗口所做的更改不会保存到资源文件中。

NOCONSOLE

不显示送到文件、打印机或 Visual FoxPro 主窗口的查询结果。

PLAIN

防止列标题出现在显示的查询结果中。不管有无 TO 子句都可使用 PLAIN子句。如果 SELECT 语句中包括 INTO 子句,则忽略 PLAIN 子句。

NOWAIT

打开浏览窗口并将查询结果输出到这个窗口后继续程序的执行。程序并不等待关闭浏览窗口,而是立即执行紧接在 SELECT 语句后面的程序行。

SELECT 命令中包括 TO SCREEN 可以把查询结果定向输出到 Visual FoxPro 主窗口或用户自定义窗口。如果显示时
Visual FoxPro
主窗口或用户自定义窗口中写满了一屏,就暂停输出。按任意键可以查看查询结果后面的内容。但是,如果命令中包括了NOWAIT
子句,显示查询结果时就不会暂停,等待按键,而是在 Visual FoxPro 主窗口或用户自定义窗口中连续滚过所有内容。如果命令中包含有
INTO 子句,忽略NOWAIT 子句。

WHERE

通知 Visual燜oxPro 在查询结果中仅包含一定数目的记录。如果要从多个表中检索数据,WHERE 子句是必需的。

JoinCondition

指定一个字段,该字段连接 FROM 子句中的表。如果查询中包括不止一个表,就应该为第一个表后的每一个表指定连接条件。

连接多个查询条件必须使用操作符 AND。每个连接条件都有下面的形式:

FieldName1 Comparison FieldName2

其中 FieldName1 是一个表中的字段名,FieldName2 是另一表中的字段名,Comparison 是下表中列出的某一操作符。

操作符 比较关系
= 相等
== 完全相等
LIKE SQL LIKE
<>, !=, # 不相等
> 大于
>= 大于等于
< 小于
<= 小于等于

对字符串使用 = 操作符时,所得结果与 SET ANSI 的设置有关。当 SET ANSI 设置为 OFF 时, Visual FoxPro
比较字符串的方式与 Xbase 的用户相同。当 SET ANSI 的设置为 ON 时, Visual FoxPro 比较字符串时遵守 ANSI
标准。有关 Visual FoxPro 字符比较方法的详细内容,请参阅 SET ANSI 和 SET EXACT。
WHERE子句支持ESCAPE操作符,允许执行对包含有SELECT ?SQL %和通配符的数据的有意义的查询。

ESCAPE子句允许指定一个可以看作文字字符的SELECT ?SQL通配符。 ESCAPE子句允许指定一个字符,一旦它被放到通配符字符之前,就表示这个通配符被看作一个文字字符。

FilterCondition

指定将包含在查询结果中记录必须符合的条件。使用 AND 或 OR 操作符,您可以包含随意数目的过滤条件。您还可以使用 NOT 操作符将逻辑表达式的值取反,或使用 EMPTY() 函数以检查空字段。

FilterCondition 可以是下面示例中的任何一种形式:

示例 1

示例 1 显示 FieldName1 Comparison FieldName窗体中的Fliter Condition

customer.cust_id = orders.cust_id

示例 2

示例 2 显示 FieldName Comparison Expression 窗体中的Fliter Condition

payments.amount >= 1000

示例 3

示例 3 显示 FieldName Comparison ALL (Subquery) 窗体中的 Fliter Condition

当筛选条件包括 ALL 时,只有指定字段满足所有子查询结果后,它所在的记录才能添加到查询结果中。

company < ALL ;
(SELECT company FROM customer WHERE country = "UK")

示例 4

示例 4 显示 FieldName Comparison ANY | SOME (Subquery) 窗体中的 Fliter Condition

当筛选条件包含 ANY 或 SOME 时,字段必须至少满足一个由子查询产生的值所决定的比较条件。

company < ANY ;
(SELECT company FROM customer WHERE country = "UK")

示例 5

示例 5 显示 FieldName [NOT] BETWEEN Start_Range AND End_Range 窗体中的Fliter Condition

该示例检查字段中的值是否在指定范围内。

customer.postalcode BETWEEN 90000 AND 99999

示例 6

示例 6 显示 [NOT] EXISTS (Subquery) 窗体中的 Fliter Condition

该示例检查是否至少有一行满足子查询中的条件。当筛选条件包括 EXISTS 时,只要子查询不为空集,筛选的条件就为“真”(.T.)。

EXISTS ;
(SELECT * FROM orders WHERE customer.postalcode = orders.postalcode)

示例 7

示例 7 显示 FieldName [NOT] IN Value_Set 窗体中的 Fliter Condition

当筛选条件中包含 IN 时,把字段所在记录添加到查询结果中的条件是字段必须包含值集合的一个元素。

customer.postalcode NOT IN ("98052","98072","98034")

示例 8

示例 8 显示 FieldName [NOT] IN (Subquery) 窗体中的 Fliter Condition

这里,记录包含在查询结果中的条件是:字段必须包含一个子查询的返回值。

customer.cust_id IN ;
(SELECT orders.cust_id FROM orders WHERE orders.city="Seattle")

示例 9

示例 9 显示 FieldName [NOT] LIKE cExpression 窗体中的 Fliter Condition

customer.country NOT LIKE "UK"

这个筛选条件查找每个与字符串表达式相匹配的字段。

在字符串表达式中可以使用百分号 (%) 和下划线 ( _ ) 通配符。下划线表示字符串中一个任意字符。
GROUP BY GroupColumn [, GroupColumn ...]

按列的值对查询结果的行进行分组。GroupColumn 可以是常规的表字段名,也可以是一个包含 SQL 字段函数的字段名,还可以是一个数值表达式,指定查询结果表中的列位置(最左边的列编号为 1 )。

H***ING FilterCondition

指定包括在查询结果中的组必须满足的筛选条件。H***ING 应该同 GROUP BY一起使用。它能包含数量不限的筛选条件,筛选条件用 AND 或 OR 连接,还可以使用 NOT 来对逻辑表达式求反。

FilterCondition 不能包括子查询。

使用 H***ING 子句的命令如果没有使用 GROUP BY 子句,则它的作用与WHERE 子句相同。可以在 H***ING 子句中使用本地别名和字段函数。如果H***ING 子句不包含字段函数的话,使用 WHERE 子句可以获得较快的速度。

[UNION [ALL] SELECT命令]

把一个 SELECT 语句的最后查询结果同另一个 SELECT 语句最后查询结果组合起来。默认情况下,UNION 检查组合的结果并排除重复的行。要组合多个UNION 子句,可使用括号。

ALL 防止 UNION 删除组合结果中重复的行。

UNION 子句遵守下列规则:

不能使用 UNION 来组合子查询。


两个 SELECT 命令的查询结果中的列数必须相同。


两个 SELECT 查询结果中的对应列必须有相同的数据类型和宽度。


只有最后的 SELECT 中可以包含 ORDER BY 子句,而且必须按编号指出所输出的列。如果包含了一个 ORDER BY 子句,它将影响整个结果。
ORDER BY Order_Item

根据列的数据对查询结果进行排序。每个 Order_Item 都必须对应查询结果中的一列。它可以是下列之一:

FROM 子句中表的字段,同时也是 SELECT 主句(不在子查询中)的一个选择项。


一个数值表达式,表示查询结果中列的位置(最左边列编号为 1 )。
ASC 指定查询结果根据排序项以升序排列。它是 ORDER BY 的默认选项。

DESC 指定查询结果以降序排列。

如果不使用 ORDER BY 指定查询结果的排列顺序,则查询结果不排序。

说明

同其他 Visual FoxPro 命令一样,SELECT 是 Visual FoxPro 的一个内部 SQL 命令。当使用 SELECT
进行查询时,Visual FoxPro 先解释查询要求,然后从表中查询并检索指定数据。可以在下列环境内建立 SELECT 查询:

命令窗口

一个 Visual FoxPro 程序(与使用其他 Visual FoxPro 命令一样)

查询设计器
如果执行了 SET TALK ON 命令后再执行 SELECT 命令,则 Visual FoxPro 显示出执行查询所用的时间和查询结果中记录的数目。_TALLY 包含了查询结果中记录的数目。

SET FILTER 设置的筛选条件对SELECT 命令不起作用。

下面部分将多次提到子查询 (subquery),子查询是指在 SELECT 命令中包含的SELECT 命令。在 SELECT 命令的 WHERE
子句中可以包含最多两个平级的(非嵌套)的子查询。子查询中可以有多个连接条件 (join conditions)。

创建查询输出时,列的命名遵循如下规则:

如果选择项是具有唯一名称的字段,则用字段名作为输出列名。


如果多个选择项具有相同名称。例如,如果名为 Customer 的表有一个STREET 字段,而名为 Employees 的表也有一个
STREET 字段,则输出列命名为 Extension_A 和 Extension_B (STREET_A 和
STREET_B)。如果选择项名称有 10 字符长,可以将名称截短后再加下划线和字母。例如,DEPARTMENT 变为 DEPARTME_A。


如果选择项是表达式,它的输出列命名为 EXP_A。其他表达式分别命名为EXP_B、EXP_C,依此类推。


如果选择项包含诸如 COUNT() 这样的字段函数,则输出列命名为CNT_A。如果另一个选择项包含 SUM(),它的输出列命名为 SUM_B。
SELECT 子句中的用户自定义函数: 在 SELECT 子句中使用用户自定义函数有明显优点,但使用时应考虑以下限制:

SELECT 子句的运行速度会受用户自定义函数执行速度的影响。因此,如果使用户自定义函数的操作量很大,则这些函数的功能最好调用 C 语言或汇编语言编写的 API 或用户自定义函数来完成。


在 SELECT 激活的用户自定义函数中,很难预测 Visual FoxPro
输入/输出(I/O)和表的环境。一般来说,不知道选择的工作区是哪一个,不知道当前表的名称,甚至不知道正在处理的字段名。这些变量的值完全取决于用户
自定义函数在优化过程的什么地方激活。


在 SELECT 子句调用的用户自定义函数中修改 Visual FoxPro I/O 或表的环境是很不安全的。一般来说,这样做的结果难以预料。


从 SELECT 将值传递给用户自定函数唯一可靠的方法,是激活用户自定义函数时以参数的形式传递。

经过实践,有可能发现某种被认为是违法的操作在某种 FoxPro 版本中运行正确,但这并不保证它在以后的版本中也能正确运行。
抛开这些限制不说,用户自定义函数在 SELECT 语句中还是可接受的。但不要忘记使用 SELECT 可能要降低性能。

下列字段函数可以与选定项一起使用,选定项可以是一个字段或包含字段的表达式:

***G(Select_Item) ,计算列中数值的平均值。


COUNT(Select_Item) ,计算列中选定项的数目。计算查询输出的行数。


MIN(Select_Item),确定列中 Select_Item 的最小值。

MAX(Select_Item),确定列中 Select_Item 的最大值。

SUM(Select_Item),计算列中数值的和。
字段函数不能嵌套使用。

连接 (Join) Visual FoxPro 支持 ANSI SQL '92 连接 (Join)
语法,通过比较两个或多个表中的字段,将它们的记录连接到一起,生成查询。例如,内部连接 (inner join) 是将两个表中连接字段
(joined field) 值相同的记录选取到查询中。Visual FoxPro 支持嵌套连接(nested joins)

重要事项 创建连接条件时,请记住如下几点:

如果在查询中包括两个表,又没有指定连接条件,那么第一个表中每一个记录同第二个表中每一记录之间,只要满足筛选条件,就连接起来。这种查询产生的结果很长。


在连接条件中使用 DELETED(),EOF(),FOUND(),RECCOUNT(),和 RECNO()
等支持可选别名或工作区的函数时要小心。在这些函数中包括别名或工作区可能导致不可预料的结果。SELECT 不使用工作区,它执行与 USE ...
AGAIN
相同的操作。在不带可选别名和工作区的情况下使用这些函数进行单表查询时,可得到正确的结果。但是,使用这些函数进行多表查询时,即使不带可选别名或工作
区,也可能得到一些莫明其妙的结果。

当连接含有空字段 (empty field) 的表时也要注意。这是因为 Visual FoxPro匹配空字段。例如,连接
CUSTOMER.ZIP 和 INVOICE.ZIP 两个表。如果CUSTOMER 表中的 100 条记录中没有给出邮政编码,INVOICE
表中也有400 条记录没有给出邮政编码,那么查询结果中将会由于空字段的匹配而出现 40000 条多余的记录。要去除查询结果中的空记录,可以使用
EMPTY() 函数。
select - sql 命令示例
以下示例说明了使用 select ?sql 用户自定义函数的用法:

示例 1

示例 1 显示了 customer 表中所有的公司名称(来自一个表的一个字段)。

close all
close databases
open database (home(2) + 'data\testdata')
select customer.company ;
from customer


示例 2

示例 2 显示了来自两个表中三个字段的内容及两个表基于 cust_id 字段的连接。两个表均使用了本地别名。

close all
close databases
open database (home(2) + 'data\testdata')
select a.company, b.order_date, b.shipped_on ;
from customer a, orders b ;
where a.cust_id = b.cust_id


示例 3

示例 3 显示了在指定字段只有唯一数据的记录。

close all
close databases
open database (home(2) + 'data\testdata')
select distinct a.company, b.order_date, b.shipped_on ;
from customer a, orders b ;
where a.cust_id = b.cust_id


示例 4

示例 4 以升序次序显示了 country、postalcode 和 company 字段。

close all
close databases
open database (home(2) + 'data\testdata')
select country, postalcode, company ;
from customer ;
order by country, postalcode, company


示例 5

示例 5 将来自两个表的字段内容存储在第三个表中。

close all
close databases
open database (home(2) + 'data\testdata')
select a.company, b.order_date, b.shipped_on ;
from customer a, orders b ;
where a.cust_id = b.cust_id ;
into table custship.dbf
browse


示例 6

示例 6 显示订单 (order) 日期早于 1994 年 2 月 16 日的记录。

close all
close databases
open database (home(2) + 'data\testdata')
select a.company, b.order_date, b.shipped_on ;
from customer a, orders b ;
where a.cust_id = b.cust_id ;
and b.order_date < {^1994-02-16}


示例 7

示例 7 显示 customer 表中邮政编码与 orders 表的邮政编码相匹配的所有公司名。

close all
close databases
open database (home(2) + 'data\testdata')
select company from customer a where ;
exists (select * from orders b where a.postalcode = b.postalcode)


示例 8

示例 8 显示 customer 表中公司名以大写的 c 开头,但长度未定的所有记录。

close all
close databases
open database (home(2) + 'data\testdata')
select * from customer a where a.company like "c%"


示例 9

示例 9 显示 customer 表中国家名以大写的 u 开头其后跟着未知字母的所有记录。

close all
close databases
open database (home(2) + 'data\testdata')
select * from customer a where a.country like "u_"


示例 10

示例 10 以大写方式,输出列为 citylist 显示所有城市名。

close all
close databases
open database (home(2) + 'data\testdata')
select upper(city) as citylist from customer


示例 11

示例 11 演示了您可以执行在包含百分比符号 (%) 数据上查询的方式。在百分比之前放置的反斜线 (\) 表示应该将百分比符号当作字符处理,而 escape子句中的反斜线指定为转义字符。

因为在 visual foxpro 的示例表中不包含百分比符号,所以查询没有返回结果。

close all
close databases
open database (home(2) + 'data\testdata')
select * from customer;
where company like "%\%%" escape ""


示例 12

示例 12 演示了您可以执行在包含下划线符号 (_) 数据上查询的方式。在下划线之前放置的反斜线 (\) 表示应该将下划线符号当作字符处理,而 escape子句中的反斜线指定为转义字符。

因为在 visual燜oxpro 的示例表中不包含下划线符号,所以查询没有返回结果。

close all
close databases
open database (home(2) + 'data\testdata')
select * from customer;
where company like "%\_%" escape ""


示例 13

在示例 13 中,转义字符使用它自身的含义。短划线既是转义字符同时也是具有意义字符。查询返回公司名包含百分号后跟着短划线的所有行。

因为在 visual燜oxpro 的示例表中不包含百分比符号,所以查询没有返回结果。

close all
close databases
open database (home(2) + 'data\testdata')
select * from customer;
where company like "%-%--%" escape "-"
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:32 am

Select
用途:
从指定表中取出指定的列的数据
语法:

SELECT column_name(s) FROM table_name

解释:
从数据库中选取资料列,并允许从一或多个资料表中,选取一或多个资料列或资料行。SELECT 陈述式的完整语法相当复杂,但主要子句可摘要为:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ H***ING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
例:
“Persons” 表中的数据有
LastName
FirstName
Address
City
Hansen
Ola
Timoteivn 10
Sandnes
Svendson
Tove
Borgvn 23
Sandnes
Pettersen
Kari
Storgt 20
Stavanger

选出字段名” LastName”、” FirstName” 的数据
SELECT LastName,FirstName FROM Persons

返回结果:
LastName
FirstName
Hansen
Ola
Svendson
Tove
Pettersen
Kari

选出所有字段的数据
SELECT * FROM Persons

返回结果:

LastName
FirstName
Address
City
Hansen
Ola
Timoteivn 10
Sandnes
Svendson
Tove
Borgvn 23
Sandnes
Pettersen
Kari
Storgt 20
Stavanger

Where
用途:
被用来规定一种选择查询的标准
语法:
SELECT column FROM table WHERE column condition &#118;alue

下面的操作符能被使用在WHERE中:
=,<>,>,<,>=,<=,BETWEEN,LIKE
注意: 在某些SQL的版本中不等号< >能被写作为!=
解释:
SELECT语句返回WHERE子句中条件为true的数据
例:
从” Persons”表中选出生活在” Sandnes” 的人
SELECT * FROM Persons WHERE City='Sandnes'

Persons 表中的数据有:
LastName
FirstName
Address
City
Year
Hansen
Ola
Timoteivn 10
Sandnes
1951
Svendson
Tove
Borgvn 23
Sandnes
1978
Svendson
Stale
Kaivn 18
Sandnes
1980
Pettersen
Kari
Storgt 20
Stavanger
1960

返回结果:
LastName
FirstName
Address
City
Year
Hansen
Ola
Timoteivn 10
Sandnes
1951
Svendson
Tove
Borgvn 23
Sandnes
1978
Svendson
Stale
Kaivn 18
Sandnes
1980

And & Or
用途:
在WHERE子句中AND和OR被用来连接两个或者更多的条件
解释:
AND在结合两个布尔表达式时,只有在两个表达式都为 TRUE 时才传回 TRUE
OR在结合两个布尔表达式时,只要其中一个条件为 TRUE 时,OR便传回 TRUE
例:
Persons 表中的原始数据:
LastName
FirstName
Address
City
Hansen
Ola
Timoteivn 10
Sandnes
Svendson
Tove
Borgvn 23
Sandnes
Svendson
Stephen
Kaivn 18
Sandnes

用AND运算子来查找Persons 表中FirstName为”Tove”而且LastName为” Svendson”的数据
SELECT * FROM Persons
WHERE FirstName='Tove'
AND LastName='Svendson'

返回结果:
LastName
FirstName
Address
City
Svendson
Tove
Borgvn 23
Sandnes

用OR运算子来查找Persons 表中FirstName为”Tove”或者LastName为” Svendson”的数据
SELECT * FROM Persons
WHERE firstname='Tove'
OR lastname='Svendson'

返回结果:
LastName
FirstName
Address
City
Svendson
Tove
Borgvn 23
Sandnes
Svendson
Stephen
Kaivn 18
Sandnes

你也能结合AND和OR (使用括号形成复杂的表达式),如:
SELECT * FROM Persons WHERE
(FirstName='Tove' OR FirstName='Stephen')
AND LastName='Svendson'

返回结果:
LastName
FirstName
Address
City
Svendson
Tove
Borgvn 23
Sandnes
Svendson
Stephen
Kaivn 18
Sandnes

Between…And
用途:
指定需返回数据的范围
语法:
SELECT column_name FROM table_name
WHERE column_name
BETWEEN &#118;alue1 AND &#118;alue2

例:
“Persons”表中的原始数据
LastName
FirstName
Address
City
Hansen
Ola
Timoteivn 10
Sandnes
Nordmann
Anna
Neset 18
Sandnes
Pettersen
Kari
Storgt 20
Stavanger
Svendson
Tove
Borgvn 23
Sandnes

用BETWEEN…AND返回LastName为从”Hansen”到”Pettersen”的数据:
SELECT * FROM Persons WHERE LastName
BETWEEN 'Hansen' AND 'Pettersen'

返回结果:
LastName
FirstName
Address
City
Hansen
Ola
Timoteivn 10
Sandnes
Nordmann
Anna
Neset 18
Sandnes
Pettersen
Kari
Storgt 20
Stavanger

为了显示指定范围之外的数据,也可以用NOT操作符:
SELECT * FROM Persons WHERE LastName
NOT BETWEEN 'Hansen' AND 'Pettersen'

返回结果:
LastName
FirstName
Address
City
Svendson
Tove
Borgvn 23
Sandnes

Distinct
用途:
DISTINCT关键字被用作返回唯一的值
语法:
SELECT DISTINCT column-name(s) FROM table-name

解释:
当column-name(s)中存在重复的值时,返回结果仅留下一个
例:
“Orders”表中的原始数据
Company
OrderNumber
Sega
3412
W3Schools
2312
Trio
4678
W3Schools
6798

用DISTINCT关键字返回Company字段中唯一的值:
SELECT DISTINCT Company FROM Orders

返回结果:
Company
Sega
W3Schools
Trio

Order by
用途:
指定结果集的排序
语法:
SELECT column-name(s) FROM table-name ORDER BY { order_by_expression
[ ASC | DESC ] }

解释:
指定结果集的排序,可以按照ASC(递增方式排序,从最低值到最高值)或者DESC(递减方式排序,从最高值到最低值)的方式进行排序,默认的方式是ASC
例:
“Orders”表中的原始数据:
Company
OrderNumber
Sega
3412
ABC Shop
5678
W3Schools
2312
W3Schools
6798

按照Company字段的升序方式返回结果集:
SELECT Company, OrderNumber FROM Orders
ORDER BY Company

返回结果:
Company
OrderNumber
ABC Shop
5678
Sega
3412
W3Schools
6798
W3Schools
2312

按照Company字段的降序方式返回结果集:
SELECT Company, OrderNumber FROM Orders
ORDER BY Company DESC

返回结果:
Company
OrderNumber
W3Schools
6798
W3Schools
2312
Sega
3412
ABC Shop
5678

Group by
用途:
对结果集进行分组,常与汇总函数一起使用。
语法:
SELECT column,SUM(column) FROM table GROUP BY column

例:
“Sales”表中的原始数据:
Company
Amount
W3Schools
5500
IBM
4500
W3Schools
7100

按照Company字段进行分组,求出每个Company的Amout的合计:
SELECT Company,SUM(Amount) FROM Sales
GROUP BY Company

返回结果:
Company
SUM(Amount)
W3Schools
12600
IBM
4500

Having
用途:
指定群组或汇总的搜寻条件。
语法:
SELECT column,SUM(column) FROM table
GROUP BY column
H***ING SUM(column) condition &#118;alue

解释:
H***ING 通常与 GROUP BY 子句同时使用。不使用 GROUP BY 时,H***ING 则与 WHERE 子句功能相似。
例:
“Sales”表中的原始数据:
Company
Amount
W3Schools
5500
IBM
4500
W3Schools
7100

按照Company字段进行分组,求出每个Company的Amout的合计在10000以上的数据:
SELECT Company,SUM(Amount) FROM Sales
GROUP BY Company H***ING SUM(Amount)>10000

返回结果:
Company
SUM(Amount)
W3Schools
12600

Join
用途:
当你要从两个或者以上的表中选取结果集时,你就会用到JOIN。
例:
“Employees”表中的数据如下,(其中ID为主键):
ID
Name
01
Hansen, Ola
02
Svendson, Tove
03
Svendson, Stephen
04
Pettersen, Kari

“Orders”表中的数据如下:
ID
Product
01
Printer
03
Table
03
Chair

用Employees的ID和Orders的ID相关联选取数据:
SELECT Employees.Name, Orders.Product
FROM Employees, Orders
WHERE Employees.ID = Orders.ID

返回结果:
Name
Product
Hansen, Ola
Printer
Svendson, Stephen
Table
Svendson, Stephen
Chair

或者你也可以用JOIN关键字来完成上面的操作:
SELECT Employees.Name, Orders.Product
FROM Employees
INNER JOIN Orders
ON Employees.ID = Orders.ID

INNER JOIN的语法:
SELECT field1, field2, field3
FROM first_table
INNER JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield

解释:
INNER JOIN返回的结果集是两个表中所有相匹配的数据。

LEFT JOIN的语法:
SELECT field1, field2, field3
FROM first_table
LEFT JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield

用”Employees”表去左外联结”Orders”表去找出相关数据:
SELECT Employees.Name, Orders.Product
FROM Employees
LEFT JOIN Orders
ON Employees.ID = Orders.ID

返回结果:
Name
Product
Hansen, Ola
Printer
Svendson, Tove

Svendson, Stephen
Table
Svendson, Stephen
Chair
Pettersen, Kari

解释:
LEFT JOIN返回”first_table”中所有的行尽管在” second_table”中没有相匹配的数据。

RIGHT JOIN的语法:
SELECT field1, field2, field3
FROM first_table
RIGHT JOIN second_table
ON first_table.keyfield = second_table.foreign_keyfield

用”Employees”表去右外联结”Orders”表去找出相关数据:
SELECT Employees.Name, Orders.Product
FROM Employees
RIGHT JOIN Orders
ON Employees.ID = Orders.ID

返回结果:
Name
Product
Hansen, Ola
Printer
Svendson, Stephen
Table
Svendson, Stephen
Chair

解释:
RIGHT JOIN返回” second_table”中所有的行尽管在”first_table”中没有相匹配的数据。

Alias
用途:
可用在表、结果集或者列上,为它们取一个逻辑名称
语法:
给列取别名:
SELECT column AS column_alias FROM table

给表取别名:
SELECT column FROM table AS table_alias

例:
“Persons”表中的原始数据:
LastName
FirstName
Address
City
Hansen
Ola
Timoteivn 10
Sandnes
Svendson
Tove
Borgvn 23
Sandnes
Pettersen
Kari
Storgt 20
Stavanger

运行下面的SQL:
SELECT LastName AS Family, FirstName AS Name
FROM Persons

返回结果:
Family
Name
Hansen
Ola
Svendson
Tove
Pettersen
Kari

运行下面的SQL:
SELECT LastName, FirstName
FROM Persons AS Employees

返回结果:
Employees中的数据有:
LastName
FirstName
Hansen
Ola
Svendson
Tove
Pettersen
Kari

Insert Into
用途:
在表中插入新行
语法:
插入一行数据
INSERT INTO table_name
&#118;alueS (&#118;alue1, &#118;alue2,....)

插入一行数据在指定的字段上
INSERT INTO table_name (column1, column2,...)
&#118;alueS (&#118;alue1, &#118;alue2,....)

例:
“Persons”表中的原始数据:
LastName
FirstName
Address
City
Pettersen
Kari
Storgt 20
Stavanger

运行下面的SQL插入一行数据:
INSERT INTO Persons
&#118;alueS ('Hetland', 'Camilla', 'Hagabakka 24', 'Sandnes')

插入后”Persons”表中的数据为:
LastName
FirstName
Address
City
Pettersen
Kari
Storgt 20
Stavanger
Hetland
Camilla
Hagabakka 24
Sandnes

运行下面的SQL插入一行数据在指定的字段上:
INSERT INTO Persons (LastName, Address)
&#118;alueS ('Rasmussen', 'Storgt 67')

插入后”Persons”表中的数据为:
LastName
FirstName
Address
City
Pettersen
Kari
Storgt 20
Stavanger
Hetland
Camilla
Hagabakka 24
Sandnes
Rasmussen
Storgt 67

Update
用途:
更新表中原有数据
语法:
UPDATE table_name SET column_name = new_&#118;alue
WHERE column_name = some_&#118;alue

例:
“Person”表中的原始数据:
LastName
FirstName
Address
City
Nilsen
Fred
Kirkegt 56
Stavanger
Rasmussen
Storgt 67

运行下面的SQL将Person表中LastName字段为”Rasmussen”的FirstName更新为”Nina”:
UPDATE Person SET FirstName = 'Nina'
WHERE LastName = 'Rasmussen'

更新后”Person”表中的数据为:
LastName
FirstName
Address
City
Nilsen
Fred
Kirkegt 56
Stavanger
Rasmussen
Nina
Storgt 67

同样的,用UPDATE语句也可以同时更新多个字段:
UPDATE Person
SET Address = 'Stien 12', City = 'Stavanger'
WHERE LastName = 'Rasmussen'

更新后”Person”表中的数据为:
LastName
FirstName
Address
City
Nilsen
Fred
Kirkegt 56
Stavanger
Rasmussen
Nina
Stien 12
Stavanger

Delete
用途:
删除表中的数据
语法:
DELETE FROM table_name WHERE column_name = some_&#118;alue

例:
“Person”表中的原始数据:
LastName
FirstName
Address
City
Nilsen
Fred
Kirkegt 56
Stavanger
Rasmussen
Nina
Stien 12
Stavanger

删除Person表中LastName为”Rasmussen”的数据:
DELETE FROM Person WHERE LastName = 'Rasmussen'

执行删除语句后”Person”表中的数据为:
LastName
FirstName
Address
City
Nilsen
Fred
Kirkegt 56
Stavanger

Create Table
用途:
建立新的资料表。
语法:
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
.......
)

例:
创建一张叫“Person”的表,该表有4个字段LastName, FirstName, Address, Age:
CREATE TABLE Person
(
LastName varchar,
FirstName varchar,
Address varchar,
Age int
)

如果想指定字段的最大存储长度,你可以这样:
CREATE TABLE Person
(
LastName varchar(30),
FirstName varchar(30),
Address varchar(120),
Age int(3)
)

下表中列出了在SQL的一些数据类型:
Data Type
Description
integer(size)
int(size)
smallint(size)
tinyint(size)
Hold integers only. The maximum number of digits are specified in
parenthesis.
decimal(size,d)
numeric(size,d)
Hold numbers with fractions. The maximum number of digits are
specified in size. The maximum number of digits to the right of the
decimal is specified in d.
char(size)
Holds a fixed length string (can contain letters, numbers, and
special characters). The fixed size is specified in parenthesis.
varchar(size)
Holds a variable length string (can contain letters, numbers, and
special characters). The maximum size is specified in parenthesis.
date(yyyymmdd)
Holds a date

Alter Table
用途:
在已经存在的表中增加后者移除字段
语法:
ALTER TABLE table_name
ADD column_name datatype
ALTER TABLE table_name
DROP COLUMN column_name

注意:某些数据库管理系统不允许移除表中的字段

例:
“Person”表中的原始数据:
LastName
FirstName
Address
Pettersen
Kari
Storgt 20

在Person表中增加一个名为City的字段:
ALTER TABLE Person ADD City varchar(30)

增加后表中数据如下:
LastName
FirstName
Address
City
Pettersen
Kari
Storgt 20

移除Person表中原有的Address字段:
ALTER TABLE Person DROP COLUMN Address

移除后表中数据如下:
LastName
FirstName
City
Pettersen
Kari

Drop Table
用途:
在数据库中移除一个数据表定义及该数据表中的所有资料、索引、触发程序、条件约束及权限指定。
语法:
DROP TABLE table_name

Create Database
用途:
建立新的数据库.
语法:
CREATE DATABASE database_name

Drop Database
用途:
移除原有的数据库
语法:
DROP DATABASE database_name

聚集函数
count
用途:
传回选取的结果集中行的数目。
语法:
SELECT COUNT(column_name) FROM table_name

例:
“Persons”表中原始数据如下:
Name
Age
Hansen, Ola
34
Svendson, Tove
45
Pettersen, Kari
19

选取记录总数:
SELECT COUNT(Name) FROM Persons

执行结果:
3

sum
用途:
以表达式传回所有值的总和,或仅 DISTINCT 值。SUM 仅可用于数值资料行。已忽略 Null 值。
语法:
SELECT SUM(column_name) FROM table_name

例:
“Persons”表中原始数据如下:
Name
Age
Hansen, Ola
34
Svendson, Tove
45
Pettersen, Kari
19

选取”Persons”表中所有人的年龄总和:
SELECT SUM(Age) FROM Persons

执行结果:
98

选取”Persons”表中年龄超过20岁的人的年龄总和:
SELECT SUM(Age) FROM Persons WHERE Age>20

执行结果:
79

avg
用途:
传回选取的结果集中值的平均值。已忽略 Null 值。
语法:
SELECT ***G(column_name) FROM table_name

例:
“Persons”表中原始数据如下:
Name
Age
Hansen, Ola
34
Svendson, Tove
45
Pettersen, Kari
19

选取”Persons”表中所有人的平均年龄:
SELECT ***G(Age) FROM Persons

执行结果:
32.67

选取”Persons”表中年龄超过20岁的人的平均年龄:
SELECT ***G(Age) FROM Persons WHERE Age>20

执行结果:
39.5

max
用途:
传回选取的结果集中值的最大值。已忽略 Null 值。
语法:
SELECT MAX(column_name) FROM table_name

例:
“Persons”表中原始数据如下:
Name
Age
Hansen, Ola
34
Svendson, Tove
45
Pettersen, Kari
19

选取”Persons”表中的最大年龄:
SELECT MAX(Age) FROM Persons

执行结果:
45

min
用途:
传回选取的结果集中值的最小值。已忽略 Null 值。
语法:
SELECT MIN(column_name) FROM table_name

例:
“Persons”表中原始数据如下:
Name
Age
Hansen, Ola
34
Svendson, Tove
45
Pettersen, Kari
19

选取”Persons”表中的最小年龄:
SELECT MIN(Age) FROM Persons

执行结果:
19

算术函数
abs
用途:
传回指定数值表达式 (Numeric Expression) 的绝对正值。
语法:
ABS(numeric_expression)

例:
ABS(-1.0) ABS(0.0) ABS(1.0)

执行结果:
1.0 0.0 1.0

ceil
用途:
传回大于等于给定数值表达式的最小整数。
语法:
CEIL(numeric_expression)

例:
CEIL(123.45) CEIL(-123.45)

执行结果:
124.00 -123.00

floor
用途:
传回小于或等于给定数值表达式的最大整数。
语法:
FLOOR(numeric_expression)

例:
FLOOR(123.45) FLOOR(-123.45)

执行结果:
123.00 -124.00

cos
用途:
在指定表达式中传回指定角度 (以弪度为单位) 的三角余弦值的数学函数。
语法:
COS(numeric_expression)

例:
COS(14.7

执行结果:
-0.599465

cosh
用途:
传回以弧度为单位的角度值,其余弦为指定的 float 表达式,也称为反余弦。
语法:
COSH(numeric_expression)

例:
COSH(-1)

执行结果:
3.14159

sin
用途:
以近似的数值 (float) 表达式传回给定角度 (以弧度) 之三角正弦函数 (Trigonometric Sine)。
语法:
SIN(numeric_expression)

例:
SIN(45.175643)

执行结果:
0.929607

sinh
用途:
传回以弪度为单位的角度,其正弦为指定的 float 表达式 (也称为反正弦)。
语法:
SINH(numeric_expression)

例:
SINH(-1.00)

执行结果:
-1.5708

tan
用途:
传回输入表达式的正切函数。
语法:
TAN(numeric_expression)

例:
TAN(3.14159265358979/2)

执行结果:
1.6331778728383844E+16

tanh
用途:
传回以弪度为单位的角度,其正切为指定的 float 表达式 (也称为反正切)。
语法:
TANH(numeric_expression)

例:
TANH(-45.01)

执行结果:
-1.54858

exp
用途:
传回给定的 float 表达式的指数 (Exponential) 值。
语法:
EXP(numeric_expression)

例:
EXP(378.615345498)

执行结果:
2.69498e+164

log
用途:
传回给定的 float 表达式之自然对数。
语法:
LOG(numeric_expression)

例:
LOG(5.175643)

执行结果:
1.64396

power
用途:
传回给定表达式指定乘幂的值。
语法:
POWER(numeric_expression,v)

例:
POWER(2,6)

执行结果:
64

sign
用途:
传回给定的表达式之正 (+1)、零 (0) 或负 (-1) 号。
语法:
SIGN(numeric_expression)

例:
SIGN(123) SIGN(0) SIGN(-456)

执行结果:
1 0 -1

sqrt
用途:
传回给定表达式的平方。
语法:
SQRT(numeric_expression)

例:
SQRT(10)

执行结果:
100
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:33 am

--数据操作
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 --定义当前事务数据访问特征
--程序化SQL
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划
OPEN --检索查询结果打开一个游标
FETCH --检索一行查询结果
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询
---局部变量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局变量
---必须以@@开头
--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'
--CASE
use pangu
update employee
set e_wage =
case
when 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.05
end
--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印变量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
--WAITFOR
--例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay '01:02:03'
select * from employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time '23:08:00'
select * from employee
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:33 am

面试必备的SQL命令
2008-07-18 09:48:34
标签:SQL
asc 按升序排列
desc 按降序排列
下列语句部分是Mssql语句,不可以在access中使用。

SQL分类:
DDL—数据定义语言(Create,Alter,Drop,DECLARE)
DML—数据操纵语言(Select,Delete,Update,Insert)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,简要介绍基础语句:
1、说明:创建数据库
Create DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随
UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
sql: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。


其次,大家来看一些不错的sql语句
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )
select * from (Select a,b,c FROM a) T where t.a > 1;

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

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 )
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:33 am

1、SQL查询语句常见语法结构
Select select_list
[Into new_table]
From table_source
[Where search_condition]
[Group by group_by_expression]
[Having search_condition]
[Order by order_by_expression [ASC | DESC] ]
SELECT查询语句中的主要参数说明如下:
Select_list: 查询的列或表达式的列表,用逗号进行分隔。
New_table:新的表名
Table_source:要查询的表。如果是多个表,用逗号进行分隔。
Search_condition:查询条件
Group_by_expression:分组表达式
Order_by_expression:排序表达式
ASC:升序排列
DESC:降序排列
SELECT 查询语句中子句的功能
子句 主要功能 是否必要
Select 指定由查询返回的列 是
From 指定从其中查询数据的表 是
Into 创建新表并将结果行插入新表中 否
Where 按照条件查询数据 否
Group By 对查询结果进行分组 否
Order By 对查询结果进行排序 否
Having 对查询结果进行筛选 否

2、常见的查询语句
(1)查询表中所有的记录
Select * from 数据表名
(2)查询表中所有记录的指定字段
Select 字段1,字段2,… from 数据表名
(3)允许查询结果中显示重复记录(默认就是all)
Select all 字段1,字段2,… from 数据表名
(4)不允许查询结果中显示重复记录
Select distinct 字段1,字段2,… from 数据表名
(5)指定查询前 n 行记录
Select top n 字段1,字段2,… from 数据表名
(6)指定查询记录数的百分比
Select top n percent 字段1,字段2,… from 数据表名
(7)带表达式的查询
Select 表达式1,字段2,… from 数据表名
(Cool更改列名显示的查询(AS可以省略)
Select 表达式1 AS 新列名1,字段2 AS 新列名2,… from 数据表名
3、WHERE 条件查询
where条件查询的语法结构
Select <字段列表>
From <表名>
Where <条件表达式>
其中,条件表达式是由各种字段、常量、表达式、关系运算符、逻辑运算符和特殊运算符组合起来的。
(1)where 中的关系运算符:=、<>(!=)、<、>、<=、>=、!>、!<
(2)where 中的逻辑运算符:NOT、AND、OR
注意:逻辑运算符的优先次序是NOT、AND、OR,在同一优先级上的取值顺序是从左到右。
(3)where 中的特殊运算符

特殊运算符 含义
% 通配符,代表任意多个字符。
- 通配符,代表严格的一个字符。
[ ] 指定范围([a-f])或集合([abcdef])中的任何单个字符。
[^] 不属于指定范围([a-f])或集合([abcdef])中的任何单个字符。例如:where name like ‘wan[^lx]’ 表示查询以wan开始其后的字母不是lx的。
Between 定义一个取值范围区间,使用and 分开。
Like 字符串匹配
In 一个字段的值是否在一个定义的值之中
Exists 某个字段是否有值
Is null 字段是否为 null
Is not null 字段是否不为 null

(4)常见的where 查询实例
4.1 = (<>,!=)查询
Select * from employee where department='市场部' (字符型要用'引起来)
Select * from employee where id=10 (数值型)
4.2 in 查询(或not in)
Select * from employee where department in ('市场部','广告部') (字符型)
Select * from employee where Id in (2,4,6) (数值型)
4.3 between 值1 And 值2 (介于之间)查询
Select * from employee where birthday between '1983' and '1987' (日期、字符型加'')
4.4 like (模式匹配)查询(%)/查询(_)
Select * from employee where name like '王%' (查询姓王的)
Select * from employee where name like '王_' (查询王某)
4.5 is null/is not noll
Select * from employee where department is null (查询department为null的记录)
(5) order by 排序查询的语法结构
Select <字段名列表>
From 数据表名
[where <条件表达式>]
[Order by {order_by_expression [ASC|DESC]}[,…]]
Order by 子句可以搭配where 子句,也可以单独和 select 、from 搭配使用,而不需要where子句。
order_by_expression : 指定要排序的列、列的别名、表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。
ASC:升序
DESC:降序
例: Select * from employee order by id desc,name asc
(6)select 连接查询的语法结构
连接查询中用来连接两个表的条件称为连接条件或连接谓词.其形式为:
[<表1>].<列名1> <连接运算符> [<表2>].<列表2>
常见的连接运算符包括:
 比较运算符: =、>、<、<= 、>= 、!=、 between 和 and
 逻辑运算符:not、and、or
 使用Between和And的连接查询形式为:
[<表1>].<列名1> <between> [<表2>].<列名2> and [<表2>].<列名3>
连接查询的运算过程是:在表1中找到第一个记录,然后逐行扫描表2的所有记录,若有满足连接条件的就组合表1的字段和表2的字段为一个新的记录。依次类推,在表1中扫描完所有的记录后就组合成了连接查询的结果。
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:36 am

SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:36 am

下列语句部分是Mssql语句,不可以在access中使用。
  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
  DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  首先,简要介绍基础语句:  1、说明:创建数据库
CREATE DATABASE database-name  2、说明:删除数据库drop database
dbname  3、说明:备份sql server  --- 创建 备份数据的 deviceUSE masterEXEC
sp_addumpdevice ’disk’, ’testBack’, ’c:\mssql7backup\MyNwind_1.dat’  ---
开始 备份BACKUP DATABASE pubs TO testBack  4、说明:创建新表create table
tabname(col1 type1 [not null] [primary key],col2 type2 [not
null],..)  根据已有的表创建新表:A:create table tab_new like tab_old
(使用旧表创建新表)B:create table tab_new as select col1,col2… from tab_old
definition only  5、说明:  删除新表:drop table tabname  6、说明:  增加一个列:Alter
table tabname add column col
type  注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。  7、说明:  添加主
键:Alter table tabname add primary key(col)  说明:  删除主键:Alter table
tabname drop primary key(col)  8、说明:  创建索引:create [unique] index idxname
on tabname(col….)  删除索引:drop index
idxname  注:索引是不可更改的,想更改必须删除重新建。  9、说明:  创建视图:create view viewname as
select statement  删除视图:drop view viewname10、说明:几个简单的基本的sql语句  选择:select *
from table1 where 范围  插入:insert into table1(field1,field2)
values(value1,value2)  删除:delete from table1 where 范围  更新:update table1
set field1=value1 where 范围  查找:select * from table1 where field1 like
’%value1%’ ---like的语法很精妙,查资料!  排序:select * from table1 order by
field1,field2 [desc]  总数:select count * as totalcount from
table1  求和:select sum(field1) as sumvalue from table1  平均:select
avg(field1) as avgvalue from table1  最大:select max(field1) as maxvalue
from table1  最小:select min(field1) as minvalue from
table1  11、说明:几个高级查询运算词  A: UNION 运算符  UNION 运算符通过组合其他两个结果表(例如 TABLE1 和
TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION
ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。  B: EXCEPT 运算符  EXCEPT
运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时
(EXCEPT ALL),不消除重复行。  C: INTERSECT 运算符  INTERSECT 运算符通过只包括 TABLE1 和
TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT
ALL),不消除重复行。  注:使用运算词的几个查询结果行必须是一致的。  12、说明:使用外连接  A、left outer
join:  左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。SQL: select a.a, a.b, a.c,
b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c  B:right outer
join:  右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。  C:full outer
join:  全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。  其次,大家来看一些不错的sql语句  1、说明:复制表(只
复制结构,源表名:a 新表名:b) (Access可用)  法一:select * into b from a where
1<>1  法二:select top 0 * into b from a  2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
(Access可用)insert into b(a, b, c) select d,e,f from
b;  3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)insert into b(a, b, c) select
d,e,f from b in ‘具体数据库’ where 条件  例子:..from b in
’"&Server.MapPath(".")&"\data.mdb" &"’
where..  4、说明:子查询(表名1:a 表名2:b)select a,b,c from a where a IN (select d
from b ) 或者: select a,b,c from a where a IN
(1,2,3)  5、说明:显示文章、提交人和最后回复时间select a.title,a.username,b.adddate from
table a,(select max(adddate) adddate from table where
table.title=a.title) b6、说明:外连接查询(表名1:a 表名2:b)select a.a, a.b, a.c, b.c,
b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c  7、说明:在线视图查询(表名1:a )select *
from (SELECT a,b,c FROM a) T where t.a >
1;  8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括select * from
table1 where time between time1 and time2select a,b,c, from table1 where
a not between 数值1 and 数值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 )  11、说明:四表联查问题:select * from a left inner
join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d
where .....  12、说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where
datediff(’minute’,f开始时间,getdate())>5  13、说明:一条sql 语句搞定数据库分页select top
10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b
where b.主键字段 = a.主键字段 order by a.排序字段  14、说明:前10条记录select top 10 * form
table1 where
范围  15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩
排名,等等.)select a,b,c from tablename ta where a=(select max(a) from
tablename tb where tb.b=ta.b)  16、说明:包括所有在 TableA 中但不在 TableB和TableC
中的行并消除所有重复行而派生出一个结果表(select a from tableA ) except (select a from
tableB) except (select a from tableC)  17、说明:随机取出10条数据select top 10 *
from tablename order by newid()  18、说明:随机选择记录select
newid()  19、说明:删除重复记录Delete from tablename where id not in (select
max(id) from tablename group by col1,col2,...)  20、说明:列出数据库里所有的表名select
name from sysobjects where type=’U’21、说明:列出表里的所有的select name from
syscolumns where
id=object_id(’TableName’)  22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地
实现多重选择,类似select 中的case。select type,sum(case vender when ’A’ then pcs
else 0 end),sum(case vender when ’C’ then pcs else 0 end),sum(case
vender when ’B’ then pcs else 0 end) FROM tablename group by
type  显示结果:type vender pcs电脑 A 1电脑 A 1光盘 B 2光盘 A 2手机 B 3手机 C 3
  23、说明:初始化表table1TRUNCATE TABLE table1  24、说明:选择从10到15的记录select top 5 *
from (select top 15 * from table order by id asc) table_别名 order by id
desc随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)  对存储在数据库中的数据来说,随机数特性能给出上面的效果,但
它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:Randomize RNumber =
Int(Rnd*499) +1  While Not objRec.EOF If objRec("ID") = RNumber THEN ...
这里是执行脚本 ... end if objRec.MoveNext
Wend  这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID
的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber
等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一
个数据库内就包含了成千上万条记录。这时候不就死定了?  采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如
下所示:Randomize RNumber = Int(Rnd*499) + 1  SQL = "SELECT * FROM Customers
WHERE ID = " & RNumber  set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " &
objRec("c_email")  不必写出RNumber
和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到
你需要的记录这样就大大降低了处理时间。再谈随机数  现在你下定决心要榨干Random
函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random
示例扩展一下就可以用SQL应对上面两种情况了。  为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据
库获得匹配这些数字的记录:  SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
& " OR ID = " & RNumber2 & " OR ID = " &
RNumber3  假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN
或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID
是自动生成的号码): SQL = "SELECT * FROM Customers WHERE ID BETWEEN " &
RNumber & " AND " & RNumber & "+
9"  注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。  随机读取若干条记录,测试过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
n  Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试,
现在记下以备后查)  语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left
join table2 on table1.fd1,table2.fd1 where ...  使用SQL语句
用...代替过长的字符串显示  语法:  SQL数据库:select case when len(field)>10 then
left(field,10)+’...’ else field end as news_name,news_id from
tablename  Access数据库:SELECT
iif(len(field)>2,left(field,2)+’...’,field) FROM
tablename;  Conn.Execute说明  Execute方法  该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方
法的使用格式分为以下两种:  1.执行SQL查询语句时,将返回查询得到的记录集。用法为:  Set
对象变量名=连接对象.Execute("SQL
查询语言")  Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后
对象变量就代表了该记录集对象。  2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:  连接对象.Execute "SQL
操作性语句" [, RecordAffected][, Option]  ·RecordAffected
为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。 
 ·Option
可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行
更高效。  ·BeginTrans、RollbackTrans、CommitTrans方法  这三个方法是连接对象提供的用于事务处理的方法。
BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处
理。  事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处
里前的状态。  BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是
否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个
Error对象,代表一个错误信息。SQL语句大全精要2006/10/26 13:46DELETE语句
DELETE语句:用于创建一个删除查询,可从列在 FROM 子句之中的一个或多个表中删除记录,且该子句满足 WHERE
子句中的条件,可以使用DELETE删除多个记录。语法:DELETE [table.*] FROM table WHERE
criteria语法:DELETE * FROM table WHERE
criteria=’查询的字’说明:table参数用于指定从其中删除记录的表的名称。criteria参数为一个表达式,用于指定哪些记录应该被删除
的表达式。可以使用 Execute 方法与一个 DROP 语句从数据库中放弃整个表。不过,若用这种方法删除表,将会失去表的结构。不同的是当使用
DELETE,只有数据会被删除;表的结构以及表的所有属性仍然保留,例如字段属性及索引。QQ291911320UPDATE
有关UPDATE,急!!!!!!!!!!!在ORACLE数据库中表 A ( ID ,FIRSTNAME,LASTNAME ) 表 B(
ID,LASTNAME)表 A 中原来ID,FIRSTNAME两个字段的数据是完整的表
B中原来ID,LASTNAME两个字段的数据是完整的现在要把表
B中的LASTNAME字段的相应的数据填入到A表中LASTNAME相应的位置。两个表中的ID字段是相互关联的。先谢谢了!!!!update a
set a.lastname=(select b.lastname from b where
a.id=b.id)  掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。  
练掌握SQL是数据库用户的宝贵财
富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你
已经开始算是精通SQL了。  在我们开始之前,先使用CREATE
TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据
库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。  SQL中有四种基本的DML操
作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给
出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:36 am

1.查出emp表中薪水在3000以上(包括3000)的所有员工的员工号、姓名、薪水。
select empno,ename,sal from emp where sal >= 3000;

2.查询出emp表中所有员工一年的薪水,显示形式如下:
编号为XX的员工,姓名为XX,年薪XX。(提示:使用||将多个列合并)
select '编号为'||empno||'的员工,姓名为'||ename||',年薪为'||(sal*12)||'。' from emp;

3.查询出emp表中部门编号为20,薪水在2000以上(不包括2000)的所有员工,显示他们的员工号,姓名以及薪水,以如下列名显示:员工编号 员工名字 薪水
select empno as "员工编号",ename as "员工名字",sal as "薪水" from emp where deptno = 20 and sal > 2000;

4.查询出emp表中所有的工作种类(无重复)
select distinct(job) from emp;

5.查询出所有奖金(comm)字段不为空的人员的所有信息。
select * from emp where comm is not null;

6.1查询出薪水在800到2500之间(闭区间)所有员工的信息。(注:使用两种方式实现and以及between and)
select * from emp where sal >= 800 and sal <= 2500;
6.2查询出薪水在800到2500之间(闭区间)所有员工的信息。(注:使用两种方式实现and以及between and)
select * from emp where sal between 800 and 2500;

7.查询出员工号为7521,7900,7782的所有员工的信息。(注:使用两种方式实现,or以及in)
select * from emp where empno = 7521 or empno = 7900 or empno = 7782;
select * from emp where empno in (7521,7900,7782);

8.查询出名字中有“A”字符,并且薪水在1000以上(不包括1000)的所有员工信息。
select * from emp where ename like '%A%' and sal > 1000;

9.查询出名字第三个字母是“M”的所有员工信息。
select * from emp where ename like '__M%';

10.将所有员工按薪水升序排序,薪水相同的按照入职时间降序排序。
select * from emp order by sal asc,hiredate desc;

11.将所有员工按照名字首字母升序排序,首字母相同的按照薪水降序排序。
select * from emp order by ename asc,sal desc;

12.显示所有员工名字的小写形式、薪水及部门编号。
select lower(ename),sal,deptno from emp;

13.查询出所有在30号部门的员工的员工名字、薪水和所在部门编号,其中名字按照首字母大写,其余小写的形式显示。
select initcap(ename),sal,deptno from emp where deptno = 30;

14.将所有人的名字截掉首字母后显示。
select substr(ename,2) from emp;

15.查询出emp表中所有名字长度在5以上(不包括5)人的名字、员工编号、薪水以及名字的长度。
select ename,empno,sal,length(ename) from emp where length(ename) > 5;

16.查询出emp表中不在10号部门所有人的名字、薪水和部门编号,将名字中所有的字符‘E’替换成‘%’显示。
select replace(ename,'E','%') as ename,sal,deptno from emp where deptno != 10;

17.查询出所有薪水在1500以上(不包括1500)的所有人的名字、薪水、入职时间,使用四舍五入的方式将所有薪水保留一位小数。
select ename,round(sal,1),hiredate from emp where sal > 1500;

18.查询出所有薪水在1800以下(包括1800)的所有人的名字、薪水、入职时间,使截取的方式将所有薪水小数截掉。
select ename,trunc(sal),hiredate from emp where sal <= 1800;

19.查询出最早工作的那个人的名字、入职时间和薪水。
select ename,hiredate,sal from emp where hiredate = (select min(hiredate) from emp);

20.查询出最晚工作的那个人的名字、入职时间。
select ename,hiredate from emp where hiredate = (select max(hiredate) from emp);

21.计算出最早入职的员工和最晚入职的员工的入职年份只之差。
select max(TO_CHAR(hiredate,'yyyy'))-min(TO_CHAR(hiredate,'yyyy')) from emp;

22.显示所有员工的名字、薪水、奖金,如果没有奖金,暂时显示100.
select ename,sal,NVL(comm,100) from emp;

23.使用nullif函数求出所有名字长度为6的员工的名字和部门编号。
select ename,deptno from emp where nullif(length(ename),6) is null;

24.显示出薪水最高人的职位。
select job from emp where sal = (select max(sal) from emp);

25.查出emp表中所有部门的最高薪水和最低薪水,部门编号为10的部门不显示。
select max(sal),min(sal),deptno from emp where deptno != 10 group by deptno;

26.查询出所有薪水在'ALLEN'之上的所有人员信息。
select * from emp where sal > (select sal from emp where ename = 'ALLEN');

27.查询出员工名字、薪水、入职年份、部门编号和部门名称。
select e.ename,e.sal,e.hiredate,e.deptno,d.dname from emp e,dept d where e.deptno = d.deptno;

28.查询出所有员工的名字以及其上司的名字。
select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr = e2.empno;

29.查出所有员工的个人信息和部门信息(多表连接),暂时没有部门的也要查出来。
select * from emp e,dept d where e.deptno = d.deptno;

30.查询所有员工的信息和其薪水对应的级别。(salgrade:薪水分级表)
select e.*,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;

31.在emp表中新添加一个员工:ename:ZHANGSAN empno:1234 job:manager
hiredate:2009-01-23
Insert Into emp(empno,ename,hiredate) Values(1234,'ZHANGSAN',to_date('2009-01-23','yyyy-mm-dd'));

32.将新添加的员工工作改为:ANALYST,薪水改为3000,入职时间加一年。


33.将新添加的员工的奖金改为和编号为7499一样高。(7499若没有奖金先为7499添加奖金100)

34.更新表中数据如下:Update emp Set deptno=55 Where empno=7499
能否更新成功,为什么?

35.将新添加的员工删除。

36.删除10号部门薪水最高的员工。
delete from emp where empno in (select empno from emp where sal =(select max(sal) from emp where deptno = 10));

37.将薪水最高的员工的薪水降30%。
update emp set sal = 0.7 * sal where sal = (select max(sal) from emp);

38.创建一个测试表,表名:test,其中有如下字段:id:Number类型4位,name:varchar2类型20位,birthday:Date类型,默认值为2008年08月08号。

39.删除测试表中的birthday字段。
Alter Table test Drop Column birthday。

40.什么是数据库中的事务?

41.char和varchar2的区别?
char---定长字符串
varchar2----变长字符串

char(20) abcd---------20
varchar(20) abcd--------4


42.NUMBER(N)和number(m,n)的区别?
NUMBER(N):表示整数位不能大于n个,小数位可以任意
number(m,n):表示总长度为m位,其中小数位为n,整数为为m-n

43.delete和truncate的作用以及区别?
两种方式
A.delete删除
B.truncate清空表的内容

区别:
delete:从数据库的缓存区清除该数据
truncate:把数据删除了,然后清空所占用的空间

delete可以撤销
truncate不能撤销
truncate===delete+commit

TRUNCATE 语法
TRUNCATE TABLE EMP;

44.TRUNCATE和drop 区别?
drop:删除表的定义,整个对象删掉,删除的是对象的本身,全部
truncate:删除表的内容,只是删除数据,表的结果会保留

45.什么是主键,主键的作用是什么?可以举例阐述
一般情况下,我们在创建表的同时,都会为表指定一个主键,用来唯一标识一条记录,以便在程序中实现修改,删除等业务逻辑操作时,根据该主键标识来准确定位到要操作的记录

46.什么是外键,外键的作用是什么?可以举例阐述
外来的键值,如EMP表的deptno字段引用了dept表中的deptno字段
我们认为:emp表中的deptno是一个外键,emp.deptno不能任意指定,只能从dept.deptno的值中任意选一个

47.什么是联合主键?
把多个字段合起来作为一个主键,要求多个字段每一项都不能为null,并且合起来的值不能重复.
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:37 am

面试必须要知道的SQL语法,语句
asc 按升序排列
desc 按降序排列

下列语句部分是Mssql语句,不可以在access中使用。

SQL分类:
DDL—数据定义语言(Create,Alter,Drop,DECLARE)
DML—数据操纵语言(Select,Delete,Update,Insert)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,简要介绍基础语句:
1、说明:创建数据库
Create DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随
UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
sql: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

其次,大家来看一些不错的sql语句
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )
select * from (Select a,b,c FROM a) T where t.a > 1;

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

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 )

11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提醒
sql: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:前10条记录
select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据
select top 10 * from tablename order by newid()

18、说明:随机选择记录
select newid()

19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'

21、说明:列出表里的所有的
select name from syscolumns where id=object_id('TableName')

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case
vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs
else 0 end) FROM tablename group by type
显示结果:
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
  
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
  对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:
Randomize
RNumber = Int(Rnd*499) +1
 
While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 这里是执行脚本 ...
end if
objRec.MoveNext
Wend
 
  这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID
的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber
等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一
个数据库内就包含了成千上万条记录。这时候不就死定了?
  采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1
 
sql = "Select * FROM Customers Where ID = " & RNumber
 
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
 
  不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
再谈随机数
  现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。
  为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
sql = "Select * FROM Customers Where ID = " & RNumber & " or ID = " & RNumber2 & " or ID = " & RNumber3
 
  假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 Select 语句只显示一种可能(这里的ID 是自动生成的号码):
sql = "Select * FROM Customers Where ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

  注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

 
随机读取若干条记录,测试过
Access语法:Select top 10 * From 表名 orDER BY Rnd(id)
sql server:select top n * from 表名 order by newid()
mysqlelect * From 表名 order By rand() Limit n
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL语句 用...代替过长的字符串显示
语法:
SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access数据库:Select iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
 
Conn.Execute说明
Execute方法
  该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:

1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
    Set 对象变量名=连接对象.Execute("SQL 查询语言")
   Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。

    2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
    连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
      ·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
      ·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。

·BeginTrans、RollbackTrans、CommitTrans方法
  这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
  事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
  BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通
过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表
一个错误信息。
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

常用sql命令列表 Empty 回复: 常用sql命令列表

帖子 由 Admin 周六 四月 21, 2012 1:37 am

Demo:
CREATE TABLE PRODUCTS
(MFR_ID CHAR(3),
PRODUCT_ID CHAR(5),
DESCRIPTION VARCHAR(20),
PRICE MONEY,
QTY_ON_HAND INTEGER)

create table orders
(order_num integer,
cust char(4),
qty integer,
amount money)

create table customers
(cust_num char(4),
company varchar(20),
cust_rep char(3),
credit_limit money)

create table offices
(office char(2),
city varchar(10),
region varchar(10),
target money,
sales money)

crate talbe salesreps
(name varchar(20),
rep_office char(2),
quota money,
sales money)

一、数据库操作
1、备份数据库
2、授权操作
//给订单处理用户访问orders订单的全部权限
grant select ,insert,delete,update
on orders to opuser
//授予salesreps表的权限
grant select,insert,update
on salesreps to aruser,opuser
//取消salesreps表的权限
revoke insert,update on salesreps from opuser

二、表操作
1、建立
//create table语句的扩展,它包含一个主键和三个外键
create table orders(order_num integer not null,
order_date date not null,
cust integer not null,
rep integer,
mfr char(3) not null,
product char(5) not null,
qty integer not null,
amount money not null,
primary key(order_num),
constraint placedby
primary key(cust)
references customers
on delete cascade,
constraint takenby
foreigen key (rep)
references salesreps
on delete set null,
constraint isfor
foreign key (rep) references salesreps on delete set null,
constraint isfor
foreign key(mfr,product) references products on delete restrict)

2、建立表的约束
//防止将定额数据插入或更新为负数或大于$500000的数值
create rule quota_limit as @value between 0.00 and 500000.00
//建表时添加约束
create table salesreps(empl_num integer not null primary key check(empl_num between 101 and 199),
age integer check(age>=21),
quota money check(money>=0.0))
//建立一个数据域,使得含有的所有的合法雇员编号取值
create domain valid_employee_id integer check(value between 101 and 199)
create table salespres(empl_num valid_employee_id)

3、插入
//添加新的销售人员Henry Jacobsen
insert into
salespres(name,age,emp_num,sales,title,hire_date,rep_office)
values('Henry Jacobsen',36,111,0.00,'Sales Mgr','25-JUL-90',13)
//多行插入,把orders表中1990年1月1日以前的所有订单号、日期和订单数复制到另一个表中
insert into oldorders(order_num,order_date,amount) select
order_num,order_date,amount from orders where order_date<'01-JAN-90'

4、修改
//将Acme Manufacturing公司的信用卡限额提高到$60000并重新安排它们到Mary Jones名下(雇员号事109)
update customers set credit_limit=60000,cust_rep=109 where company='Acme Mfg.'
//将由雇员编号为105,106或107的销售人员取得的所有客户重新分配给其雇员编号为102的销售人员
update customers set cust_rep=102 where cust_rep in(105,106,107)
//给当前所有没有定额的销售人员分配$100000的定额
update salesreps set quota=100000 where quota is null
//把任何放置超过$25000订单的客户的信用卡额度增加$5000
update customers set credit_limit=credit_limit+5000 where
cust_num in (select distinct cust from orders where amount>25000)
重新安排由其销售量小于它们的定额的80%的销售人员所取得的所有客户
update customers set cust_rep=105 where cust_rep in (select empl_num from salesreps where sales<(0.8*quota))
//取得3个以上客户的所有销售人员直接向SamClark(雇员编号为106)报告
update salesreps set manager=106 where 3<(select count(*) from customers where cust_rep=empl_num)

5、删除
//从数据库中删除Henry Jacobsen
delete from salesreps where name='Henry Jacobsen'
//删除所有InterCofp(客户编号2126)公司的订单
delete from orders where cust=2126
//删除所有订单
delete from orders
//删除自1989年11月10日以来一直没有下订单的客户
delete from customers where not exists(select * from orders where cust =cust_num and order_date<'10-NOV-89')

6、查询
//列出销售地点、它们的销售目标、实际销售量
select city,target,sales from offices
//列出东部地区销售点的销售目标和销售额
select city,target,sales from offices where region='eastern'
//列出东部地区其销售量超过了销售目标的销售点,以城市的字母顺序为序
select city,target,sales from offices where region='eastern' and sales>target oder by city
//东部地区销售点的平均销售目标和销售量是多少
select ave(target),ave(sales) from offices where region='eatern'
//列出每个销售点所在城市、地区和超过/低于销售目标的数量
SELECT CITY,REGION,(SALES-TARGET) FROM OFFICES
//显示每个产品货物清单的值
select mfr_id,product_id,description,(qty_on_hand*price) from products
//显示提高销售人员的定额达到它们迄今为止销售量的3%后的结果
select name,quota,(quota+(0.3*sales)) from salesreps
//列出每个销售人员的名字和受雇的年份
select name,month(hire_date),year(hire_date) from salesreps
//列出每个城市的销售量
select city,'has sales of‘,sales from offices
//列出所有销售点经理的雇员号(使用distinct消除重复的查询记录)
select distinct mgr from offices
//求出在1988年以前被雇佣的销售人员
select name from salesreps where hire_date<'01-JAN-88'
//求出其销售量低于销售目标80%的销售点
select city,sales,target from offices where sales<(0.8*target)
//列出不被雇员号为108的经理管理的销售点
select city,mgr from offices where mgr<>108
//列出1989年最后一个季度取得的订单
select order_num,order_date,mfr,product,amount from orders where order_date between '01-OCT-89' and '31-DEC-89'
//列出起销售量不在定额的80%和120%之间的销售人员
select name,sales,quota from salesreps where sales not between(0.8*quota) and (1.2*quota)
//列出在New York,Atlanta,Denver工作的销售人员
select name,quota,sales from salesreps where rep_office in(11,13,22)
//列出在1990年1月的一个星期三取得的所有订单
select order_num,order_date,amount from orders where order_date in('04-JAN-90’,'18-JAN-90','25-JAN-90')
//显示SmithsonCorp的信用卡额度
select company,credit_limit from customers where company like 'Smith%Corp'
//找出产品的ID以4个字母“A%BCD"开始的产品 模式中第一个百分号位于一个转义字符后,被作为一个文字百分号处理,第二个则被作为一个通配符
select order_num,product from orders where product like 'A$%BC%' escape'$
//找出还没被分到一个销售点的销售人员
select name from salesreps where rep_office is null
//找出其销售量在定额以下或者其销售量在$300 000以下的销售人员
select name,quota,sales from salesreps where sales<quota or sales<30000.00
//找出其销售量在定额以下并且其销售量低于$300000的销售人员
select name ,quota,sales from salesreps where sales<quota and sales<300000.00
//列出其销售量在定额以下,但是销售量不低于$150000的所有销售人员
select name,quota,sales from salesreps where sales<quota and not sales <150000.00
//显示每个销售点的销售量,地区按字母顺序排列,在地区内城市排列
select city,region,sales from offices order by region ,city
//列出其销售量按降序排序的销售点,以便销量最大的一个销售点在第一个位置
select city,region,sales from offices order by sales desc
//列出销售点,地区按字母顺序排序,在地区内按销售业绩的降序排序,其中3是指定的一个计算字段号
select city ,region,(sales-target) from offices order by region asc,3 desc
//列出其产品的价值超过$2000或在一个订单中订购了超过$30000产品的所有产品
select mfr_id,product_id from products where price >2000
union select distinct mfr,product from orders where amount>30000

//以下是连接查询

//l列出显示订单号、数量、客户名和客户的信用卡额度的所有订单
select order_num,amount,company,credit_limit from orders,customers where cust=cust_num
//列出每名销售人员和他们工作的城市和地区
select name,city,region from salesreps,offices where rep_office=office
//列出所有订单,显示数量和产品说明
select order_num,amount,description from orders,products where mfr=mfr_id and product=product_id
//列出超过$25000的订单,包括取得订单的销售人员的名字和下订单的客户的名字
select order_num,amount,company,name from
orders,customers,salesreps where cust=cust_num and rep=empl_num and
amount>25000

//汇总数据
sum()计算字段的总和
avg()计算字段的平均值
min()查找字段中的最小值
max()查找字段中的最大值
count()计算字段中值的数目
count(*)就是查询结果的记录数

//分组查询
//计算每名销售人员的每个客户的订单总和
select rep,cust,sum(amount) from orders group by rep,cust
//计算每名销售人员的每个客户的订单总和,按客户排序,在同一客户内按销售人员排序
select cust,rep,sum(amount) from orders group by cust,rep order by cust,rep
//求出其订单总和超过$30000的销售人员的平均订单大小
select rep,avg(amount) from orders group by rep having sum(amount)>30000
//对具有两个或更多销售人员的销售点,计算在此工作的所有销售人员的总的定额和总的销售量
select city,sum(quota),sum(salesreps.sales) from
offices,salesreps where office=rep_office group by city having
count(*)>=2

//子查询
//列出其公司的销售目标超过各个销售人员定额总和的销售点
select city from offices where target>(select sum(quota) from salesreps where rep_office=office)
//列出其销售目标超过各个销售人员的定额总和的销售点
select city from offices where target>(select sum(quota) from salesreps where rep_office=office)
//列出其销售定额等于或高于Atlanta销售点的销售目标的销售人员
select name from salesreps where quota>=(select target from offices where city=’Atllanta')
//列出工作在其销售额超过销售目标的销售点的销售人员
select name from salesreps where rep_office in (select office from offices where sales>target)
//列出不在Larry Fitch(雇员号为108)管理的销售点工作的销售人员
select name from salesreps where rep_office not in (select office from offices where mgr=108)
//列出所得订单等于或大于$25000的产品
select description from products where exists (select * from
orders where product=product_id and mfr=mfr_id and amount>=25000)
//列出Sue Smith的某些客户,这些客户没有订购超过$3000的订单
select company from customers where cust_rep=(select empl_num
from salesreps where name='Sue Smith') and not exists(select * from
orders where cust =cust_num and amount >3000)

//列出取得一个超过其销售目标10%的订单的销售人员
select name from salesreps where (0.1*quota)<any(select amount from orders where rep=empl_num)
//列出销售人员中不管理销售点的所有人员的名字和年龄
select name,age from salesreps where empl_num<>any (select mgr from offices)
//列出对ACI生产的产品,其取得的平均订单大小超过了总的平均订单大小的销售人员
select name,avg(amount) from salesreps,orders where
empl_num=rep and mfr=‘ACI' group by name having avg(amount)>(select
avg(amount) from orders)
//列出对ACI生产的产品,其取得的平均订单大小至少与总平均订单大小一样大的销售人员
select name,avg(amount) from salesreps,orders where
empl_num=rep and mfr=’ACI' group by name,empl_num having
avg(amount)>=(select avg(amount) from orders where rep=empl_num)

三、触发器
//插入触发
create trigger newordere
on orders
for insert
as update salesreps
set sales=sales+inserted.amount
from salesreps,inserted
where salesreps.empl_num=inserted.rep
update products
set qty_on_hand=qty_on_hand-inserted.qty
from where products.mfr_id=inserted.mfr
and proudcts.product_id=inserted.product
//对offices/salesreps关系实施引用完整性的触发,当更新意图失败时,它给出出错信息:
create trigger rep_update
on salesreps
for insert,update
as if((select count(*) from offices,insertedwhere offices.office=inserted.rep_office)=0)
begin
print "invalid office number specified"
rollback transaction
end

四、视图
//创建一个视图,显示东部地区的销售人员
create view easterreps as
select * from salesreps where rep_office in (11,12,13)
//为Sue Smith(雇员号为102)定义一个视图,它只包含分配给她的客户所下的订单
create view sueorders as
select * from orders where cust in( select cust_num from customers where cust_rep=102)
//定义一个视图,该视图包括每一名销售人员的汇总订单数据
create view ord_by_rep(who,how_many,total,low,high,average) as
select rep,count(*),sum(amount),min(amont),max(amount),avg(amount) from orders group by rep
//创建一个用姓名代替编号的orders表视图
create view order_info(order_num,company,rep_name,amount) as
select order_num,company,name,amount
from orders,custmomers,salesreps
where cust=cust_num and rep=empl_num

五、存储过程
//创建存储过程 procedure
create proc add_cust(
@c_name varchar(20),
@c_num integer,
@cred_lim money,
@tgt_sls money,
@c_rep integer,
@c_offc varchar(15) )
as
begin
insert into customers(cust_num,company,cust_rep,credit_limit)
update salesreps set quota= quota + quota + @tgt_sls where empl_num = @c_rep
update offices set target = target+ @tgt_sls where city = @c_offc
commit trans
end
//调用存储过程
execute add_cust('xyz corporation',213,3000,5000,103,'chicago')
//在存储过程中创建变量
create proc chk_tot(@c_num integer)
as
declare @tot_ord money, @_msg_txt varchar(30)
begin
select @tot_ord = sum(amount) from orders where cust = @c_num
if tot_ord<3000
select @msg_text=”high order total“
else
select @msg_text = “low order total"
commit trans
end
Admin
Admin
Admin

帖子数 : 641
注册日期 : 08-03-25

http://kcjun.longluntan.cn

返回页首 向下

返回页首


 
您在这个论坛的权限:
不能在这个论坛回复主题