SQL了解一下?

之前也写过一些零碎的知识点,这次再补充一点,从最基础的开始。

一  关于关系型数据库

表有列和行,列:字段。代表了保存在表中的数据项目,它会给与一些约束,比如定义为数字的列只能输入数字。

行:(水平方向)称之为记录,它相当于一条数据。

二 Sql语句分类

1  DDL:如create ,drop,alter(修改数据库和表等对象的结构)

2 DML:select ,insert,update,delete 

3 DCL(用来确认或取消对数据库中数据进行的变更):commit 确认变更,rollback 取消变更,grant 授予用户操作权限,revoke 取消用户的操作权限

平时最常使用的是DML语句。

三   关于group by分组

使用group时可以根据一些属性 '列名'进行分组,通过聚合函数和group子句可以根据如'性别''种类''登记日期'将表分割后再进行聚合。

语法:

下面根据商品种类来统计一下数据行数(等于数量)

select  good_type,count(*)

from goods

group by good_type;

PS:根据不同类别,查询出的数据条数也不同,有的是1,有的时3条,有的是2条。结果中的一行数据代表一组,并且不能在where子句中使用group by,可以使用having.

HAVING可以理解为'通过制指定条件来选取特定组'

比如上面的sql语句执行完会有很多组,但是你想要特别的组,而不是全部的分组,你如何对组进行筛选和限制呢?having能够指定组的条件,而where指定行(记录)。

ps : having子句写在group by子句后面,这是一个因果关系嘛

在上面写的sql基础上,指定'包含数据行数为两行' --count是查询出显示结果的其中一列

 

select good_type ,count(*)

from goods

group by good_type

having count(*) = 2 ;

where 子句=指定行所对应的条件

having 子句=指定组所对应的条件

四         事务

事务是:在同一个处理单元中执行的一系列更新处理的集合

事务的语法:

 

注:数据库事务开始语句不同,有的比如

sql server : begin transaction, mysql:start   transaction 中间再写几条sql语句,结尾加个commit或rollback就行了,具体看使用需求。

事务都遵循ACID特性:原子性,一致性,持久性,隔离性。

五          子查询

子查询可以理解为'一次性的视图',子查询在sql语句执行完时就会消失,子查询需要命名。

标量子查询由于返回单一的数据(返回某个表中某一行某一列的结果)可以与比较运算符搭配使用,如= <>

标量子查询可以写在where 子句中,使用单一值位置都可以使用,select子句,group by子句,having子句, order by子句等

六    视图

视图和表的主要区别是什么呢?

区别主要有一个:' 是否保存了实际的数据  '

一般表保存的数据存在硬盘中,通过select语句查询数据时,实际上从存储设备(通常是硬盘中读取数据)

但是视图,他不会将数据保存在存储设备中,也不会将数据保存在其他的任何地方。

视图,实际上保存的是select语句,当我们从视图中读取数据时,视图会在内部执行该 Select语句并创建出一张临时表。

视图的优点:

1  由于视图无需保存数据(只存select语句),因此可以节省存储设备的容量。

2  可以将频繁使用的select语句保存成视图,这样就不用每次重新书写了。(而且视图中数据会随着原表的更新而更新)

表中存储的是实际数据,而视图保存的是,从表中取出数据所使用的Select语句

视图就是select语句,‘参照视图’就是‘执行select语句的意思'

语法:

注意:1 注意应该避免在视图上的基础上创建视图。

            2  定义视图不要用group by子句

            3  更新视图需要满足特定环境才可以

   

猜你喜欢

转载自blog.csdn.net/Kurapika47/article/details/84790598
今日推荐