免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1164 | 回复: 0
打印 上一主题 下一主题

SQL语法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-28 08:25 |只看该作者 |倒序浏览

SQL语法1

SELECT ALL* FROM 职员表格; DISTINCT

  
  对某个表格所选择的字段数据,略过重复的情况,也就是说,针对某个字段查询出来的记录结果是唯一的。例如有许多存放在职员表格的职员
  数据,也许会具有相同的姓名,所以若是我们用SQL语句中的SELECT DISTINCT,则查询出来的结果将会针对不一样的姓名加以筛选。若是您把
  DISTINCT 加以省略,则这样的查询会显示所有的记录。
  DISTINCTROW
  将整条记录重复的记录忽略掉,而不是只有针对某一个字段的数据。
  table
  指定查询记录所需要的表格。
  例如:
  SELECT DISTINCTROW 公司名称
  FROM 顾客表格 INNER JOIN 订单表格
  ON 顾客表格.顾客ID=订单表格.顾客ID
  ORDER BY 公司名称;
  如果您忽略 DISTINCTROW 则会对每个公司产生一行以下的订单数据。此外,若是DISTINCTROW只有用在一个表格当中,则会被省略掉。
  TOP
  从第一条或最后一条开始(利用ORDER BY条件子句),返回特定条数的数据。
  例如:
  当您想要知道在2000年,班上前25名的学生姓名数据时,您可以输入这样的语句:
  SELECT TOP 25 学生姓名
  FORM 学生表格
  WHERE 毕业年份=1994
  ORDER BY 毕业成绩平均分数 DESC;
  如果您没有加上ORDER BY 这行条件的话,您所得到的数据,将会随机的数据。此外,在TOP语句之后,除了可以加上数字以外,还可以利用保留
  字PERCENT来查询。
  例如:
  SELECT TOP 10 PERCENT学生姓名
  FROM学生表格
  WHERE毕业年份=1994
  ORDER BY毕业成绩平均DESC;
 
  PARAMETERS(参数)声明的用法
  对于参数型的查询语法中,对参数的名称以及数据类型作 声明的操作。
  PARAMETERS name datatype[,name datatype[,...]]
  name
  PARAMETERS的名称。您可以把参数名称当作字符串来使用,若是名称中包含了空字符串,可以利用中括号来处理,例如:“VBeden”。
  datatype
  输入参数的数据类型。
  例如:
  若是您在查询时,需要机动的输入姓名 ,可以利用下列的方式完成:
  PARAMETERS “输入姓名” Text;
  SELECT*
  FROM 职员表格
  WHERE姓名=“输入姓名:”;
  ORDER BY条件语句
  此条件子句,通常与SELECT语句合并使用目的是将查询的结果,依照指定字段加以排序。
  SELECT fieldlist
  FROM table
  WHERE selectcriteria
  ORDER BY field[ASC|DESC][,field2[ASC|DESC][,...]]
  fieldlist
  欲查询的字段名称。其中可以与ALL,DISTINCT,DISINCTROW,或TOP一起来使用。
  table
  欲查询的表格名称。
  selectcriteria
  查询的标准设置。
  field1
  指定要依照那个字段作为排序的依据,若是你没有加上ORDER BY查询出的数据集将不会作排序的操作。
  ASC
  递增顺序类别。(默认值)
  DESC
  递减顺序类别。
  例如:
  或是我们要将输出数据依据出生的先后次序排列,可以利用下面的命令。
  SELECT 姓名,生日
  FROM 职员表格
  ORDER BY 生日
  SELECT LastName,FirstName
  FROM Employees
  ORDER BY LastName ASC;
  IN 条件子句
  指定要速胜哪一个外部
数据库
的表格。(必须是Microsoft Jet数据库引擎所可以连接的数据库,如dBase,
Paradox
等等)
  
SELECT|INSERT]INTO destination IN
{path|["path" "type"]|[""[type;DATABASE=path]]}
FROM tableexpression IN
{path|["path" "type"]|[""[type;DATABASE=path]]}
destination

  欲插入数据的外部表格名称。
  tableexpression
  表格名称或是被读取数据的表格名称。这个参数可以是一个单一的表格名称,或是一段已经被存储的SQL查询等。
  path
  包含该表格的完整路径名称。
  type
  数据库的类型名称, 通常是当数据库部属于Jet database时才会使用。(例如:dBASE III,dBASE IV,Paradox 3.x,Paradox 4.x,或 Btrieve)


SQL语法2

例如:下面这两段的意义相同
PartA....FROM Table
IN ""[dBASE IV;DATABASE=C:\DBASE\DATA\SALES;];
PartB....FROM Table
IN "C:\DBASE\DATA\SALES" "dBASE IV;"

  例如:Microsoft Jet database
SELECT 顾客编号
FROM 顾客表格
IN CUSTOMER.MDB
WHERE 顾客编号 Like "A*";
其中CUSTOMER.MDBO 为Jet database 的
数据库
名称,其中包含了顾客表格。
例如:dBASE III or IV
SELECT 顾客编号
FROM 顾客表格
IN "C:\DBASE\DATA\SALES" "dBASE IV;"
WHERE 顾客编号 Like "A*";
所以当我们使用不同于ACCESS 的数据库时,必须指明该数据库的类型名称。
  HAVING 条件子句
  指定一特定的分组记录,并满足HAVING 所指定的条件或状态,但条件是针对分组的条件设置。
SELECT fieldlist
FROM table
WHERE selectcriteria
GROUP BY groupfieldlist
HAVING groupcriteria
fieldlist
显示被查询的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)
table
欲查询数据的表格名称。
selectcriteria
选取标准。
groupfieldlist
分组记录的字段名称,到多10个字段。而这些字段的顺序决定最高到最低的分组阶层。
groupcriteria
决定什么样的分组记录要被显示。
HAVING跟WHERE 的用法相当类似,不同之处在于HAVING必须用于GROUP之后的分组数据上。
例如:
SELECT 分类编,Sum(库存数量)
FROM 产品表格
GROUP BY 分类编号
HAVING Sum(库存数量)>100 AND 产品名称 LIKE "*纸";

 
  GROUP BY 条件子句
  依据指定的字段,将具有相同数值的记录合并成一条。
SELECT fieldlist
FROM table
WHERE criteria
GROUP BY groupfieldlist
fieldlist
欲读取的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP合并使用)
table
被查询的表格名称。
groupfieldlist
分组记录的字段名称,到多10个字段,而这些字段的顺序决定最高到最低的分组层次。
例如:
SELECT 姓名,Count(姓名)AS 职员姓名
FROM 职员表格
WHERE 部门名称='业务部'
GROUP BY 姓名

 
  FROM 条件子句
  指定表格名称或是查询,其中包含列在SELECT语句的字段数据。
SELECT fieldlist
FROM tableexpression[IN externaldatabase]
fieldlist
表格中的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)
tableexpression
表格名称,或多个表格的算式。
externaldatabase
若该表格参考到外部的数据库时,将其完整的路径名称记下。
例如:
从职员表格下,查询出所有姓名字段的数据(只有姓名字段被查询,其他则不显示)。
SELECT 姓名 FROM 职员表格;

 
  WHERE 条件子句
  指定查询的条件与限制。
SELECT fieldlist
FROM tableexpression
WHERE criteria
fieldlist
字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP相结合)
tableexpression
表格名称,或多个表格的算式。
criteria
查询的结果,必须依照这一限制标准。
例如:
要查询出职员表格中,所有姓氏是李的数据,可以用下面的语句。
SELECT 姓名
FROM 职员表格
WHERE 姓氏='李';
  BETWEEN...AND 运算符
  决定某一人数值是否介于特定的范围之内,此运算符只可以用在SQL的语句中。
expr[Not]BETWEEN value1 AND value2
expr
指定要加以计算的字段与表达式的组合。
value1,value2
所指明的数值范围。
例如:
若是要从职员表格查询出所有年龄介于25-30岁的员工,可以利用下面的程序来做。
SELECT 姓名,年龄 BETWEEN 25 AND 30
FROM 职员表格;

 
  LIKE 操作数
  用来将一字符串与另一特定字符串样式(pattern)比较,并将符合该字符串样式的记录过滤出来。
expression LIKE "pattern"
expression
使用在WHERE条件子句,SQL表达式。
pattern
用以比较的字符串样式。
例如:
若是你要查询出所有以“李”为首的姓氏,可以利用下面的式子。
Like "李*"
LIKE操作数的多种范例:
1、多个字符:
(1)"a*a"
可筛选:"aa","aBa","aBBBa",不能筛选:"aBC"
(2)"*ab*"
可筛选:"abc","AABB","Xab",不能筛选:"aZb","bac"
2、特殊字符:
"a“*”a"
可筛选:"a*a",不能筛选:"aaa"
3、单一字符:
"a?a"
可筛选:"aaa","a3a","aBa",不能筛选:"aBBBa"
4、单一数字:
"a#a"
可筛选:"a0a","a1a","a2a",不能筛选:"aaa","a10a"
5、字符范围:
"“a-z”"
可筛选:"f","p","j",不能筛选:"2","&"
6、指定字符以外部范围:
"“!a-z”"
7、指定非数字:
"“!0-9”"
可筛选:"A","a","&","~",不能筛选:"0","1","9"
8、组合式结构:
"a“!b-m”#"
可筛选:"An9","az0","a99",不能筛选:"abc","aj0"

SQL语法4

SQL数字函数
  1、AVG:算数平均数
  AVG(expr)
  expr
  字段名称或表达式。
  例如:
  若要计算职员身高超过165厘米的职员平均身高,可以利用下面的SQL语句来完成。
  SELECT Avg(身高)
  AS 平均身高
  FROM 职员表格 WHERE 身高>165;
  2、COUNT:计算记录条数
  COUNT(expr)
  expr
  字段名称或表达式。
  例如:
  若是要统计出业务部门的职员人数,并查询出职员的姓名,可以利用下面的程序。
  SELECT Count(姓名) AS 职员姓名
  FROM 职员表格
  WHERE 部门名称='业务部';
  3、FIRST与LAST:返回某字段的第一条数据与最后一条数据。
  FIRST(expr)
  LAST(expr)
  expr
  字段名称或表达式。
  例如:
  若是要找出货品数量字段的第一条数据与货品价格字段的最后一条数据时,可以利用下面的查询方式。
  SELECT FIRST(货品数量),LAST(货品价格)
  FROM 订单表格
  4、MAX,与MIN:返回某字段的最大值与最小值。
  用法同FIRST与LAST。
  5、SUM:返回某特定字段或是运算的总和数值。
  SUM(expr)
  expr
  字段名称或表达式。
  例如:
  要计算出货品总价,可使用下面的程序。
  SELECT
  Sum(单位价格*货品数量)
  AS 货品总价 FROM 订单表格
  多层SQL查询
  顾名思义,多层的SQL查询的便在于:“在一个SQL语句中可以包含另一个SQL查询语句,形成内部嵌套的查询类型。”
comparison[ANY|ALL|SOME](sqlstatement)
expression[NOT]IN (sqlstatement)
[NOT]EXISTS(sqlstatement)
comparison
将表达式与内层查询的结果比较的操作。
expression
对内层查询的结果作搜索的表达式。
sqlstatement
为SELECT语句构成的SQL查询,必须用()将该语句括起来。

  例如:
  我们先从订单表格当中,查询出所有的单位,再将产品表格中的单位与的一一对比,查询出所有高于订单表格的单位价格的记录。
  SELECT * FROM 产品表格
  WHERE 单位价格>ANY (SELECT 单位价格 FROM 订单表格 WHERE 折扣>=.25);
  SQL与
数据库
的维护

  表格的建立
  
将SQL中的基本语法作了一番介绍以后,但大多是偏向于数据库数据的查询与过滤,但实际上,我们通过SQL命令所可以做的事还有很多,接下来要介绍的便是如何利用SQL的语法命令来建立一个数据库中的表格。
   CREATE TABLE语句
  我们可以利用这个命令,来建立一个全新的表格,但前提则是:数据库必须已经存在。
CREATE TABLE table(field1 type[(size)][index1][,field2 type[(size)][index2][,...]][,nultifieldindex[,...]])
table
欲建立的新的表格名称。
field1,field2
在新表格中的新的字段名称,到少要一个字段以上。
type
字段的数据类型。
size
字段的大小。
index1,index2
利用CONSTRAINT条件子句定义一个单一字段的索引名称。
multifieldindex
利用CONSTRAINT条件子句定义一个多重字段的索引名称。

  例如:
  建立一个拥有职员姓名与部门字段的表格。
CREATE TABLE 职员表格 (姓名TEST,部门TEST,职员编号 INTEGER CONSTRAINT职员字段索引PRIMARY KEY)
在这一个范例中,我们建立了一个表格名称为“职员表格”的表格,并且定义了该表格的主键值,以限制数据不能重复输入。

  表格索引的建立
   CREATE INDEX语句
  这个命令主要是对一个已存在的表格建立索引,其用法如下:
CREATE[UNIQUE]INDEX index ON table(field[ASC|DESC][,field[ASC|DESC],...])
[WITH {PRIMARY|DISALLOWNULL|IGNORENULL}]
index

  欲被建立的索引名称。
  table
  欲建立索引的表格名称。
  field
  欲被建立的索引的字段名称。并可通过DESC保留字,来决定索引的顺序。
  例如:
在职员表格中建立一个索引。
CREATE INDEX 新索引名称
ON 职员表格(姓名部门);
 
表格的字段更新
CONSTRAINT条件子句
CONSTRAINT 的功能是类似索引(INDEX)的,虽然CONSTRAINT 也可以建立表格之间的关联性。
单一字段索引:
CONSTRAINT name{PRIMARY KEY|UNIQUE|REFERENCES foreigntable[(foreignfield1,foreignfield2)]}
多字段索引:
CONSTRAINT name
{PRIMARY KEY(primary1[,primary2[,...]])
|UNIQUE(unique1[,unique2[,...]])
|FOREIGN KEY (ref1[,ref2[,...]])
|REFERENCES foreigntable[(foreignfield1[,foreignfield2[,...]])]}
name
要被建立的CONSTRAINT名称。
primary1,primary2
被用来
设计
成主键值的字段名称(可一个以上)。
unique1,unique2
被用来设计成唯一键值的字段名称(可一个以上)。
foreign key
字段名称,或是参考到别的表格中字段的字段名称。
foreigntable
如前所述,被参考到的表格。
foreignfield1,foreignfield2
在参考到的表格当中,被ref1,ref2字段所指定的字段。如果被参考的字段是参考表格中的主键值,你也可以省略这个条件子句。
例如:
当我们要建立一个新的职员数据表格,表格包含姓名、部门名称与生日三个字段,且由这三个字段建立一个唯一的索引时,可以使用下面这段SQL的语句。
CREATE TABLE 职员数据表格
(姓名 TEST,部门名称 TEST,生日 DATETIME,CONSTRAINT 职员数据表格限制 UNIQUE(姓名,部门名称,生日));
以上是SQL中,与数据库表格建立相关的命令,你可以利用这些命令,通过SQL的语句,将数据库表格完整的建立出来,接下来的章节,将针对数据库建立之后的维护与增删所要使用的SQL语句


SQL语法5

DROP语句
  针对所指定的表格或字段加以删除,或是把索引删除。
DROP {TABLE table|INDEX index ON table}
table
欲删除之表格或索引依附之表格名称。
index
欲从表格中删除的索引名称。
例如:
从职员表格中,删除编号索引。
DROP INDEX MyIndex ON Employees;
例如:

数据库
中,删除整个表格。
DROP TABLE 职员表格;

 
  INSERT INTO语句
  新建一条数据到表格当中。
  多条记录新建查询:
INSERT INTO target [IN externaldatabase][(field1[,field2[,...]])]
SELECT [source.]field1[,field2[,...]
FROM tableexpression
单条记录新建查询:
INSERT INTO target[(field1[,field2[,...]])]
VALUES(value1[,value2[,...])
target
新建记录的表格名称。
externaldatabase
外部数据库的路径,搭配IN条件子句使用。
source
若是记录从其它表格中拷贝时,指明该表格的名称。
field1,field2
欲增加数据的字段名称。
tableexpression
表格名称或描述记录是从哪一个表格中插入的表格名称。配合INNER JOIN,LEFT JOIN,或 RIGHT JOIN 运算符一起使用。
value1,value2
欲插入表格中的数值。
例如:
在客户数据表格中,从新的表格插入数据。
INSERT INTO 客户数据表格
SELECT 新客户数据表格.*
FROM 新客户数据表格;
例如:
在职员表格中插入数据。
INSERT INTO 职员表格(姓名,生日,职称)
VALUES("王荣","57/12/11","经理");
例如:
从训练人员表格中,将职员雇用时间超过30天者,加入到正式职员表格中。
INSERT INTO 职员表格
SELECT 训练人员表格.*
FROM 训练人员表格
WHERE 雇用天数>30;

  UPDATE语句
  建立一个UPDATE的查询,通过条件的限制来修改特定的数据。
UPDATE table
SET newvalue
WHERE criteria;
table
欲修改数据的表格名称。
newvalue
欲修改成的数值(将该项数值插入到特定的字段当中)。
criteria
查询条件,用来决定要修改哪些记录。
例如:
若是要把订单表格中的订单数量修改成1.1倍,运费为1.03倍,可利用下列之SQL语句来完成。
UPDATE 订单表格
SET 订单数量=订单数量 * 1.1,运费=运费 * 1.03倍
WHERE 运达地点='美国';
当我们完成修改后,你可以利用 SELECT 语句,配合同样的 WHERE 条件子句,来察看修改的数据是否正确。
事实上,要利用SQL完成某些看似复杂的操作,并不需要繁琐的SQL命令组合,或是许许多多的步骤才能完成,其实最重要的还是要活用SQL命令,才会在最精简的SQL语句里获得最高的效率。




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12564/showart_161326.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP