资源描述
第 5章 数据库数据的选择 重点内容: SELECT语句定义 SELECT关键字开头子句使用 FROM字句使用 WHERE字句使用 一、 SELECT语句定义 从某种意义上说, SELECT语句是 SQL 中真正核心的内容。使用 SELECT语句可 以让用户以各种不同的方式查找并查看 数据。 SELECT语句可以满足用户的各种 需要,如符合某种条件的数据有多少, 存放在那个表中等等,这些都可以用 SELECT语句很好的完成。 SELECT ALL | DISTINCT select_list FROM table_list/view_list WHERE conditions GROUP BY group_list HAVING conditions ORDER BY order_list 第一行关键字 SELECT后的 select_list列出了所选择列的名称 , 在检索之后系统将显示在 seect_list中列出符合 条件的的列的数据 。 SELECT关键字之后可选的关键字 ALL表示将显示所有检索到的数据 ( 包括重复的数据 ) , DISTINCT表示不在结果中显示重复的数据; 第二行在关键字 FROM之后 , 指定要进行检索的表的名称 table_list或视图的名称 view_list; 第三行在 WHERE关键字之后 , 您可以指定检索的条件 , 使 SELECT语句按照指定的检索条件在表中检索数据; 第四行 GROUP BY指定如何对检索到的数据进行分组 , 使显示结果按照您的需要分好组 , 产生可读性更好的结果 ; HAVING子句可以看成用于组的 WHERE子句 。 HAVING子句用来限制组 , 就象 WHERE子句用来限制行一样; 第六行 ORDER BY指定如何对检索到的数据进行排序 , 使显示结果按照您的需要派好序 , 产生可读性更好的结果 。 最基本的 SELECT语句中一般包含前面三行,后面三行是为了更好的显示查询的结果。使用后面三行可以清晰、 直观的显示查询结果。 二、指定检索列 1、 选择所有的列 需要显示一个表中所有列的值,可以在 SELECT关键字之后列出表中所有 的列的名称。 SQL中提供了一个符号:星号( *),用来表示选择表中所有的 列。列的显示顺序将与其在 CREATE TABLE时列出的先后顺序相同。 SELECT dnumber, dname, mgrid, mgrstrdate FROM Department Results dnumber dname mgrid mgrstdate 1 开发部 1001 2001-11-3 2 市场部 2001 2002-3-1 3 人事部 3001 2001-4-5 4 技术部 4001 2001-1-15 5 测试部 5001 2002-6-5 6 财务部 6001 2002-3-10 6rows SELECT * FROM Department Results dname dnumber mgrid mgrstdate 开发部 1 1001 2001-11-3 市场部 2 2001 2002-3-1 人事部 3 3001 2001-4-5 技术部 4 4001 2001-1-15 测试部 5 5001 2002-6-5 财务部 6 6001 2002-3-10 6rows 二、指定检索列 2、 选择所需的列 很多时候并不需要将所有列的数据都显示出来, SELECT子句也可以用来 显示用户需要的列。 SELECT column_name, column_name, . FROM table_list/view_list SELECT dname, dnumber, mgrid FROM Department Results dname dnumber mgrid 开发部 1 1001 市场部 2 2001 人事部 3 3001 技术部 4 4001 测试部 5 5001 财务部 6 6001 6rows 二、指定检索列 3、 表达式的使用 在 SELECT子句中,支持数学表达式的应用,以方便的完成对列上数据的 计算并将计算结果包含在查询结果中。在 SELECT子句中,表达式中可以包含 数字、列名或二者都在表达式中使用。 ( 1)仅使用数字 在 SELECT子句中的表达式不一定必须包括列,可以在表达式中单独使用, 并作为单独的一列与其它查询结果一起显示。这样的使用仅仅在很特殊的场 合中才存在。 ( 2)列与常量的结合使用 很多时候需要对查询到的数据进行一些计算,结合使用列与常量能很好 的完成用户所想实现的功能。加、减、乘、除这四种运算符都能在表达式中 使用。 ( 3)在表达式中同时使用多个列 SQL中不仅可以对列与常量使用表达式,还支持在列与列之间使用算术运 算符。 二、指定检索列 4、 别名的使用 SELECT dnumber, dname, mgrid, mgrstrdate FROM Department Results dnumber dname mgrid mgrstrdate 1 开发部 1001 2001-11-3 2 市场部 2001 2002-3-1 3 人事部 3001 2001-4-5 4 技术部 4001 2001-1-15 5 测试部 5001 2002-6-5 6 财务部 6001 2002-3-10 6rows SELECT dnumber, dname AS Department, mgrid FROM Department Results dnumber Department mgrid 1 开发部 1001 2 市场部 2001 3 人事部 3001 4 技术部 4001 5 测试部 5001 6 财务部 6001 6rows 在 SQL中定义了关键字 AS来改变 select_list中的列和表达式在显 示结果时的名称。这样显示的名称可以改善查询结果的可读性。 AS不 仅可以改变 select_list中的列在显示结果时的名称,还可以为表达式 指定显示时的名称。 三、指定检索表 SELECT语句中的 FROM子句用来指定从那个表或视图中检索数据。 table_list/view_list列出表或视图的名称,表名之间也是使用逗号隔开。 为了明确说明列属于哪个表,可以在列名之前加上表名作为限定。 SQL中提供 了对表创建别名的方法来简化限定使用。 SELECT Department.dnumber, Department.dname, Department.mgrid FROM Department 四、使用 WHERE子句筛选 WHERE子句在使用 SELECT语句进行查询时最重要的子句 , 在 WHERE子句 中指出了检索的条件 , 系统进行检索时将按照这些指定的条件对表中记录进 行检索 , 找到符合条件的记录 。 在 SQL中提供了各种的运算符和关键字来定义搜索条件。其中,运算符分 为比较运算符与逻辑运算符。关键字有 IN、 BETWEEN、 LIKE、 IS NULL、 IS NOT NULL等等。 1、 比较运算符 比较运算符在 WHERE子句中使用的非常普遍,几乎所有的条件都要用到比 较运算符。 ( 1)数字的比较 ( 2)字符串的比较 ( 3)时间的比较 四、使用 WHERE子句筛选 2、 逻辑运算 符 很多情况下,在 WHERE子句中仅仅使用一个条件并不能准确的从表中检索 到需要的数据。为了处理多条件查询, SQL提供了三个逻辑运算符: AND、 OR、 NOT。 AND(与) AND运算符可以连接两个或两个以上的条件,只有当 AND连接的条件都为 TRUE(真)时, AND返回的结果才是 TRUE(真)。如果其中有一个 条件为 FALSE(假), AND返回的值就是 FALSE(假)。 OR(或) OR运算符连接的条件中只要有一个条件为 TRUE时, OR返回的结果就是 TRUE。当然两个条件均为 TRUE时, OR返回的结果当然是 TRUE。 NOT(非) 如果原来条件返回 TRUE,在其之前使用 NOT之后则返回 FALSE。如果原 来条件返回 FALSE,在其之前使用 NOT之后则返回 TRUE。 四、使用 WHERE子句筛选 2、 逻辑运算 符 SELECT pnumber, budget, gross, gross budget AS profit FROM Project WHERE NOT (gross budget)=40000.00 AND budget200000.00) Results pnumber budget gross profit 101 110000.00 150000.00 40000.00 102 140000.00 180000.00 40000.00 103 150000.00 180000.00 30000.00 104 120000.00 160000.00 40000.00 201 200000.00 250000.00 50000.00 202 220000.00 280000.00 60000.00 301 300000.00 370000.00 70000.00 302 320000.00 380000.00 60000.00 303 360000.00 450000.00 90000.00 9rows 四、使用 WHERE子句筛选 3、 IN子句 在查找特定条件的数据时,如果条件较多, 就需要用到多个 OR运算符,以查找满足其中任 一条件的记录。但是使用多个 OR运算符,将使 得 WHERE子句变得过于冗长。 SQL提供了 IN子句 来取代多个 OR运算符。 SELECT select_list FROM table_list/view_list WHERE column NOT IN(value_list) SELECT name, sex, id, salary, dno FROM Employee WHERE dno=1 OR dno=2 OR dno=3 Results name sex id salary dno 林志千 男 1001 6000.00 1 李明 男 1002 5000.00 1 李大平 男 1003 3000.00 1 林国荣 男 1004 4000.00 1 庞文凯 男 1005 3000.00 1 陈广海 男 2001 5000.00 2 刘燕 女 2002 3000.00 2 林志祥 男 2003 3000.00 2 张宇 男 3001 5000.00 3 吴忠彦 男 3002 3000.00 3 魏箐 女 3003 4000.00 3 王静 女 3004 3000.00 3 12rows SELECT name, sex, id, salary, dno FROM Employee WHERE dno IN(1,2,3) Results name sex id salary dno 林志千 男 1001 6000.00 1 李明 男 1002 5000.00 1 李大平 男 1003 3000.00 1 林国荣 男 1004 4000.00 1 庞文凯 男 1005 3000.00 1 陈广海 男 2001 5000.00 2 刘燕 女 2002 3000.00 2 林志祥 男 2003 3000.00 2 张宇 男 3001 5000.00 3 吴忠彦 男 3002 3000.00 3 魏箐 女 3003 4000.00 3 王静 女 3004 3000.00 3 12rows 四、使用 WHERE子句筛选 4、 BETWEEN子句 在查询中,限制范围也是经常使用的一个条件。用户可以同时使用大于 (等于 )号、小于 (等于 )号和 AND运算符三者来完成范围的限制。 SQL中提供了专 门的 BETWEEN子句也可以完成范围的限制。 SQL也支持 NOT与 BETWEEN结合使用。 SELECT select_list FROM table_list/view_list WHERE column NOT BETWEEN lower_value AND upper_value SELECT pnumber, budget FROM Project WHERE budget BETWEEN 150000.00 AND 250000.00 Results pnumber budget 103 150000.00 201 200000.00 202 220000.00 203 250000.00 204 240000.00 5rows 四、使用 WHERE子句筛选 5、 LIKE子句 在 SQL中提供了解决模式匹配问题的匹配方法 LIKE关键字 SELECT select_list FROM table_list/view_list WHERE column NOT LIKE pattern ESCAPE escape_char 在使用中有两点需要说明: ( 1) 在 pattern中使用通配符来指定字符串匹配的模式 , 匹配的模式必须 包含在引号中; ( 2) 当模式中需要使用通配符的原义时 , 使用可选项 ESCAPE, 并在 escape_char中指定使用的转义符 。 四、使用 WHERE子句筛选 6、 等号 、 IN、 LIKE三者的比较 SQL中等号、 IN、 LIKE三者都可以用来进行数据匹配。但三者并不相同。 等号是用来查找与单个值匹配的所有数据; IN是用来查找与多个值匹配的所有 数据;而 LIKE用来查找与一个模式匹配的所有数据。 等号 确切知道所要查找的内容,且为单一值时,可以使用等号运算符来进行数据比较。等号运算符中可以使用字符串、日期或数字。 IN子句 当确切知道所要查找的内容,且为多个值时,可以使用 IN子句来进行数据比较。 IN子句中也可以使用数字、字符串或日期。 LIKE子句 当无法确切知道所要查找的值,而是知道所要查找的数据符合的模式时,可以使用 LIKE子句进行匹配。一般来说, LIKE子句仅在字符串类型时使 用,有些系统也支持在日期数据中使用,但对数字类型数据是不能使用 LIKE子句的。 四、使用 WHERE子句筛选 7、 空值的处理 在很多情况下,表中记录在某一列的值为空值是常有的事。 SQL中提供了 专门的 IS NULL子句和 IS NOT NULL子句以进行 NULL的判断。 SELECT select_list FROM table_list/view_list WHERE column IS NOT NULL 四、使用 WHERE子句筛选 8、 WHERE子句中有用的函数 删除多余空格: SQL中提供了 TRIM( )函数来方 便的删除字符串的串前串后可能存在的空格。 字符串函数: SQL中为字符串提供了很多有用的 函数,如 LOWER(str)函数 . 类型转换函数: SQL中提供了三个转换函数: CONVERT( )、 TO_CHAR( )和 TO_NUMBER( )函数。 聚集函数: SQL中提供了很多聚集函数可以方便 的进行最大值、最小值、平均值等的计算。 函数的嵌套: SQL支持函数的嵌套使用。例如, 使用先使用 SUBSTR( )函数从一个字符串中取出 一个字串,再使用 TRIM( )函数去除可能的前后 空格。 SELECT name, sex, id, salary FROM Employee WHERE TRIM(name) = 王静 TRIM(SUBSTR(NO.9 Shengli Road ,21) CONVERT(data_type , expression ,style) SELECT name FROM Employee WHERE LOWER(name) = mike 本章小结: 掌握 SELECT语句的基本定义 掌握 SELECT语句各字句的使用方法
展开阅读全文