Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 8798|回复: 18

SQL基本操作语句

[复制链接]
发表于 2007-11-21 22:45 | 显示全部楼层 |阅读模式
本贴将作为SQL基本操作语句讲解的一个专题贴

评分

参与人数 1 +2 收起 理由
mxg825 + 2 实用

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2007-11-21 23:24 | 显示全部楼层

请不发回复,谢谢!

一、SELECT语句

select语句作为SQL中使用最为频繁的关键字,也是SQL作为结构化查询语言的根本所在。其语法如下:

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]}
    FROM tableexpression [, ...][IN外部数据库]
    [WHERE...]
    ]
[GROUP BY...]
    ]
[HAVING...]
    ]
[ORDER BY...]
    ]
其中只有SELECTFROM子句是组成一个有效的SQL语句所必须的。下面将就各个关键字或子句逐一说明。

首先,我们可以构造一个最最简单的查询语句,例如:

SELECT field1,field2… FROM table1

其意思为从table1表格中检索出所有记录的field1field2等字段的值

这里有一点需要强调的是,如果字段名表格名中包括空格或其他非数字文本的字符,请一定要记得须用方括号括起来,否则会出现错误。例如:

SELECT field1-1,field2 FROM table1-1

SELECT field1-1,field2 FROM table1-1

 

 
[此贴子已经被作者于2007-11-22 23:08:31编辑过]
回复

使用道具 举报

 楼主| 发表于 2007-11-22 23:07 | 显示全部楼层

通常,我们不会从一个数据表中列出所有的数据,而是希望查询某些特定的数据,即符合一定条件的记录,此时就会用到WHERE子句,例如在人力资源系统中,想要查询某一员工张三的相关信息,可以这样:

SELECT 工号,姓名,性别,年龄,部门,职务,薪资 FROM 员工信息表 WHERE 姓名=张三

有时,我们不仅希望可以查询某一具体的记录,也会有查询符合某一条件的一系列记录,如想要查询所有薪资大于3000的员工信息,可以这样:

SELECT 工号,姓名,性别,年龄,部门,职务,薪资 FROM 员工信息表 WHERE 薪资>3000

或者想要查询20062007进厂的员工名单,查询语句如下:

SELECT 工号,姓名FROM 员工信息表 WHERE 入厂日期 BETWEEN #06-01-01# AND #2007-12-31#

特别说明:SQL语句出现的字符串中,如果是文本型,需用单引号标识,如果是数值则不用,如果是日期型,需使用#结识。

回复

使用道具 举报

 楼主| 发表于 2007-11-24 20:56 | 显示全部楼层

WHERE 子句最多可包含 40 个表达式,,每个表达式可以使用+-*/ 等运算符号进行四则运算,而这些表达式又由诸如 And Or 之类的逻辑操作符连接。

讲到WHERE子句,就不能不说一说LIKE这个非常强大的运算符。我们经常听说的一个名词:模糊查询,即是经由这个运算符实现的,其功能与VBA下的LIKE基本一致。

对于一个明确而具体的条件,LIKE和=的功能是一样的。例如上面的例子中:

SELECT 工号,姓名,性别,年龄,部门,职务,薪资 FROM 员工信息表 WHERE 姓名张三

是和下面这个例句的功能一致的

SELECT 工号,姓名,性别,年龄,部门,职务,薪资 FROM 员工信息表 WHERE 姓名 LIKE张三

但是,对于一个模糊而笼统的条件,就必须在查询语句中使用通配符:%和_,其功能类似于DOS系统下的通配符:*或%,和?_*和%代表任意字符(0N个),?和_则代表任意一个字符;通配符#表示任意一个0-9的数字。

在样式中的字符

在表达式中的匹配

? or _(下划线):不同的系统

任何单一字符

* or %

零个或多个字符

#

任何单一数字(0 — 9

[charlist]

任何在字符表中的单一字符

[!charlist]

任何不在字符表中的单一字符

注意,仅当使用 Microsoft® Jet 4.X 版和 Microsoft OLE DB Provider for Jet 时,ANSI SQL 通配符 (%) (_) 才可用。若使用 Microsoft Access DAO,则将其视为原义字符。

[此贴子已经被作者于2007-11-24 21:08:08编辑过]
回复

使用道具 举报

 楼主| 发表于 2007-11-24 21:10 | 显示全部楼层

如查询:所有‘张’姓的的员工名单,查询语句如下:

SELECT 工号,姓名FROM 员工信息表 WHERE 姓名 LIKE ‘张%

如查询:‘张’姓、名字共三个字,最后一个字不是‘福’的员工名单,则须用这样的语句:

SELECT 工号,姓名FROM 员工信息表 WHERE 姓名 LIKE ‘_[!]’

更多的用法如下表:

符合的种类样式符合(返回 True 不符合(返回 False
多个字符:%LIKE ‘Aa’aaaBaaBBBaaBC
LIKE ‘ababcAabBXabaZbbac
特殊字符:[]LIKE ‘a[%]a’A%aaaa
多个字符LIKE ‘Ab%’abcdefgabccabaab
单一字符LIKE ‘A_a’aaaa3aaBaaBBBa
单一数字LIKE ‘a#a’a0aa1aa2aaaaa10a
字符范围之内LIKE ‘[a-z]’fpj2, &
字符范围之外LIKE ‘[!a-z]’9, &, %ba
非数字LIKE ‘[!0-9]’Aa&~0, 1, 9
组合字LIKE ‘a[!b-m]#’An9az0a99abcaj0

[此贴子已经被作者于2007-11-24 21:18:06编辑过]
回复

使用道具 举报

发表于 2007-11-25 17:21 | 显示全部楼层

留下脚印.[em01][em17]

 

为了保持帖子的连续性,请在烟版没有发完之前,不要回复。

                                                     此帖将稍后删除     [em05]

                                                                         ldy

 

[此贴子已经被ldy于2007-11-25 18:06:23编辑过]
回复

使用道具 举报

 楼主| 发表于 2007-11-26 23:33 | 显示全部楼层

4GROUP BY

SELECT查询语句不仅仅能够查询数据库中已经存在的这些信息,还可以对其中的某些字段信息进行汇总和计算,此时就要用到GROUP BY关键字了。此关键字将与指定字段的值相等的记录分组合并计算作为单一记录输出。同样还以上面的例子来说,欲查询公司姓‘张’的员工人数,可以这样:

SELECT count(姓名) AS 人数 FROM 员工信息表 WHERE 姓名 LIKE '%' GROUP BY 姓名

这里顺便讲一下AS的作用,上面这句如果去掉AS 人数,则查询结果的字段名为Expr1000,其中Expr表示该字段是由某一表达式汇总的结果,而1000则表示,该字段在查询结果中是每1个字段(依此类推,100i则表示第i+1个字段),这样的字段名输出结果,没有任何实际的意义,且难以理解,为此,需要使用AS关键字来为其取个易于理解和记忆的名字。

可与GROUP BY关键字一起使用的汇总函数有:

Avg 函数

计算包含在特定查询字段中的一组数值的算术平均值。(Avg 函数在计算中不计任何 Null 字段)例如,查询所有员工的平均工资时,可以这样:

SELECT avg(薪资) AS 平均工资 FROM 员工信息表

或者复杂一点,查询所有男性,经理级和年龄大于35的员工平均工资:

SELECT avg(薪资) AS 平均工资 FROM 员工信息表 WHERE 性别=’’ AND 职务=’经理’ AND 年龄>35 GROUP BY薪资

 

Count 函数

计算从查询返回的记录数。Count只是简单计算记录的数量。而不管记录中保存的是什么值。同时也不会计算字段为Null的记录,除非是Count(*)这种形式,将计算所有记录的总数量,包括字段为Null记录。

例句请参考前面所述。

回复

使用道具 举报

发表于 2007-12-2 21:49 | 显示全部楼层

向烟雨江南学习

 

[em23][em23][em23]
回复

使用道具 举报

发表于 2007-12-8 10:31 | 显示全部楼层

又遇到一高人啊!

[em01]
回复

使用道具 举报

发表于 2007-12-8 21:52 | 显示全部楼层

学习,希望继续
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-4 07:36 , Processed in 0.699652 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表