• MySQL 教程(二)基础sql语句,增删改查,聚合函数


    一、命令

    1. 连接、断开服务器

    需要用用户名和密码(也可设置无需密码登录)登录即连接到服务器

    shell> mysql -h host -u user -p
    Enter password: ********
    
    • 1
    • 2

    连接成功后,可以在mysql>提示下输入QUIT (或\q)随时退出:

    mysql> QUIT
    Bye
    
    • 1
    • 2

    二、sql语句

    1. 创建并使用数据库

    创建数据库:
    CREATE DATABASE <数据库名>
    CREATE DATABASE IF NOT EXISTS <数据库名>

    使用mysqladmin创建 # mysqladmin -u root -p create oss_server

    使用数据库:
    use <数据库名>
    注意:创建并不代表使用,需要明确操作use来指定使用数据库。

    2. 查看数据库

    查看全部数据库 show databases

    查看创建库的详细信息 show create database <数据库名>

    3. 删除数据库

    drop database <数据库名>
    drop database if exists <数据库名>

    4. 创建表

    CREATE TABLE table_name (column_name column_type);

    例子:

    CREATE TABLE IF NOT EXISTS `user`(
       `user_id` INT UNSIGNED AUTO_INCREMENT,
       `name` VARCHAR(10) NOT NULL,
       `tel` VARCHAR(20) NOT NULL,
       `birthday` DATE,
       PRIMARY KEY ( `user_id` )
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    AUTO_INCREMENT 自增id

    CREATE TABLE animals (
         id MEDIUMINT NOT NULL AUTO_INCREMENT,
         name CHAR(30) NOT NULL,
         PRIMARY KEY (id)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. 删除表

    DROP TABLE table_name

    6. 查看表

    • 查看库中全部表show tables
      在这里插入图片描述
    • 查看创建表的详细信息show create table table_name
      在这里插入图片描述

    7. 查看表的结构

    DESCRIBE table_name;desc table_name;

    DESCRIBE tl_device_info;
    
    • 1

    在这里插入图片描述

    8. 增删改查

    8.1 插入数据 insert

    INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
    实例:

    "INSERT INTO runoob_tbl ".
            "(runoob_title,runoob_author, submission_date) ".
            "VALUES ".
            "('$runoob_title','$runoob_author','$submission_date')";
    
    • 1
    • 2
    • 3
    • 4

    8.2 装载数据 LOAD DATA

    mysql> LOAD DATA LOCAL INFILE '文件目录' INTO TABLE pet;
    在这里插入图片描述

    8.3 查询数据 select

    SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M]

    • from后可跟多个表,表和表之间用 ','相连
    • where中可包含多个查询条件
    • select后面可以跟着想查询的列名,列与列之间用‘,’相连,也可以用‘*’代替全部列
    • limit设置返回数
    • offset指定数据偏移量,也就是去掉几行元素

    查询全部:select * from ...

    (1) where子句

    where语句中多个条件使用andor来连接,

    select * from ... where name = 'wang' and tel='134554654'
    
    • 1

    and优先级高于or,若需要先执行or部分,可以用小括号来提升其优先级

    a. 操作符

    b. like子句

    sql为like子句提供了四种匹配方式:

    • % :可以匹配任意长度、类型的字符,若是中文,用两个百分号表示(% %)
    • _ :匹配任意类型的单个字符,相当于占位,限制表达式字符
    • [] :括号中可以指定一个或多个字符、字符串或者范围,匹配括号内所列字符中的一个,类似正则。
    • [^]:匹配括号内以外的字符。

    示例:

    -- 搜索name中最后一个字母是m的记录:
    select * from user where name like '%m';
    -- 搜索name中第二个字符是a的记录:
    select * from user where name like '_a%';
    
    • 1
    • 2
    • 3
    • 4
    (2) UNION

    连接两个或以上的select语句,将其结果组合到一个结果集合中
    select ... from ... UNION [ALL/DISTINCT] select ... from ....

    • ALL:可选,返回全部结果集,包含重复数据
    • DISTINCT:可选,删除重复数据,返回剩余数据,默认值
    select device_name from tl_device_info
    UNION
    select device_model from tl_device_type
    
    • 1
    • 2
    • 3

    查询结果:
    在这里插入图片描述

    (3)排序 order by

    SELECT field1, field2,...fieldN FROM table_name1, table_name2... ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
    默认为升序排序,降序需要添加关键字DESC

    例子:

    select * from tl_device_info
    order by device_name DESC
    
    • 1
    • 2

    在这里插入图片描述

    (4)分组 group by

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

    在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

    a. count() 函数

    例子,按设备id分组,并查询每个设备id出现了几次

    select device_id,count(device_id) from tl_device_status_log
    group by device_id
    
    • 1
    • 2

    在这里插入图片描述

    b. with rollup

    跟group by搭配,在分组的基础上对结果进行统计

    select device_id,count(device_id) from tl_device_status_log
    group by device_id WITH ROLLUP
    
    • 1
    • 2

    在这里插入图片描述

    select coalesce(a,b,c): 该函数为,当a为null时显示b,若b为null显示c

    select COALESCE(device_id,'总计'),count(device_id) from tl_device_status_log
    group by device_id WITH ROLLUP
    
    • 1
    • 2

    在这里插入图片描述

    c. max();列最大值

    查询一列中最大数值

    select max(id) from tl_device_info
    
    • 1

    在这里插入图片描述

    d. min(); 列最小值
    select min(id) from tl_device_info
    
    • 1

    在这里插入图片描述

    e. sum(); 列总和
     SELECT SUM(capacity) from tl_cutting_tool_store_house
    
    • 1

    在这里插入图片描述
    如果在没有返回匹配行 SELECT 语句中使用 SUM 函数,则 SUM 函数返回 NULL,而不是 0。

    f. avg();平均值
     SELECT avg(capacity) from tl_cutting_tool_store_house
    
    • 1

    在这里插入图片描述

    (5)联表查询 左联 右联 内联
    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

    写一个左连接的例子:
    设备表的类型id字段对应 类型表的id,即外键

    select di.device_name, dt.device_model
    from tl_device_info di
    left join tl_device_type dt on di.device_type_id = dt.id
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    (6)去重 DISTINCT

    SELECT DISTINCT 列名 FROM 表;

    8.4 更新数据 update

    UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]

    update tl_device_info set device_name = 'test1' where id =1
    
    • 1

    8.5 删除数据 delete

    DELETE FROM table_name [WHERE Clause]

    系列博客

    MySQL 教程(一)概述
    MySQL 教程(二)基础sql语句,增删改查,聚合函数
    MySQL 教程(三)函数

  • 相关阅读:
    共用一个一维空间的双向栈
    富文本编辑器 VUE-QUILL-EDITOR 使用教程 (最全)
    信息系统项目管理师(2022年)—— 重点内容:管理科学基础知识(23)
    【RAG 论文】面向知识库检索进行大模型增强的框架 —— KnowledGPT
    【实战练习】汽油辛烷值优化建模(二)(问题一的详细讲解)
    【Java】获取手机文件名称补充
    Python数据分析-Pandas
    lv5 嵌入式开发-12 信号灯
    磷脂-聚乙二醇-叠氮,DSPE-PEG-Azide,DSPE-PEG-N3,MW:5000
    C++内存分布介绍
  • 原文地址:https://blog.csdn.net/qq_42627162/article/details/126522192