SQL查询语句之select详解和视图的概念
select语句
学习数据库最核心的功能就是掌握增、删、查、改等命令的使用,其中查询语句最为复杂也最为重要。本文将重点介绍查询语句相关命令的使用。
查询语句类型分为三种:简单查询、多表查询、子查询、联合查询(union)
1、简单查询
SELECT [DISTINCT] * FROM tb_name [WHERE字句|ORGER BY字句|LIMIT字句|GROUP BY字句];
其中[DISTINC]表示重复的字段值只显示一次
*:表示该表中所有的字段,这是一个通配符,当然这里也可以指定想要显示的字段
FROM字句后面可以接多个表以及其他select语句。
FROM语句后面还可以创建表别名,例如
FROM student as s
WHERE qualification:表示匹配的条件或者过滤条件
WHERE子句后面可以接如下命令:
布尔关系表达式,表达式操作符有:>=、<=、>、<、=、!=或<>
逻辑关系表达式,表达式操作符有:AND(&&)、OR(||)、NOT(!)
BETWEEN ... AND ...:表示在某个范围之间,包括边界值
LIKE ‘string’:模糊匹配,这里可以使用通配符"%"和"_"
%:表示任意长度的任意字符
_:表示任意单个字符
REGEXP,RLIKE ‘pattern‘:表示可以使用正则表达式来匹配字段
IN :表示某个数据是否在某个集合中
IS NULL:表示某个字段的值是否为空
IS NOT NULL:表示某个字段的值是否不为空
GROUP BY子句
GROUP BY col_name
group by先对指定的列分组,在对分组的数据使用聚合函数;
指定的列被分组查询完后就返回一个值,因此group by语句一般和聚合函数一起使用
常用的聚合函数
sum():求某个字段的总和
max():求某个字段中的最大值
min():求某个字段中的最小值
avg():求该字段的平均值
count():求该字段的总个数或总行数
HAVING子句
HAVING用法和WHERE大致相同,唯一的区别是WHERE用于第一次查询;HAVING语句用于二次查询。
ORDER子句
ORDER BY col_name [ASC|DESC]
col_name表示以哪个字段进行排序
[ASC|DESC]:ASC表示以升序的方式来进行排序,DESC表示以降序的方式来排序。默认以升序的方式来进行排序。
LIMIT子句
LIMIT [offset,] count
LIMIT在语句的最后,起到限制条目的作用
offset:表示偏移量。即忽略前面的条目,从offset+1开始算起
count:表示取出或显示的条目
如果offset没写,则相当于LIMIT 0,count
sql语句的执行顺序如下:
start→FROM语句→WHERE子句→GROUP BY子句→HAVING子句→ORDER BY子句→SELECT语句→LIMIT子句→end
如果有上述中的某些语句才执行,没有的话就不需要执行。
2、多表查询
多表查询就是在多张表中查询,并将查询的结果显示出来。在由于需要在多张表中查询,因此,需要将多张表连接起来。这里的连接方式有如下几种:
交叉连接:就是使用笛卡尔乘积方式将多张表连接起来。一般配合WHERE子句一起使用
自然连接:将相同字段且取值相同的行连接起来
外连接:包括左外连接和右外连接
左外连接:以左表为准,去右表找匹配数据,找不到匹配,用null补齐
tb1_name1 LEFT JOIN tb2_name ON...(ON后面为匹配条件)
右外连接:以右表为准,去左表找匹配数据,找不到匹配,用null补齐
tb1_name1 RIGHT JOIN tb2_name ON...(ON后面为匹配条件)
自连接:把一张表通过设定别名的方式生产2个别名表,通过某种条件连接起来。
3、子查询
在比较操作中如果使用子查询,该子查询只能返回一个单值。
如果子查询返回的结果有多个值或者是一个集合,可以使用IN关键字来代替操作符
子查询分为如下三种:
where型子查询:把内层查询结果作为外层查询的比较条件
from型子查询:把内层的查询结果当做临时表,供外层sql再次查询
exists子查询:把外层的查询结果拿到内层,看内层的查询是否成立
4、联合(union)查询
将两次查询和多次查询的结果合并在一起,因此,这两次查询显示的列数要相同,最好数据类型也相同。
视图view
视图是由查询结果形成的一张虚拟表。它是基于表的查询结果。因此,当表的某些字段或属性改变时,视图也可能会发生改变。
视图的创建语法
CREATE VIEW 视图名 AS SELECT语句
删除视图的语法
DROP VIEW 视图名
视图的作用
1.可以简化查询
2.可以进行权限控制
把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据
3.大数据分表时可以用到
视图的改变
1.视图增删也会改变表的
2.视图并不是总能增删改的
3、当视图的数据与表的数据一一对应,可以修改
4、对于视图insert还应注意,视图必须包含表中没有默认值的列
本文出自 “linux学习之路” 博客,请务必保留此出处http://xslwahaha.blog.51cto.com/4738972/1576786
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。