数据库SQL入门学习(详细)

💡学习过程中,听说类比excel表格的相关操作效果更好哦。本文以MySQL语言为主,如有错误的地方,欢迎在评论区批评指正~

📚参考链接:

MySQL详细学习教程(建议收藏)-CSDN博客

MySQL数据库(基础)

SQL 教程 (w3schools.cn)
SQL之母 - SQL自学网站 (yupi.icu)

一、数据库的分类

  1. 关系型数据库
    • (行,列)这样的结构来存储;
    • 以 SQL 语言为标准
    • 例:MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access;
  2. 非关系型数据库
    • 一般通过文档这样的结构来存储的;
    • 例:Redis、HBase、MongoDB;

二、SQL基础

  1. 关系型数据库管理系统RDBMS
    • 表(tables)是数据库对象;
    • 字段是表的一列;
    • 记录是表的一行;
  2. SQL语句分类
    • DDL(定义)-create、alter、drop
      • 针对字段进行增、改、删;
    • DQL(查询)-select
      • 针对具体数据查询;
    • DML(操纵)-insert、update、delete(可能需commit才能提交)
      • 针对🔥具体数据进行增、改、删;
    • DCL(数据控制)-Grant、Revoke授予权限、回收权限语句。
    • DTL(事务控制)-commit、rollback回滚;
  3. SQL基本语法
    • SQL里大小写一样

    • 分号是分隔每条 SQL 语句的标准方法(不是必需);

    • 一些重要命令⭐

      • DDL:

        • CREATE DATABASE/INDEX/TABLE - 创建 数据库、索引、表
        • ALTER DATABASE/TABLE - 修改 数据库、表
        • DROP TABLE/INDEX - 删除 表、索引
      • DQL:

        • SELECT - 从数据库中提取数据
      • DML:

        • UPDATE - 更新数据库中的数据
        • INSERT INTO - 向数据库中插入新数据
        • DELETE - 从数据库中删除数据

三、数据查询DQL

关键字:select

简单说:(注意编写顺序❗

select 字段 as 别名

​ from 表名

​ where 条件

​ group by 分组的字段

​ having 筛选分组的条件

​ order by 排序字段 asc/dsc

​ limit 分页的记录数

3.1 普通查询

  • 全表查询

    select * from 表名

  • 选择查询

    select 列名, 列名 from 表名

  • 别名⭐(as可省略)

    select 列名 as❗ 别名 from 表名

    select 列名 [别名] from 表名

  • 常量及运算

3.2 条件查询where

操作符⭐ 声明
=、!=、><、>=、<= 常见运算符
between A and B 区间[A,B]
is null/is not null 空/不空
not 取非
like/not like 模糊查询
and/or 与/或
字段 in(10,20) 等于10或20

(1) where关键字

select xx from xx where xxx order by xx;

(2) like模糊查询

  • like/not like关键字;
  • 通配符:
    • 百分号(%):表示任意长度的任意字符序列。
    • 下划线(_):表示任意单个字符。
    • 例:where name like '%张%',筛选包含“张”的。
    • 例:where name like '%张',筛选以“张”结尾的。

3.3 distinct去重⭐

  • 含义:

    选择该列的不同值

  • 语法:

    select ❗distinct xx from xxdistinct 字段1, 字段2, ...(后者根据多个字段的组合来进行去重操作,确保多个字段的组合是唯一的。)

  • 示例:
    在这里插入图片描述

3.4 分页查询

  • 关键字limit限制展示的记录数;

    select 字段列表 from student limit 起始索引n, 查询记录数;
    # 起始索引从0开始,从第n条(包含n)展示 = (查询页码 - 1)* 每页记录数。
    # 如果查第一页,起始索引可省略。
    

3.5 排序

  • 关键字order by,asc,desc;(从上到下越多/越少)

  • 语法:

    # asc是默认值,可省略;
    select 字段 from 表名 order by 字段1 [asc/desc], 字段2 [asc/desc], ...
    # 若多个字段排序,当第一个字段的值相同,按第二个字段排序。
    

3.6 条件分支

  • 关键字case when,可根据查询结果动态生成

  • 例如查询顾客购买次数,对购买次数为1的用户进行标记,并生成新表;

  • 语法:(条件要括号

    case when (条件1) then 结果1
         when (条件2) then 结果2
         else 结果3 end
    

3.7 分组查询⭐

关键字group by,根据字段(或属性),对数据分类,并对分类进行计算/查询操作;

(1)字段(列)分组🔥
  • 语法:select xx from xx group by 字段1,字段2

  • 最后细分到字段2;

(2)筛选分组having
  • having与where区别

    where用于分组前having用于分组后,筛选特定分组。

  • 语法:

    select xx from xx group by 字段 having 条件

3.8 联接查询join

  1. cross join,对多个表进行笛卡尔积

    • 语法:

      select 表1.字段1, 表1.字段2, 表2.字段1

      from 表1 (可加表的别名)

      (cross) join 表2 (可加表的别名)

  2. inner join等值连接

    • 返回两个表中,满足关联条件的交集;

    • 语法:

      select 表1.字段1, 表1.字段2, 表2.字段1

      from 表1 (可加表的别名)

      (inner) join 表2 on 等值条件;

在这里插入图片描述

3.9 执行顺序

  • from 表名
    • where 条件
    • group by 字段列表
    • having 条件
  • select 字段列表
    • order by 字段列表 asc/desc
    • limit 分页参数

四、数据定义DDL

关键字:create、alter、drop

简单说:定义 数据库、表、字段

4.1 database

  • 创建数据库create database🔥

    • 如果不存在if not exists,则创建。
    create database [if not exists] 数据库名 [default charset 字符集] [collate 排序 规则];
    
  • 删除数据库drop database🔥

    drop database [ if exists ] 数据库名;
    
  • 查看所有数据库

    show databases;

  • 选择当前数据库

    select database();

  • 切换数据库

    use 数据库名;

4.2 table

  • 创建create table🔥

    CREATE TABLE 表名(
        字段1 字段1类型 [COMMENT 字段1注释],
        字段2 字段2类型 [COMMENT 字段2注释],
        name varchar(6) comment '姓名'
        ......
        字段n 字段n类型 [COMMENT 字段n注释]
    )  [COMMENT 表注释] ;
    
  • 删除drop table🔥

    drop table [ if exists ]表名;
    
  • 修改alter table🔥

    • 添加字段add

      ALTER TABLE 表名 ADD 字段名 类型 (长度) [COMMENT 注释] [约束];
      alter table student add id varchar(20)
      
    • 修改数据类型modify

      ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
      # 修改字段名和字段类型
      alter table 表名 change 旧字段名 新字段名 新类型 (长度) [COMMENT 注释] [约束];
      
    • 删除字段drop

      ALTER TABLE 表名 DROP 字段名;
      
    • 修改表名

      alter table 表名 rename to 新表名;

  • 查看当前库的所有表

    show tables;

  • 排序

    desc/asc 表名;

  • 查看建表语句

    show create table 表名;

4.3 MySQL数据类型

  • 三种主要类型:String(字符串)、Number(数字)和 Date/Time(日期/时间)类型。

  • 常见数据类型:

    数据类型 说明
    char(size) 固定占用指定长度
    ⭐varchar(size) 根据实际数据长度动态分配
    int(size) 中等整数
    float(size,d) 浮点数
    DATE 日期,格式:YYYY-MM-DD
    time 时间,格式:hh:mm:ss

五、数据操纵DML

关键字:insert、update、delete

简单说:增、删、改

5.1 insert into

  • 指定字段增加数据

    insert into 表名(字段1,字段2,...) values(1,2,..)
    # 示例
    insert into student(name,sex,id) values('林同学','女',202103103)
    
  • 全部字段增加数据

    insert into 表名 values(值1,值2,...)

  • 批量增加

    insert into 表名(字段1,字段2,...) values(1,2,..),(1,2,..),(1,2,..);
    # 全部字段批量增加
    insert into student values(1,2,..),(1,2,..),(1,2,..);
    

5.2 update

  • 语法

    update 表名 set 字段1 =1, 字段2 =2, 字段3 =3, ...[where 条件]
    # 示例
    update student set name = '林同学', sex = '女' where id = 20210310;
    update employee set entrydate = '2008-01-01'
    

5.3 delete

  • 语法

    delete from 表名 [where 条件]
    
  • 注:

    • from
    • 不能删除某一个字段值(可用UPDATE,将值置为NULL即可)。

六、数据控制DCL

关键字:Grant、Revoke

简单说:授予权限、撤销权限,管理用户。

6.1 管理用户

  1. 查询用户

    select * from mysql.user;

  2. 创建用户

    create user '用户'@'主机名' identified by '密码';

  3. 修改用户密码

    alter user '用户'@'主机名' identified with mysql_native_password by '新密码';

  4. 删除用户

    drop user '用户'@'主机名';

  • 注:

    • MySQL通过用户名@主机名,唯一标识一个用户;
  • 示例

    • 创建用户heima,可在任意主机访问该数据库,密码123456;
    • create user ‘heima’@‘%’ identified by ‘123456’;

6.2 权限控制

  1. 查询权限

    show grants for '用户名'@'主机名';

  2. 授予权限

    grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

  3. 撤销权限

    revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

    • 多个权限之间,使用逗号分隔。

附:SQL参考手册

还是以手册为准!

1. 时间函数

  • date(“xxxx-xx-xx”) //日期
  • datetime() //日期时间
  • time(“xx:xx:xx”) //时间
  • 注:若有参数,需按格式;

2. 字符串处理函数

  • upper(string) //转换成大写
  • lower(string) //转换成小写
  • concat(S1,S2,S3) //字符串拼接,将S1,S2,S3拼接成一个字符串
  • lpad(str,n,pad) //左填充,用字符串pad左填充str,达到n个字符长度,str可以是字段名。
  • rpad(str,n,pad) //右填充,同理;

3. 聚合函数

通常配合group by分组使用,对分组进行计算;

  • count(列名) //统计数量(行数) 或 count(distinct 列名)
  • sum() //求和
  • avg() //计算平均值
  • max()、min() //最大、最小

4. 数值函数

  • rand() //返回0~1的随机数
  • cell(x) //向上取整
  • floor(x) //向下取整

5. 流程函数

函数 功能
if(value, t, f) 如果value为true,则返回t,否则返回 f
case when [条件1] then [结果1] … ELSE [结果] END

相关推荐

  1. SQL入门详细教程

    2024-01-27 23:04:01       33 阅读
  2. Mysql数据库(一)SQL入门

    2024-01-27 23:04:01       35 阅读
  3. sql server 数据库学习

    2024-01-27 23:04:01       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-27 23:04:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 23:04:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 23:04:01       82 阅读
  4. Python语言-面向对象

    2024-01-27 23:04:01       91 阅读

热门阅读

  1. 设计模式---观察者模式

    2024-01-27 23:04:01       56 阅读
  2. cs2系统提升思路

    2024-01-27 23:04:01       63 阅读
  3. 从k8s当中学习go cli脚手架开发利器-cobra

    2024-01-27 23:04:01       47 阅读
  4. 一篇文章带你全面理解热更新技术

    2024-01-27 23:04:01       46 阅读
  5. Golang 垃圾回收

    2024-01-27 23:04:01       57 阅读
  6. js如何数组去重

    2024-01-27 23:04:01       62 阅读
  7. 抖音私信风车怎么做,详细的实现过程,附视频

    2024-01-27 23:04:01       59 阅读