子查询,内查询 嵌套查询

子查询语句

一个查询语句中还有一个查询语句

Select,,,(select)

括号里的查询语句优先于查询语句执行,然后再把子查询的结果作为条件返回给主查询条件进行过滤

格式:

#In

Select 列名from 表名 where列名A In (select 列名A from 表名)

##Not In (取反)使用not in 子查询需要跟上where语句 否则都没

Select 列名from 表名 where列名A not in (select 列名A from 表名 where 列名)

##子查询的语句返回的结果只能是一列 where 列名和子查询列名一致

select name,score from info where id in (select id from info where score > 80);

select id from info where id not in (select id from ky32 where score > 70);

子查询语句也可以用在insert update delete

插入数据 要求按照地址,包含南京插入到test

Insert into test select * from info where id in (select id from info where address like ‘%南京%’ )

修改Info表score=100,not in 子查询的条件是id >1

Update info set score=100 where id not in (select id from ky32 where id > 1);

删除分数大于80的记录

Delete from info where id in (select id where score>80 )

Exists:

关键字在子查询时,主要用于判断子查询的结果是否为空,不为空,返回为ture,反之,则返回 FALSE

#输入子查询语句前

select count(*) from info where exists(select id from info where score>80);

#将结果集做为一张表进行查询的时候,我们也需要用到别

使用表别名来区分外部查询和子查询中的表。info 表被表示为别名 a,并且这个别名被用于引用外部查询中的列

SELECT * FROM info a WHERE EXISTS (SELECT id FROM info WHERE score > 80 AND info.id = a.id);

视图:MySQL当中的视图 view

视图在MySQL当中是一个虚拟表,基于查询结果得出的一个表

在工作中查询的表未必是真表,有可能是基于查询结果的一个虚拟表

可以简化复杂的查询语句,还能隐藏表的细节,提供安全的数据访问,

创建视图表,可以是一张表的结果集,也可以是多个表的结果集,

源表的数据发生变化,视图表的数据会同步更新

视图适用于安全性要求比较高的场景

Update info set score=90 where name = ‘胡晋’;

create view test2 as select * from info where score >= 80;

视图表和真表的区别:

1存储方式不一样,真实的表是存储实际数据写在磁盘中的,视图不存储任何数据的,是个结果集

2表可以增删改查,视图表一般只能用于查展示数据

3 真实表真实占用空间,视图表不占用空间

#查看表状态

show table status;

#查看视图

mysql> select * from test2

#查看视图与源表结构

mysql> desc test2;

#修改原表数据,视图同步生效

mysql> update info set score='60' where name='liuyi';

#查看视图

mysql> select * from v_info;

Null 值和空值:

null就是真空

空值也是值,可以被统计的

select * from info where score is null;

内连接 左连接 右连接查询

On 跟匹配条件

内连接:是把两张表或者多张表,同时符合特定条件的数据记录组合。一个或者多个列相同值才会有查询结果。

内连接语句

select a.id,a.name from test10 a inner join info b on a.id=b.id;

子查询,内查询 嵌套查询_第1张图片

左连接

左外连接,在left Join 关键字来表示,在左连接当中,左侧表示基础表,

接收左边的所有行,然后和右表(参考表)记录进行匹配,匹配坐标中的所有行,以及右表中符合条件的行

##左连接语句

Select * from test10 a left join info b on a.nmae=b.name;

右连接也被称为右外连接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 关键字来表示。

右连接跟左连接正好相反,它是以右表为基础表,用于接收右表中的所有行,并用这些记录与左表中的行进行匹配

##右连接语句

mysql> select * from test1 a right join test2 b on a.a_name=b.b_name;

Select * from test10 a right join info b on a.id=b.id

你可能感兴趣的:(数据库,sql,java)