Presentation is loading. Please wait.

Presentation is loading. Please wait.

第5章 Transact-SQL程序设计 5.1 数据查询SELECT的用法 5.2 插入表记录INSERT的用法

Similar presentations


Presentation on theme: "第5章 Transact-SQL程序设计 5.1 数据查询SELECT的用法 5.2 插入表记录INSERT的用法"— Presentation transcript:

1 第5章 Transact-SQL程序设计 5.1 数据查询SELECT的用法 5.2 插入表记录INSERT的用法
5.3 删除数据行DELETE的用法 5.4 修改表字段数据UPDATE   的用法

2 数据库查询(SELECT)的各种语法格 式,特别是分组查询、计算和统计以及表联 接JOIN等查询操作;
能力目标   数据库查询(SELECT)的各种语法格 式,特别是分组查询、计算和统计以及表联 接JOIN等查询操作;   修改数据库记录UPDATE语句的用法;   插入数据记录INSERT语句的用法;   删除数据库记录DELETE语句的用法。

3 态度目标   团队精神;   态度积极;   任务按时完成;   出勤。

4 重点难点   重点:   熟练掌握数据操作的编程方法。   难点:

5 5.1 数据查询SELECT的用法 1. SELECT的Transact-SQL语法结构
要的子句可归纳如下: SELECT select_list [ INTO new_table ] [ FROM table_source ] [ WHERE search_condition ] [ GROUP BY group_by_expression] [ HAVING search_condition] [ ORDER BY order_expression [ ASC | DESC ] ]

6 5.1 数据查询SELECT的用法 2. SELECT子句 SELECT子句指定查询返回的列,这些列可以是
一个或多个表或视图(View)中的列。见【案例5.1】 【案例5.2】【案例5.3】。 SELECT [ ALL | DISTINCT ] [ TOP expression [ PERCENT ] [ WITH TIES ] ] <select_list> <select_list> ::=     { * | { table_name | view_name | table_alias }.*       | { column_name | [ ] expression }       [ [ AS ] column_alias ]       | column_alias = expression     } [ ,...n ]

7 5.1 数据查询SELECT的用法 【案例5.1】从eTradeInfo数据库的员工信息表employees中查
询在1950年1月1日前出生的职员的姓名和职务。  SELECT emp_name AS 姓名,emp_title AS 职务  FROM employees WHERE emp_birthday < ' ' 【案例5.2】从eTradeInfo数据库的产品信息表products中查询 单价高于 元的前100条产品信息。  SELECT TOP(100) * FROM products WHERE UnitPrice > 【案例5.3】从eTradeInfo数据库的产品信息表products中查询 不同型号的产品名称、型号和生产日期。 SELECT DISTINCT ProType AS 型号, Product AS 产品名称, ProDate AS 生产日期 FROM products

8 5.1 数据查询SELECT的用法 3. INTO子句 通过查询语句创建新表,并将查询的结果插入 新表中。 【案例5.4】
  通过查询语句创建新表,并将查询的结果插入 新表中。 【案例5.4】   从数据库eTradeInfo 中的employees表中查询在 1950年1月1日前出生的职员的姓名和职务,并将查 询结果存储到新表someEmployees。 SELECT emp_name,emp_title INTO someEmployees FROM employees WHERE emp_birthday < ' '

9 5.1 数据查询SELECT的用法 4. FROM子句 指定从其中检索记录行的数据表、视图、派 生表和联接表等。
  指定从其中检索记录行的数据表、视图、派 生表和联接表等。 [ FROM { < table_source > } [ ,...n ] ] < table_source > ::=     table_name [ [ AS ] table_alias ]     | view_name [ [ AS ] table_alias ]     | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]     | < joined_table > < joined_table > ::=      < table_source > < join_type > < table_source > ON < search_condition >     | < table_source > CROSS JOIN < table_source > < join_type > ::=     [ INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } ]     JOIN

10 5.1 数据查询SELECT的用法 【案例5.5】使用CROSS JOIN,查询eTradeInfo数据库中两个
数据表employees和departments的所有记录。 SELECT * FROM departments CROSS JOIN employees 查询返回的结果集是由departments和employees中所有行的完 全联接组成(笛卡尔积)。 试与以下语句比较:SELECT * FROM departments, employees 【案例5.6】从eTradeInfo数据库两个数据表departments和 employees中,列出每个部门的员工姓名和部门名称信息,并 将departments表中所有没有分配员工的部门也查询出来(使 用LEFT JOIN)。 SELECT emp_name,dept_name FROM departments LEFT OUTER JOIN employees ON (departments.dept_id = employees.dept_id)

11 5.1 数据查询SELECT的用法 5. WHERE子句 【案例5.7】 从销售合同明细中查询2006年前销售产品数量大
  语法:[ WHERE <search_condition> ] 【案例5.7】   从销售合同明细中查询2006年前销售产品数量大 于1024的所有销售记录。 SELECT * FROM Sales S, Sale_Detail D WHERE S.Order_id = D.Order_id AND Quantity > 1024 AND Order_Date < ' '

12 5.1 数据查询SELECT的用法 6. GROUP BY子句 对查询结果行进行分组显示,并且如果SELECT
子句 <select list> 中包含聚合函数,则计算每组的汇 总值。 [ GROUP BY [ ALL ] group_by_expression [ ,...n ] [ WITH { CUBE | ROLLUP } ] ]

13 5.1 数据查询SELECT的用法 CUBE:指定在结果集内,不仅包含由 GROUP BY提供的行,还包含汇总行。在结果集内返回每个
  GROUP BY 汇总行在结果中显示为 NULL,但 可用来表示所有值。   ROLLUP:指定在结果集内不仅包含由GROUP BY提供的行,还包含汇总行。按层次结构顺序,从 组内的最低层到最高层汇总组。组的层次结构取决 于指定分组列时所使用的顺序。

14 5.1 数据查询SELECT的用法 【案例5.8】 按照Product和ProType分组查询Quantity小计和合计。
SELECT Product AS 产品名称, ProType 产品型号, SUM(Quantity) AS 库存数量 FROM Products GROUP BY Product, ProType WITH CUBE 下面是结果集: 产品名称   产品型号 库存数量 微机椅   红色椅40X40X 微机椅   蓝色椅40X40X 微机椅    (null) 微机桌   红色桌100X60X 微机桌   蓝色桌100X60X 微机桌   (null) (null)    (null) (null)    红色椅40X40X (null)     蓝色椅40X40X (null) 红色桌100X60X (null) 蓝色桌100X60X 表Products中包含以下数据行: Product ProType Quantity 微机桌  蓝色桌100X60X70 124 微机桌  红色桌100X60X70 223 微机椅  蓝色椅40X40X50  101 微机椅  红色椅40X40X   按照Product和ProType分组查询Quantity小计和合计。

15 5.1 数据查询SELECT的用法 7. HAVING子句 指定组或聚合的搜索条件。HAVING通常与 GROUP BY子句一起使用。
[ HAVING < search_condition > ] 【案例5.9】   按照部门、性别分组统计各部门在2000年以来聘用员 工名单。 SELECT dept_id AS 部门编号, emp_sex AS 性别, emp_name AS 员工姓名, hiredate FROM employees GROUP BY dept_id, emp_sex, emp_name, hiredate HAVING hiredate >= ' '

16 5.1 数据查询SELECT的用法 8. UNION子句
{ <query specification> | ( <query expression> ) }   UNION [ ALL ]   <query specification | ( <query expression> ) [ UNION [ ALL ] <query specification> | ( <query expression> )     [ ...n ] ]

17 5.1 数据查询SELECT的用法 【案例5.10】 使用UNION运算符,查询并统一显示员工信息表
employees中2006年以来聘用的员工姓名和电话以及从 客户信息表customers中显示客户联系人姓名和电话。   SELECT emp_name AS 员工和客户编号,   emp_phone AS联系电话   FROM employees   WHERE hiredate >= ' '   UNION ALL   SELECT customer, cust_phone   FROM customers   ORDER BY 1,2

18 5.1 数据查询SELECT的用法 9. ORDER BY子句 【案例5.11】 列出 Sale_Detail 的销售记录,要求按销售数
[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n] ] 【案例5.11】   列出 Sale_Detail 的销售记录,要求按销售数 量降序、订单编号升序排序输出。 SELECT * FROM Sale_Detail ORDER BY quantity DESC, Order_ID ASC

19 5.1 数据查询SELECT的用法 10. COMPUTE子句 【案例5.12】 使用简单COMPUTE子句生成 Sale_Detail(销
    { { AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM }     ( expression ) } [ ,...n ]     [ BY expression [ ,...n ] ] ] 【案例5.12】   使用简单COMPUTE子句生成 Sale_Detail(销 售明细)中quantity(销售数量)汇总小计。 SELECT pro_id AS 产品编号, quantity AS 销售数量 FROM Sale_Detail ORDER BY pro_id COMPUTE SUM(quantity)

20 5.2 插入表记录INSERT的用法   1. 使用“SQL Server Management Studio”平台直接 插入表中数据

21 5.2 插入表记录INSERT的用法 2. 使用INSERT语句插入表中数据
INSERT [ INTO] table_name[ ( column_list ) ] VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) | execute_statement [; ] 【案例5.13】在部门信息表中添加新部门 “企业规划部” 信息。   INSERT INTO departments(dept_name,dept_addr)   VALUES ('企业规划部', '办公大楼2楼213') 【案例5.14】将新招聘的员工基本信息(存放在new_emp表中) 汇总到员工信息表中统一登记注册。   INSERT INTO employees   SELECT * FROM new_emp

22 5.3 删除数据行DELETE的用法   1. 使用“SQL Server Management Studio”平台删除 表中记录行

23 5.3 删除数据行DELETE的用法 2. 使用DELETE语句删除表中记录行 【案例5.15】从departments表中删除所有行。
DELETE [ FROM ] { table_name } 【案例5.15】从departments表中删除所有行。 DELETE FROM departments 【案例5.16】从employees表中删除前10个员工。 DELETE employees FROM (SELECT TOP(10) * FROM employees) AS emp WHERE employees.emp_id = emp.emp_id

24 5.4 修改表字段数据UPDATE的用法   1. 使用“SQL Server Management Studio”平台修改 表中数据项

25 5.4 修改表字段数据UPDATE的用法 2. 使用UPDATE语句修改表中数据项 UPDATE table_name SET
{ column_name = { expression | DEFAULT | NULL } [ WHERE < search_condition > ] 【案例5.17】将UPDATE语句与SELECT语句中的TOP子句 一起使用,对来自表departmentss的前10个部门的dept_addr 列更新为“华林大厦213”。 UPDATE departments SET dept_addr = '华林大厦213' FROM (SELECT TOP(10) * FROM departments ORDER BY dept_id) AS dept WHERE departments.dept_id = dept.dept_id

26 使用案例数据库 eTradeInfo,在 “ SQL Server Management Studio ” 管理窗口中,完成以下题目
案例分析   使用案例数据库 eTradeInfo,在 “ SQL Server Management Studio ” 管理窗口中,完成以下题目 Transact-SQL代码调试。   1. 从进货合同和明细表中,查询所有在2008年 9月到期的合同主要信息。   2. 按部门分组查询自2000年签订的合同信息。   3. 按照仓库编号,查询库存信息,并按入库时 间降序、库存数量升序显示。   4. 按部门分组统计出库数量。   5. 按部门统计查询今年签订的合同数量和金额。   6. 分组统计各类商品的库存数量。

27 1. 正确编写T-SQL语句,并在“ SQL编辑器 ” 窗口中调试; 2. 输入正确数据进行代码验证; 3. 灵活使用分组查询。 问题:
案例分析 要求:   1. 正确编写T-SQL语句,并在“ SQL编辑器 ” 窗口中调试;   2. 输入正确数据进行代码验证;   3. 灵活使用分组查询。 问题:   1. 分组列表项与查询列表项怎样对应?   2. 在往有外键关系的表中输入数据时的循序 是怎样的? 讨论:   从多个表中查询数据,用Join语句和不用Join 语句结果一样吗?

28 数据操作的四个命令:数据查询(SELECT)、 修改(UPDATE)、插入(INSERT)以及删除 (DELETE)等操作。
本章小结   数据操作的四个命令:数据查询(SELECT)、 修改(UPDATE)、插入(INSERT)以及删除 (DELETE)等操作。   在这些语句中,可以使用系统函数,可以进行 查询分组、派生新列表项、统计和计算等操作。   可以根据给定的条件修改或删除表中的数据。 这四种操作命令的语法中的参数有些是具有同样的 含义,因此,可以综合起来比较学习,对语法结构 不必死记硬背,可通过学习大量的示例来理解这些 语法中参数的含义和用法。


Download ppt "第5章 Transact-SQL程序设计 5.1 数据查询SELECT的用法 5.2 插入表记录INSERT的用法"

Similar presentations


Ads by Google