数据库知识点总结(未完待续)

来源:互联网 发布:梦幻西游手游网页版mac 编辑:程序博客网 时间:2024/06/05 06:52

本文内容可以滞后,最新文章请访问:博客
1、SQL中的关键字讲解

1.1 distinct用法

作用于单列

select distinct name from A

作用于多列

select distinct name, id from A//实际上是根据name和id两个字段来去重的,这种方式Access和SQL Server同时支持。

COUNT统计

select count(distinct name) from A;   --表中name去重后的数目, SQL Server支持,而Access不支持count是不能统计多个字段的,下面的SQL在SQL Server和Access中都无法运行。select count(distinct name, id) from A;若想使用,请使用嵌套查询,如下:select count(*) from (select distinct xing, name from B) AS M;

distinct必须放在开头

select id, distinct name from A;   --会提示错误,因为distinct必须放在开头

2、子查询

2.1子查询的定义

定义:子查询本质上是嵌套进其他SELECT,UPDATE,INSERT,DELETE语句的一个被限制的SELECT语句,在子查询中,只有下面几个子句可以使用

  1. SELECT子句(必须)
  2. FROM子句(必选)
  3. WHERE子句(可选)
  4. GROUP BY(可选)
  5. HAVING(可选)
  6. ORDER BY(只有在TOP关键字被使用时才可用)

子查询也可以嵌套在其他子查询中,这个嵌套最多可达32层。子查询也叫内部查询(Inner query)或者内部选择(Inner Select),而包含子查询的查询语句也叫做外部查询

2.2子查询的谓词

in 谓词(predicate)expr [NOT] IN ( subquery )

The Quantified Comparison Predicate (量化比较谓词) expr q SOME|ANY|ALL( subquery )

The EXISTS Predicate [NOT] EXISTS ( subquery )

The BETWEEN Predicate expr [NOT] BETWEEN expr1 AND expr2

The IS NULL Predicate column IS [NOT] NULL

The LIKE Predicate column [NOT] LIKE val1 [ ESCAPE val2 ]

§underscore ( _ ): any single character

§percent ( % ): any sequence of zero or morecharacters

2.3子查询的执行分析

原文链接:点击 

子查询的简单描述 :

通常来讲,子查询按照子查询所返回数据的类型,可以分为三种,分别为:

  1. 返回一张数据表(Table)
  2. 返回一列值(Column)
  3. 返回单个值(Scalar)

2.3.1 子查询做数据源的使用

当子查询在外部查询的FROM子句之后使用时,子查询被当作一个数据源使用,即使这时子查询只返回一个单一值(Scalar)或是一列值(Column),在这里依然可以看作一个特殊的数据源,即一个二维数据表(Table).作为数据源使用的子查询很像一个View(视图),只是这个子查询只是临时存在,并不包含在数据库中。

SELECT     P.ProductID, P.Name, P.ProductNumber, M.Name AS ProductModelNameFROM         Production.Product AS P INNER JOIN(SELECT     Name, ProductModelID FROM          Production.ProductModel) AS M ON P.ProductModelID = M.ProductModelID

2.3.2 子查询作为选择条件的使用

 作为选择条件的子查询也是子查询相对最复杂的应用.作为选择条件的子查询是那些只返回一列(Column)的子查询,如果作为选择条件使用,即使只返回单个值,也可以看作是只有一行的一列.select   distinct  cidfrom     orderswhere   aid  IN  (select  aid         --uncorrelated Subquery:(a05,a06)非相关的子查询,更快        from  agents        where  city= ‘Duluth’  or  city=‘Dallas’)

但是要强调的是,不要用IN和NOT IN关键字,这会引起很多潜在的问题,这篇文章对这个问题有着很好的阐述:http://wiki.lessthandot.com/index.php/Subquery_typo_with_using_in。这篇文章的观点是永远不要再用IN和NOT IN关键字,我的观点是存在即合理,我认为只有在IN里面是固定值的时候才可以用IN和NOT IN,比如: IN (25,33)

只有在上面这种情况下,使用IN和NOT IN关键字才是安全的,其他情况下,最好使用EXISTS,NOT EXISTS,JOIN关键字来进行替代. 除了IN之外,用于选择条件的关键字还有ANY和ALL,这两个关键字和其字面意思一样. 和”<”,”>”,”=”连接使用

在作为ANY和ALL关键字在子查询中使用时,所实现的效果如下

=ANY 和IN等价
<>ALL 和NOT IN等价

ANY 大于最小的(>MIN)

原创粉丝点击