sql 基础知识

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。
如果连接字段不是主键/外键形式的,还注意索引的建立

原文地址:https://www.cnblogs.com/http-www/p/3475820.html