第一讲上面是Access数据库中所涉及的两个表下面我们介绍Access数据库中用于查询数据的语句:1、SELECT 语句SELECT语句是数据库中使用频率最高的语句,就是我们通常说的查询语句。
其格式如下:SELECT+需要查询的对象+FROM+表名+WHERE+条件。
例1、查询上表中所有男性职工的“工号”“姓名”“部门”和“应发工资”。
SELECT 工号,姓名,部门,应发工资FROM rsda where 性别=”男”注意事项:1):写查询语句时英文部分不区分字母大小写。
2):除汉字外,所有字符标点和数字都必须使用半角英文状态下输入。
3):SELECT查询语句中如果没有条件限制,“WHERE+条件”部分可以省略。
4):需要查询的项目在表中必须存在。
5):如果要输出表中所有项目可以用“*”代替。
例如:查询上表中所有人员的姓名,出生年月及部门SELECT 姓名,出生年月,部门FROM rsda;显示表中的所有信息Select * from rsda;显示表中所有女性职工的信息Select * from rsda where 性别=”女”;要求:查询表中所有“未婚”男性职工的信息。
Select * from rsda where (性别=”男”)and(婚否=no);有两个知识点需要掌握:1):运算符:A、算术运算符:加(+)、减(-)、乘(*)、除(/)、和取模(%)。
算术运算符可以完成对两个表达式的数学运算。
B:赋值运算符:等号(=)C:比较运算符:等于(=)、大于(>)、大于或等于(>=)、小于(<)、小于或等于(<=)、不等于(<>或!=)、不小于(!<)、不大于(!>).D:逻辑运算符:与(and)、或(or)和非(not)。
对于AND运算,只有当运算符两端的表达式的值都为真时,结果才返回真,只要有一股表达式的值为假,结果就是假;对于or 运算,只要运算符两端的表达式的值有一个位真,结果就返回真,只有两个表达式的值都是假,结果才为假;NOT运算是对表达式的值取反。
2):数据类型:文本、备注、数字、日期/时间、货币、自动编号、是/否、超链接等。
本例中“婚否”选项,使用的是“是/否”类型,即我们常说的布尔型,判断的时候“是”用yes表示,“否”用no表示。
Select语句中各个参数:1)、top如:查询前3条记录的工号,姓名,性别Select top 3 工号,姓名,性别from rsda;显示的结果是前3条记录。
查询数据表中前50%人员的信息Select top 50 percent * from rsda;显示的结果是表中前50%人员的信息2):DISTINCT如:查询所有记录的“性别”字段,并去掉重复值Select distinct 性别from rsda;3):别名如:查询所有记录的工号(别名为number)、姓名(别名为name)、出生年月(别名为birthday)字段Select number=工号,姓名as name ,出生年月birthday from rsda;需要注意的是,在ACCESS中使用“列名AS 列别名”形式。
4):年龄如:查询表中每个人的年龄。
Select 姓名, (year(now())-year(出生年月)) as 年龄from rsda;now()函数返回当前日期,year()获取年份。
其他函数有abs(绝对值)、left(从左侧截取字符串)、right(从右侧截取字符串)、len(获取字符串的长度)、ltrim和rtrim(去掉字符串前面或后面的空格)、day(返回日期)、month(返回月份)、year(返回年份)、weekday(返回星期)、hour(返回小时)、date(返回系统日期)、sum(求和)、avg(求平均值)、count(统计个数)、max(求最大值)、min(求最小值)等等。
如:显示表中应发工资的最大值Select max(应发工资) as 工资from rsda;如:查询表中各人员工号的前两位Select left(工号,2)as 工号前两位from rsda;如:统计所有男性职工的人数Select count(*) from rsda where 性别=”男”如:显示表中应发工资最高的人员信息select * from rsda where 应发工资>=(select max(应发工资) from rsda);上面是个嵌套查询语句2、into语句如:创建一个新表rrr来显示上表中前五名人员的信息。
Select top 5 * into rrr from rsda;第二讲一、from语句from子句用于指定要查询的表。
例如:查询表rsda表和kcm表中的数据。
SELECT rsda.编号,rsda.工号,姓名,性别,出生年月,kcm.课程名from rsda,kcm where rsda.工号=kcm.工号注意:本例子是关于表间查询的。
表中有共同列的项目必须标注表名,格式为“表名”+“.”+“列号”。
当两个或多个数据表中有共同名称的字段时必须使用上面的格式,否则由于系统不清楚应该使用哪个数据表中的同名字段,将无法执行此查询,会提示错误。
上面例子也可以使用联合查询形式完成,程序如下:SELECT rsda.编号,rsda.工号,姓名,性别,出生年月,kcm.课程名from rsda inner join kcm on rsda.工号=kcm.工号练习:显示担任“计算机文化基础”教学人员的工号,姓名,性别,婚否,基本工资及部门。
二、where语句where子句是条件子句,用来限定查询的内容。
在where语句中是允许使用比较运算符如下:等于、大于、大于等于、小于、小于等于、不等于、不大于、不小于、不等于。
例如:查询rsda表中应发工资小于1500的人员信息。
SELECT * from rsda where 应发工资<1500练习:显示表中基本工资不大于1200的工号,姓名,出生年月及基本工资。
逻辑表达式如下:逻辑反、逻辑与、逻辑或。
例如:查询年龄小于39岁未婚男士的部门信息SELECT 姓名,部门from rsda where (year(now())-year(出生年月)<39)and (婚否=no)and(性别=”男”)练习:显示当前未过生日的已婚人员信息。
三、between关键字例如:查询表rsda中应发工资在1000到1500之间的人员信息SELECT * from rsda where 应发工资between 1000 and 1500练习:显示表中基本工资在800到1200之间人员的姓名,部门及基本工资。
四、in 关键字使用in关键字可以确定给定的值是否与子查询或列表中的值相匹配。
例如:显示教务处、学生处和总务处已婚男士人员的补贴信息SELECT 姓名,补贴from rsda where (性别="男")and (婚否=-1 )and (部门in ("教务处","学生处","总务处"))练习:查询表中总务处和基础部未婚女性职工的人数。
五、like关键字使用like关键字可以确定给定的字符串是否与指定的模式匹配。
模式可以包含常规字符和通配符字符。
通过模式的匹配,达到模糊查询的效果。
例如:查询表中张姓人员的工号,姓名,性别,部门及出生年月SELECT 工号,姓名,性别,部门,出生年月from rsda where 姓名like "张*"练习:查询工号以11开头的所有人员信息。
六、group by语句在group by语句中在选择列表内定义的列的别名不能用于指定分组列,此外,select后面的每一列数据除了出现在统计函数中的列外,都必须在group by子句中应用。
例如:在表rsda表中按性别进行分组,查询相应的人数。
SELECT 性别,count(性别) as 人数from rsda group by 性别练习:统计已婚和未婚的人数,并按婚否进行分组。
七、having语句having语句为分组或集合指定搜索条件,通常与group by语句一起使用,说明:当having 与group by all一起使用时,having 语句替代了all。
在having语句中不能使用text,image,ntext数据类型。
HAVING 子句对GROUP BY 子句设置条件的方式与WHERE 子句和SELECT 语句交互的方式类似。
WHERE 子句搜索条件在进行分组操作之前应用;而HAVING 搜索条件在进行分组操作之后应用。
HAVING 语法与WHERE 语法类似,但HAVING 可以包含聚合函数。
HAVING 子句可以引用选择列表中出现的任意项。
例如:在表中查询部门中有两个以上人员的部门信息SELECT 部门,count(部门) as 部门人数from rsda group by 部门having count(部门)>=2 练习:显示表中有两个以上补贴相同的人员信息。
八、order by语句order by语句用于指定对查询结果排序。
如果在select中同时指定了top,则order by语句无效。
在排序过程中ASC表示按递增顺序排列,即从最低值到最高值对指定列中的值进行排序。
是系统默认的排列方式,书写语句时可省略。
DESC表示按递减顺序排列,即从最高值到最低值对指定列中的值进行排序。
需要注意的是,空值被视为最低值。
例如:显示表中基本工资为1000的人员信息,并按工号降序排列。
SELECT * from rsda where 基本工资=1000 order by 工号desc;练习:查询补贴为500的工号,姓名,部门,并按工号升序排列。
九、联合查询。
联合查询是指将两个或两个以上的select语句通过union运算符连接起来的查询,联合查询可以将两个或者更多查询的结果组合为单个结果集,该结果集包含联合查询中所有查询的全部行。
使用union组合两个查询的结果集的两个基本规则是:1、所有查询中的列数和列是顺序必须相同。
2、数据类型必须兼容。
十、嵌套查询嵌套查询主要用于复杂的查询。
在SQL语言中,一个select---from---where语句称为一个查询块,将一个查询块嵌套在另外一个查询块的where子句或having短语的条件中的查询称为嵌套查询。
嵌套查询中上层查询块称为外层查询或父查询,下层查询块称为内查询或子查询。
SQL 语言允许多层查询嵌套,但是在子查询中不允许出现order by语句,order by语句只能用在最外层的查询块中。