SQL server 数据查询

  • 格式:doc
  • 大小:61.00 KB
  • 文档页数:6

本章内容⏹6.1 基本查询⏹6.2 嵌套查询⏹6.3 连接查询6.1 基本查询SQL数据查询语句是SELECT语句。

该语句的基本框架是SELECT-FROM-WHERE,它包含输出字段、数据来源和查询条件等基本子句。

在这种固定格式中,可以不要WHERE,但是SELECT和FROM是必备的。

SELECT语句的子句很多,理解了这条语句各项的含义,就能从数据库中查询出各种数据。

6.1 基本查询⏹简单查询语法格式:SELECT [ALL|DISTINCT][TOP n [PERCENT]] select_list FROMtable_name(1) ALL:表示输出所有记录,包括重复记录。

(2)select_list:所要查询的选项的集合,多个选项之间用逗号分开。

(3)table_name:要查询的表。

6.1 基本查询例6-1 分别显示Sales数据库中的员工表employee、商品表goods、销售表sell_order表和部门表department中的所有记录。

SELECT * FROM employeeSELECT * FROM goodsSELECT * FROM sell_orderSELECT * FROM department6.1 基本查询例6-2 显示employee表中全部员工的姓名和年龄,去掉重名。

SELECT DISTINCT employee_name AS 姓名,YEAR(GETDATE())-YEAR(birth_date) AS 年龄FROM employee6.1 基本查询例6-3 对employee表,分别查询公司的员工总数和公司员工的平均收入。

SELECT COUNT(*) AS 总数FROM employeeSELECT AVG(wages) AS 平均收入FROM employee6.1 基本查询⏹带条件查询语法格式:WHERE search_condition例6-4 对employee表,列出月工资在2000以上的员工记录。

SELECT * FROM employee WHERE wages>20006.1 基本查询例6-5 对employee表,求出男员工的平均工资。

SELECT AVG(wages) as 平均工资FROM employee WHERE sex='男…例6-6 对employee表,列出市场部和销售部的员工名单。

SELECT d.department_name, e.employee_nameFROM 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 = '销售部')6.1 基本查询例6-7 对employee表,列出月工资在2000到3000之间的员工名单。

SELECT * FROM employee WHERE wages BETWEEN 2000 AND 3000语句中的WHERE子句还有等价的形式:WHERE wages>=2000 AND wages<=30006.1 基本查询例6-8 对employee表,列出所有的姓“张”的员工名单。

SELECT * FROM employee WHERE employee_name LIKE '张%'语句中的WHERE子句还有等价的形式:WHERE LEFT(employee_name,1)= '张…例6-9 对employee表,列出所有工资为空值的员工编号和姓名。

SELECT employee_id,employee_name FROM employee WHERE wages IS NULL6.1 基本查询查询结果处理1. 排序输出(ORDER BY)语法格式:ORDER BY order_by_expression1[ASC|DESC][,order_by_expression2[ASC|DESC]] [,…]]6.1 基本查询例6-10 对employee表,按性别顺序列出员工的编号、姓名、性别、部门编号及工资,性别相同的再先按部门后按工资由高到低排序。

SELECT employee_id,employee_name,sex,department_id,wages FROM employee ORDER BY sex,department_id,wages DESC6.1 基本查询2. 重定向输出(INTO)语法格式:INTO new_table例6-11 对部门表department和员工表employee,查询出“市场部”所有员工的信息,并将结果存入testtable表中。

SELECT employee.* INTO testtableFROM employee INNER JOIN departmentON employee.department_id = department.dapartment_idWHERE department.department_name = '市场部'6.1 基本查询3. 输出合并(UNION)语法格式:[UNION [ALL] <SELECT语句>]合并的规则是:(1)不能合并子查询的结果。

(2)两个SELECT语句必须输出同样的列数。

(3)两个表各相应列的数据类型必须相同,数字和字符不能合并。

(4)仅最后一个SELECT语句中可以用ORDER BY子句,且排序选项必须依据第一个SELECT列表中的列。

6.1 基本查询例6-12 对employee表,列出部门编号为“D001”或“D002”的所有员工姓名。

SELECT employee_name,department_id FROM employee WHERE department_id='D001'UNIONSELECT employee_name,department_id FROM employee WHERE department_id='D002'6.1 基本查询4. 分组统计(GROUP BY)与筛选(HA VING)语法格式:GROUP BY group_by_expression1 [,group_by_expression2][,…]例6-13 对employee表,分别统计男女员工人数。

SELECT sex,COUNT(sex) as 人数FROM employee GROUP BY sex6.1 基本查询例6-14 对employee表,分别统计各部门男女员工的人数。

SELECT department_id, sex,COUNT(*) as 人数FROM employeeGROUP BY department_id,sex例6-15 对employee表,列出部门平均工资大于2000的部门编号。

SELECT department_id,A VG(wages) AS 平均工资FROM employeeGROUP BY department_id HA VING A VG(wages)>=20006.1 基本查询5. 使用COMPUTE和COMPUTE BY子句汇总语法格式:COMPUTE row_aggregate(column_name)[,row_aggregate(colornn_name)...][BY column_name[, column_name. . . ]]例6-16 对employee表中部门编号为“D001”的员工工资,按照其部门编号生成汇总行和明细行。

SELECT department_id, wages FROM employeeWHERE department_id = 'D001' ORDER BY department_id COMPUTE sum(wages)6.1 基本查询例6-17 对employee表中部门编号为“D001”或“D002”的员工工资,按照其部门编号生成分组汇总行和明细行。

SELECT department_id, wages FROM employeeWHERE department_id = 'D001' OR department_id = 'D002'ORDER BY department_idCOMPUTE sum(wages) BY department_id6.2 嵌套查询SQL Server允许多层嵌套查询。

嵌套查询一般的查询方法是由里向外进行处理,即每个子查询在上一级查询处理之前处理,子查询的结果用于建立其父查询的查找条件。

子查询中所存取的表可以是父查询没有存取的表,子查询选出的记录不显示。

6.2 嵌套查询单值嵌套查询1. 返回单值的子查询子查询的返回结果是一个值的嵌套查询称为单值嵌套查询。

例6-18 对Sales数据库,列出“市场部”的所有员工的编号。

SELECT employee_id FROM employeeWHERE department_id=(SELECT department_idFROM departmentWHERE department_name='市场部')6.2 嵌套查询⏹多值嵌套查询子查询的返回结果是一列值的嵌套查询称为多值嵌套查询。

(1)ANY运算符的用法例6-19 对Sales数据库,列出D001号部门中工资比D002号部门的员工最低工资高的员工编号和工资。

SELECT employee_id,wages FROM employeeWHERE department_id='D001' AND wages>ANY(SELECT wages FROM employeeWHERE department_id='D002')6.2 嵌套查询(2)ALL运算符的用法例6-20 对Sales数据库,列出部门编号为“D001”的员工,这些员工的工资比部门为“D002”的员工的最高工资还要高的员工的编号和工资。

SELECT employee_id,wages FROM employeeWHERE department_id='D001' AND wages>ALL(SELECT wages FROM employeeWHERE department_id='D002')6.2 嵌套查询(3)IN运算符的用法例6-21 对Sales数据库,列出部门为“市场部”或“销售部”的所有员工的编号。