MySQL基础篇1

1. 前置

1.1 SQL分类

类别 含义
DDL(Data Definition Language):数据定义语言 用于对数据库、表进行创建、修改等,如create、drop、alter等
DML(Data Manipulation Language):数据操纵语言 用于对表中记录进行插入、修改、查询等,如insert、delete、update、select等
DCL(Data Control Language):数据控制语言 用于对数据库、表、字段、用户访问权限、安全级别进行定义,如commit、rollback、grant、revoke、savepoint等

其中

  • select作为最常用的语句,也可将其单独作为一类:DQL(Data Query Language),即数据查询语言;
  • commit、rollback与事务相关,可将其视为一类:TCL(Transaction Control Language),即事务控制语言;

1.2 SQL使用规范

在这里插入图片描述

1.3 命名规则

  • 自定义名,取值范围为大小写字母a-z、A-Z,数字0-9,以及下划线_;
  • 多个单词组成的自定义名,可使用下划线间隔;

在这里插入图片描述

1.4 SQL大小写规范

总之就是涉及自定义的名字使用小写,SQL内部提供的东西使用大写;
在这里插入图片描述

1.5 注释

  • 单行注释:1)MySQL独有:# 注释内容;2)-- 注释内容;
  • 多行注释:/* 注释内容*/;

1.6 执行SQL文件

  • 方式一:命令行方式下进入mysql环境,使用命令source 指定SQL文件的具体路径即可执行对应SQL文件;
  • 方式二:图形化工具Navicat等中大概使用工具->执行SQL文件->选择指定的SQL文件即可;

2. SELECT语句

2.1 基本结构:

SELECT 字段1,字段2... 
FROM 表名;

2.2 为字段添加别名AS

  • 其中AS表示别名Alias,可省略,但不建议省略;
  • 如果使用多个单词作为别名,且使用空格间隔,则可使用双引号将别名括起来;
SELECT 字段1 AS 别名1,字段2 AS 别名2... 
FROM 表名;

2.3 对查询结果进行去重DISTINCT

  • DISTINCT实质是对查询列的组合进行去重,只有当某些记录的所有列的值相同,才当做重复记录;
SELECT DISTINCT 字段1 AS 别名1,字段2 AS 别名2... 
FROM 表名;

2.4 空值参与运算NULL

  • 空值即NULL;
  • NULL不是0、‘’、‘NULL’;
  • 空值参与运算,结果都为NULL;

2.5 查询常数

如下:

SELECRT 1,salary 
FROM employees;

会为每条记录都添加一个常数字段;

2.6 显示表结构

DESCRIBE 表名;

DESC 表名;

2.7 条件查询/过滤数据WHERE

  • 只显示满足查询条件的相关记录;
  • 声明在FROM结构之后,且紧跟在FROM之后;
  • 不能使用查询字段的别名进行过滤条件设置;
SELECT DISTINCT 字段1 AS 别名1,字段2 AS 别名2... 
FROM 表名 
WHERE 过滤条件;

3. 运算符

3.1 算术运算符

  • 加减乘除取余运算:+、-、*、/或div、%或mod;
  • 在SQL中+号只有加法作用,与字符串进行运算时,会将字符串隐式转换为数值,可以转换的前提是字符串内容由数字组成,如“123”。如果字符串内容为字符,则将其视为0
  • 进行除法时,1)分母非零时,结果一定是浮点型;2)分母为0时,结果为NULL
  • 取模运算结果的符号与被模数保持一致
  • NULL参与运算结果均为NULL;
    在这里插入图片描述

3.2 比较运算符

  • 比较结果为真则返回1,假则返回0,其他情况返回NULL
  • 除了安全等于运算符<=>,其他运算符有NULL参与运算结果均为NULL;
  • 等于运算符<=>中,操作数有一个是NULL则结果为0,如果两个操作数均为NULL则结果为1;
    在这里插入图片描述
  • 如下是非符号型运算符
    1)BETWEEN…AND…查找区间为左闭右闭
    2)IN 或NOT IN是在离散集合中进行查找;
    3)LIKE用于模糊查询,可使用1)下划线_:表示一个字符;2)百分号%:表示未知数量的字符;3)斜杠\:表示转义,对特殊字符进行转义使其作为普通字符出现;完成特定的查询功能
    在这里插入图片描述

3.3 逻辑运算符

  • 返回结果为0、1、NULL三种;
  • 有NULL参与运算结果为NULL;
    在这里插入图片描述

3.4 位运算符

  • 将操作数转为二进制进行运算,一定程度上可提高效率;
  • 在一定范围内,左移一位相当于乘2,右移一位相当于除2;
    在这里插入图片描述

3.5 运算符优先级

  • 括号优先级最高,所以在编写SQL时,想先运算哪个部分,就使用括号将其包裹起来即可;
    在这里插入图片描述

4. 排序和分页

4.1 排序ORDER BY

  • 声明在FROM结构之后;
  • 在不使用排序时,默认查询结果按照数据插入的顺序进行显示;
  • ASC(默认情况,可不显示指定)表示升序排列,DESC表示降序排列;
  • 可使用查询字段的别名指定排序方式;
  • 排序字段可不在查询字段中;
  • 可使用多级排序,首先从一级排序开始执行;
SELECT DISTINCT 字段1 AS 别名1,字段2 AS 别名2... 
FROM 表名 
WHERE 过滤条件
ORDER BY 字段1 排序方式1,字段2 排序方式2...;

在这里插入图片描述

4.2 分页LIMIT OFFSET

  • 声明在FROM结构之后,必须声明在整个SELECT结构的最后
  • 位置偏移量从0开始,如果偏移量为0,可直接使用LIMIT 条目数进行分页查询;
  • 分页查询公式:LIMIT (页数-1)*页面大小,页面大小
  • 约束返回结果的数量可以 减少数据表的网络传输量 ,也可以提升查询效率;
  • 在 MySQL、PostgreSQL、MariaDB 和 SQLite 中使用 LIMIT 关键字,而且需要放到 SELECT 语句的最后面;
SELECT DISTINCT 字段1 AS 别名1,字段2 AS 别名2... 
FROM 表名 
WHERE 过滤条件
ORDER BY 字段1 排序方式1,字段2 排序方式2...
LIMIT 位置偏移量,条目数;

扫描二维码关注公众号,回复: 15026215 查看本文章
SELECT DISTINCT 字段1 AS 别名1,字段2 AS 别名2... 
FROM 表名 
WHERE 过滤条件
ORDER BY 字段1 排序方式1,字段2 排序方式2...
LIMIT 条目数 OFFSET 位置偏移量;

5. 多表查询/联合查询

5.1 为什么需要多表查询

  • 缓解单表数据冗余问题;
  • 减少IO次数,提高查询效率;
  • 提高多用户查询并发性;

5.2 如何进行多表查询

进行多表查询是需要注意以下几点:

  • 需要在WHERE结构中声明多表之间的连接条件;
  • 如果省略连接条件或者连接条件无效,会导致笛卡尔积错误;
  • 笛卡尔积又称为交叉连接CROSS JOIN;
  • 如果需要查询的字段在多表中都存在,则需要显式指明该字段所在的具体表;
  • 多表查询时,建议显式指定所有查询字段的表;
  • 为了SQL简洁,可为表指定别名,一旦指定别名则必须在其他部分(SELECT、WHERE等)中使用表的别名,而不能使用表的原名;
  • 如果有N个表进行多表查询,则至少需要N-1个连接条件
  • 需要控制连接表的数量,连接表过多会降低查询效率;

5.3 多表查询的分类

只是分类角度不同:

  • 角度1:等值连接 VS 非等值连接,即连接条件是否为相等判断;
  • 角度2:自连接 VS 非自连接,既多表是否可视为是单表的复制;
  • 角度3:内连接 VS 外连接
    内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行
    外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接没有匹配的行时, 结果表中相应的列为空(NULL)
    如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表
    如果是右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为 从表
    如果将两个表中不匹配的行都显示,则称为满外连接

5.3.1 内连接、外连接、满外连接的实现

SQL92标准:

  • SQL92标准中,只有左外连接、右外连接,没有对满外连接的实现;
  • MySQL不支持SQL92标准关于外连接的实现;
  • SQL92中使用(+)标注从表所在位置,表示外连接中哪个是从表,比如xxx=yyy(+)表示yyy所在表为从表;

SQL99标准:用JOIN…ON的方式实现多表查询;

5.3.2 SQL99标准实现多表查询

基本模板:

SELECT table1.column, table2.column,table3.column
FROM table1
JOIN table2 ON table1 和 table2 的连接条件
JOIN table3 ON table2 和 table3 的连接条件
  • 关键字 JOIN、INNER JOIN、CROSS JOIN 的含义是一样的,都表示内连接;
  • 左外连接:LEFT OUTER JOIN;右外连接:RIGHT OUTER JOIN;
  • 满外连接:FULL JOIN 或 FULL OUTER JOIN;
  • MySQL不支持FULL JOIN 或 FULL OUTER JOIN,可使用LEFT JOIN UNION RIGHT JOIN代替;

5.3.3 7种SQL JOIN的实现

  • UNION、UNION ALL可实现多个SELECT结果集的合并;
  • 二者区别在于UNION会对结果集进行去重,资源消耗相对较大;

在这里插入图片描述

参考资料:

  • 尚硅谷

核心:

  • 需要理解整个SELECT 结构中,不同组件的执行顺序;
  • 多表查询JOIN…ON…,7种SQL JOIN的实现;

猜你喜欢

转载自blog.csdn.net/qq_43665602/article/details/130365507