MySQL高级查询

 (查询中表名=关键字时可以在外面加''单引号)

一、内连接

定义:内连接是返回连接表中符合连接条件记录的连接查询

1.显式内连接(结构较清晰)

SELECT name,class

FROM student AS s

INNER JOIN studentClass AS c

ON s.id = c.id

翻译:

SELECT 所查列名1(字段),所查列名2(字段)

FROM 表1(主表) AS 表1的小名(别名)

INNER JOIN 表2(副表) AS 表2的小名(别名)

ON 表1公有列=表2公有列(条件)

2.隐式内连接(逻辑较清晰)

SELECT name, class

FROM student AS s, studentClass AS c

WHERE s.id = c.id

翻译:

SELECT 字段1,字段2

FROM 表一 AS 小名,表二 AS 小名

WHERE 表一公有字段1=表二公有字段2

二、外连接

定义:外连接是以一张表为基表,返回基表中所有记录及连接表中符合条件的记录的连续查询

1.左连接

定义:左外连接是以左表为基表,返回左表中所有记录及连接表中符合条件的记录的外连接

SELECT name, class

FROM student AS s

LEFT JOIN studentClass AS c

ON s.id = c.id

翻译:

SELECT 字段1,字段二

FROM 左表 AS 小名

LEFT JOIN 右表 AS 小名

ON 左表公有字段1=右表公有字段2

2.右连接

定义:右外连接是以右表为基表,返回右表中所有记录及连接表中符合条件的记录的外连接

SELECT name, class

FROM student AS s

RIGHT JOIN studentClass AS c

ON s.id = c.id

翻译:

SELECT 字段1,字段二

FROM 右表 AS 小名

RIGHT JOIN 左表 AS 小名

ON 左表公有字段1=右表公有字段2

内外连接区别:

内连接=交集(没有空数据,不一定包含完整的表)

外连接=主表+交集(有一基表,不满足有空数据,基表还是完整的)

三、子查询

定义:子查询是在一个查询的内部包括另一个查询的查询方式

例:查询所有比张三成绩高的同学

SELECT * FROM stu

WHERE score >(SELECT score FROM stu WHERE name='张三')

翻译:

SELECT * FROM 表

WHERE 字段 >

(SELECT 字段 FROM 表 WHERE 字段2='条件')

关键字用法例子
distinct唯一的值(重复的不计)select DISTINCT 字段 from 表
group by ...  having...对查询到的结果集进行分组

select city group by city having count(memberId)>=3

查询城市成员总数大于等于3的城市,同时按城市名分组

inner join多表查询内连接处例子
left join多表查询外连接处例子
as使用别名
between...and...在..和..之间
in (..,..,..,..)在()中的数据之间in (85,86,88)
or或者class='95031' or ssex='女'
order by...desc

ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用 DESC关键字。

select *from score order by Cno,Degree desc

以Cno升序、Degree降序查询Score表的所有记录。

count(*)聚合函数-求列数

select count(*) from student where class='2184'

max()聚合函数-求最大值select MAX(Degree) as maxfen,MIN(Degree) as minfen from Score where Cno='3-105'
min()聚合函数-求最小值
sum()聚合函数-求和
avg()聚合函数-求平均值
any

任意一个

<\<=any相当于:父查询中的结果集小于子查询中任意一个值(小于子查询结果集中的最大值),则为真;

>\>=any相当于:父查询中的结果集大于子查询中任意一个值(大于子查询结果集中的最小值),则为真;

=any相当于in:父查询条件表达式存在于子查询的结果集中里

无<>/!=any

T1(2,3)
T2(1,2,3,4)

测试

select * from T2
where n > ANY(select n from T1)
结果显示:
3,4

all

所有

<\<=all相当于:父查询中的结果集小于子查询中每一个值(小于子查询结果集中的最小值),则为真;

>\>=all相当于: 父查询中的结果集大于子查询中每一个值(大于子查询结果集中的最大值),则为真;

<>/!=all相当于not in

=all相当于in

T1(2,3)
T2(1,2,3,4)

测试

select * from T2
where n > ALL(select n from T1)
结果显示:
4

some

some=any

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值