设为首页 加入收藏

TOP

标准SQL语言的用法(二)
2015-11-21 01:29:12 来源: 作者: 【 】 浏览:1
Tags:标准 SQL 语言 用法
,join_type表示连接类型,可分为3种:
?
交叉连接(cross join):不带on子句,返回连接表中所有数据行的笛卡儿积。
Select * from customers,orders;
?
返回两张表中记录数的乘积。若customers中有5条记录,orders表中有7条记录,则结果返回35条记录。
?
内连接(inner join):返回连接表中符合连接条件及查询条件的数据行。
显式内连接:使用inner join关键字,在on子句中设定连接条件
?
Select c.id,o.customer_id,c.name,o.id roder_id,order_number from customers c inner join orders o on c.id=o.customer_id;
?
隐式内连接:不包含inner join关键字和on关键字,在where子句中设定连接条件
?
Select c.id,o.customer_id,c.name,o.id order_id,order_number from customers c,orders o where c.id=o.customer_id;
?
外连接:分为左外连接(left outer join)、右外连接(right outer join)。与内连接不同的是,外连接不仅返回连接表中符合连接条件及查询条件的数据行,也返回左表(左外连接时)或右表(右外连接时)中仅符合查询条件但不符合连接条件的数据行。
Select c.id,o.customer_id,c.name,o.id order_id,order_number from customers c left outer join orders o on c.id=o.customer_id;
?
以上查询语句的查询结果不仅包含符合on连接条件的数据,还包含customers左表中的其他数据行。
?
子查询
子查询也叫嵌套查询,是指在select子句或者where子句中又嵌入select查询语句,下面举例说明它的用法。
?
1)查询具有3个以上订单的客户:
?
select * customers c where c<=(select count(*) from orders o where c.id=o.customer_id);
?
2)查询名为“Mike”的客户的所有订单
?
select * from orders o where o.customer_id in (select id form cutomers where name=’Mike’);
?
3)查询没有订单的客户:
?
select * from customers c where 0=(select count(*) from order o where c.id=o.customer_id);
?
或者
?
select * from customers c where not exists (select * from orders o where c.id=o.customer_id);
?
4)查询ID为1的客户的姓名、年龄及它的所有订单的总价格:
?
select name,age,(select sum(price) from orders where customer_id=1) total_price from customers where id=1;
?
total_price是别名
?
也可以通过左外连接查询来完成相同的功能:
?
select name,age,sum(price) from customers c left outer join orders o on c.id=o.customer_id where c.id=1 group by c.id;
?
如果数据库不支持子查询,可以通过连接查询来完成相同的功能。事实上,所有的子查询语句都可以改写为连接查询语句。
?
联合查询
联合查询能够合并两条查询语句的查询结果,去掉其中的重复数据行,然后返回没有重复数据行的查询结果。联合查询使用union关键字,例如:
?
select * from customers where age<25 union select * from customers where age>=24;
?
报表查询
报表查询对数据行进行分组统计,其语法格式为:
?
[select …] from … [where…] [ group by … [having… ]] [ order by … ]
?
其中group by 子句指定按照哪些字段分组,having子句设定分组查询条件。在报表查询中可以使用以下SQL聚集函数。
?
count():统计记录条数
?
min():求最小值
?
max():求最大值
?
sum():求和
?
avg():求平均值
?
用法:
?
1)按照客户分组,查询每个客户的所有订单的总价格:
?
select c.id,c.name,sum(price) from customers c left outer join orders o on c.id=o.customer_id group by c.id;
?
2)按照客户分组,查询每个客户的所有订单的总价格,并且要求订单的总价格大于100:
?
select c.id,c.name,sum(price) from customers c left outer join orders o on c.id=o.customer_id group by c.id having(sum(price)>100);
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇将DBF文件导入Sqlserver数据库 下一篇PostgreSQL快速入门:psql工具的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: