select用来检索数据,是数据库最常用的指令,下面将介绍select的常用语法。
1、表和别名
你可以给一个表或复杂的表引用指定一个临时的名字,用于剩下的查询中引用那些派生的表,这被叫做表别名。
表别名经常用来代替很长的表明,例如:
select * from left_verylong_name_table s where s.label = 'vari';
当一个表拥有别名后,不能再用表原先的名字进行查询。例如:
select * from table1 t where table1.id = '1';
这样是错误的。
表别名主要用于简化符号,但是当把一个表连接到它自身时必须使用别名,例如:
select * from people a inner join people b where a.mother_name = b.name;
别名有自己的应用范围,例如:
SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c
是不合法的:表别名a在别名c外面是看不到的。
2、表连接
表查询时常常需要连接多个表,这时候就需要连接表的语法。下面举例子表明表连接的语法。
create table table1(id varchar,value varchar);
create table table2(id varchar,value varchar);
insert into table1 values (1,'a1');insert into table1 values (2,'a2');insert into table1 values (3,'a3');insert into table1 values (4,'a4');
insert into table2 values (1,'b1');insert into table2 values (2,'b2');insert into table2 values (3,'b3');insert into table2 values (5,'b5');
select * from table1 inner join table2 on table1.id = table2.id;
select * from table1 full join table2 on table1.id = table2.id;
select * from table1 left join table2 on table1.id = table2.id;
select * from table1 right join table2 on table1.id = table2.id;
3、组合查询
两个查询的结果可以用集合操作并、交、差进行组合。语法如下:
query1UNION [ALL]query2
query1INTERSECT [ALL]query2
query1EXCEPT [ALL]query2
UNION有效地把query2的结果附加到query1的结果上(不过我们不能保证这就是这些行实际被返回的顺序)。此外,它将删除结果中所有重复的行, 就象DISTINCT做的那样,除非你使用了UNION ALL。
INTERSECT返回那些同时存在于query1和query2的结果中的行,除非声明了INTERSECT ALL, 否则所有重复行都被消除。
EXCEPT返回所有在query1的结果中但是不在query2的结果中的行(有时侯这叫做两个查询的差)。同样的,除非声明了EXCEPT ALL,否则所有重复行都被消除。
网友评论