第6章 数据查询1

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SELECT AVG(wages) AS 平均工资 FROM employee WHERE sex='男‘
在Where子句是可以包含多个查询条件
使用逻辑运算符AND或OR将多个查询条件组合起来,完成 比较复杂的数据检索。 例4、在student中检索男生且年龄大于21岁的学生记录。 Select * FROM student Where sex =1 AND Datediff(yy,birth,Getdate()) 例5、在‚student”中检索姓张或姓李的学生。 Select * FROM student
DELETE
student WHERE 姓名 IS NULL
• 查询结果处理
使用ORDER BY子句对记录排序
Order By 要参与排序的表达式 [ASC|DESC] [, …n ] (1) ASC和DESC----用于指定排序方向。如未指定则 默认为ASC。
(2) 可以对多达16个列执行ORDER BY语句.
(4)使用计算字段:
计算字段又称为派生字段,是由数据库表中的一些字 段经过运算而生成的表达式,其中可以包括字段、运算 符和SQL Server的内置函数。设置计算字段的语法: 表达式 [ [ AS ] 别名 ]
例:将BOOK 表 中 的 book_id 、 book_name 和 price 字段分别是以 ‘书号’、‘书名’和‘价格’输出,输出时‘price’字段在原有价 格上加5元。 USE JWGL Select book_id AS 书号,book_name AS 书名, price+5 AS 价格 From book
④[^] 不在范围之内的字符:
[^]通配符的作用与[ ]相反,用于表示位于一个字符列表或 字符范围之外的任一字符,其中^符号通知SQL Server将 包含指定字符的记录排除在结果集之外。 如: Select * FROM 学生表 Where 姓名 LIKE '[^王]%' 例、从‚STUDENT”中检索学号末位数字不在2~6范围内 的 学生。 Select * FROM STUDENT Where student_id LIKE '%[^2-6]'
使用空值过滤记录:
可以使用IS [NOT] NULL来判断值是否为空值。
例6-9 对employee表,列出所有工资为空值的员工编号和 姓名。
SELECT employee_id,employee_name FROM employee WHERE wages IS NULL 例:删除STUDENT表中姓名值为空的记录。
SELECT * FROM department
(2)选取部分字段: 在Select子句中给出包含所选字段的一个列表,各个字段 之间用逗号分隔,字段的次序可以任意指定。 注意:如在From子句中指定了两个表,而这两个表中又有 同名的字段,使用这些字段时就应在其字段名前冠以表名。
USE JWGL Select student.student_id,student.student_name,monitor From student,class Where class.class_id=student.class_id
• 带条件查询
WHERE
6.1 基本查询
search_condition
注:比较符号有 =、!=或<>、>、>=、<、<=
例6-4 对employee表,列出月工资在2000以上的员工记录。
SELECT * FROM employee WHERE wages>2000
例6-5 对employee表,求出男员工的平均工资。
例6-3 对employee表,分别查询公司的员工总数和公司 员工的平均收入。 SELECT COUNT(*) AS 总数 FROM employee SELECT AVG(wages) AS 平均收入 FROM employee 记住
函数 AVG(字段名) SUM(字段名) COUNT(*) MIN(字段名) MAX(字段名)
例6-6 对employee表,列出市场部和销售部的员工名单。 SELECT d.department_name, e.employee_name FROM employee e INNER JOIN department d ON e.department_id = d.department_id WHERE d.department_name IN ('市场部', '销售部') 语句中的WHERE子句还有等价的形式: WHERE (d.department_name = '市场部') OR (d.department_name = '销售部')
1、使用字段列表指定输出字段
(1)选取全部字段: 在Select子句中使用‚*‛,此时还必须用FROM子句来 指定作为选择查询的输入源。 例6-1 分别显示Sales数据库中的员工表employee、商 品表goods、销售表sell_order表和部门表department中的 所有记录。 USE Sales SELECT * FROM employee SELECT * FROM goods SELECT * FROM sell_order
使用IN 和 Not IN 过滤记录
表达式 [NOT] IN (子查询 | 表达式列表)
注:如果表达式的值等于子查询返回的某个值,或等于表达式列表中 的某个表达式的值,则运算结果为True,否则为False。当使用 NOT IN时,将对IN运算的结果再取一次反。
例:在‚student”中检索姓李、姓张、姓林、姓许的学生记录。 Select * FROM student Where Substring(姓名,1,1) IN (‘李’,‘张’,‘王’,‘刘’) 等价于: Select * FROM student Where Substring(姓名,1,1)= ‘李’ OR Substring(姓名,1,1)=‘张’ OR Substring(姓名,1,1)= ‘王’ OR Substring(姓名,1,1)=‘刘’
•简单查询 SELECT [ALL|DISTINCT] [TOP n [PERCENT]] select_list table_name
6.1 基本查询
FROM
(1) ALL:表示输出所有记录,包括重复记录。 (2) Distinct:表示输出无重复结果的记录。 (3) TOP n [PERCENT]:指定返回查询结果的前n行数据, 如果指定PERCENT项,则返回查询结果的前n%行数据。 (4)select_list:所要查询的选项的集合,多个选项之间用逗号 分开,若要输出表中的全部字段,可用“*”表示。 (3)table_name:要查询的表。
使用LIKE 和 通配符过滤记录
LIKE运算符用于测试一个字符串是否与给定的模式相 匹配。如果需要从数据库中检索一批记录,但又不能给 出精确的查询条件,在这种情况下,就可以使用LIKE运
算符和通配符来实现模糊查询。
所谓模式是一种特殊的字符串,其特殊之处在于它不 仅可以包含普通字符,还可以包含通配符,用于表示任
FROM employee
姓名, 年龄
(3) TOP: 如果在字段列表前面使用TOP n(n为非负整数),则在查 询结果中输出前面n条记录;如使用TOP n Percent (n=0~100),则在查询结果中显示前面总记录数的百分比 为n%的记录。 例、检索‚student”中的前三条记录: Select TOP 3 * From student Select TOP 25 Percent * From student
功能 求一列数据的平均值 求一列数据的和 统计查询的行数 求列中的最小值 求列中的最大值
2、使用ALL、DISTINCT 和TOP指定记录行数
在Select子句中可以使用ALL、DISTINCT 和TOP指 定选择查询所返回的记录行数。 (1) ALL:默认关键字,将返回符合条件的全部记录, 而且允许在查询结果中包含重复记录。 例:检索‚student”中‚student_id”字段的全部数据: Select ALL student_id From student
(2) DISTINCT: 可消除查询结果中的重复记录。 如: Select Distinct student_id From student
例6-2 显示employee表中全部员工的姓名和年龄, 去掉重名。
SELECT DISTINCT employee_name AS YEAR(GETDATE())-YEAR(birth_date) AS
表示一个字符列表时,将各个字符写在方括号内,字符之间 也可以用逗号分隔。 例 [m,p]匹配的是m和p;
表示一个字符范围时,将这个范围的起止字符写在方括号内, 并使用连字符 – 来分隔这两个字符。此时下限写在左边,上 限写在右边。 例 [m-p]匹配的是m、n、o、p
例、从‚STUDENT”中查找姓王、姓李和姓林的学生。 Select * FROM STUDENT Where 姓名 LIKE '[王李林]%'
Where Substring(姓名,1,1)=‘张’ OR Substring(姓名,1,1)=‘李’
使用单一查询条件过滤记录: 使用Between 和 Not Between 过滤记录 Where 表达式 [NOT] Between 起始值 AND 终止值 注:Between用于搜索由起始值和终止值指定的一个范 围。Not Between正好与上相反,用于搜索不在指定范 围内的数据 例6-7 对employee表,列出月工资在2000到3000之间的员 工名单。 SELECT * FROM employee WHERE wages BETWEEN 2000 AND 3000 语句中的WHERE子句还有等价的形式: WHERE wages>=2000 AND wages<=3000
例6-10 对employee表,按性别升序列出员工的编号、姓名、 性别、部门编号及工资,性别相同的再先按部门后按工资由高 到低排序。 SELECT employee_id,employee_name,sex,department_id,wages FROM employee ORDER BY sex,department_id,wages DESC
意的字符串。
(1)语法: Where 字符串表达式 [NOT] LIKE 模式
(2)模式中的通配符:
① _下划线:匹配任何单个字符.
注意 一个汉字或全角字符也算一个字符。 例、从‚student”中查找姓名中第二个字是‚红‛的学生。 Select * FROM STUDENT Where 姓名 LIKE ‘_红_’ ② % 百分号:匹配包含0个或多个字符的字符串,此时%通配 符在查询中起着占位符的作用,用于代替数目不确定的字符。
(3)设置字段别名:
显示选择查询的结果时,第一行(即表头)中显示的 是各个输出字段的名称。为了便于阅读,也可指定更容易 理解的字段名来取代原来的字段名。设置别名的方法: 原字段名 字段别名 原字段名 AS 字段别名
字段别名 = 原字段名
例、在示例数据库Northwind中,有一个用于存储职工资料的 Employees表,该表中的所有字段全是用英文命名的,为此指 定加别名: Select EmployeeID AS 职工编号,LastName 姓名, 职务=Title,City AS 城市, From Employees
例6-8 对employee表,列出所有的姓‚张‛的员工名单。
SELECT * FROM employee WHERE employee_name LIKE '张%'
语句中的WHERE子句还有等价的形式:
WHERE LEFT(employee_name,1)= ‘张’
③ [ ] 排列通配符: 匹配任何在范围或集合中的单个字符。
第6章 数据查询(一)
Байду номын сангаас
6.1 基本查询
SQL数据查询语句是SELECT语句。该语句的基本 框架是SELECT-FROM-WHERE,它包含输出 字段、数据来源和查询条件等基本子句。在这种 固定格式中,可以不要WHERE,但是SELECT 和FROM是必备的。SELECT语句的子句很多, 理解了这条语句各项的含义,就能从数据库中查 询出各种数据。
相关文档
最新文档