SQL基础(数据查询,聚合,分组,数据更新,视图,子查询,谓词)

SQL语句及其种类

SQL用关键子,表名,列名等组合而成的一条语句来描述操作的内容。关键字是指那些含义或使用方法已事先定义好的英语单词,存在包含“对表进行查询”或者“参考这个表”等各种意义的关键字。

SQL语句客分为以下三类:

DDL

​ DDL(Data Definition Language, 数据定义语言)用来创建或删除存储数据用的数据库以及数据库中的表对象。

CREATE:创建数据库和表等对象

DORP: 删除数据库和表等对象

ALTER:修改数据库和表等对象的结构。

DML

DML(Data Manipulation Language,数据操纵语言)用来查询或者变更表中的记录。

SELECT: 查询表中的数据。

INSERT: 向表中插入新数据。

PUDATE: 更新表中的数据。

DELETE: 删除表中的数据。

DCL

DLC(Data Control Language,数据控制语言)用来确认或者取消对数据库中的数据进行的变更。对数据库用户是否有权限操作数据库中的对象进行设定。

COMMINT: 确定对数据库中的数据进行变更

ROLLBACK: 取消对数据库中的数据进行的变更。

GRANT: 赋予用户操作权限。

REVOKE: 取消用户的操作权限。

SELECT语句基础

列的查询

从表中选取数据是需要使用 SELECT语句,也就是只从表中选出(SELECT)必要数据的意思。通过SELECT语句查询病选出必要数据的过程称为 匹配查询

SELECT 语句是SQL语句中使用最多的最基本的SQL语句。

SELECT <列名>,...  FROM <表名>,...;

该SELECT语句包含了SELECT和FROM两个子句。子句是SQL语句的组成要素,是以SELECT或FROM等作为起始的短句。

SELECT子句中列出了希望从表中查询出的列的名称,而FROM子句则指定了选取出数据的表的名称。

查询出表中所有的列

想要查询出全部列是,可以使用代表所有列的*

SLEECT * FROM <表名>

如果使用*的话,就无法设定列的显示顺序。

为列设定别名

SQL语句可以使用AS关键字为列设定别名。

SELECT <列名> AS <别名>... FROM 表名	

别名可以用汉语设定,设定汉语别名是需要使用双引号("").

常数的查询

SELECT 子句中不仅可以书写列名,还可以书写常数。

SELECT '表格中的数据' AS ‘表头’ FROM 表名;

这样就可以显示常数。

结果中删除重复行

要删除重复行是,可以通过在SELECT子句中使用 DISTINCT来实现

SELECT DISTINCT 行名 FROM 表名	;

在使用DISTINC时,NULL也被视为一类数据。NULL存在于多行中时,也会被合并成一条NULL数据。

根据WHERE语句来选择记录

SELECT语句通过WHERE子句来指定查询数据的条件。在WHERE子句中可以指定“某一列的值和这个字符串相等”或者"某一列的值大于这个数字"等条件。

SELECT <列名>,... FORM <表名> WHERE <条件表达式>;

WHERE子句要紧跟在FROM子句之后。

聚合查询

聚合函数

通过SQL对数据进行某种操作或计算式需要使用函数。

COUNT : 计算表中的记录数(行数)

SUM: 计算表中数值列中数据的合计值。

AVG: 计算表中数值列中数据的平均值。

MAX:求出表中任意列中数据的最大值

MIN: 求助表中任意列中数的最小值。

用于汇总的函数称为聚合函数或者聚集函数。所谓聚合,就是讲多行汇总为一行。所有的聚合函数都是输入多行输出一行。

计算表中数据的行数

使用COUNT函数是,输入表的列,就能够输出数据行数。

SELECT COUNT(*) FROM 表名;

COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT(<列名>)会得到NULL之外的数据行数。

计算合计制

使用SUM函数,会计算出所求列的合计值。

SELECT SUM(<列名>) FROM 表名;

计算平均值

使用AVG函数,其语法和SUM函数完全相同。

SELECT AVG(<列名>) FROM 表名;	

计算最大值和最小值

SELECT MAX(<列名>),MIN(<列名>) FORM 表名;	

使用聚合函数删除重复值

SELCT COUNT(DISTINCT <列名>) FROM 表名;	

分组

GROUP BY 子句

SELECT <列名1>,<列名2>,<列名3>,... FROM <表名>  GROUP BY <列名1>,<列名2>,<列名3>,...;

未使用GROUP BY 子句是,是将表中的所有数据作为一组来对待的。而使用GROUP BY子句是,会将表中的数据分为多个组进行处理。

GROUP BY 子句就像切蛋糕一样讲表进行分组。在GROUP BY 子句中指定的列称为聚合建或者分组列。

GROUP BY子句的书写位置一定要写FROM语句之后(如果有WHERE子句的话,需要写在WHERE子句之后)。

聚合键中包含NULL时,在结果中会以“不确定”(空行的形式表示。)

GROUP BY 和WHERE 并用时SELECT语句执行顺序。

GROUP BY -> WHERE ->GROUP BY-> SELECT

在使用GROUP BY 子句是,SELELCT 子句中不能出现聚合键之外的列名。

在GROUP BY子句中不能使用SELECT 子句中定义的别名。

只有SELECT子句和HAVING子句(以及ORDER BY 子句)中能够使用聚合函数。

HAVING 子句

对集合指定条件就需要使用其他子句了,此时便可以用HAVING子句。

SELECT <列名1>,<列名2>,<列名3>,.... FROM <表名> GROUP BY <列名1>,<列名2>,<列名3>,... HAVING <分组结果对应的条件>;

HAVING 子句必须写在GROUP BY 子句之后。

构成要素

HAVING子句中能使用的3种要素如下:

  • 常数
  • 聚合函数
  • GROUP BY 子句中指定的列名(即聚合键)

聚合键所对应的条件不应该书写在HAVING子句中,而应该书写在WHERE子句中。

排序

通常从表中抽取数据是,如果没有特别指定顺序,最终排列顺序便无从得值。即使是同一条SELELCT语句,每次执行时排列顺序很可能发生改变。

可以在SELECT语句末尾添加ORDER BY 子句来明确指定排序顺序。

SELECT <列名1>,<列名2>,<列名3>,... FROM <表名> ORDER BY <排序基准列1>,...;

指定升序或降序, 在列名后面使用DESC 就是降序排列。

数据更新

数据插入

语法

INSERT INTO <表名>(1,列2,列3,...) VALUES(1,值2,值3...);

表名后面的列清单和values子句中的值清单的列数必须保持一致,列数不一致时,无法插入数据。

数据删除

删除数据的方法大体上可以分为两种:

  • DROP TABLE 讲表完全删除
  • DELETE 会留下表,从而删除表中的全部数据。
DELETE FROM <表名>;

想要删除部分数据行是,可以像SELECT语句那样使用WHERE子句指定删除条件。这种指定了删除对象的DELETE语句称为搜索型DELETE。

DELETE FROM <表名> WHERE <条件>;

数据更新

UPDATE <表名> SET <列名>=<表达式>;

搜索型UPDATE语句。

UPDATE <表名> SET <列名>=<表达式> WHERE <条件>;

NULL清空

使用UPDATE将列更新为NULL.将表达式写作null.

事务

事务是对表中数据进行更新的单位。事务就是需要在同一个处理单元中执行的一系列更新处理的集合。

创建事务

 事务开始语句;
      DML语句;
      DML语句;
 事务结束语句(COMMITROLLBACK)

在标准SQL中并没有定义事务的开始语句,而是由各个DBMS自己实现的。

  • SQL Server ,PostgreSQL
    • BEGIN TANSACETION
  • MySQL
    • START TANSACTION

COMMIT 提交事务

COMMIT是提交事务包含的全部更新处理的结束指令,相当于文件处理中覆盖保存。一旦提交,就无法恢复到事务开始前的状态。

ROLLBACK 取消处理

ROLLBACK是取消事务包含的全部更新处理的结束指令,相当于文件处理中放弃保存,一旦回滚,数据库就会恢复到事务开始前的状态。

ACID特性

原子性(Atomicity)

原子性是指在事务结束时,其中所包含的更新处理要么全部执行,要么全不执行。

一致性(Consistency)

一致性是指事务中包含的处理要满足数据库前设置的约束,如主键约束或者NOT NULL约束等。对于事务来说,这些不合法的SQL会被回滚。

隔离性(Isolation)

隔离性指的是保证不同事务之间互不干扰的特性。该特性保证了事务之间不会互相嵌套。在某个事务中进行的更改 ,在该事务结束之前,对其他事务而言是不可见得。

持久性(Durability)

持久性指的是事务(不管是提交还是回滚)结束后,DBMS能够保证该事件点的数据状态会被保存的特性。即使由于系统故障导致数据丢失,数据库也一定能通过某种手段进行恢复。

视图

视图,“从SQL的角度来看视图就是一张表”视图和表的区别“是否保存了实际的数据。

通常,在创建表示,会通过INSERT语句讲数据保存到数据库中,而数据库中的数据实际上会被保存到计算机的存储设备中。使用SELECT语句查询数据是,实际上就是从存储设备中读取数据。

但是使用视图是并不会讲数据保存到存储设备中,而且也不会将数据保存到其他任何地方。

从视图读取数据是,视图会在内部执行该SELECT语句并创建出一张临时表。

视图优点

  • 由于视图无需保存数据,可以节省存储设备的容量。
  • 将频繁使用SELECT语句保存成视图

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

应该将经常使用SELECT语句做成视图。

创建视图

创建视图需要使用CREATE VIEW语句。

CARETE VIEW 视图名称(<视图列名1>,<视图列名2>,...)
AS 
<SELECT语句>;

SELECT 语句需要书写在AS关键字之后。SELECT语句中排列顺序和视图中列的排列顺序相同。SELECT语句中的第1列就是视图中的第1列,SELECT语句中的第2列就是视图中的第2列。以此类推。视图的列名在视图名称之后的列表中定义。

使用视图

SELECT <视图列名>,<视图列名>,... FROM 视图名称;

应该避免在视图的基础上创建视图。

视图的限制

  • 定义视图时不能使用ORDER BY子句

  • 对视图进行更新(以下情况视图可被更新)

    • SELECT子句中未使用DISTINC
    • FROM子句中只有一张表
    • 未使用GROUP BY
    • 未使用HAVING子句
  • 原表更新,视图中的数据也更新。

视图和表需要同时进行更新,因此通过汇总得到的视图无法进行更新。

删除视图

DROP VIEW 视图名称(<视图列名1>,<视图列名2>,...)

子查询

子查询就是将用于定义视图的SELECT语句直接用于FROM子句当中。

SELECT <列1>,<列2>,... FROM (
	SELECT <列3>,<列4>,... FROM <表1>,<表2>,...
)AS 子查询别名;

子查询首先执行的是FROM子句中的SELECT语句,然后在执行外层的SELECT语句。

子查询作为内层查询会首先执行。

标量子查询

标量子查询就是返回单一值得子查询。

标量子查询的可以在能够使用常数或者列名的地方。

关联子查询

**在子查询中添加WHERE子句的条件。**就是关联子查询。为了解决标量子查询返回返单一值时出错。将两张表连接起来,就叫关联子查询。

在细分的组内进行比较是需要使用关联子查询

结合条件一定要写在子查询中。

谓词

谓词是满足特定条件的函数,该条件就是返回值是真值。

LIKE谓词

字符串的部分一致查询。

前方一致性

SELECT * FROM <表名> WHERE <列名> LIKE ‘查找的字符串%’;

中间一致性

SELECT * FROM <表名> WHERE <列名> LIKE '%查找的字符串%'

后方一致性

SELECT * FROM <表名> WHERE <列名> LIKE '%查找的字符串'

BETWEEN谓词

范围查询。

SELECT * FROM <表名> WHERE <列名> LIKE BETWEEN 小范围 AND 大范围; 

BETWEEN的特点就是结果中包含大范围和小范围的值。<> 这个两个符号不包含。

IS NULL,IS NOT NULL

判断是否为NULL,为了取出某些值为NULL的列的数据,不能使用=,只能使用特定的谓词IS NULL。与此相反,想要选出NULL以外的数据时,需要使用IS NOT NULL

IN谓词

OR的简便用法。

IN(值,...)

参考资料:

<SQL基础教程>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值