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

  • 相关阅读:
    java学习--基础知识进阶第十四天--xml文件的概述与应用场景、xml文件的组成部分&如何编写xml、xml的两种解析方式的原理、Dom4J开源工具的使用
    java学习--基础知识进阶第十三天--笔记
    java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&BeanUtils的使用、自定义BeanUtils工具类
    java学习--基础知识进阶第十二天--笔记
    java学习--基础知识进阶第十二天--网络编程概述、UDP协议、TCP协议
    java学习--基础知识进阶第十一天--多线程概述、线程实现、多线程安全问题产生 & 解决方案
    杭电oj 1000
    建立消息映射和消息处理
    c程序设计语言 导言
    句柄数不停增加
  • 原文地址:https://www.cnblogs.com/http-www/p/3475820.html
Copyright © 2011-2022 走看看