1 sql当中的group by 其实是已经distinct之后的查询了
2 多行插入数据库
insert into T_Login (userName,userPwd)
values(1,1),values(2,2)
3 插入一块数据
insert into T_Login(userName,userPwd)
select * From TableName
4 创建临时表
declare @Mytable Table
{
userName varchar(15)
userPwd varchar(16)
}
5 full join 返回所有的记录,没有的为null crose join 交叉链接,返回的是两个表中的笛卡儿积
6 我想引用b数据库的C表 就是这样引用 b.dbo.C(dbo是拥有者,数据库所有者,所有的登陆名都可以用)
7 exec sp_helpdb '数据库名' 返还的是数据库的数据与日志的信息和该数据库磁盘文件的信息
8在已经存在表上创建逐渐约束 alter table TableName
add constraint PK_Id
primary key(id) //给id添加主键
9 派生表 如果要查找预定套餐和预定会议室的会员id 我这样写的话,select T_Meeting.memId from T_Meeting as M inner join on T_OrderMeal as O
10 在数据库中进行数据的转换 可以使用cast 和convert 不同的是convert 支持日期的转换
cast cast(memNum as varchar) 这样我就把memNum转换为string类型了
11 megre 命令 可以将多个语句煮成一个 比如把insert update ,放一起
SQL Server 2008 开始支持 MERGE语句 -- 源表 CREATE TABLE test_from (id INT , val VARCHAR (20)); -- 目标表 CREATE TABLE test_to (id INT , val VARCHAR (20)); -- 插入源表 INSERT INTO test_from VALUES (1, 'A' ); INSERT INTO test_from VALUES (2, 'B' ); -- 合并 源表到目标表 MERGE test_to USING test_from ON ( test_to.id = test_from.id ) -- 条件是 id 相同 WHEN MATCHED THEN UPDATE SET test_to.val = test_from.val -- 匹配的时候,更新 WHEN NOT MATCHED THEN INSERT VALUES (test_from.id, test_from.val) -- 源表有,目标表没有,插入 WHEN NOT MATCHED BY SOURCE THEN DELETE ; -- 目标表有,源表没有,目标表该数据删除. -- 第一次检查 目标表数据. SELECT * FROM test_to; id val ----------- -------------------- 1 A 2 B -- 更新源表 UPDATE test_from SET val = 'A2' WHERE id = 1; -- 删除源表 DELETE FROM test_from WHERE id = 2; -- 插入源表 INSERT INTO test_from VALUES (3, 'C' ); -- 合并 源表到目标表 MERGE test_to USING test_from ON ( test_to.id = test_from.id ) -- 条件是 id 相同 WHEN MATCHED THEN UPDATE SET test_to.val = test_from.val -- 匹配的时候,更新 WHEN NOT MATCHED THEN INSERT VALUES (test_from.id, test_from.val) -- 源表有,目标表没有,插入 WHEN NOT MATCHED BY SOURCE THEN DELETE ; -- 目标表有,源表没有,目标表该数据删除. -- 再次检查 目标表数据. SELECT * FROM test_to; id val ----------- -------------------- 1 A2 3 C |
12 你对表所做的记录一般都保存任务表了 比如你插入数据库 可以查询inserted 表 等等要查询操作的记录就得用到output,实际上就相当于是select
output $action
inserted
13 处理数据的时候,能提前过滤掉的,就提前过滤
14 exist 比 in 的效率高 可以考虑用exist
一般来说,exists的效率依赖于匹配度,它对主表的每行记录会对子表进行扫描,若匹配则返回。举个极端情况,如果子表每次都要进行全表扫描才能找到匹配,这时exists的效率就比较低。
而用inner join 则效率比较稳定,若对子表匹配度不了解的情况下建议用inner join。
如果连接字段不是主键/外键形式的,还注意索引的建立