目录
一、通配符
通配符主要用于替换字符串的部分字符,通过部分字符去匹配相关的结果查询出来。通常与like一起使用。
通配符通常有两个:
%:表示零个或者多个字符
_:表示单个字符
1.1 查询名字开头
select id,name from ceshi where name like 'z%';
查询出名字以z开头的数据
1.2 查询数据中z和i并且中间任意单字符的数据
1.3查询数据中带有z的数据
select id,name from ceshi where name like '%z%';
1.4 查询zh后面三个单字符的数据
select id,name from ceshi where name like 'zh___';
二、子查询
子查询也被称为内查询或者嵌套查询,子查询是先于主查询语句被执行的然后在执行外层条件去查询。
2.1 相同表
select id,name from 表名 where id in (select id from 表名 where 条件);
2.2 不同表的查询
2.3 子查询的多层嵌套
2.3.1 子查询的select
子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE 中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套。
①in 是用来判断某个值是否在判断的结果中
②查询大于120的数据
select id,name from ceshi where id in (select id from ceshi where num >120);
2.3.2 子查询并用insert语句
insert into 需要插入的表名 select * from 被查询的表名 where id in (select id from 被查询的表名);
2.3.3 子查询的update
update test set name='hua' where id in (select id from ceshi where id=2);
2.3.4 子查询的delete
delete from test where id in (select id where num>120);
2.4 NOT IN
在in前面添加not,其作用与in相反,表示否定
例如:
delete from test where id not in (select id where num>120);
删除num不是大于120的记录
2.5 子查询exists语句
exists主要用于判断子查询的结果是否为空。如果不为空,则返回true,反之则返回false
三、MySQL视图
3.1 视图的概念
数据库中的虚拟表,这张虚拟表中不包含真实数据,只是做了真实数据的映射
视图可以理解为镜花水月/倒影,动态保存结果集(数据)
功能:
简化查询结果集、灵活查询、可以针对不同用户呈现不同结果集、相对有更高的安全性
本质而言视图是一种 select (结果集的呈现)
查询方便:视图不保存真实数据,视图本质类似select,同时可以多表查询更为迅速
安全性:视图无法显示完整的约束
注:视图适合于多表连接浏览时使用!不适合增、删、改;而存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率
3.2 视图和表的区别
①视图是已经编译好的sql语句;而表不是
②视图没有实际的物理记录;而表有(show table status\G)
③表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
④视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
⑤表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
⑥视图的建立和删除只影响视图本身,不影响对应的基本表。(但是更新视图数据,是会影响到基本表的)
3.3 视图的命令语句
3.3.1 创建一个视图
create view 视图的名字 as select * from 表名;
创建一个ceshi表的num大于120的视图
create view ceshi_view as select * from ceshi where num>120;
show table status\G
3.3.2 删除视图
drop view 名字;
3.3.3 多表创建
首先创建一个表test1,然后创建一个视图输出id,name,num,address
create view shitu(id,name,num,address) as select test.id,test.name,test.num,test1.address from test,test1 where test.name=test1.name;
创建一个视图字段为id,name,num,address(展现的条件是查询到test字段的id,name,num和test1的address的数据并且条件是test的name=test1的name)
3.3.4 修改数据
四、NULL的值
在SQL语句中通常使用null去表示缺少的值,当我们在创建表的时候可以使用NOT NULL关键字去表示不能为空。null值和0或者空白字段是不一样的,null表示的是没有值。
4.1 null 不等于 空值
空值的字段长度为0不占空间,而null值长度为null,占用空间
count统计时,null会被忽略
如果我们在null上插入数据
空值的统计,也是会被统计进去的
4.2 查询null值
select * from 表名 where 字段 is null;
select * from 表名 where 字段 is not null;
五、连接查询
MySQL的连接查询,通常都是将两个或者多个表结合起来进行查看。
通常使用较多的查询就是:内连接、左连接、右连接
首先,插入数据
5.1 内连接
MySQL中的内连接就是将两张或多张表的内容组合起来
通常用inner join 来连接多张表,并用on 设置连接条件
select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段
可以对比上面两张表里的所有数据发现,显示出的是两张表id相同的数字id=2,然后查询出id=2在test表中的id,name显示出来。
5.2 左连接
左连接就是指以左边表为基础表,接收了左边表中的所有数据,并且再去匹配右边表的数据把符合条件的数据结合起来最终显示出来。
select * from 左表 left join 右表 on 条件;
当右表显示记录不足的地方就用null表示
5.3 右连接
右连接和左连接正好相反,他是以右表为基础的,去记录符合条件的左表的内容并且将他们之间串联起来。right join去连接
总结
1.通配符:通常用的是%和_
2.子查询:相同表、不同表、嵌套
3.MySQL的视图
4.null值得概念
5.内连接、左连接、右连接得查询