网络推广中必学SQl基础语句

时间:2024.5.15

网络推广中必学SQl基础语句

作为非技术人员出身的网站运营、网站推广人员,平时在工作过程中会用到一些基数的Sql语句,尤其是进行数据处理的时候,非常有用。非技术人员零基础学起,只要你花10分钟看完,基本能满足平时工作的基本要求,建议下载下来,想用的时候对照一下就可以。

1、 字段连接:

update 阿里巴巴 set 公司网址1 = '/company/detail/intro/' + 会员id + '.html';

2、 替换某几行内容:

UPDATE `news`.`article` SET time='2008-10' WHERE RTRIM(time)='' and id>14635 and id<14636;

3、删除文章正文为空的行:DELETE FROM `test`.`fuben` WHERE content =''

4、导入文件:load data local infile 'F:\article.txt' into table `test`.`article` fields terminated by '\t';

5、替换数据列:UPDATE `test`.`article`,`test`.`fuben` SET `test`.`article`.keywords = `test`.`fuben`.keywords WHERE `test`.`article`.id = `test`.`fuben`.id;

6、创建一个表:CREATE TABLE `test`.`fuben1` LIKE `test`.`fuben`;

复制所有数据:INSERT `test`.`fuben2` SELECT * FROM `test`.`fuben`;

7、根据某个字段数值更新其他字段数值1:update Content set 已采 = '0' where 电话号码 is null or 电话号码 = '0';

根据某个字段数值更新其他字段数值2:update Content set 城市 = '杭州' where left([电话号码],6)='86-571';

根据某个字段数值更新其他字段数值3:update content set Ifgetemail=0 where email is null or len(email)<2;

8、给某个字段赋值:UPDATE datalist SET IFGetEmail = 0;

9、去掉字段中的某些字符:UPDATE datalist SET Company = replace(Company,'_公司介绍_','');

10、表内字段值相互替换:UPDATE datalist SET company = 联系人, 手机 = 传真, 联系人 = 地址, 传真 = 电话, 地址 = 经营模式, 电话 = 员工人数, 经营模式 = 年营业额, 员工人数 = 注册资本, 年营业额 = 法定代表人, 注册资本 = 省份, 法定代表人 = 城市, 省份 = 省份1, 城市 = 城市1

WHERE id>124452;

11、把表1的某字段值赋给表2的某字段:UPDATE content,content1 SET content.城市 = content1.城市 WHERE content.id = content1.id

12、查看某个表的所有记录数 select count(*) from datalist;

13、查看符合某个条件的记录数:SELECT COUNT(Customer) AS CustomerNilsen FROM datalist WHERE Customer='尼尔森';

14、查看某字段的不重复的记录数1:SELECT 城市, count(城市) AS 该城市出现的次数 FROM qita GROUP BY 城市;

15、查看某字段的不重复的记录数2:Select 公司名称,Max(ID) From qita Group By 公司名称;

备注:上述两条语句的统计函数和最大函数,都是针对各个group by分组而言的。 加入having语句:select 城市 from qita group by 城市 having(count(*)>=1);

加入条件语句:SELECT 城市, 省份,count(城市) AS 城市数 FROM qita where len(城市)>=3 group by 城市,省份;

一。查找重复记录

1。查找全部重复记录(只能找数值类型):

Select * From qita Where 人数 In (Select 人数 From qita Group By 人数 Having Count(*)>1);

2。过滤重复记录(只显示一条)

Select * From qita Where ID In (Select Max(ID) From qita Group By 公司名称);

注:此处显示ID最大一条记录

二。删除重复记录

1。只保留一条重复记录(这个应该是大多数人所需要的 ^_^)

Delete from qita Where ID not In (Select Max(ID) From qita Group By 公司名称);

注:此处保留ID最大一条记录

三、mysql情况下复制表结构和表内容:

1、CREATE TABLE newtable LIKE oldtable;

2、INSERT INTO newtable SELECT * FROM oldtable;

ACCESS导入mysql:

工具:/downloads/migration-toolkit/1.0.html

MYSQL 4.0以下版本没有这个问题,以上的版本就有这个问题,估计你直接用这个工具是不行的,可以给你一个思路:

1. 先将ACCESS数据导出生成一个带格式的文本文件,包括有列分隔符和行尾分隔符,在WINDOWS系统下,行尾分隔符是\r\n, 而列分隔符在你导出数据生成相关文本文件时可以自定义, 然后用LOAD DATA IN FILE命令行导入相关数据, 但有一点请切记,在执行LOAD DATA IN FILE命令行之前, 你要首先执行set names 'gbk' 或者set names 'gb2312', 还有一个办法就是在my.ini 或者my.cnf配置文件中加入一行:

[mysqld]

default-character-set=gb2312 或者gbk

然后重新启动mysql.

2. 将数据库建成支持UTF-8,然后将你导出的文本文件另存为UTF-8编码, 最后用mysqlimport工具或者LOAD DATA IN FILE命令导入数据即可,这样的话,你的数据编码就是UTF-8的.

我建议你用第二种方法,这是最好的解决方案.

四、转换时间戳

SELECT regtime,FROM_UNIXTIME(`regtime`,"%Y-%m-%d") FROM tk_member WHERE groupid = 3 AND isapprove =1 AND regtime>1294111820 AND regtime< 1325321672;

五、复制表1的某些字段内容到表2

Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。

语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

INSERT INTO tk_yard_spider(name,pic,price,volume,arae,device,province,city,address,mold,linkman,tel,mail,intro) SELECT name,pic,price,volume,arae,device,province,city,address,mold,linkman,tel,mail,intro FROM content

淘课网-中国领先的管理培训网站()


第二篇: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 [, ...] ] ]

[ 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 子句为一个列/字段或一个表达式声明另一个名称. 这个名称主要用于标记输出列用于显示。 它可以在 ORDER BY 和 GROUP BY 子句里代表列/字段的值. 但是 output_name 不能用于 WHERE 或 HAVING 子句;用表达式代替.

from_item

一个表引用,子查询,或者 JOIN 子句.详见下文.

condition

一个布尔表达式,给出真或假的结果. 参见下面描述的 WHERE 和 HAVING 子句.

select

一个选择语句,可以有除 ORDER BY,FOR UPDATE,和 LIMIT 子句以外的所有 特性(甚至在加了括弧的情况下那些语句也可以用).

FROM 项可以包括:

table_name

一个现存的表或视图的名字.如果声明了 ONLY,则只扫描该表. 如果没有声明ONLY,该表和所有其派生表(如果有的话)都被扫描. 可以在表名后面跟一个 * 来表示扫所有其后代表, 但在目前的版本里,这是缺省特性. (在 PostgreSQL 7.1 以前的版本里, ONLY 是缺省特性.)

alias

用于于前面的 table_name. 的替换名字,用于缩写或消除一个表自连接时的含混. (此时同一个表要扫描好几次.) 如果写了别名,那么你也可以写一个字段别名列表,为表的一个或者几个 字段提供替换名字.

select

一个在 FORM 子句里出现的子查询.它的输出作用好象是为这条 SELECT 命令在其生存期里创建一个临时表. 请注意这个子查询必须用园括弧包围. 并且必须给它加别名. 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_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 子句直接生成的行; 其实,输出行是通过给每个选出的行计算 SELECT 输出表达式形成的. 你可以在输出列表上写一个 * 表示选出的行的所有列. 同样我们可以拿 table_name.* 表示来自该表的所以行.

DISTINCT 将从选择出来的结果集中删除所有的重复的行。 ALL (缺省)将返回所有侯选行,包括重复的行。

DISTINCT ON 删除匹配所有你声明的表达式的行, 只保留每个重复集的第一行。 DISTINCT ON 表达式是用和 ORDER BY 项一样的规则来解释的,见下文. 注意这里每个重复集的"第一行"是不可预料的,除非我们用 ORDER BY 来保证我们希望的行最先出现。例如, SELECT DISTINCT ON (location) location, time, report

FROM weatherReports

ORDER BY location, time DESC;

检索出每个地区的最近的天气预报。 但是如果我们没有使用 ORDER BY 来强制每个地区按时间值降续排列, 我们得到的将是每个地区的不可预料的时间的报告。

GROUP BY 子句允许用户把表分成匹配一个或多个数值的不同行的组. (参考 GROUP BY 子句.)

HAVING 允许只选择那些满足声明条件的行组(参阅 HAVING 子句.)

ORDER BY 导致返回的行按照声明的顺序排列. 如果没有给出 ORDER BY,输出的行的顺序将以系统认为开销最小的顺序产生. (参阅 ORDER BY 子句.)

多个 SELECT 查询可以用 UNION,INTERSECT,和 EXCEPT 操作符 组合起来.必要时请使用圆括弧确定这些操作符的顺序.

UNION 操作符计算是那些参与的查询所返回的行的集合。 如果没有声明 ALL,那么重复行被删除. (参阅 UNION 子句.)

INTERSECT 给出两个查询公共的行。 如果没有声明 ALL,那么重复行被删除. (参阅 INTERSECT 子句.)

EXCEPT 给出存在于第一个查询而不存在于第二个查询的行。 如果没有声明 ALL,那么重复行被删除. (参阅 EXCEPT 子句.)

FOR UPDATE 子句允许 SELECT 语句对选出的行执行排他锁。

LIMIT 子句允许给用户返回一个查询生成的结果的子集。(参阅 LIMIT 子句.)

你必须有 SELECT 权限用来从表中读取数值 (参阅 GRANT/REVOKE语句.)

FROM 子句

FROM 子句为 SELECT 声明一个或多个源表. 如果声明了多个源表,则概念上结果是所有源

表所有行的迪卡尔积 --- 不过通常会增加限制条件以把返回的行限制为迪卡尔积的一个小子集.

如果 FROM 项是一个简单表名字,它隐含包括来自该表子表(继承子表)的行. ONLY 将消除从该表的子表来的行. 在 PostgreSQL 7.1 以前,这是缺省结果, 而获取子表的行是通过在表名后面附加 * 实现的. 这种老式性质可以通过命令 SET SQL_Inheritance TO OFF; 获取.

FROM 项也可以是一个加了圆括弧的子查询 (请注意子查询需要一个别名子句!). 这个特性非常实用,因为这是在一条查询中获得多层分组, 聚集,或者排序的唯一方法.

最后,FROM 项可以是一条 JOIN 子句,它把两个简单的 FROM 项组合 在一起.(必要时使用圆括弧来描述嵌套顺序.)

CROSS JOIN 或 INNER JOIN 是简单的迪卡尔积, 和你在顶层 FROM 里列出这两个项得到的一样. CROSS JOIN 等效于 INNER JOIN ON (TRUE),也就是说, 不会有任何行被条件删除.这些连接类型只是符号上的便利, 因为它们做得一点不比你只利用 FROM 和 WHERE 来的多.

LEFT OUTER JOIN 返回所有符合条件的迪卡尔积 (也就是说,所有符合它的 ON 条件的组合了的行),另外加上 所有没有右手边行符合 ON 条件的左手边表中的行. 这样的左手边行通过向右手边行插入 NULL 扩展为全长. 请注意,当判断哪些行合格的时候,只考虑 JOIN 自己的 ON 或 USING. 然后才考虑外层的 ON 或 WHERE 条件.

相反, RIGHT OUTER JOIN 返回所有连接的行, 另外加上所有未匹配右手边行(左手边插入 NULL 扩展为全长). 这个字句只是符号方便,因为你可以调换左右输入而改用 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 = right_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 等,或者用户定义的操作符,而 log_op 可以为 : AND,OR,NOT. SELECT 将忽略所有 WHERE 条件不为 TRUE 的行.

GROUP BY 子句

GROUP BY 声明一个分了组的表,该表源于应用使用下面的子句:

GROUP BY expression [, ...]

GROUP BY 将把所有在组合了的列上共享同样的值的行压缩成一行。 如果存在聚集函数,这些聚集函数将计算每个组的所有行,并且为 每个组计算一个独立的值(如果没有 GROUP BY, 聚集函数对选出的所有行计算出一个数值)。存在 GROUP BY 时,除了在聚集函数 里面,SELECT 输出表达式对任何非组合列的引用都是非法的, 因为对一个非组合列会有多于一个可能的返回值。

一个在 GROUP BY 里面的条目还可以是输出列的名称或者序号 (SELECT 表达式), 或者是一个从输入列的数值形成的任意表达式.当存在语义模糊时, 一个 GROUP BY 名称将被解释成一个输入列/字段名称而不是一个输出列/字段名称.

HAVING 子句

可选的 HAVING 条件有如下形式:

HAVING boolean_expr

这里 boolean_expr 和为 WHERE 子句里声明的相同.

HAVING 子句声明一个从前面的子句的结果集中去除了一些不符合 boolean_expr. 组后分组的表.HAVING 与 WHERE 不同:WHERE 在应用 GROUP BY 之前过滤出单独的行,而 HAVING 过滤由 GROUP BY 创建的行.

在 boolean_expr 里引用的每个列/字段应该清晰地指明一个组的列/字段, 除非引用在一个聚集函数里。

ORDER BY 子句

ORDER BY expression [ ASC | DESC | USING operator ] [, ...]

一个 ORDER BY 项可以是一个输出列(SELECT 表达式)的名字或者序数, 或者它也可以是任何来自输入列值形成的表达式. 在出现混淆的场合下,ORDER BY 名字将被解释成一个输出名字.

序数指的是列/字段按顺序(从左到右)的位置. 这个特性可以使得对没有一个合适名称的列/字段的排序成为可能. 这一点可能永远没有用, 因为总是可以通过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 查询 的 ORDER BY 子句只能在一个输出字段名或者数字上声明, 而不能在一个表达式上声明.

请注意如果一个 ORDER BY 条目是一个匹配结果列和输入列的简单名称, ORDER BY 将把它解释成结果列名称. 这和 GROUP BY 在同样情况下做的选择正相反. 这样的不一致是由 SQL92 标准强制的.

我们可以给ORDER BY 子句里每个列/字段加一个关键字 DESC (降序)或 ASC(升序).如果不声明,ASC 是缺省. 我们还可以声明一个排序操作符来实现排序。 ASC 等效于使用 '<' 而 DESC 等效于使用 '>'。

在一个域里,空值排序时排在其它数值前面.换句话说,升序排序时, 空值排在末尾,而降序排序时空值排在开头.

UNION 子句

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 操作符的结果集是那些涉及到的所有查询所返回结果的集合。 两个做为 UNION 直接操作数的 SELECT 必须生成相同数目的字段, 并且对应的字段必须有兼容的数据类型。 缺省地,UNION 的结果不包含任何重复的行,除非声明了 ALL 子句. ALL 制止了消除重复的动作.

同一 SELECT 语句中的多个 UNION 操作符是从左向右计算的, 除非用圆括弧进行了标识).

目前,FOR UPDATE 不能在 UNION 的结果或输入中声明.

INTERSECT 子句

table_query INTERSECT [ ALL ] table_query

[ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]

[ LIMIT { 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 比 UNION 绑定得更紧 --- 也就是说 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 给出存在于左边查询输出而不存在于右边查询输出的行。

EXCEPT 的结果不包含任何重复的行,除非声明了 ALL 选项. 使用ALL时,一个在 L 中有 m 个重复而在 R 中有 n 个重复的行 将出现 max(m-n,0) 次.

除非用圆括弧指明顺序, 同一 SELECT 语句中的多个 EXCEPT 操作符是从左向右计算的。 EXCEPT 和 UNION 绑定级别相同.

LIMIT 子句

LIMIT { count | ALL }

OFFSET start

这里 count 声明返回的最大行数,而 start 声明开始返回行之前忽略的行数。

LIMIT 允许你检索由查询其他部分生成的行的某一部分。 如果给出了限制计数,那么返回的行数不会超过哪个限制。 如果给出了一个偏移量,那么开始返回行之前会忽略那个数量的行。 在使用 LIMIT 时, 一个好习惯是使用一个 ORDER BY 子句把结果行限制成一个唯一的顺序。 否则你会得到无法预料的查询返回的子集 --- 你可能想要第十行到第二十行, 但以什么顺序?除非你声明 ORDER BY,否则你不知道什么顺序。

从 PostgreSQL 7.0 开始, 查询优化器在生成查询规划时把 LIMIT 考虑进去了, 所以你很有可能因给出的 LIMIT 和 OFFSET 值不同而得到不同的 规划(生成不同的行序)。 因此用不同的 LIMIT/OFFSET 值选择不同的查询结果的子集 将不会产生一致的结果, 除非你用 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 Man | 101 | British Lion | 1949-12-23 | Drama

The African Queen | 101 | British Lion | 1951-08-11 | Romantic

Une Femme est une Femme | 102 | Jean Luc Godard | 1961-03-12 | Romantic

Vertigo | 103 | Paramount | 1958-11-14 | Action

Becket | 103 | Paramount | 1964-02-03 | Drama

48 Hrs | 103 | Paramount | 1982-10-22 | Action

War and Peace | 104 | Mosfilm | 1967-02-12 | Drama West Side Story | 105 | United Artists | 1961-01-03 | Musical Bananas | 105 | United Artists | 1971-07-13 | Comedy Yojimbo | 106 | Toho | 1961-06-16 | Drama

There's a Girl in my Soup | 107 | Columbia | 1970-06-11 | Comedy Taxi Driver | 107 | Columbia | 1975-05-15 | Action

Absence of Malice | 107 | Columbia | 1981-11-15 | Action

Storia di una donna | 108 | Westward | 1970-08-15 | Romantic The King and I | 109 | 20th Century Fox | 1956-08-11 | Musical Das Boot | 110 | Bavaria Atelier | 1981-11-11 | Drama

Bed Knobs and Broomsticks | 111 | Walt Disney | | Musical (17 rows)

统计用kind 分组的所有电影和组的列/字段的 len(长度)的和:

SELECT kind, SUM(len) AS total FROM films GROUP BY kind;

kind | total

----------+-------

Action | 07:34

Comedy | 02:58

Drama | 14:28

Musical | 06:42

Romantic | 04:38

(5 rows)

统计所有电影(films),组的列/字段 len(长度)的和,用 kind 分组并且显示小于5小时的组总和:

SELECT kind, SUM(len) AS total

FROM films

GROUP BY kind

HAVING SUM(len) < INTERVAL '5 hour';

kind | total

----------+-------

Comedy | 02:58

Romantic | 04:38

(2 rows)

下面两个例子是根据第二列 (name)的内容对单独的结果排序的经典的方法:

SELECT * FROM distributors ORDER BY name;

SELECT * FROM distributors ORDER BY 2;

did | name

-----+------------------

109 | 20th Century Fox

110 | Bavaria Atelier

101 | British Lion

107 | Columbia

102 | Jean Luc Godard

113 | Luso films

104 | Mosfilm

103 | Paramount

106 | Toho

105 | United Artists

111 | Walt Disney

112 | Warner Bros.

108 | Westward

(13 rows)

这个例子演示如何获得表 distributors 和 actors的连接, 只将每个表中以字母 W 开头的取出来. 因为只取了不相关的行,所以关键字 ALL 被省略了:

distributors: actors:

did | name id | name

-----+-------------- ----+----------------

108 | Westward 1 | Woody Allen

111 | Walt Disney 2 | Warren Beatty

112 | Warner Bros. 3 | Walter Matthau

... ...

SELECT distributors.name

FROM distributors

WHERE distributors.name LIKE 'W%'

UNION

SELECT actors.name

FROM actors

WHERE actors.name LIKE 'W%'

name

----------------

Walt Disney

Walter Matthau

Warner Bros.

Warren Beatty

Westward

Woody Allen

兼容性

扩展

PostgreSQL 允许我们在一个查询里省略 FROM 子句。 这个特性是从最初的 PostQuel 查询语言里保留下来的 它的最直接用途就是计算简单的常量表达式的结果:

SELECT 2+2;

?column?

----------

4

其它有些 DBMS 不能这么做,除非引入一个单行的伪表做 select 的 from.这个特性的另外一个不太明显的用途是把一个普通的从一个或多个表的 select 缩写:

SELECT distributors.* WHERE distributors.name = 'Westward';

did | name

-----+----------

108 | Westward

这样也可以运行是因为我们给查询中引用了但没有在 FROM 中提到的每个表都加了一个隐含的 FROM 项.尽管这是个很方便的写法,但它却容易误用.比如,下面的查询 SELECT distributors.* FROM distributors d;

可能就是个错误;用户最有可能的意思是

SELECT d.* FROM distributors d;

而不是下面的他实际上得到的无约束的连接

SELECT distributors.* FROM distributors d, distributors distributors;

为了帮助检测这种错误, PostgreSQL 7.1 以及以后的版本将在你使用一条即有隐含 FROM 特性又有明确的 FORM 子句的查询的时候给出警告.

SQL92

SELECT 子句

在 SQL92 规范里, 可选的关键字 "AS" 是多余的,可以忽略掉而不对语句产生任何影响. PostgreSQL 分析器在重命名列/字段时需要这个关键字, 因为类型扩展的特性会导致上下文语意不清. 不过,"AS" 在 FROM 项里是可选的.

DISTINCT ON 语法不是SQL92 的标准。 LIMIT 和 OFFSET 也不是。

在 SQL92里, 一个 ORDER BY 子句只可以使用在结果列名称或者序号上, 而 GROUP BY 子句只能用于输入列/字段上. PostgreSQL 把这 两个子句都扩展为允许另一种选择(但是如果出现冲突则使用标准的解释). PostgreSQL 还允许两个子句声明任意的表达式. 请注意,在表达式里出现的名称将总是被当做输入列/字段的名称, 而不是结果列/字段名称. UNION/INTERSECT/EXCEPT 子句

SQL92 的 UNION/INTERSECT/EXCEPT 语法允许一个附加的 CORRESPONDING BY 选项:

table_query UNION [ALL]

[CORRESPONDING [BY (column [,...])]]

table_query

CORRESPONDING BY 目前还不被 PostgreSQL支持.

SQL语句(inner join,left out join,right out join三者的不同用法)

jion 语句有三种,inner join, left outer join 和 right outer join 都可以简写,分别为jion,left join,right jion。

jion语句可以用来组合两个表中的记录,只要在公共字段之中有相符的值即可,该语句联合两个表查询得到的结果是可以添加新的数据,可以把它看成将两个具有相关内容的表联

接在一起新生成的表,而一般的select 语句没有这个功能。

1) 内连接,inner join ... on

语句格式:

FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号) INNER JOIN 表4 ON Member.字段号=表4.字段号) INNER JOIN 表X

ON Member.字段号=表X.字段号

例子:

SELECT *

FROM (((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel)

INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity) INNER JOIN Wedlock ON Member.Wedlock=Wedlock.Wedlock ORDER BY MemberDate DESC

内连接的功能是,把两个表相关联的记录列出来,必须是相关联的记录。

2) 左外连接,left outer join ... on

语句格式:

FROM [表名1] LEFT JOIN [表名2]

ON [表名1.字段A] 〈关系运算符〉[表名2.字段B]

其实LEFT JOIN 的功能就是将LEFT左边的表名1中的所有记录全部保留,而将右边的表名2中的字段B与表名1.字段A相对应的记录显示出来(当使用SELECT * 时)。而RIGHT JOIN

和LEFT JOIN 相反。

外连接的功能是,把LEFT左边的表中的所有记录保留,而右边表只保留相关联的记录,也就是先执行一次INNER JOIN,然后把LEFT左边的表中的与右边表没有任何关联的记录也 保留,而右边表的字段为null.

使用左向外联接

假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者(本例中为 Abraham Bennet 和 Cheryl Carson)。

若要在结果中包括所有的作者,而不管出版商是否住在同一个城市,请使用 SQL-92 左向外联接。下面是 Transact-SQL 左向外联接的查询和结果:

USE pubs

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors a LEFT OUTER JOIN publishers p

ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

【也就是先把authors表中的所有数据列出,由于authors表中没有pub_name字段,所以为null 】

下面是结果集:

au_fname au_lname pub_name

-------------------- ------------------------------ -----------------

Reginald Blotchet-Halls NULL

Michel DeFrance NULL

Innes del Castillo NULL

Ann Dull NULL

Marjorie Green NULL

Morningstar Greene NULL

Burt Gringlesby NULL

Sheryl Hunter NULL

Livia Karsen NULL

Charlene Locksley NULL

Stearns MacFeather NULL

Heather McBadden NULL

Michael O'Leary NULL

Sylvia Panteley NULL

Albert Ringer NULL

Anne Ringer NULL

Meander Smith NULL

Dean Straight NULL

Dirk Stringer NULL

Johnson White NULL

Akiko Yokomoto NULL

Abraham Bennet Algodata Infosystems

Cheryl Carson Algodata Infosystems

(23 row(s) affected)

不管是否与 publishers 表中的 city 列匹配,LEFT OUTER JOIN 均会在结果中包含 authors 表的所有行。注意:结果中所列的大多数作者都没有相匹配的数据,因此,这些行的 pub_name 列包含空值。

3) 右外连接,right outer join ... on

与 left join左右相反。

假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者(本例中为 Abraham Bennet 和 Cheryl Carson)。SQL-92 右向外联接运算符

RIGHT OUTER JOIN 指明:不管第一个表中是否有匹配的数据,结果将包含第二个表中的所有行。

若要在结果中包括所有的出版商,而不管城市中是否还有出版商居住,请使用 SQL-92 右向外联接。下面是 Transact-SQL 右向外联接的查询和结果:

USE pubs

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors AS a RIGHT OUTER JOIN publishers AS p

ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

下面是结果集:

au_fname au_lname pub_name

-------------------- ------------------------ --------------------

Abraham Bennet Algodata Infosystems

Cheryl Carson Algodata Infosystems

NULL NULL Binnet & Hardley

NULL NULL Five Lakes Publishing

NULL NULL GGG&G

NULL NULL Lucerne Publishing

NULL NULL New Moon Books

NULL NULL Ramona Publishers

NULL NULL Scootney Books

(9 row(s) affected)

使用谓词(如将联接与常量比较)可以进一步限制外联接。下例包含相同的右向外联接,但消除销售量低于 50 本的书籍的书名:

USE pubs

SELECT s.stor_id, s.qty, t.title

FROM sales s RIGHT OUTER JOIN titles t

ON s.title_id = t.title_id

AND s.qty > 50

ORDER BY s.stor_id ASC

4) 全连接,full join ... on(不常使用,只能用于outer)

功能结合了以上三种联军,先执行一次inner join,然后把两个表的多余字段都保留,但连接的对应字段为null.

如果想将几个表联接起来,在JOIN操作中我们可以进行嵌套操作,有三个表:表1、表2、表3,现在将三个表联接起来:

FROM (表1 INNER JOIN 表2 ON 表1.序号=表2.序号)

INNER JOIN 表3 ON 表1.序号=表3.序号

使用完整外部联接

若要通过在联接结果中包括不匹配的行保留不匹配信息,请使用完整外部联接。Microsoft? SQL Server? 2000 提供完整外部联接运算符 FULL OUTER JOIN,不管另一个表是否有 匹配的值,此运算符都包括两个表中的所有行。

假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者(本例中为 Abraham Bennet 和 Cheryl Carson)。SQL-92 FULL OUTER JOIN 运 算符指明:不管表中是否有匹配的数据,结果将包括两个表中的所有行。

若要在结果中包括所有作者和出版商,而不管城市中是否有出版商或者出版商是否住在同一个城市,请使用完整外部联接。下面是 Transact-SQL 完整外部联接的查询和结果:

USE pubs

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors a FULL OUTER JOIN publishers p

ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

下面是结果集:

au_fname au_lname pub_name

-------------------- ---------------------------- --------------------

Reginald Blotchet-Halls NULL

Michel DeFrance NULL

Innes del Castillo NULL

Ann Dull NULL

Marjorie Green NULL

Morningstar Greene NULL

Burt Gringlesby NULL

Sheryl Hunter NULL

Livia Karsen NULL

Charlene Locksley NULL

Stearns MacFeather NULL

Heather McBadden NULL

Michael O'Leary NULL

Sylvia Panteley NULL

Albert Ringer NULL

Anne Ringer NULL

Meander Smith NULL

Dean Straight NULL

Dirk Stringer NULL

Johnson White NULL

Akiko Yokomoto NULL

Abraham Bennet Algodata Infosystems

Cheryl Carson Algodata Infosystems

NULL NULL Binnet & Hardley

NULL NULL Five Lakes Publishing

NULL NULL GGG&G

NULL NULL Lucerne Publishing

NULL NULL New Moon Books

NULL NULL Ramona Publishers

NULL NULL Scootney Books

(30 row(s) affected)

附注:

select * from authors a,publishers p where a.city =p.city

本执行结果集中有两个列字段名为city的,因为前面没有指明那个表中的city例如:select a.city from authors a,publishers p where a.city =p.city

以下两个不同:

USE pubs

SELECT a.au_fname, a.au_lname, p.pub_name

FROM authors a LEFT OUTER JOIN publishers p

ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

USE pubs

SELECT a.*, p.*

FROM authors a LEFT OUTER JOIN publishers p

ON a.city = p.city

ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC这个将会把authors 中所有显示出来,在每条记录的后面凡是 publishers 中的字段都为null除了city在authors中

没有的字段

更多相关推荐:
怎么写朗朗上口的网络推广经典广告语

怎么写朗朗上口的网络推广经典广告语我们在电视上或者是网络上常常会看见一些十分经典的广告语这些广告语给我们的生活增加了很多乐趣甚至引发了全民使用的热度一个经典广告语能够长时间的被人所记住并且通怪广告语而加深产品的...

网络广告词

网络经营网站建设网站开发网站运营虚拟主机企业邮件域名注册网站推广网站策划等电子商务服务软件主营软件开发系统集成企业办公自动化企业管理软件办公软件等专业服务我们有强大的设计队伍提供给您个性化的设计专案执行一切只为...

全网网络推广计划书

推广计划书推广目的提高公司软件知名度主要推广渠道微博微信推广第三方网站广告投放问答平台论坛贴吧QQ空间推广QQ群推广QQ群SEO企业QQ推广博客营销视频营销新闻推广百度SEO一微信微博推广1开通公司企业微博及企...

20xx年网络推广方案

20xx年网络推广方案随着电子商务的不断兴起越来越多的人喜欢在网上了解信息所以20xx年工作重心逐渐往网络上倾斜贴吧论坛推广方案上午930至1130下午1230至1430是论坛及贴吧网友活动频繁期所以我们要锁定...

【推广】浅谈商业广告语的写作技巧

商业广告语是指企业在发布广告时为了集中表现企业理念产品或服务功能而长期重复使用的精炼口号性的文句商业广告语不同于公益广告语其目的是传播企业或产品最基本的诉求并通过反复提醒使消费者加深印象的文句广告语有自身的特点...

网络推广实习周记

第二周随着信息技术特别是网络技术的不断发展国际互联网的全球化热潮使人类社会进入了一个新的信息时代由于国际互联网具有不受时间地域限制的特性一种与传统交易形态截然不同的通过国际互联网进行交易的方式应运而生在未来若干...

网络推广方案策划书

网络推广方案策划书一网络推广的优势1迅速的推广品牌网络推广的重要任务之一就是在互联网上建立并推广企业的品牌知名企业的网下品牌可以在网上得以延伸网络品牌建设是以企业网站建设为基础通过一系列的推广措施达到顾客和公众...

SNS网络推广方法

SNS网络推广方法一个性头像泪雪前面已经写到过关于个性头像那么在这里就不再简单的为了吸引关注而是要做到一个推广的作用了有很多人喜欢将广告图片直接设置为头像虽然泪雪不是很推荐这个方法但是这也是一个普遍的方法还是有...

培训之SEO网络推广

网络推广一什么是网络推广网络推广就是利用互联网进行宣传推广活动被推广对象是某个关键词例如赌场澳门赌场澳门赌场百家乐等等最终目的就是迎合搜索引擎投其所好提升网站关键词排名从开始注册域名租用空间建立网站开始就算是介...

网络推广方案

网络推广方案一品牌营销策划1营销推广最终目标让目标消费群体了解产品了解公司品牌广告语很重要三清茶中药茶去口臭治根治本三清茶一清口病二清肝病三清肠道2锁定消费群口臭患者3推广方式1建网站做好网站优化做好seo2品...

网络营销软文推广精选的五大要素

往上推软文城专注新闻软文营销推广网络营销软文推广精选的五大要素网络营销软文推广要素一营销策略准确你必须像个船长牛逼的软文像一艘船能把顾客从A点运到B点A点是现状比如顾客知道你品牌但是不知道你有何优势B点是目标比...

房地产营销经典广告语集合--富国传媒广告有限公司-供

房地产营销的百变广告语语言的百变组合算是忽悠型智慧偏远地段远离闹市喧嚣尽享静谧人生郊区乡镇回归自然享受田园风光紧邻闹市坐拥城市繁华挨着臭水沟水岸名邸上风上水挖个水池子东方威尼斯演绎浪漫风情挖个水沟亲水豪宅水能流...

网络推广广告语(12篇)