数据库的重中之重就是操作数据,操作数据使用的就是SQL语句,也就是操作所有关系型数据库的编程语言,也是大数据工程师每天都需要重复书写的代码,所以这个部分非常重要。笔者为JAVA后端工程师,也需要获取数据、处理数据、渲染数据给前端工程师进行展示。

目录

  • 前言
  • 1.通用SQL语法
  • 2.SQL的分类
  • 3.DDL
  • a>数据库的操作
  • b>表的操作
  • 4.DML
  • a>增
  • b>删
  • c>改
  • 5.DQL
  • a>基本查询
  • b>条件查询
  • c>聚合函数(结合分组使用)
  • d>分组查询
  • e>排序查询
  • f>分页查询
  • g>书写顺序
  • h>执行顺序
  • 6.DCL
  • a>用户管理
  • b>权限控制

前言

1.通用SQL语法

• 一条SQL语句可以是单行也可以是多行,以分号结尾
• SQL语句可以使用空格/缩进来增强语句的可读性
• MySQL的SQL语句不区分大小写,关键字建议使用大写
• 注释 
  
• 单行注释:-- 或 #
• 多行注释:/* … */

2.SQL的分类

• DDL(数据定义语言):用来定义数据库对象(数据库、表、字段)
• DML(数据操作语言):对表中的数据进行增删改
• DQL(数据查询语言):对表中的数据进行查询
• DCL(数据控制语言):创建数据库用户、控制访问权限

3.DDL

a>数据库的操作

    1. 增
    创建数据库)
     create database [if not exists] 数据库名 [DEFAULT CHARSET 字符集][COLLATE 排序规则];2. 删
    删除数据库)
     drop database [if exists] 数据库名;3. 改
    使用指定数据库
    use 数据库名;4. 查
    查询当前数据库管理系统所有数据库
     show databases;
     查询当前使用的数据库
     select database();

    b>表的操作

    1. 增
    创建表
     CREATE TABLE 表名(
     字段名 数据类型[comment 注释],
     。。。
     字段名 数据类型
     );
     []是可选的,最后一个字段的数据类型后面不要逗号2. 删
    • 删除表
     drop table[if exists] 表名;• 删除表,并创建(重置表)
     TRUNCATE TABLE 表名;• 删除字段
     ALTER TABLE 表名 DROP 字段名;3. 改
    • 添加字段
     ALTER TABLE 表名 ADD 新字段名 类型 [comment 注释][约束];• 修改数据类型
     ALTER TABLE 表名 MODIFY 字段名 新数据类型;• 修改字段名和数据类型
     ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 [comment 注释][约束];• 修改表名:
     ALTER TABLE 表名 RENAME TO 新表名4. 查
    • 查询当前数据库中的所有表
     show tables;• 查询表结构
     desc 表名;• 查询建表语句
     show create table 表名;

    4.DML

    a>增

    1. 给指定字段添加数据
    NSERT INTO 表名(字段列表)VALUES(值1,值2,…);2. 给所有字段添加数据
    • 可以省略字段列表
    INSERT INTO 表名 VALUES(值1,值2,…);
    1. 批量添加数据

    b>删

    DELETE FROM 表名[where 条件];
     delete语句不能删除某个字段的值

    c>改

    UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,…[where 条件];

    5.DQL

    a>基本查询

    • SELECT 字段列表 from 表名

    b>条件查询

    • SELECT 字段列表 from 表名 where 条件列表
    • 条件列表可以使用比较运算符和逻辑运算符

    c>聚合函数(结合分组使用)

    统计:count
     求最小值:min
     求最大值:max
     求平均值:avg
     求和:sum
     语法:
     select 聚合函数(字段列表)FROM 表名;

    d>分组查询

    • 语法
    • WHERE 和 HAVING区别
    1. 执行时机不同
     where在分组前执行,having在分组后执行2. 判断条件不同
     where不能对聚合函数进行判断,而having可以• 注意
     分组之后,查询的字段一般为分组字段和聚合函数,查询其他字段没有意义。

    e>排序查询

    • 语法:
     SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;• 排序方式
     ASC:升序,默认
     DESC:降序• 注意:
     如果多字段排序,当第一种字段值相同时,才会按第二种字段排序

    f>分页查询

    g>书写顺序

    SELECT 字段列表
     FROM 表名列表
     WHERE 条件列表
     GROUP BY 分组字段列表
     HAVING 分组后字段列表
     ORDER BY 排序字段列表
     LIMIT 分页参数

    h>执行顺序

    FROM 表名列表
     WHERE 条件列表
     GROUP BY 分组字段列表
     HAVING 分组后条件列表
     SELECT 字段列表
     ORDER BY 排序字段列表
     LIMIT 分页参数

    6.DCL

    • 主机名可以使用%通配
    • 该类语言一般是数据库管理员使用

    a>用户管理

    1. 增(创建用户)
     CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’;2. 删(删除用户)
     DROP USER ‘用户名’@‘主机名’;3. 改(修改用户信息)
     ALTER USER ‘用户名’@‘主机名’ IDENTIFED WITH mysql_native_password BY’新密码’;4. 查(查询用户信息)
     用户信息在user表中
     use mysql;
     SELECT * FROM USER;

    b>权限控制

    • 常用权限
    1. ALL / ALL PRIVILEGES:所有权限
    2. SELECT:查询权限
    3. INSERT:添加权限
    4. DELETE:删除权限
    5. UPDATE:修改数据权限
    6. ALTER:修改表权限
    7. DROP:删除表/数据库权限
    8. CREATE:创建表/数据库权限
    • 语法:
    9. 授予权限
     SHOW GRANTS FOR ‘用户名’@‘主机名’;10. 撤销权限
    REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名’@‘主机名’;11. 查询权限
    SHOW GRANTS FOR ‘用户名’@‘主机名’;• 注意:
    多个权限之间使用逗号隔开。
     授予权限时,数据库名和表名可以使用*进行通配,表示所 有。