SQLselect语法

来源:互联网 发布:天正电气软件 编辑:程序博客网 时间:2024/06/02 05:30
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

SQL里面最常用的命令是SELECT语句,用于检索数据。语法是:

SELECT[ALL|DISTINCT[ON(expression[,...])]]*|expression[ASoutput_name][,...][INTO[TEMPORARY|TEMP][TABLE]new_table][FROMfrom_item[,...]][WHEREcondition][GROUPBYexpression[,...]][HAVINGcondition[,...]][{UNION|INTERSECT|EXCEPT[ALL]}select][ORDERBYexpression[ASC|DESC|USINGoperator][,...]][FORUPDATE[OFclass_name[,...]]][LIMIT{count|ALL}[{OFFSET|,}start]]



现在我们将通过不同的例子演示SELECT语句复杂的语法。用于这些例子的表在供应商和部件里定义。
1.4.1.1.简单的Select
这里是一些使用SELECT语句的简单例子:

Example1-4.带有条件的简单查询

要从表PART里面把字段PRICE大于10的所有记录找出来,我们写出下面查询:

SELECT*FROMPARTWHEREPRICE>10;
然后得到表:
PNO|PNAME|PRICE-----+---------+--------3|Bolt|154|Cam|25



在SELECT语句里使用"*"将检索出表中的所有属性。如果我们只希望从表PART中检索出属性PNAME和PRICE,我们使用下面的语句:

SELECTPNAME,PRICEFROMPARTWHEREPRICE>10;
这回我们的结果是:
PNAME|PRICE--------+--------Bolt|15Cam|25
请注意SQL的SELECT语句对应关系演算里面的"projection"(映射),而不是"selection"(选择)(参阅关系演算获取详细信息)。


WHERE子句里的条件也可以用关键字OR,AND,和NOT逻辑地连接起来:

SELECTPNAME,PRICEFROMPARTWHEREPNAME='Bolt'AND(PRICE=0ORPRICE<=15);
这样将生成下面的结果:
PNAME|PRICE--------+--------Bolt|15



目标列表和WHERE子句里可以使用算术操作。例如,如果我们想知道如果我们买两个部件的话要多少钱,我们可以用下面的查询:

SELECTPNAME,PRICE*2ASDOUBLEFROMPARTWHEREPRICE*2<50;
这样我们得到:
PNAME|DOUBLE--------+---------Screw|20Nut|16Bolt|30
请注意在关键字AS后面的DOUBLE是第二个列的新名字。这个技巧可以用于目标列表里的每个元素,给它们赋予一个在结果列中显示的新的标题。这个新的标题通常称为别名。这个别名不能在该查询的其他地方使用。



1.4.1.2.Joins(连接)
下面的例子显示了SQL里是如何实现连接的。

要在共同的属性上连接三个表SUPPLIER,PART和SELLS,我们通常使用下面的语句:

SELECTS.SNAME,P.PNAMEFROMSUPPLIERS,PARTP,SELLSSEWHERES.SNO=SE.SNOANDP.PNO=SE.PNO;
而我们得到的结果是:
SNAME|PNAME-------+-------Smith|ScrewSmith|NutJones|CamAdams|ScrewAdams|BoltBlake|NutBlake|BoltBlake|Cam



在FROM子句里,我们为每个关系使用了一个别名,因为在这些关系间有着公共的命名属性(SNO和PNO)。现在我们可以区分不同表的公共命名属性,只需要简单的用每个关系的别名加上个点做前缀就行了。联合是用与一个内部联接里显示的同样的方法计算的。首先算出笛卡儿积SUPPLIER×PART×SELLS。然后选出那些满足WHERE子句里给出的条件的记录(也就是说,公共命名属性的值必须相等)。最后我们映射出除S.SNAME和P.PNAME外的所有属性。

另外一个进行连接的方法是使用下面这样的SQLJOIN语法

selectsname,pnamefromsupplierJOINsellsUSING(sno)JOINpartUSING(pno);
givingagain:
sname|pname-------+-------Smith|ScrewAdams|ScrewSmith|NutBlake|NutAdams|BoltBlake|BoltJones|CamBlake|Cam(8rows)共4页  1   
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击