zoukankan      html  css  js  c++  java
  • 基本的查询流【MSSQL】

    4个DML(Data Manipulation Language)命令

    SELECT INSERT UPDATE DELETE

     

    查询语法有一个特有的固定顺序

    SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY

     

    FROM子句数据源

    • 本地SQL Server表。(单个SQL SELECT语句中可访问的表的数量不能超过256个)
    • 子查询作为派生表,也称为子选择或内联视图。
    • 视图或存储的SELECT语句。
    • 表值用户定义的函数返回行和列。
    • 分布式数据源使用openquery()和其他分布式函数从其他SQL Server数据库、其他SQL Server、其他数据库平台(例如Microsoft Access、Oracle和Foxpro)或应用程序(如Excel)中提取数据。
    • 全文搜索可以返回包含有关哪些行包括特定词的信息的数据集。
    • 透视在FROM子句内创建交叉表。
    • XML数据源使用XQuery。
    • 行构造函数使用values()子句构建硬编码的行。
    • 来自插入、更新或删除命令的插入和删除的虚拟表,可使用output子句以子查询的形式将它们传递到外部查询。

     

    表别名

    AS关键字是可选的直接列名后跟空格加别名即可,但为了提高代码可读性帮助防止错误产生不建议省略。

    使用关键字AS为数据源指派别名,一旦列或数据源有别名,就必须使用这个新名称引用它。

    示例:SELECT Name AS 姓名,'abc',SellDate + 365 销售日期 FROM Production.Product;

       第一列使用AS关键字把别名更改为姓名。

       第二列是没有别名的表达式,所以它没有列名。

         第三列是使用别名来命名表达式,省略了AS关键字。

     

    表名称

    1、如果数据库对象的名称,如表名或列名与SQL保留字相冲突,可以将它放在方括号内让SQL清楚它是对象的名称。[Order]

    2、方括号特定于SQL Server且不属于ANSI SQL标准的一部分。

    3、虽然在数据库对象名称之间包含空格是非常低劣的做法,但它仍是可行的。例:[Order Details]

     

    完全限定的名称

    服务器名(Server).数据库名(Database).架构名(Schema).对象名(Table不局限于表,有视图等)

    除了编写较简洁的代码外,还有两个特别的好处:

    • 同一个表可能存在于多个架构中。如果是这样的话,那么选择的架构基于用户的默认架构。限定名称可避免意外地使用了错误的对象。
    • 查询引擎重用查询执行计划需要限定的表名称,这对于提高性能非常重要。

     

    WHERE条件

    1、!=(不等于)  !<(不小于)  !>(不大于)不是ANSI标准的SQL。<>运算符可移植;而!=运算符不可以。

    2、BETWEEN 1 and 10实际意义:大于等于第一个值1,且小于等于第二个值10的简短表达方式。

    3、IN搜索条件相当于对多个EQUALS比较进行OR运算,因为它搜索列表中的精确匹配

      两种用法:1、where city IN ('中国','美国','日本')   //列中是否精确包含括号中的值 

           2、where '中国' IN (city)  //值是否精确包含于括号中的列

              3、可结合NOT IN使用,用以排除某些行。例where city not in ('中国','美国','日本')

              4、对于NOT IN条件来说,如果列表中有Null值,则每行都将被判定为false。

              例 where a not in (b,NULL)  //因为未知的Null值无法从逻辑上判定

    4、LIKE搜索条件

      使用通配符搜索字符串内的模式。但是该通配符与你熟悉的MS-DOS通配符有区别

          说明 SQL通配符 MS-DOS通配符     示例
    任意数量(0或更多)的任意字符 % * 'Able' LIKE 'A%'
    一个任意字符 _ ? 'Able' LIKE 'Abl_'
    所附的字符中的一个 [] n/a

    'a' LIKE '[a-g]'

    'a' LIKE '[abcdefg]'

    匹配不在字符范围内 [^] n/a

    'a' LIKE '[^w-z]'

    'a' LIKE '[^wxyz]'

        

          示例:where name like 'Chain%'  //Chain开头的任何数量任何字符

                where name like '[d-f]%'  //d-f之间(包括d和f)字母开头的任何数量任何名称

      5、多个WHERE条件

        1、逻辑运算符存在优先级:NOT - AND - OR  

        2、()的优先级可以改变结果,因为括号优先级是最高的。

        SELECT...WHERE:没有FROM子句的SELECT语句返回单行。

                  如果WHERE条件为真,则按预想那样执行,为假,仍然执行,但返回0行。

        例:select 'abc' as col where 1 > 0 

        3、*返回每一个表的所有列,但不建议使用,会严重浪费资源影响性能。

      6、限定的列

        查询的一个常见的问题是列名在多个表中重复。

        create table t1(col1 int)

        create talbe t2(col1 int)

        select col1 from t1 cross join t2  //列名col1不明确

        select t1.col1 from t1 cross join t2  //正确的做法加上表名.列名

  • 相关阅读:
    网易考拉海购:电商高并发架构设计的铁律
    时序数据库(TSDB)-为万物互联插上一双翅膀
    从互联网+角度看云计算的现状与未来
    四两拨千斤式的攻击!如何应对Memcache服务器漏洞所带来的DDoS攻击?
    知物由学 | AI时代,那些黑客正在如何打磨他们的“利器”?(一)
    知物由学 | AI时代,那些黑客正在如何打磨他们的“利器”?(二)
    应对羊毛党的老手段不管用了,但有些公司依然有办法,他们是怎么做的?
    微服务化的数据库设计与读写分离
    Kubernetes性能测试实践
    微服务化之无状态化与容器化
  • 原文地址:https://www.cnblogs.com/binstyle/p/7553830.html
Copyright © 2011-2022 走看看