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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。