深入理解SQL语句 | 青训营笔记

49 阅读4分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 16 天

补充内容:在用命令行进行Mysql语句录入时,有两种不同的语句

命令行与进入Mysql

第一种:

image.png

像这样的通过输入指令打开database的操作,叫做命令行语句。

第二种:

不带分号(非SQL语句)

image.png

image.png

当cmd头部 从 文件位置转为了mysql,就表明进入数据库了,但是还要选择具体是哪个数据库。

use xxxxexit 这样的操作,也算是一种指令。

这样的指令后面不用跟分号;

需要分号(SQL语句)

delete from [表明] where [cond...];这样的语句,叫做SQL语句。

SQL语句需要在后面跟;

SQL-查询

目录如下:

image.png

基本查询

image.png

需要注意的是,这个只是查询并且列出相应的东西。查询≠筛选,筛选是where

Where筛选

image.png

在这里对in,like,is null展开举例与练习。

exersize table:

image.png

  1. in:select fields from table where fields in (....)

  2. like

    mysql> SELECT name FROM tb_students_info
    -> WHERE name LIKE 'T%';
    +--------+
    | name   |
    +--------+
    | Thomas |
    | Tom    |
    +--------+
    2 rows in set (0.12 sec)
    
  3. is null

    mysql> SELECT name, login_date FROM tb_students_info 
    -> WHERE login_date IS NULL;
    +--------+------------+
    | NAME   | login_date |
    +--------+------------+
    | Dany   | NULL       |
    | Green  | NULL       |
    | Henry  | NULL       |
    | Jane   | NULL       |
    | Thomas | NULL       |
    | Tom    | NULL       |
    +--------+------------+
    6 rows in set (0.01 sec)
    

聚合函数

也叫aggregate function

聚合函数特点

  • 除了 COUNT 以外,聚合函数忽略空值。
  • 聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。
  • 所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。
  • 标量函数:只能对单个的数字或值进行计算。主要包括字符函数、日期/时间函数、数值函数和转换函数这四类。

image.png

使用select count(*) from employees;统计员工个数,也就是统计有多少条记录。

image.png

这一条是查询deptno字段有多少条,因为有一条记录的deptno为NULL,所以只查到8个数据。

其余语句看这里:SQL聚合函数

分组查询

GROUP BY

SELECT column_name, aggregate_function(column_name)  
FROM table_name  
WHERE column_name operator value  
GROUP BY column_name;

比如我这里想查询在各个部门工作的员工的平均薪水

select deptno, avg(salary)
from employees
group by deptno;

image.png

排序查询

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

再拿上面的例子举例,如果我们要按平均薪水的降序排列,应该有:

select deptno, avg(salary) as avg_salary
from employees
group by deptno
order by avg_salary DESC;

image.png

事务

事务的定义:

(转载自C语言中文网:sql事务

在数据库中,我们将一条 SQL 语句称为一次基本的操作。将若干条 SQL 语句“打包”在一起,共同执行一个完整的任务,这就是事务。

事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。

事务有一个最显著的特征,就是它包含的所有 SQL 语句作为一个整体向数据库提交,只有所有的 SQL 语句都执行完成,整个事务才算成功,一旦某个 SQL 语句执行失败,整个事务就失败了。事务失败后需要回滚所有的 SQL 语句。

事务中的所有 SQL 语句是一个整体,共同进退,不可分割,要么全部执行成功,要么全部执行失败。

事务的属性

一般来说,事务具有四个标准属性,分别是原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability),简称 ACID。具体说明如下:

1) 原子性

一个事务中的所有 SQL 语句,要么全部执行成功,要么全部执行失败,不会结束在中间的某个环节。

事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

2) 一致性

在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,其中包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

3) 隔离性

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

4) 持久性

事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

事务的操作

与事务控制有关的 SQL 命令包括:

  • BEGIN 或者 START TRANSACTION:开始事务;
  • COMMIT:提交事务;
  • ROLLBACK:回滚事务;
  • SAVEPOINT:在事务内部设置回滚标记点;
  • RELEASE SAVEPOINT:删除回滚标记点;
  • ROLLBACK TO:将事务回滚到标记点(ROLLBACK 命令的一种变形写法)。

事务控制命令仅能与 DML 类别的 SQL 命令一起使用,包括 INSERT、UPDATE、DELETE 和 SELECT,在创建或者删除表时不能使用事务,因为这些操作在数据库中是自动提交的。