ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:27.17KB ,
资源ID:10850311      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10850311.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(sql语句基础学习.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

sql语句基础学习.docx

1、sql语句基础学习sql select语句详解 SELECT ALL | DISTINCT ON ( expression , . ) * | expression AS output_name , . FROM from_item , . WHERE condition GROUP BY expression , . HAVING condition , . UNION | INTERSECT | EXCEPT ALL select ORDER BY expression ASC | DESC | USING operator , . FOR UPDATE OF tablename , .

2、LIMIT count | ALL OFFSET start 这里 from_item 可以是: ONLY table_name * AS alias ( column_alias_list ) |( select ) AS alias ( column_alias_list ) |from_item NATURAL join_type from_item ON join_condition | USING ( join_column_list ) 输入 expression 表的列/字段名或一个表达式 output_name 使用 AS 子句为一个列/字段或一个表达式声明另一个名称 这个名称

3、主要用于标记输出列用于显示。 它可以在 ORDER BY 和 GROUP BY 子句里代表列/字段的值 但是 output_name 不能用于 WHERE 或 HAVING 子句;用表达式代替 from_item 一个表引用,子查询,或者 JOIN 子句详见下文 condition 一个布尔表达式,给出真或假的结果 参见下面描述的 WHERE 和 HAVING 子句 select 一个选择语句,可以有除 ORDER BY,FOR UPDATE,和 LIMIT 子句以外的所有 特性(甚至在加了括弧的情况下那些语句也可以用) FROM 项可以包括: table_name 一个现存的表或视图的名字如

4、果声明了 ONLY,则只扫描该表 如果没有声明ONLY,该表和所有其派生表(如果有的话)都被扫描 可以在表名后面跟一个 * 来表示扫所有其后代表, 但在目前的版本里,这是缺省特性 (在 PostgreSQL 7.1 以前的版本里, ONLY 是缺省特性) alias 用于于前面的 table_name. 的替换名字,用于缩写或消除一个表自连接时的含混 (此时同一个表要扫描好几次) 如果写了别名,那么你也可以写一个字段别名列表,为表的一个或者几个 字段提供替换名字 select 一个在 FORM 子句里出现的子查询它的输出作用好象是为这条 SELECT 命令在其生存期里创建一个临时表 请注意这个

5、子查询必须用园括弧包围 并且必须给它加别名 join_type INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN,或 CROSS JOIN. 之一 就 INNER 和 OUTER 连接类型,必须出现 NATURAL ON join_condition,或 USING ( join_column_list ) 之一对于 CROSS JOIN,上面的项都不能出现 join_condition 一个条件限制类似 WHERE 条件,只不过它只应用于在这条 JOIN 子句里 连接的两个 from_item join_column

6、_list 一个 USING 字段列表 (a, b, . ) 是 ON 条件 left_table.a = right_table.a AND left_table.b = right_table.b . 的缩写 输出 Rows 你声明的查询返回的所有结果集的行 count 查询返回的行的计数 描述 SELECT 将从一个或更多表中返回记录行。 选择的侯选行是满足 WHERE 条件的所有行。 或者如果省略了 WHERE 语句则选择表中的所有行(参阅 WHERE 子句) 实际上,返回的行并不是由 FROM/WHERE/GROUP BY/HAVING 子句直接生成的行; 其实,输出行是通过给每个选

7、出的行计算 SELECT 输出表达式形成的 你可以在输出列表上写一个 * 表示选出的行的所有列 同样我们可以拿 table_name.* 表示来自该表的所以行 DISTINCT 将从选择出来的结果集中删除所有的重复的行。 ALL (缺省)将返回所有侯选行,包括重复的行。 DISTINCT ON 删除匹配所有你声明的表达式的行, 只保留每个重复集的第一行。 DISTINCT ON 表达式是用和 ORDER BY 项一样的规则来解释的,见下文 注意这里每个重复集的第一行是不可预料的,除非我们用 ORDER BY 来保证我们希望的行最先出现。例如, SELECT DISTINCT ON (locat

8、ion) location, time, report FROM weatherReports ORDER BY location, time DESC; 检索出每个地区的最近的天气预报。 但是如果我们没有使用 ORDER BY 来强制每个地区按时间值降续排列, 我们得到的将是每个地区的不可预料的时间的报告。 GROUP BY 子句允许用户把表分成匹配一个或多个数值的不同行的组 (参考 GROUP BY 子句) HAVING 允许只选择那些满足声明条件的行组(参阅 HAVING 子句) ORDER BY 导致返回的行按照声明的顺序排列 如果没有给出 ORDER BY,输出的行的顺序将以系统认为

9、开销最小的顺序产生 (参阅 ORDER BY 子句) 多个 SELECT 查询可以用 UNION,INTERSECT,和 EXCEPT 操作符 组合起来必要时请使用圆括弧确定这些操作符的顺序 UNION 操作符计算是那些参与的查询所返回的行的集合。 如果没有声明 ALL,那么重复行被删除 (参阅 UNION 子句) INTERSECT 给出两个查询公共的行。 如果没有声明 ALL,那么重复行被删除 (参阅 INTERSECT 子句) EXCEPT 给出存在于第一个查询而不存在于第二个查询的行。 如果没有声明 ALL,那么重复行被删除 (参阅 EXCEPT 子句) FOR UPDATE 子句允许

10、 SELECT 语句对选出的行执行排他锁。 LIMIT 子句允许给用户返回一个查询生成的结果的子集。(参阅 LIMIT 子句) 你必须有 SELECT 权限用来从表中读取数值 (参阅 GRANT/REVOKE语句) FROM 子句 FROM 子句为 SELECT 声明一个或多个源表 如果声明了多个源表,则概念上结果是所有源表所有行的迪卡尔积 - 不过通常会增加限制条件以把返回的行限制为迪卡尔积的一个小子集 如果 FROM 项是一个简单表名字,它隐含包括来自该表子表(继承子表)的行 ONLY 将消除从该表的子表来的行 在 PostgreSQL 7.1 以前,这是缺省结果, 而获取子表的行是通过在

11、表名后面附加 * 实现的 这种老式性质可以通过命令 SET SQL_Inheritance TO OFF; 获取 FROM 项也可以是一个加了圆括弧的子查询 (请注意子查询需要一个别名子句!) 这个特性非常实用,因为这是在一条查询中获得多层分组, 聚集,或者排序的唯一方法 最后,FROM 项可以是一条 JOIN 子句,它把两个简单的 FROM 项组合 在一起(必要时使用圆括弧来描述嵌套顺序) CROSS JOIN 或 INNER JOIN 是简单的迪卡尔积, 和你在顶层 FROM 里列出这两个项得到的一样 CROSS JOIN 等效于 INNER JOIN ON (TRUE),也就是说, 不会

12、有任何行被条件删除这些连接类型只是符号上的便利, 因为它们做得一点不比你只利用 FROM 和 WHERE 来的多 LEFT OUTER JOIN 返回所有符合条件的迪卡尔积 (也就是说,所有符合它的 ON 条件的组合了的行),另外加上 所有没有右手边行符合 ON 条件的左手边表中的行 这样的左手边行通过向右手边行插入 NULL 扩展为全长 请注意,当判断哪些行合格的时候,只考虑 JOIN 自己的 ON 或 USING 然后才考虑外层的 ON 或 WHERE 条件 相反, RIGHT OUTER JOIN 返回所有连接的行, 另外加上所有未匹配右手边行(左手边插入 NULL 扩展为全长) 这个字

13、句只是符号方便,因为你可以调换左右输入而改用 LEFT OUTER JOIN FULL OUTER JOIN 返回所有连接行,加上所有未匹配的左手边行 (右边插入 NULL 扩展为全长), 再加上所有未匹配的右手边行(左手边插入 NULL 扩展为全长) 除了CROSS JOIN 以外的所有 JOIN 类型,你必须写 ON join_condition, USING ( join_column_list ), 和 NATURAL 中的一个 大多数情况下会是 ON:你可以写涉及两个连接表的任何条件表达式 USING 字段列表 (a, b, .) 是 ON 条件 left_table.a = rig

14、ht_table.a AND left_table.b = right_table.b . 的缩写 另外,USING 假设两对等式中只有一个包含在 JOIN 输出中,而不是两个 NATURAL 是提及表中所有相似名字字段的 USING 列表的缩写 WHERE 子句 可选的 WHERE 条件有如下常见的形式: WHERE boolean_expr boolean_expr 可以包含任意个得出布尔值的表达式。通常表达式会是 expr cond_op expr 或 log_op expr 这里 cond_op 可以是: =,= 或 , 或条件操作符象 ALL,ANY,IN,LIKE 等,或者用户定义

15、的操作符,而 log_op 可以为 : AND,OR,NOT SELECT 将忽略所有 WHERE 条件不为 TRUE 的行 GROUP BY 子句 GROUP BY 声明一个分了组的表,该表源于应用使用下面的子句: GROUP BY expression , . GROUP BY 将把所有在组合了的列上共享同样的值的行压缩成一行。 如果存在聚集函数,这些聚集函数将计算每个组的所有行,并且为 每个组计算一个独立的值(如果没有 GROUP BY, 聚集函数对选出的所有行计算出一个数值)。存在 GROUP BY 时,除了在聚集函数 里面,SELECT 输出表达式对任何非组合列的引用都是非法的, 因

16、为对一个非组合列会有多于一个可能的返回值。 一个在 GROUP BY 里面的条目还可以是输出列的名称或者序号 (SELECT 表达式), 或者是一个从输入列的数值形成的任意表达式当存在语义模糊时, 一个 GROUP BY 名称将被解释成一个输入列/字段名称而不是一个输出列/字段名称 HAVING 子句 可选的 HAVING 条件有如下形式: HAVING boolean_expr 这里 boolean_expr 和为 WHERE 子句里声明的相同 HAVING 子句声明一个从前面的子句的结果集中去除了一些不符合 boolean_expr. 组后分组的表HAVING 与 WHERE 不同:WHE

17、RE 在应用 GROUP BY 之前过滤出单独的行,而 HAVING 过滤由 GROUP BY 创建的行 在 boolean_expr 里引用的每个列/字段应该清晰地指明一个组的列/字段, 除非引用在一个聚集函数里。 ORDER BY 子句 ORDER BY expression ASC | DESC | USING operator , . 一个 ORDER BY 项可以是一个输出列(SELECT 表达式)的名字或者序数, 或者它也可以是任何来自输入列值形成的表达式 在出现混淆的场合下,ORDER BY 名字将被解释成一个输出名字 序数指的是列/字段按顺序(从左到右)的位置 这个特性可以使得

18、对没有一个合适名称的列/字段的排序成为可能 这一点可能永远没有用, 因为总是可以通过AS 子句给一个要计算的列/字段赋予一个名称,例如: SELECT title, date_prod + 1 AS newlen FROM films ORDER BY newlen; 还可以 ORDER BY 任意表达式(一个对 SQL92 的扩展), 包括那些没有出现在 SELECT 结果列表里面的域。 因此下面的语句现在是合法的: SELECT name FROM distributors ORDER BY code; 这个特性的一个局限就是应用于 UNION,INTERSECT,或者 EXCEPT 查询

19、 的 ORDER BY 子句只能在一个输出字段名或者数字上声明, 而不能在一个表达式上声明 请注意如果一个 ORDER BY 条目是一个匹配结果列和输入列的简单名称, ORDER BY 将把它解释成结果列名称 这和 GROUP BY 在同样情况下做的选择正相反 这样的不一致是由 SQL92 标准强制的 我们可以给ORDER BY 子句里每个列/字段加一个关键字 DESC (降序)或 ASC(升序)如果不声明,ASC 是缺省 我们还可以声明一个排序操作符来实现排序。 ASC 等效于使用 。 在一个域里,空值排序时排在其它数值前面换句话说,升序排序时, 空值排在末尾,而降序排序时空值排在开头 UN

20、ION 子句 table_query UNION ALL table_query ORDER BY expression ASC | DESC | USING operator , . LIMIT count | ALL OFFSET | , start 这里 table_query 表明任何没有 ORDER BY,FOR UPDATE,或者 LIMIT 子句的选择表达式 (如果用圆括弧包围,ORDER BY 和 LIMIT 可以放在子表达式里 如果没有圆括弧,这些子句将交给 UNION 的结果使用, 而不是给它们右手边的输入表达式) UNION 操作符的结果集是那些涉及到的所有查询所返回结果

21、的集合。 两个做为 UNION 直接操作数的 SELECT 必须生成相同数目的字段, 并且对应的字段必须有兼容的数据类型。 缺省地,UNION 的结果不包含任何重复的行,除非声明了 ALL 子句 ALL 制止了消除重复的动作 同一 SELECT 语句中的多个 UNION 操作符是从左向右计算的, 除非用圆括弧进行了标识) 目前,FOR UPDATE 不能在 UNION 的结果或输入中声明 INTERSECT 子句 table_query INTERSECT ALL table_query ORDER BY expression ASC | DESC | USING operator , . L

22、IMIT count | ALL OFFSET start 这里 table_query 声明任何没有 ORDER BY,FOR UPDATE,或者 LIMIT 子句的选择表达式。 INTERSECT 类似 UNION,只不过它给出在两个查询中都出现的行, 而不是两个查询的所有行 INTERSECT 的结果不包含任何重复行,除非你声明了 ALL 选项 用了 ALL 以后,一个在 L 里有 m 个重复而在 R 里有 n 个重复 的行将出现 min(m,n) 次 除非用圆括号指明顺序, 同一 SELECT 语句中的多个 INTERSECT 操作符是从左向右计算的。 INTERSECT 比 UNIO

23、N 绑定得更紧 - 也就是说 A UNION B INTERSECT C 将读做 A UNION (B INTERSECT C),除非你用圆括弧声明 EXCEPT 子句 table_query EXCEPT ALL table_query ORDER BY expression ASC | DESC | USING operator , . LIMIT count | ALL OFFSET start 这里 table_query 声明任何没有 ORDER BY,FOR UPDATE,或者 LIMIT 子句的选择表达式。 EXCEPT 类似于 UNION,只不过 EXCEPT 给出存在于左边查

24、询输出而不存在于右边查询输出的行。 EXCEPT 的结果不包含任何重复的行,除非声明了 ALL 选项 使用ALL时,一个在 L 中有 m 个重复而在 R 中有 n 个重复的行 将出现 max(m-n,0) 次 除非用圆括弧指明顺序, 同一 SELECT 语句中的多个 EXCEPT 操作符是从左向右计算的。 EXCEPT 和 UNION 绑定级别相同 LIMIT 子句 LIMIT count | ALL OFFSET start 这里 count 声明返回的最大行数,而 start 声明开始返回行之前忽略的行数。 LIMIT 允许你检索由查询其他部分生成的行的某一部分。 如果给出了限制计数,那么

25、返回的行数不会超过哪个限制。 如果给出了一个偏移量,那么开始返回行之前会忽略那个数量的行。 在使用 LIMIT 时, 一个好习惯是使用一个 ORDER BY 子句把结果行限制成一个唯一的顺序。 否则你会得到无法预料的查询返回的子集 - 你可能想要第十行到第二十行, 但以什么顺序?除非你声明 ORDER BY,否则你不知道什么顺序。 从 PostgreSQL 7.0 开始, 查询优化器在生成查询规划时把 LIMIT 考虑进去了, 所以你很有可能因给出的 LIMIT 和 OFFSET 值不同而得到不同的 规划(生成不同的行序)。 因此用不同的 LIMIT/OFFSET 值选择不同的查询结果的子集

26、将不会产生一致的结果, 除非你用 ORDER BY 强制生成一个可预计的结果顺序。 这可不是毛病;这是 SQL 生来的特点,因为除非用了 ORDER BYE 约束顺序, SQL 不保证查询生成的结果有任何特定的顺序。 用法 将表 films 和表 distributors 连接在一起: SELECT f.title, f.did, d.name, f.date_prod, f.kind FROM distributors d, films f WHERE f.did = d.did title | did | name | date_prod | kind-+-+-+-+-The Third

27、Man | 101 | British Lion | 1949-12-23 | DramaThe African Queen | 101 | British Lion | 1951-08-11 | RomanticUne Femme est une Femme | 102 | Jean Luc Godard | 1961-03-12 | RomanticVertigo | 103 | Paramount | 1958-11-14 | ActionBecket | 103 | Paramount | 1964-02-03 | Drama48 Hrs | 103 | Paramount | 198

28、2-10-22 | ActionWar and Peace | 104 | Mosfilm | 1967-02-12 | DramaWest Side Story | 105 | United Artists | 1961-01-03 | MusicalBananas | 105 | United Artists | 1971-07-13 | ComedyYojimbo | 106 | Toho | 1961-06-16 | DramaTheres a Girl in my Soup | 107 | Columbia | 1970-06-11 | ComedyTaxi Driver | 107 | Columbia | 1975-05-15 | ActionAbsence of Malice | 107 | Columbia | 1981-11-15 | ActionStoria di una donna | 108 | Westward | 1970-08-15 | RomanticThe King and I | 109 | 20th Century Fox | 1956-08-11 | MusicalDas Boot | 110 | Bavaria Atelier | 1981-11-11 | DramaBed Knobs and Broomsticks | 11

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1