SQL中给表起别名的两个必须知道的知识点

给列其别名:
SELECT RTRIM(vend_name) + '(' + RTRIM(vend_contry) + ')' AS vend_title
FROM Vendors
ORDER BY vend_name;

这种sql做什么事情呢?
分解出一个简单的东西:
SELECT vend_name,vend_contry
FROM Vendors
ORDER BY vend_name;

得到的数据是这样:
vend_name  vend_contry
---------  -----------
DongFeng      china
BMW           usa

然后,这两个信息可以整合在一起会更清晰
期望对返回的结果继续做个处理
SQL语法是一种通过内外嵌套来添加功能的语法

添加更多丰富的功能,是我们的最重要诉求之一啊
处理后的数据是这样:

vend_title
--------------
DongFeng(china)

BMW(usa)

怎么才能做到这一步呢?

1 取出vend_name列的第一个数据 

2 取出vend_contry的第一个数据拼接到( )中

3 将1,2两个数据拼接起来将结果作为一个数据

4 接下来用同样的方式操作第二数据,从而又得到一个数据

5 将第二个数据和第一个数据堆成一个虚拟列

6 依次类推,直到最后一个数据

7 最后给这个堆起来的数据形成的列起个名字

这里,我们发现,列名特别像一个数组对象,把这些数据都封装起来了
列名好像就是一个引用代表一样
引用代表的意思就是:要操作数据时,不直接操作数据,而操作引用!
很多处理机制都是这样!
我们操作数据时,都是操作列名而已!

再看一个例子: 给表起别名
写and条件时候,缩进四格看起来更好看!
SELECT cust_name,cust_contact
FROM Customers AS C,Orders AS O,OrdersItems AS OI
WHERE C.cust_id = O.cust_id
  AND OI.order_num = O.order_num
  AND prod_id = 'RGAN01';

第一个问题:这个sql想干嘛?
根据首和尾的语句
可以知道:是查询购买商品RGAN01的那些顾客的名字和联系方式

其他的语句在干嘛?
把三张表的信息整合起来!
怎么做到的?
将三个表求个笛卡尔积
将实际意义的记录筛选出来
从而得到整合起来的数据
为什么合?
因为本来就是一起的,只不过分开了

注意:Oracle中 给表起别名不支持as 空格接别名即可 也就是as换空格 更简约不失么

都是用字符 干嘛不用最简单的呢?  是我,我也用空格

所以是这样:
SELECT cust_name,cust_contact
FROM Customers C,Orders O,OrdersItems  OI
WHERE C.cust_id = O.cust_id
  AND OI.order_num = O.order_num
  AND prod_id = 'RGAN01';


这里还有一个知识是:表列名只在执行中使用

总结:
    注意两种操作顺序:
    第一种顺序是:
    a-->b-->c  接下来又是 a-->b-->c
    第二种顺序是:
    a-->b-->c  接下来却是 b-->a-->c  接下来又是 b-->a-->c  
    表列名的两个知识:
    1.Oracle中 给表起别名不支持as 空格接别名即可
    2.表列名只在执行中使用

    起别名一般就用首字母大写

当一个人主动说了很多话之后,如果给不到他想要的回应,他会反感你,如果不回应,他就会厌恶你!
如果觉得做人这么难!有本事就别做啊!

猜你喜欢

转载自blog.csdn.net/weixin_42204641/article/details/81539895
今日推荐