NET中的SQL语句 SELECTINSERTUPDATEDELETE 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 NET中不是应该跟SQL SERVER一样吗?如果连SQL SERVER的话SELECT statement ::= [WITH <common_table_expression> [,...n]] <query_expression> [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [ ,...n ] ] [ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ] [ BY expression [ ,...n ] ] ] [ <FOR Clause>] [ OPTION ( <query_hint> [ ,...n ] ) ] <query expression> ::= { <query specification> | ( <query expression> ) } [ { UNION [ ALL ] | EXCEPT | INTERSECT } <query specification> | ( <query expression> ) [...n ] ] <query specification> ::= SELECT [ ALL | DISTINCT ] [TOP expression [PERCENT] [ WITH TIES ] ] < select_list > [ INTO new_table ] [ FROM { <table_source> } [ ,...n ] ] [ WHERE <search_condition> ] [ GROUP BY [ ALL ] group_by_expression [ ,...n ] [ WITH { CUBE | ROLLUP } ] ] [ HAVING < search_condition > ] 1.select语句Sql代码 SELECT语句的通用形式: subquery::= SELECT [ALL | DISTINCT] { * | expr [ [AS] c_alias] {, expr [ [AS] c_alias]...}} FROM tableref {, tableref...} [WHERE search_condition] [GROUP by colname {, colname...}] [HAVING search_condition] [ORDER BY result_colunm [ASC | DESC] {, result_colunm [ASC | DESC] ...}] subquery {UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL] subquery } SELECT语句的通用形式:subquery::=SELECT [ALL | DISTINCT] { * | expr [ [AS] c_alias] {, expr [ [AS] c_alias]...}} FROM tableref {, tableref...} [WHERE search_condition] [GROUP by colname {, colname...}] [HAVING search_condition] [ORDER BY result_colunm [ASC | DESC] {, result_colunm [ASC | DESC] ...}]subquery {UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL] subquery }select语句的求解过程: 1.对form中的表做笛卡尔积 2.删除不满足where子句条件的行 3.根据group by子句对相应的行进行分组 4.删除不满足having子句的组 5.求出select子句中表达式的值 6.若有关键字distinct,那么删除重复的行 7.对子查询进行union ,intersect,except操作 8.对查询的结果进行order by操作 SQL-99标准规定了select语句中的from子句执行的是连接运算。但是实际上大多数厂商并没有实现,而是通过表之间的笛卡尔积并在where子句中包含特定条件来模拟连接运算。 非相关子查询:如果内层的子查询完全独立于外层的子查询,即没有接受任何来自外层的输入数据。不然就是相关子查询。在非相关子查询中时,内层的子查询会向外层提供一个查询结果集,然后外层根据条件来利用这个结果集。 一些谓词:IN,θ,EXISTS(有待补充) IN谓词: expr [NOT] IN (subquery) | expr [NOT] IN (val {,val...}) 很显然,in谓词有两种用法,第一种是后面是接一个子查询,判断expr是否在子查询返回的结果集当中; 还有一种后面直接跟一个显式定义的set,判断expr是否在(val,val,val...)中 θ谓词:expr θ{SOME | ANY | ALL} (subquery) 其中的θ可以取六种比较运算符:<,>,<=,>=,=,<> 需要特别注意的是SQL标准中对ANY和SOME的定义是相同的。 比如说我们需要表达“小于任何一个”的意思: 应该表示成 < ALL (subquery) 而不是 < ANY (subquery) θ谓词于IN谓词间的等价形式:=SOME 于 IN 具有完全相同的效果<>ALL 于 NOT IN 具有完全相同的效果 EXISTS谓词:[NOT] EXISTS (subquery) 注意在子查询的select子句中为*,而不是某个属性或者属性集。 EXISTS谓词需要注意两点: 第一,NOT EXISTS谓词实现了关系代数中的MINUS运算 第二,双重NOT EXISTS实现了关系代数中的DIVIDE运算 详见http://fengyapizi.javaeye.com/admin/blogs/359941 三种运算,UNION,INTERSECT,EXCEPT:加上关键字ALL会使得SQL考虑重复的行<1>.UNION它实现了关系代数里面的“并运算”。union用于两个兼容表,它可以连接任意数目的子查询。SQL-99标准定了union可以在任何子查询的地方使用。但是实际上大部分数据库产品只支持在完整的select语句中使用,而不支持在包含了子查询的谓词中使用。<2>.INTERSECT 实现了关系代数里面的“交运算”。<3>.EXCEPT实现了关系代数里面的“差运算”。注意其中的INTERSECT,EXCEPT并没有增强SQL的能力,通过上面的not in谓词或者not exists谓词,我们已经具备了这种能力。所以,很多的数据库实际上并未实现以上两种谓词。 SQL提供的5个集合函数:<1>.count,作用在有多个列值的行集上<2>.max,min,sum,avg 作用在由简单值组成的集合上注意集合函数与标量函数(例如upper,mod,abs,substr,length)的区别:1.内置函数于标量函数均可以出现在select语句中2.标量函数以单个行为参数,并且返回与这个行对应的单值3.内置函数以表中所以满足条件的结果集为参数,返回对应这个结果集的单值 2.Insert语句Sql代码 INSERT INTO TABLE [(colname {, colname...})] { values (expr | NULL {, expr |NULL...}) | subquery} INSERT INTO TABLE [(colname {, colname...})] { values (expr | NULL {, expr |NULL...}) | subquery} 需要注意的是两点:1.insert语法不支持表别名,因此不能用别的限定名2.insert有两种用法,一种是后面接vlaues定义的值的集合,还有一种后面接子查询 3.Update语句Sql代码 UPDATE table SET cloname={expr | null | (subquery)} {,cloname={expr | null | (subquery)...}} [WHERE condition] UPDATE table SET cloname={expr | null | (subquery)} {,cloname={expr | null | (subquery)...}} [WHERE condition] 4.delete语句Sql代码 DELETE FROM TABLE [WHERE condition] sqlserver 分页查询 怎么修改一下 一个调用存储过程的问题,请帮帮忙 使用中文做关键字的问题 solidDB谁更熟练,仔细讲讲 语句运行老是错误怎么办???? 一个问题请问, 日期 模糊查询 like 一个关于CONVERT的问题! 当SQL SERVER 内存达到一定值(目前约5G)时,IIS假死,会提示莫名其妙的错误 再次提问,同步两个数据库的某个表 如何把地址上的省,市,区分别提取出来
SELECT statement ::=
[WITH <common_table_expression> [,...n]]
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
[ ,...n ] ]
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ]
[ BY expression [ ,...n ] ]
]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query expression> ::=
{ <query specification> | ( <query expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query specification> | ( <query expression> ) [...n ] ]
<query specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP expression [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
[ WITH { CUBE | ROLLUP } ]
]
[ HAVING < search_condition > ]
1.select语句Sql代码
SELECT语句的通用形式:
subquery::=
SELECT [ALL | DISTINCT] { * | expr [ [AS] c_alias] {, expr [ [AS] c_alias]...}}
FROM tableref {, tableref...}
[WHERE search_condition]
[GROUP by colname {, colname...}]
[HAVING search_condition]
[ORDER BY result_colunm [ASC | DESC] {, result_colunm [ASC | DESC] ...}]
subquery {UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL] subquery } SELECT语句的通用形式:subquery::=
SELECT [ALL | DISTINCT] { * | expr [ [AS] c_alias] {, expr [ [AS] c_alias]...}}
FROM tableref {, tableref...}
[WHERE search_condition]
[GROUP by colname {, colname...}]
[HAVING search_condition]
[ORDER BY result_colunm [ASC | DESC] {, result_colunm [ASC | DESC] ...}]subquery {UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL] subquery }
select语句的求解过程: 1.对form中的表做笛卡尔积
2.删除不满足where子句条件的行
3.根据group by子句对相应的行进行分组
4.删除不满足having子句的组
5.求出select子句中表达式的值
6.若有关键字distinct,那么删除重复的行
7.对子查询进行union ,intersect,except操作
8.对查询的结果进行order by操作
SQL-99标准规定了select语句中的from子句执行的是连接运算。但是实际上大多数厂商并没有实现,而是通过表之间的笛卡尔积并在where子句中包含特定条件来模拟连接运算。
非相关子查询:如果内层的子查询完全独立于外层的子查询,即没有接受任何来自外层的输入数据。不然就是相关子查询。
在非相关子查询中时,内层的子查询会向外层提供一个查询结果集,然后外层根据条件来利用这个结果集。
一些谓词:IN,θ,EXISTS(有待补充)
IN谓词: expr [NOT] IN (subquery) | expr [NOT] IN (val {,val...})
很显然,in谓词有两种用法,第一种是后面是接一个子查询,判断expr是否在子查询返回的结果集当中;
还有一种后面直接跟一个显式定义的set,判断expr是否在(val,val,val...)中 θ谓词:expr θ{SOME | ANY | ALL} (subquery)
其中的θ可以取六种比较运算符:<,>,<=,>=,=,<>
需要特别注意的是SQL标准中对ANY和SOME的定义是相同的。
比如说我们需要表达“小于任何一个”的意思: 应该表示成 < ALL (subquery) 而不是 < ANY (subquery) θ谓词于IN谓词间的等价形式:=SOME 于 IN 具有完全相同的效果<>ALL 于 NOT IN 具有完全相同的效果 EXISTS谓词:[NOT] EXISTS (subquery)
注意在子查询的select子句中为*,而不是某个属性或者属性集。 EXISTS谓词需要注意两点: 第一,NOT EXISTS谓词实现了关系代数中的MINUS运算 第二,双重NOT EXISTS实现了关系代数中的DIVIDE运算 详见http://fengyapizi.javaeye.com/admin/blogs/359941 三种运算,UNION,INTERSECT,EXCEPT:加上关键字ALL会使得SQL考虑重复的行<1>.UNION它实现了关系代数里面的“并运算”。union用于两个兼容表,它可以连接任意数目的子查询。SQL-99标准定了union可以在任何子查询的地方使用。但是实际上大部分数据库产品只支持在完整的select语句中使用,而不支持在包含了子查询的谓词中使用。<2>.INTERSECT 实现了关系代数里面的“交运算”。<3>.EXCEPT实现了关系代数里面的“差运算”。注意其中的INTERSECT,EXCEPT并没有增强SQL的能力,通过上面的not in谓词或者not exists谓词,我们已经具备了这种能力。所以,很多的数据库实际上并未实现以上两种谓词。 SQL提供的5个集合函数:<1>.count,作用在有多个列值的行集上<2>.max,min,sum,avg 作用在由简单值组成的集合上注意集合函数与标量函数(例如upper,mod,abs,substr,length)的区别:1.内置函数于标量函数均可以出现在select语句中2.标量函数以单个行为参数,并且返回与这个行对应的单值3.内置函数以表中所以满足条件的结果集为参数,返回对应这个结果集的单值 2.Insert语句Sql代码
INSERT INTO TABLE [(colname {, colname...})]
{ values (expr | NULL {, expr |NULL...}) | subquery} INSERT INTO TABLE [(colname {, colname...})]
{ values (expr | NULL {, expr |NULL...}) | subquery} 需要注意的是两点:1.insert语法不支持表别名,因此不能用别的限定名2.insert有两种用法,一种是后面接vlaues定义的值的集合,还有一种后面接子查询 3.Update语句Sql代码
UPDATE table
SET cloname={expr | null | (subquery)}
{,cloname={expr | null | (subquery)...}}
[WHERE condition] UPDATE table
SET cloname={expr | null | (subquery)}
{,cloname={expr | null | (subquery)...}}
[WHERE condition] 4.delete语句Sql代码
DELETE FROM TABLE
[WHERE condition]