DQL:数据查询复杂的(多表)

Posted dreamrobot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DQL:数据查询复杂的(多表)相关的知识,希望对你有一定的参考价值。

附:SQL语句的分类:

*DDLData Definition Language数据定义语言

*DMLData Manipulation Language 数据操作语言

DCLData Control Language 数据控制语言

*DQLData Query Language 数据查询语言

*TPL:事务处理语言

 

连接查询(面试几率很大)

技术分享图片

基本语法形式:FROM 1 连接类型 表2 [on 连接条件][where 筛选条件]

约定:表1在连接类型的左边,称之为左表

           2在连接类型的右边,称之为右表

 

交叉连接:cross join

 

返回左表和右表的笛卡尔积(左表5条记录 ,右表6条记录 5*6=30条)

 

select * from customer,orders;

 

select * from customer cross join orders;

 

内连接:inner join

 

返回满足连接条件的所有记录。

 

隐式内连接:(不使用inner join关键字)

 

select c.*,o.* from customer c,orders o where c.id=o.customer_id;

 

显式内连接:(使用inner join关键字)

 

select * from customer c inner join orders o on c.id=o.customer_id;

技术分享图片

外连接:outer join

左外连接:left outer join=left join

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

查询所有客户,有订单的把订单也显示出来

select * from customer c left outer join orders o on c.id=o.customer_id;

技术分享图片

右外连接:right outer join=right join

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

查询所有订单,同时打印订单所属的客户

select * from customer c right outer join orders o on c.id=o.customer_id;

 技术分享图片

 

 

子查询

子查询也叫嵌套查询,是指在select子句或者where子句中又嵌入select查询语句

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

 

select id from customer where name=’陈冠希’;

select * from orders where customer_id=1;

 

子查询:

select * from orders where customer_id=(select id from customer where name=’陈冠希’);

技术分享图片

联合查询

union关键字。

联合查询能够合并两条查询语句的查询结果,去掉其中的重复数据行,然后返回没有重复数据行的查询结果

SELECT * FROM orders WHERE price>200 UNION SELECT * FROM orders WHERE customer_id=1;

以上是关于DQL:数据查询复杂的(多表)的主要内容,如果未能解决你的问题,请参考以下文章

单表查询DQL

单表查询DQL

暴风雨的礼物·MySQL04:使用DQL查询数据

MySQL数据操作DQL:多表查询2

九:SQL之DQL数据查询语言多表操作

07_MySQL DQL_多表查询_等值内连接