免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 692 | 回复: 0
打印 上一主题 下一主题

多表的数据查询---BENET [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-15 18:17 |只看该作者 |倒序浏览
--第六章 多表的数据查询
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP