本章内容
⏹ 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 FROM
table_name
(1) ALL:表示输出所有记录,包括重复记录。
(2)select_list:所要查询的选项的集合,多个选项之间用逗号分开。
in运算符的含义(3)table_name:要查询的表。
6.1 基本查询
例6-1 分别显示Sales数据库中的员工表employee、商品表goods、销售表sell_order表和部门表department中的所有记录。
SELECT * FROM employee
SELECT * FROM goods
SELECT * FROM sell_order
SELECT * FROM department
6.1 基本查询
例6-2 显示employee表中全部员工的姓名和年龄,去掉重名。
SELECT DISTINCT employee_name AS 姓名,YEAR(GETDATE())-YEAR(birth_date) AS 年龄
FROM employee
6.1 基本查询
例6-3 对employee表,分别查询公司的员工总数和公司员工的平均收入。
SELECT COUNT(*) AS 总数 FROM employee
SELECT AVG(wages) AS 平均收入 FROM employee
6.1 基本查询
⏹ 带条件查询
语法格式:
WHERE search_condition
例6-4 对employee表,列出月工资在2000以上的员工记录。
SELECT * FROM employee WHERE wages>2000
6.1 基本查询
例6-5 对employee表,求出男员工的平均工资。
SELECT AVG(wages) as 平均工资 FROM employee WHERE sex='男‘
例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 = '销售部')
6.1 基本查询
例6-7 对employee表,列出月工资在2000到3000之间的员工名单。
SELECT * FROM employee WHERE wages BETWEEN 2000 AND 3000
语句中的WHERE子句还有等价的形式:
WHERE wages>=2000 AND wages<=3000
6.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 NULL
6.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 DESC
6.1 基本查询
2. 重定向输出(INTO)
语法格式:
INTO new_table
例6-11 对部门表department和员工表employee,查询出“市场部”所有员工的信息,并将结果存入testtable表中。
SELECT employee.* INTO testtable
FROM employee INNER JOIN department
ON employee.department_id = department.dapartment_id
WHERE 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'
UNION
SELECT employee_name,department_id FROM employee WHERE department_id='D002'
6.1 基本查询
4. 分组统计(GROUP BY)与筛选(HAVING)
语法格式:
GROUP BY group_by_expression1 [,group_by_expression2][,…]
例6-13 对employee表,分别统计男女员工人数。
SELECT sex,COUNT(sex) as 人数 FROM employee GROUP BY sex
6.1 基本查询
例6-14 对employee表,分别统计各部门男女员工的人数。
SELECT department_id, sex,COUNT(*) as 人数 FROM employee
GROUP BY department_id,sex
例6-15 对employee表,列出部门平均工资大于2000的部门编号。
SELECT department_id,AVG(wages) AS 平均工资 FROM employee
GROUP BY department_id HAVING AVG(wages)>=2000
6.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 employee
WHERE department_id = 'D001' ORDER BY department_id COMPUTE sum(wages)
6.1 基本查询
例6-17 对employee表中部门编号为“D001”或“D002”的员工工资,按照其部门编号生成分
组汇总行和明细行。
SELECT department_id, wages FROM employee
WHERE department_id = 'D001' OR department_id = 'D002'
ORDER BY department_id
COMPUTE sum(wages) BY department_id
6.2 嵌套查询
SQL Server允许多层嵌套查询。嵌套查询一般的查询方法是由里向外进行处理,即每个子查询在上一级查询处理之前处理,子查询的结果用于建立其父查询的查条件。子查询中所存取的表可以是父查询没有存取的表,子查询选出的记录不显示。
6.2 嵌套查询
⏹ 单值嵌套查询
1. 返回单值的子查询
子查询的返回结果是一个值的嵌套查询称为单值嵌套查询。
例6-18 对Sales数据库,列出“市场部”的所有员工的编号。
SELECT employee_id FROM employee
WHERE department_id=(SELECT department_id
FROM department
WHERE department_name='市场部')
6.2 嵌套查询
⏹ 多值嵌套查询
子查询的返回结果是一列值的嵌套查询称为多值嵌套查询。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论