- 论坛徽章:
- 0
|
--第六章 多表的数据查询
USE 多表查询
--两个表的查询:
SELECT 学号,姓名
from 一班
SELECT 学号,姓名
from 二班
/*应用多表查询*/
SELECT 一班.学号,一班.姓名,二班.学号,二班.姓名
FROM 一班,二班
WHERE 一班.学号 = 二班.学号
--三个表的查询:
SELECT 订单编号,雇员名字,联系人
FROM 订单表,雇员表,客户表
WHERE 订单表.雇员编号=雇员表.雇员编号
And 订单表.客户编号=客户表.客户编号
--使用表的别名:
SELECT a.学号,a.姓名
from 一班 as a
/*一班 a 可写成 一班 as a*/
--两个表的查询:
SELECT one.学号,one.姓名,two.学号,two.姓名
FROM 一班 as one,二班 as two
WHERE one.学号 = two.学号
--三个表的查询:
SELECT 订单编号,雇员名字,联系人
FROM 订单表 as o,雇员表 as e,客户表 as c
WHERE o.雇员编号=e.雇员编号
And o.客户编号=c.客户编号
--使用UNION运算符合并结果集:
SELECT 姓名,学号,班级,国籍
FROM 二班
SELECT 姓 + '' + 名,学号,班级,国籍
FROM 一班
/*使用UNION进行连接*/
SELECT 姓名,学号,班级,国籍
FROM 二班
UNION
SELECT 姓 + '' + 名,学号,班级,国籍
FROM 一班
ORDER BY 班级 DESC,学号 ASC
use 多表查询
select * from 教员信息表
--* 联接实验
select 教员编号, 姓名, 中心编号 from 教员信息表
select * from 中心编号表
--例题内容:
--要求显示教员所属的中心名称。不属于任何中心的教员与这次没有教员来的中心不显示。(内联接)
SELECT j.姓名, z.中心名称
FROM 教员信息表 AS j INNER JOIN 中心编号表 AS z
ON j.中心编号=z.中心编号
WHERE j.所在城市='北京'
/*使用一般的select语句完成类似 INNER JOIN的查询*/
SELECT j.姓名, z.中心名称
FROM 教员信息表 AS j ,中心编号表 AS z
where j.中心编号=z.中心编号 and j.所在城市='北京'
--例题内容:
--1. 要求显示所有教员所属的中心名称。(左外联接)
SELECT j.姓名, z.中心名称
FROM 教员信息表 AS j LEFT OUTER JOIN 中心编号表 AS z
ON j.中心编号=z.中心编号
/*主要列出教员信息表中所有的姓名,如果中心编号表中没有相对应的中心名称则用NULL表示*/
--2. 要求显示所有中心的教员姓名。(右外联接)
SELECT j.姓名, z.中心名称
FROM 教员信息表 AS j RIGHT OUTER JOIN 中心编号表 AS z
ON j.中心编号=z.中心编号
/*主要列出右边的列,如果左边没有匹配则用NULL表示*/
--3. 要求显示所有教员和所有中心的情况。(完全外联接)
SELECT j.姓名, z.中心名称
FROM 教员信息表 AS j FULL OUTER JOIN 中心编号表 AS z
ON j.中心编号=z.中心编号
/*左右两边的表全部都出来,无论是否匹配*/
--* 交叉联接
USE 演示数据库
SELECT 雇员名字,公司名称
FROM 雇员表 CROSS JOIN 客户表
ORDER BY 雇员名字
--* 自联接实验
select 教员编号, 姓名, 上级领导 from 教员信息表
--例题内容:
--假设分成两组做实验,其它教员向组长汇报,组长向古老师汇报。要求显示所有的上下级关系:
SELECT j1.姓名, j2.姓名 AS 向谁汇报
FROM 教员信息表 AS j1 INNER JOIN 教员信息表 AS j2
ON j1.上级领导=j2.教员编号
SELECT j1.姓名, j2.姓名 AS 向谁汇报
FROM 教员信息表 AS j1, 教员信息表 AS j2
WHERE j1.上级领导=j2.教员编号
--* 子查询实验
select * from 各中心学员人数表
SELECT SUM(学员人数) FROM 各中心学员人数表
SELECT 所在城市, SUM(学员人数) AS 学员人数,
STR( SUM(学员人数) / (SELECT SUM(学员人数) FROM 各中心学员人数表) * 100, 6, 2 ) + '%' AS 百分比
FROM 各中心学员人数表
GROUP BY 所在城市
ORDER BY 百分比 DESC
--子查询的例子
select 姓名
from 教员信息表
where 中心编号IN (select 中心编号
from 中心信息表
where 中心名称 like '北京%'
)
select 中心名称
from 中心编号表
where 中心编号 in (select 中心编号
from 教员信息表
where 所在城市 like '北京')
--Like的应用
/* where 中心名称 like '北京%'
where 中心名称 like '北京_ _BENET中心%'
where 中心名称 like '%^ACCP%'
%代表一个字母
_代表一个字符
^代表不包含的字符内容
*/
--添加、修改和删除记录:
--创建表
USE 演示数据库
GO
CREATE TABLE 地址本
( 姓名 nvarchar(10),
地址 nvarchar(50),
生日 smalldatetime,
职位 varchar(20),
基本工资 money )
--插入数据
INSERT INTO 地址本
VALUES('张三','北京市海淀区','1978-01-20','销售代表',2500)
INSERT INTO 地址本
VALUES('李四','上海市','1970-08-02','销售经理',4000)
--修改数据
UPDATE 地址本
SET 基本工资=3500
WHERE 姓名='张三'
--删除数据
DELETE FROM 地址本
WHERE 姓名='张三'
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/20613/showart_128560.html |
|