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

  • 相关阅读:
    oc kvc的模式:匹配搜索模式(模式匹配)、装包解包
    编程语言的多态与动态
    swift的@objc总结
    swift函数的调用约定
    PHP实现微信退款的分析与源码实现
    【MySQL】20个经典面试题,全部答对月薪10k+
    redis面试题总结
    【Redis缓存机制】1.Redis介绍和使用场景
    php四种文件加载语句
    做网站-mysql表字段设计
  • 原文地址:https://www.cnblogs.com/http-www/p/3475820.html
Copyright © 2020-2023  润新知