其语法格式 为: SELECT [ALL|DISTINCT]{字段名列表} [ALL|DISTINCT]{字段名列表} FROM 表名 [WHERE {条件表达式}] {条件表达式}] [GROUP BY {group_by_list}] [ ORDER BY {order_by_list} [ASC/DESC]]; 说明: 这条语句分为三大部分: (1)SELECT:SELECT子句用于指定检索数据库中的哪些列。 SELECT:SELECT子句用于指定检索数据库中的哪些列。 (2)FROM:FROM子句用于指定从哪一个表或视图中检索数据。 FROM:FROM子句用于指定从哪一个表或视图中检索数据。 (3)WHERE:WHERE字句用于在查询过程中的限制条件。 WHERE:WHERE字句用于在查询过程中的限制条件。 关于DISTINCT子句、GROUP BY子句、ORDER BY子句的使用在本 关于DISTINCT子句、GROUP BY子句、ORDER BY子句的使用在本 节后面介绍。 3.4.1 简单查询 简单查询格式如下: SELECT {字段名列表} FROM 表名; {字段名列表} 表名; 【例】假设关于一个企业信息的数据库中 有三个表: 职工表EMP、部门表DEPT、岗位(或工种) 职工表EMP、部门表DEPT、岗位(或工种) 表JOBLEVEL。 JOBLEVEL。 其中: 表EMP有如下字段: EMP有如下字段: 序号 1 2 3 4 5 6 7 8 字段名称 name sex birth phone deptname salary job title 字段类型 字符型 字符型 日期型 字符型 字符型 实型数据 字符型 字符型 字段说明 职工姓名 性别 出生日期 员工个人联系方式 所在部门 工资 岗位(或工种) 职务(无职务,可以为空) 这个表主要描述企业的职工信息,数据如下 name 欧阳军 底雪洋 李一岚 白海燕 刘紫羽 刘徐贝 尔 周楚远 sex 女 男 女 女 女 女 男 birth 1986-0901 1998-1009 1984-1001 1978-0209 1989-0109 1989-0109 1989-0109 deptname 办公室 软件开发 部 软件开发 部 市场部 办公室 软件开发 部 市场部 主任 经理 经理 title phone salary job 文员 软件开发 软件开发 产品销售 文员 软件开发 产品销售 86798821 2500 86798823 3800 13912345 4500 86798825 1700 86798821 3000 86798823 4500 86798825 2000 表DEPT有如下字段 DEPT有如下字段 序号 字段名称 字段类型 字段说明 1 deptname 字符型 部门名 部门经理姓 名 部门地址 2 manager 字符型 3 addr 字符型 4 phone 字符型 电话号码 表JOBLEVEL有如下字段: JOBLEVEL有如下字段: 序号 字段名称 字段类型 字段说明 1 job 字符型 岗位名字 2 level1 数字型 工资等级1 3 level2 数字型 工资等级2 4 level3 数字型 工资等级3 3.4.2 带条件的简单查询 SELECT {字段名列表} {字段名列表} FROM 表名 WHERE {条件表达式}] {条件表达式}] 这里讲的带条件的简单查询指单条件的查询和组 合条件的查询。下面分别介绍。 1.单条件的查询 【例】查询企业中工资超过2100元(包括2100元) 查询企业中工资超过2100元(包括2100元) 的所有员工的姓名及其岗位。 SQL 语句如下: SQL>SELECT name,salary,job FROM EMP WHERE salary >= 2100; 2.组合条件的查询 组合条件指WHERE子句中的条件由多个条件组 组合条件指WHERE子句中的条件由多个条件组 成,这些组合主要是由逻辑运算符(AND、OR、 成,这些组合主要是由逻辑运算符(AND、OR、 NOT)组成。看下面的例子。 NOT)组成。看下面的例子。 【例】找出企业员工中做软件开发工作并且工资 在4000元以上的员工姓名和所在部门。 4000元以上的员工姓名和所在部门。 SQL 语句如下: SQL>SELECT name,deptname,salary,job FROM EMP WHERE job='软件开发'' and salary >4000; job='软件开发 3.4.3 单表查询应用 1.查询某些字段不同的记录 在查询工程中,可能发现有某些相同的数据, 为了只显示不同的数据,可以使用DISTINCT 为了只显示不同的数据,可以使用DISTINCT 关键字。 【例】查询企业中有多少种不同的岗位。 SQL 语句如下: SQL>SELECT DISTINCT job FROM EMP; 2.BETWEEN…AND关键字的使用 BETWEEN…AND关键字的使用 BETWEEN…AND 关键字给出了查询范围内 的字段,而NOT BETWEEN…AND则给出了 的字段,而NOT BETWEEN…AND则给出了 查询选择范围之外的某些列。 【例】找出工资在2000元到3500元的所有员 找出工资在2000元到3500元的所有员 工。 SQL 语句如下: SQL>SELECT name,salary FROM EMP WHERE salary BETWEEN 2000 AND 3500; 3.模糊查询 前面的查询都是精确查询,但是我们 平时查询时经常会使用模糊查询,比 如“找姓陈的先生”,“找员工名字 中最后一个字是琳的小姐”等,这些 只给出某个字段得到部分关键词而不 是字段的整个数据时,就可以使用 LIKE关键字了。而NOT LIKE的意思正 LIKE关键字了。而NOT LIKE的意思正 好相反。 这里介绍几个通配符,如表3 这里介绍几个通配符,如表3-3所示。 序号 通配符 说明 1 % 代表0到多个字符 2 _ 代表单个字符 4.NULL和 NOT NULL 关键字的使 用 NULL和 NOT NULL主要用于找出下落不明值的记 录。例如,在公司人员招聘过程中,查询出尚未安 排面试的候选人名单。 【例】查询办公室中一般员工的基本信息(不带职 务的员工)。 SQL 语句如下: SQL>SELECT * FROM EMP WHERE deptname="办公室" AND title =null; 5.查询结果排序 ORDER BY 子句使得SQL在显示查询结果时将各返回行按 顺序排列,返回行的排列顺序由ORDER BY 子句指定的表 达式的值ASC 或DESC确定。 SELECT [ALL|DISTINCT]{字段名列表} FROM 表名 [WHERE {条件表达式}] [GROUP BY {group_by_list}] [ ORDER BY {order_by_list} [ASC/DESC]]; 其中: ASC:升序。表示按照递增顺序从低到高对指定的列值排序。 DESC:降序。表示按照递减顺序从高到低对指定的列值排 序。 6.字段运算查询 在数据库查询时,我们希望把表中的数据进行基本的算术运 算,然后显示出来。 常见的算术运算有:+(加)、-(减)、*(乘)、/(除) 四种。 【例】如果将软件开发部的所有员工工资增加1000元,请显 示出此部门的员工姓名和工资。 SQL 语句如下: SQL>SELECT name,salary+1000 FROM EMP WHERE deptname='软件开发部'; 7.rowid和rownum rowid和rownum是很有用的两个数据库表中隐含的字段。 rowid 是数据库内部的十六进制的数据地址,表明信息放在第几块第几 行。 rownum是行号,并且顺序排列,根据你的select语句的执行动态生成。 它表示是表的逻辑上的第几行 【例】区别rowid和rownum。 SQL>SELECT rownum,rowid,ename FROM EMP; 执行结果: rownum rowid ename ----------------------------------------------------------------1 D9B3333C.0003.0002 白海燕 2 DAAAA66D.0002.0002 周楚远 3 BAA33331.0003.0002 底雪洋 4 D555DFD.0005.0002 欧阳军 5 DB133344.0006.0002 刘徐贝尔 ……………………………. 8.别名的使用 在前面的查询中,显示的结果都是用字段名来显示的,这样 不是很直观,我们可以给显示的字段名起一个直观的名字 (叫“别名”),以这个别名来显示。