sql语句基础

来源:互联网 发布:在主函数前定义数组 编辑:程序博客网 时间:2024/05/21 13:23

 

SQL语句,即结构化查询语言,被大多数关系型数据库管理平台所共享,当然也包括Microsoft SQL Server

  目前针对SQL及其基本语法有许多ANSI标准,如果没有SQL语言基础,那么相信你在SQL Server世界里真得就是寸步难行了。因此,下面我们就来介绍一下SQL的基础知识。

  SELECT(初学者)

  一个SELECT查询可以告诉SQL Server你想从它那里要什么数据。从技术上来说,SQL Server遵循了ANSI标准的SQL语法。这意味着我向你展示的大多数查询在其它基于SQL的数据库平台上也同样适用,比如MySQLOracle

  一个基本的SELECT查询有如下的格式:

  SELECT { * | column,column,column } FROM table [WHERE criteria] [ORDER BY column]

  在关键字SELECT后面,如果要包含表中的所有列,指定*就可以。否则你需要提供一个逗号分隔的列名。

  然后使用FROM关键字来指定查询的列所在的表名

  默认情况下,SQL Server将返回表中的所有行。你还可以使用一个WHERE子句,来返回你指定的行。

  例如, …WHERE OrderAmount = 1.00将返回那些OrderAmount列值为1.00的行。

  在WHERE子句中指定的列不一定出现在SELECT中。换句话说,你可以根据看不到的列来完成行过滤。

  在我的例子中,我这样做不难理解,因为我只会得到OrderAmount值为1.00的行。我不必在查询输出中去看OrderAmount列,因为我知道列中所包含的内容。

  下面是更多的WHERE例子,可以让你找找感觉:

  …WHERE DateOrdered BETWEEN '7/1/2000' AND '7/1/2001'

  …WHERE OrderAmount > 5000 AND OrderAmount < 2000

  …WHERE CustomerName LIKE '%one%'

  …WHERE (OrderAmount > 5000 AND OrderAmount < 2000) OR (SpecialOrder = 'Express')

  …WHERE InvoiceNumber IN (1002,476382,7261)

  你可以看到这些语句中包含了以下运算符:BETWEEN, AND, LIKE (% 作为一个 通配符), OR, IN

  BETWEEN运算符指定了你想要的范围。

  IN运算符提供了一个逗号分隔的列表,其中包含了可接受的值。

  下面是一个用到IN运算符的子查询:

  …WHERE InvoiceNumber IN (SELECT InvoiceNumber FROM BadOrders)

  子查询最先执行,然后WHERE子句将包含BadOrders表中所有有InvoiceNumber的行。最终,可选的ORDER BY子句可以指定返回行的顺序。再一次地,你可以指定输出中没有的列。

  以下是更多的ORDER BY的例子:

  …ORDER BY DateOrdered

  …ORDER BY DateOrdered DESCENDING

  …ORDER BY DateOrdered,InvoiceNumber

  默认的排序顺序是升序,当然你也可以指定DESCENDING关键字来进行降序排序。最后一个例子是进行两列的排序:输出行首先按照日期顺序排序,然后有相同DateOrdered值的再按照发票号排序。

  这里我想指出的是,你可以根据匹配的行来选择一个子集,例如:

  SELECT TOP 10 * FROM Orders WHERE OrderAmount > 5000 ORDER BY DateOrdered DESCENDING

  这个查询抓取了那些订单金额超过5000的行,并根据日期降序排序。然后将发送给你前十行,其中包含了表中的所有列。

  你还可以指定…TOP 10 PERCENT…而不是一个固定的数。

  总结一下,这些对于从服务器抓取想要的数据是非常有用的。类似地,BOTTOM关键字的作用是和TOP正好相反的

INSERT

  通过SELECT的学习,你知道了如何从数据库中调出数据了,现在我们来看看如何将数据放入到数据库中。INSERT查询允许你向数据库中添加新的行。想要进行此操作,你需要指定一个表来存放数据,还有列和值。

  查询语句形式如下所示:

  INSERT INTO table (column,column,column) VALUES(value,value,value)

  你可以省略掉列名,但从实际应用角度来说,还是不省略更加容易一些。

  值的顺序要根据列名的顺序,SQL Server会根据你列出的顺序来指定哪个值属于哪个列。你需要为每个非空值列指定列名和值。

  下面是一个INSERT例子:

  INSERT INTO Orders (Invoice,Amount,ShipMethod) VALUES(10383,30.00,'Express')

  注意到日期和文本值是被单引号包含在内了,所以在一个字符中包含了单引号的话,系统就会报错,例如:

  INSERT INTO Customers (Name,ZIP) VALUES ('Tim O'Leary','89123')

  SQL ServerTim O看成了一个值,而Leary为何在那里系统就无法识别了。

  解决这一问题的诀窍就是将所有的字面上的单引号用两个单引号来代替,如下所示:

  INSERT INTO Customers (Name,ZIP) VALUES ('Tim O''Leary','89123')

  OLeary之间的两个单引号在SQL Server执行查询时将被解析为一个单引号。

  因此使用INSERT时,两个需要注意的问题就是:确保要每个列都指定需要值,并且把分隔符使用正确。

  UPDATE

  当你需要对已有数据进行修改时,一个UPDATE查询是最合适的。

  这一类型的查询被设计用来一次更新多行,它具备如下形式:

  UPDATE table SET column = value, column = value [WHERE criteria]

  想要在Orders表中更改每一行的完整列,输入:

  UPDATE Orders SET Completed = 1

  然而,你可能不会总是想要更改每一行,这样的话,就加一个WHERE子句:

  UPDATE Orders SET Completed = 1 WHERE DateOrdered = DATE()

  SQL Server内置的DATE()函数可以提供当前的日期,因此在这里不需要用单引号了。

  我还可以设置多个列:

  UPDATE Customers SET LastOrder = DATE(), OrderCount = OrderCount + 1, Frequent = 'Yes' WHERE CustomerID = 758392

  我再次使用了DATE()函数,而这次我还增加了OrderCount列,然后设置Frequent列中包含了字符串值Yes

  SQL Server提供了强大的内置函数集,大部分都可以用在WHERESET子句中。其中很多还可以用在SELECT语句中。在Microsoft Developer Network library中你可以找到这些函数列表,SQL Server 2000中的函数都可以用在20052008中。

  DELETE

  最后要介绍的是DELETE查询,它可以从表中删除行。

  这个查询通常是和WHERE子句一同使用的:

  DELETE FROM Customers WHERE Inactive = 1

  没有WHERE子句,表中的每一行都将被删除,在平时的使用中一定要注意这一点.

 

 

原创粉丝点击