--选取某列值为空的结果
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