SQL Server学习笔记-T-SQL基本语句

T-SQL基本语句

基本的SELECT语句

  • Select语句的基本语法规则

    SELECT [ALL|DISTINCT] [TOP () [PERCENT] [WITH TIES]]
    FROM ]
    [WHERE ]
    [GROUP BY ]
    [HAVING ]
    [[FOR XML {RAW|AUTO|EXPLICIT|PATH [()]} [, XMLDATA]
                                  [, ELEMENTS][, BINARY base 64]]
    [OPTION (, [, ...n])]
  • INFORMATION_SCHEMA是特定的访问路径,用于显示系统数据库及其内容的相关元数据.

SELECT * FROM INFORMATION_SCHEMA.TABLES;
  • MSSQL中的表名的规范为数据库名.构架名.表名.

WHERE子句

  • 使用范例
SELECT Name, ProductNumber, ReorderPoint
FROM Production.Product
WHERE ProductID = 356;
  • WHERE子句的运算符

    运算符 示例用法 功能
    =, >, <, >=, <=,<>,!=,!>,!< = 标准的比较运算符 (1)!=和<>都表示"不相等".而 !< 和 !> 分别表示 "不小于" 和 "不大于"
    AND,OR,NOT = AND >= 标准布尔逻辑运算符.
    BETWEEN BETWEEN 1 AND 5 在某个范围之间.闭区间.指定的只可以为列名,变量或字面量.
    LIKE LIKE "ROM%" 可使用%和_作为通配符.%表示可以代替任意长度的任意字符. _表示可以代替任意单个字符.[]符号用于指定一个字符,字符串或范围.^运算符表示下一个字符是要被排除的.
    IN IN (列表) 关键字IN表示Column1在列表中则返回TRUE, IN关键字常用于子查询
    ALL, ANY, SOME (比较运算符) (子查询) 子查询中的全部值/任意值满足比较运算符的条件时返回true.ALL指示表达式要匹配结果集中的所有值.ANY和SOME功能相似,在表达式匹配结果集中的任意值时返回TRUE.
    EXISTS EXISTS(子查询) 子查询返回至少一行记录时为TRUE.

    ORDER BY子句

    • ORDER BY子句用来返回数据的排列顺序.

      SELECT Name, ProductNumber, ReorderPoint
      FROM Production.Product
      ORDER BY ProductNumber;DESC 
    • 使用DESC降序排序

    使用GROUP BY子句聚合数据

    • GROUP BY子句用于聚合信息.
    SELECT SalesOrderID, SUM(OrderQty)
    FROM Sales.SalesOrderDetail
    WHERE SalesOrderID IN (43660, 43670, 43672)
    GROUP BY SalesOrderID;
    • 在使用GROUP BY子句时, SELECT列表中所有列必须为聚合列(SUM, MIN, MAX, AVG等)或是GROUP BY子句中包括的列.

    • 如果在SELECT列表中使用聚合列,SELECT列表必须只包含聚合列,否则必须有一个GROUP BY子句.

      SELECT CustomerID, SalesPersonID, COUNT(*)
      FROM Sales.SalesOrderHeader
      WHERE CustomerID <= 11010
      GROUP BY CustomerID, SalesPersonID;

    聚合函数

    • 聚合函数常用于GROUP BY子句,用于聚合分组的数据.

    • AVG函数用于计算平均值.

      SELECT SalesOrderID, AVG(OrderQty) AS AVG
      FROM Sales.SalesOrderDetail
      WHERE SalesOrderID IN (43660, 43670, 43672)
      GROUP BY SalesOrderID;
    • MIN/MAX用于计算选择列分组的最小值与最大值.

      SELECT SalesOrderID, MIN(OrderQty)  AS MinOrder, Max(OrderQty) AS MaxOrder
      FROM Sales.SalesOrderDetail
      WHERE SalesOrderID IN (43660, 43670, 43672)
      GROUP BY SalesOrderID;
    • COUNT(表达式|*)函数用于计算查询中返回的行数.返回结果没有默认的列名,需要指定别名.

      SELECT COUNT(*)
      FROM HumanResources.Employee
      WHERE HumanResources.Employee.BusinessEntityID = 5;
    • 除了COUNT(*)函数外,所有的聚合函数都忽略NULL值.

使用HAVING子句给分组设置条件

  • HAVING子句仅用于带有GROUP BY子句的查询语句中,用于分组后进行条件查询.

    SELECT ManagerID AS Manager, COUNT(*) AS Reports
    FROM HumanResources.Employee2
    WHERE Employee != 5
    GROUP BY ManagerID
    HAVING COUNT(*) > 3;

DISTINCT和ALL谓词

  • 键是数据库的一个术语,用于描述一列或多列,这些列用于标识表中的一行.
    • 主键是能唯一标识行的一列或列组.
  • DISTINCT谓词可以过滤重复的行.
  • ALL谓词可以包括所有的行.ALL是任意SELECT语句的默认值.

使用INSERT语句添加数据

  • INSERT语句语法结构

    INSERT [TOP () [PERCEENT]] [INTO] 
    [()]
    [OUTPUT ]
    [VALUES () [, (
    | EXEC 
    | DEFAULT VALUES
  • DEFAULT关键字告诉SQL Server为该列使用默认值.(如果没有默认值,则会出错)

  • 存储过程sp_help的功能是给出任意数据库对象,用户自定义数据类型或SQL Sever数据类型信息.

    • 查看Sales表属性: EXEC sp_help Sales

INSERT INTO...SELECT语句

  • INSERT INTO...SELECT语句可以完成一次插入一个数据块的内容.

  • 语法结构

    INSERT INTO 
    []
    
    ] [WHERE | CURRENT OF [GLOBAL] ]
  • 使用范例

    DELETE Stores
    WHERE StoreCode = 'TEST';
  • 练习题

    • 编写输出AdventureWorks数据库的Product表(Production模式中)所有行和列的数据的查询语句.

      SELECT *
      FROM AdventureWorks2017.Production.Product;
    • 修改练习1的查询语句,仅搜索无 ProductionSubcategoryID的产品(提示: 有209个产品,需要搜索NULL值)

      SELECT *
      FROM AdventureWorks2017.Production.Product
      WHERE ProductSubcategoryID IS NULL;
    • 在AdventureWorks数据库的Location表(Production模式中)添加一行.

      INSERT INTO AdventureWorks2017.Production.Location(Name, CostRate, Availability, ModifiedDate)
      values('King Oliver', 12.31, 22.31, GETDATE());
    • 删除刚刚添加的行

      DELETE FROM AdventureWorks2017.Production.Location
      WHERE Name='King Oliver';

    转载于:https://www.cnblogs.com/devinkin/p/10041829.html

    你可能感兴趣的:(SQL Server学习笔记-T-SQL基本语句)