ISNULL函数,转换函数:cast和convert,Merge的用法,INSERTED/DELETED使用,select赋值

--选取某列值为空的结果
SELECT  [ID] ,
        [Yo]
FROM    [Test].[dbo].[Table_1]
WHERE   Table_1.YO IS NULL
GO

 

--连接查询

--连接两个列
SELECT  Northwind.dbo.Employees.LastName + ','   + Northwind.dbo.Employees.FirstName AS NAME
FROM    Northwind.dbo.Employees

 

--脚本创建表的主键和外键
CREATE TABLE A
    (
      A_id INT IDENTITY
               NOT NULL
               PRIMARY KEY ,
      A_Name VARCHAR(50)
    )
CREATE TABLE B
    (
      B_id INT IDENTITY
               NOT NULL
               PRIMARY KEY ,
      B_Name VARCHAR(50) ,
      --BA_id INT NOT NULL
      --          FOREIGN KEY REFERENCES A ( A_id )
    )
CREATE TABLE C
    (
      C_id INT IDENTITY
               NOT NULL
               PRIMARY KEY ,
      C_Name VARCHAR(50)
    )
--查看约束信息(PRIMARY KEY (clustered):表明是聚集索引主键)
EXEC sp_helpconstraint A


--添加自引用
DROP TABLE B
CREATE TABLE B
    (
      B_id INT IDENTITY
               NOT NULL
               PRIMARY KEY ,
      B_Name VARCHAR(50) ,
      BA_id INT NOT NULL
                FOREIGN KEY REFERENCES A ( A_id ) ,
      BB_id INT NOT NULL
                FOREIGN KEY REFERENCES B ( B_id )--这一句的FOREIGN KEY可以省略
    )
EXEC sp_helpconstraint B--查看约束条件
EXEC sp_depends B

--ISNULL函数:把dbo.A.A_Name为NULL的值用yoyo替换
SELECT dbo.A.A_id,ISNULL(dbo.A.A_Name,'yoyo') FROM dbo.A

 

--派生表:找出同时在B/C中的A的记录;此时的tmp就是所谓的派生表
SELECT tmp.A_id,tmp.A_Name FROM
    (SELECT dbo.A.A_id,dbo.A.A_Name FROM   dbo.A,dbo.B WHERE dbo.A.A_id=dbo.B.B_id) AS tmp
INNER JOIN
    (SELECT dbo.A.A_id,dbo.A.A_Name FROM
dbo.A,dbo.C WHERE dbo.A.A_id=dbo.C.C_id) AS tmp1 ON tmp.A_id=tmp1.A_id

 

--转换函数:cast和convert
--convert函数包含cast的功能,并且能进行日期转换;cast的目的是为了兼容ANSI/ISO
--消息 245,级别 16,状态 1,第 1 行
--在将 varchar 值 '姓名' 转换成数据类型 int 时失败。
SELECT '姓名'+dbo.A.A_id FROM dbo.A
SELECT '姓名'+CAST(dbo.A.A_id AS VARCHAR(10)) FROM dbo.A

 

-- Merge的用法
MERGE dbo.A a  --创建别名只能在此处,B若是有别名就会报错
using dbo.B
ON dbo.B.B_id=a.A_id
WHEN MATCHED THEN UPDATE SET a.A_Name=a.A_Name+dbo.B.B_Name --匹配的就相加
WHEN NOT MATCHED THEN INSERT VALUES(dbo.B.B_Name)--把B表中没有的插入A表
WHEN NOT MATCHED BY SOURCE THEN DELETE  --把不匹配的删掉
OUTPUT $ACTION,INSERTED.*,DELETED.*;

 

--output关键字将merge的实际操作输出到屏幕上。$ACTION返回UPDATE,INSERT,DELETE,
--表明对特定行执行的操作。
--INSERTED:对内部工作表的引用,包含了为给定行插入的数据的引用。
--DELETED:对内部工作表的引用,包含了为给定行删除的数据的引用。
SELECT * FROM dbo.A

 

--INSERTED/DELETED使用:
INSERT INTO dbo.A(A_Name) OUTPUT INSERTED.A_id VALUES('yoyo')
DELETE FROM dbo.A OUTPUT DELETED.A_id WHERE dbo.A.A_id=16


--嵌套查询
SELECT HumanResources.Employee.EmployeeID,HumanResources.EmployeeAddress.AddressID
FROM HumanResources.Employee INNER JOIN HumanResources.EmployeeAddress
ON HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID
WHERE HumanResources.Employee.EmployeeID=
(SELECT MIN(HumanResources.Employee.EmployeeID) FROM HumanResources.Employee)

--select赋值
DECLARE @id INT;
SELECT @id=MAX(dbo.A.A_id) FROM dbo.A
PRINT @id

 

--返回受影响的函数,此处指的是insert影响的行
INSERT INTO dbo.A
        ( A_Name )
VALUES  ( 'yoyo'  -- A_Name - varchar(50)
          )
PRINT @@ROWCOUNT

 

--此处因为有identity列,所以返回的 identity 的所有行
DECLARE @yo INT;
INSERT INTO dbo.A DEFAULT VALUES;
SET @yo=@@identity;
PRINT @yo;
PRINT @@IDENTITY;
SELECT * FROM dbo.A 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值