您的位置:首页 > 数据库 > MySQL

MySQL中的多表查询

2016-05-29 10:46 441 查看

MySQL中的多表查询

1、连接查询

a、交叉连接:(cross join)

返回多表的记录的笛卡尔积。(第一张表:5  第二章表:7,返回5*7=35)

 

select * from CUSTOMER,ORDERS;

select c.ID,c.NAME,o.ORDER_NUMBER,o.price from CUSTOMER c,ORDERS o;

b、内连接(inner join)

隐式内连接:select * from CUSTOMERc,ORDERS o where c.ID=o.CUSTOMER_id;

显式内连接:

select * from CUSTOMER c inner join ORDERS o on c.Id=o.CUSTOMER_id;

c、外连接(outer join)

查看所有客户信息,同时有订单的显示订单的详细信息。

左外:返回满足连接条件的记录,同时返回左表中剩余的其他记录。

select * from CUSTOMER c left outer join ORDERS o onc.ID=o.CUSTOMER_ID;

 

查看所有订单信息,同时返回下单的客户信息

右外:返回满足连接条件的记录,同时返回右表中剩余的其他记录。

select * from CUSTOMER c right outer join ORDERS o onc.ID=o.CUSTOMER_ID;

 

2、子查询

又称之为嵌套查询。查询中有查询。

执行顺序:先执行子查询(内查询),再执行外查询。

子查询:必须放在小括号之内。

 

查询陈冠希的所有订单信息。

形式一:多条查询语句

select ID fromCUSTOMER where NAME='陈冠希';

select * fromORDERS where CUSTOMER_ID=1;

形式二:subselect(子查询)

select * fromORDERS where CUSTOMER_ID=(select ID from CUSTOMER where NAME='陈冠希');

 

查询订单价格大于100的有哪些客户

select * fromCUSTOMER where ID in (select CUSTOMER_ID from ORDERS where PRICE>100);

 

3、MySQL常用的函数

SUM():求和

COUNT():计数

AVG():求平均

MAX():求最大

MIN():求最小

统计一个班级共有多少学生?

select count(*)from STUDENT;

统计数学成绩大于90的学生有多少个?

select count(*)from STUDENT where MATH>=90;

统计总分大于250的人数有多少?where可以使用表达式

select count(*)from STUDENT where (ENGLISH+CHINESE+MATH)>250;

统计一个班级数学总成绩?

select sum(MATH)from STUDENT;

统计一个班级语文、英语、数学各科的总成绩

selectsum(CHINESE),sum(ENGLISH),sum(MATH) from STUDENT;

统计一个班级语文、英语、数学的成绩总和

selectsum(ENGLISH+CHINESE+MATH) from STUDENT;

统计一个班级语文成绩平均分

selectsum(CHINESE)/count(*) from STUDENT;

selectavg(CHINESE) from STUDENT;  #如果字段为null,不参与平均的计算。

 

4、分组(报表)查询:group by

对订单表中商品归类后,显示每一类商品的总价

select PRODUCT,sum(PRICE) from PRODUCTSgroup by PRODUCT;

查询购买了几类商品,并且每类总价大于100的商品

select PRODUCT,sum(PRICE) from PRODUCTSgroup by PRODUCT having sum(PRICE)>100;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 多表查询