连接,CASE的使用

来源:互联网 发布:mysql 权限 编辑:程序博客网 时间:2024/05/02 05:07

basecode

person

Intid

Strname

Inteducationid

Intnationid

1

张三

Null

10

2

李四

5

11

3

王五

7

14

4

余六

9

10

 

由上面两张表得到如下的表:

 

编号

姓名

学历

民族

1

张三

未知

汉族

2

李四

高中

藏族

3

王五

大专

回族

4

余六

博士/研究生

汉族

解析:所用到的知识点:

1.连接表。有两种方法:一是用子查询的方法,一是用join连接。而join连接又有两种方法:一是内连接,一是外连接(一般用左外连接比较好)

2.ISNULL函数

    ISNULL函数的作用是检查元素是否为空,若为空就用指定的字符串代替。

3.CASE语句

     

CASE 函数的组成部分:

  • CASE 关键字。
  • 需要转换的列名称。
  • 指定搜索内容表达式的 WHEN 子句和指定要替换它们的表达式的 THEN 子句。
  • END 关键字。
  • 可选的、定义 CASE 函数别名的 AS 子句。

CASE有两种形式:一种是根据是否相等来处理,一种是更具布尔值Boolean来处理,如实例:

 

下面的示例使用 CASE 函数更改产品系列类别的显示

USE AdventureWorks;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO

CASE 函数的另一个用途是对数据进行分类

USE AdventureWorks;GOSELECT   ProductNumber, Name, 'Price Range' =       CASE          WHEN ListPrice =  0 THEN 'Mfg item - not for resale'         WHEN ListPrice < 50 THEN 'Under $50'         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'         ELSE 'Over $1000'      ENDFROM Production.ProductORDER BY ProductNumber ;GO

综上所述:上题的答如下:

 

 SELECT s.Intid AS 编号,s.Strname AS 姓名,ISNULL(b.Strcaption ,'未知')AS 学历,ISNULL(d.Strcaption,'未知') AS 民族
FROM person AS s
LEFT OUTER JOIN basecode AS b on b.Intid=s.inteducationid
LEFT OUTER JOIN basecode AS d on d.Intid=s.intnationid
Go
SELECT s.Intid AS 编号,s.Strname AS 姓名,
'学历'=CASE
WHEN b.Strcaption is null THEN '未知'
ELSE b.Strcaption
end,
'民族'=CASE
WHEN d.Strcaption is null THEN '未知'
ELSE d.Strcaption
end
FROM person AS s
LEFT OUTER JOIN basecode AS b on b.Intid=s.inteducationid
LEFT OUTER JOIN basecode AS d on d.Intid=s.intnationid