MySQL高阶语句(二)

目录

一、子查询

1.1 概念

1.2 语法格式

1.2.1 相同表查询

 1.2.2 多表查询

​编辑

1.2.3 NOT取反,将子查询的结果进行取反操作

 1.3 INSERT插入

1.4 update更新

1.5 delete删除

1.6 exists

1.6.1 ture举例

1.6.2 false举例

​编辑

 1.7 as别名

 二、MySQL视图

2.1 视图与表的区区别

2.2 视图与表的联系

2.3 视图操作

2.3.1 创建视图

2.3.2 查看表状态

2.3.3 查看视图

2.3.4 查看视图与源表结构

2.3.5 通过视图修改表数据

三、null值

3.1 null值与空值的区别

3.2 查询空值与非空值


一、子查询

1.1 概念

查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。

1.2 语法格式

select 字段1,字段2 from 表名1 where 字段 in (select 字段 from 表名 where 条件);

主语句:select 字段1,字段2 from 表名1 where 字段

in:将主表和子表关联/连接的语法

子语句(集合):select 字段 from 表名 where 条件

1.2.1 相同表查询

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

 1.2.2 多表查询

mysql> select name,score from ky35 where id in (select id from txy where score>80);

1.2.3 NOT取反,将子查询的结果进行取反操作

mysql>select name,score from ky35 where id not in (select id from txy where score>80);

 1.3 INSERT插入

子查询可以用在insert语句中,子查询的结果集可以通过insert语句插入到其它表中。

create table txy2 like txy;

desc txy2;

insert into txy2 select * from txy where id in (select id from txy where score>80);

1.4 update更新

 UPDATE 语句也可以使用子查询。UPDATE 内的子查询,在 set 更新内容时,可以是单独的一列,也可以是多列。

update txy2 set address='changzhou' where id in (select id from txy where id =8);

1.5 delete删除

delete也适用于子查询。

delete from txy2 where id in (select id where id=9);

1.6 exists

EXISTS 这个关键字在子查询时,主要用于判断子查询的结果集是否为空。如果不为空, 则返回 TRUE;反之,则返回 FALSE。

1.6.1 ture举例

select count(*) from txy2 where exists(select id from txy2 where score=100);

1.6.2 false举例

select count(*) from txy2 where exists(select id from txy2 where score=95);

 1.7 as别名

将结果集做为一张表进行查询的时候,我们也需要用到别名,示例:
需求:从txy2表中的id和name字段的内容做为"内容" 输出id的部分
mysql> select id from (select id,name from txy2);
ERROR 1248 (42000): Every derived table must have its own alias


#此时会报错,原因为:
select * from 表名 此为标准格式,而以上的查询语句,"表名"的位置其实是一个完整结果集,mysql并不能直接识别,而此时给与结果集设置一个别名,以”select a.id from a“的方式查询将此结果集视为一张"表",就可以正常查询数据了,如下:
select a.id from (select id,name from txy2) a;
相当于
select txy2.id,name from txy2; //select 表.字段,字段 from 表;

 

 二、MySQL视图

视图是一张虚拟的表,这张虚拟表中不包含真实数据,只是做了真实数据的映射。

功能:

简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性

本质而言,视图是一种select(结果集的呈现)

注:视图适合于多表浏览时使用,不适合增、删、改。

2.1 视图与表的区区别

视图是已经编译好的sql语句,而表不是

视图没有实际的物理记录,而表有

表占用物理空间而视图不占用物理空间

视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改

视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。

从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构

表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表

视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)

2.2 视图与表的联系

1.视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。

2.一个视图可以对应一个基本表,也可以对应多个基本表。

3.视图是基本表的抽象和在逻辑意义上建立的新关系。

2.3 视图操作

2.3.1 创建视图

create view v_txy as select * from txy where score <=70;

2.3.2 查看表状态

show table status\G

2.3.3 查看视图

select * from v_txy;

2.3.4 查看视图与源表结构

desc v_txy;

2.3.5 通过视图修改表数据

当数据发生变化时,若数据与之前创建视图表时的关联条件不一致时,视图表的数据将会发生改变

三、null值

在 SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失 的值,也就是在表中该字段是没有值的。如果在创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空。在向表内插入记录或者更新记录时,如果该字段没有 NOT NULL 并且没有值,这时候新记录的该字段将被保存为 NULL。需要注意 的是,NULL 值与数字 0 或者空白(spaces)的字段是不同的,值为 NULL 的字段是没有 值的。在 SQL 语句中,使用 IS NULL 可以判断表内的某个字段是不是 NULL 值,相反的用 IS NOT NULL 可以判断不是 NULL 值。

3.1 null值与空值的区别

空值长度为0,不占空间,NULL值的长度为null,占用空间

is null无法判断空值

空值使用"=“或者”<>"来处理(!=)

count()计算时,NULL会忽略,空值会加入计算

注:NULL是占用内存空间的,而空值则不占用内存空间

说明null值不计入统计

3.2 查询空值与非空值

select * from txy where card is null;
select * from txy where card is not null;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值