• Mysql-CRUD(增删查改)


    CRUD : Create( 创建 ), Retrieve( 读取 ) Update( 更新 ) Delete (删除)

    1.Create

    语法:
    INSERT [ INTO ] table_name
    [( column [, column ] ...)]
    VALUES (value_list) [, (value_list)] ...

     1.1 全列插入+单行数据

    insert into book values('Java核心技术','Cay S.Horstman',56.43,'计算机技术');

     1.2 多行数据+指定列

    insert into product(name,price,storage) values('学生书包',18.91,101),('铅笔',20.91,155);

    以上插入了两行,指定name,price,storage三列插入数据。 

    注意:当数据里有主键冲突或唯一键冲突时,可以使用on duplicate key来进行更新操作。

    INSERT INTO product (name,price,storage ) VALUES ('学生书包',18.91,101 )
    ON DUPLICATE KEY UPDATE price = 18.91 , name = '学生书包 ' ;
    -- ON DUPLICATE KEY 当发生重复 key 的时候

    1.3 替换

    REPLACE INTO product (name,price,storage VALUES ('学生书包',18.91,101 );
    •  表中没有数据,数据被插入。
    • 表中有冲突数据,删除数据后重新插入。

    1.4 插入查询结果 

    语法: 

    INSERT INTO table_name [(column [, column ...])] SELECT ...  

    -- duplicate_table 的去重数据插入到 no_duplicate_table
    INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;

    2.Retrieve 

    语法:  

    SELECT
    [DISTINCT] {* | {column [, column] ...}
    [FROM table_name]
    [WHERE ...]
    [ORDER BY column [ASC | DESC], ...]
    LIMIT ...

    2.1 全列查询 

    -- 通常情况下不建议使用 * 进行全列查询
    -- 1. 查询的列越多,意味着需要传输的数据量越大;
    -- 2. 可能会影响到索引的使用。

    SELECT * FROM table_name;  

    2.2 指定列查询 

    -- 指定列的顺序不需要按定义表的顺序来

    SELECT id, name, english FROM exam_result; 

    2.3 为指定列起别名 

    语法: 

    SELECT column [AS] alias_name [...] FROM table_name;  

    2.4 结果去重 

     distinct:对查询结果具有去重作用。

    SELECT DISTINCT math FROM exam_result; 

     2.5 where条件

    比较运算符:

    运算符说明
    >,>=,<,<=
    大于,大于等于,小于,小于等于
    =
    等于, NULL 不安全,例如 NULL = NULL 的结果是 NULL
    <=>
    等于, NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
    !=, <>
    不等于
    BETWEEN a0 AND a1
    范围匹配, [a0, a1] ,如果 a0 <= value <= a1 ,返回 TRUE(1)
    IN (option, ...)
    如果是 option 中的任意一个,返回 TRUE(1)
    IS NULL
    NULL
    IS NOT NULL
    不是 NULL
    LIKE
    模糊匹配。 % 表示任意多个(包括 0 个)任意字符; _ 表示任意一个字符

    逻辑运算符:

    运算符说明
    AND
    多个条件必须都为 TRUE(1) ,结果才是 TRUE(1)
    OR
    任意一个条件为 TRUE(1), 结果为 TRUE(1)
    NOT
    条件为 TRUE(1) ,结果为 FALSE(0)

    2.6 结果排序 

    语法:  

    -- ASC 为升序(从小到大)
    -- DESC 为降序(从大到小)
    -- 默认为 ASC
    SELECT ... FROM table_name [WHERE ...]
    ORDER BY column [ASC|DESC], [...];

    编写一个SQL查询,获取Employee表中第二高的薪水(Salary) 

    1. select Salary as SecondHighestSalary
    2. from Employee
    3. order by Salary
    4. desc
    5. limit 1
    6. offset 1

    2.7 筛选分页查询 

    语法:

    -- 起始下标为 0
    -- 0 开始,筛选 n 条结果
    SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
    -- s 开始,筛选 n 条结果
    SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
    -- s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
    SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;  

    建议:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死 

     3.Update

    语法:
    UPDATE table_name SET column = expr [, column = expr ...]
    [WHERE ...] [ORDER BY ...] [LIMIT ...]

    对查询到的结果进行列值更新 

    update book set price=61 where name='Java核心技术'; 

    4.Delete 

    语法: 

    DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...] 

    delete from product where price>60 or storage<200; 

     4.1 删除整表数据

    DELETE FROM table_name 

     注意:

    • 假如数据中有自增类型的数据,那么删除了整表的数据后,自增不会变为0,而是插入后继续增加。

    4.2 截断表

    语法:

    TRUNCATE [TABLE] table_name  

    1. 只能对整表操作,不能像 DELETE 一样针对部分数据操作;
    2. 实际上 MySQL 不对数据操作,所以比 DELETE 更快,但是 TRUNCATE 在删除数据的时候,并不经过真正的事物,所以无法回滚
    3. 会重置 AUTO_INCREMENT

     

    5 聚合函数 

    函数说明
    COUNT([DISTINCT] expr)
    返回查询到的数据的 数量
    SUM([DISTINCT] expr)
    返回查询到的数据的 总和,不是数字没有意义
    AVG([DISTINCT] expr)
    返回查询到的数据的 平均值,不是数字没有意义
    MAX([DISTINCT] expr)
    返回查询到的数据的 最大值,不是数字没有意义
    MIN([DISTINCT] expr)
    返回查询到的数据的 最小值,不是数字没有意义

    SELECT COUNT(*) FROM students;  --统计全班有多少学生

    SELECT SUM(math) FROM exam_result;  --统计数学成绩总分
    SELECT AVG(chinese + math + english) -- 平均总分 FROM exam_result;  --统计平均总分
    SELECT MAX(english) FROM exam_result;  --返回英语最高分
    SELECT MIN(math) FROM exam_result WHERE math > 70;  --返回数学大于70分的最低分

    6.group by子句 

    select中使用group by 子句可以对指定列进行分组查询 

    select column1, column2, .. from table group by column;  

    select deptno,avg(sal),max(sal) from EMP group by deptno; --显示每个部门的平均工资和最高工资 

     7.各个关键词执行顺序

    SQL查询中各个关键字的执行先后顺序 from > on> join > where > group by > with > having > select > distinct > order by > limit

     

  • 相关阅读:
    Git中的 fork, clone,branch
    java爬虫——HttpClient爬取jsoup解析
    利用445 端口渗透
    Tomcat10+Spring6报错
    Qt应用程序打包步骤(完美解决)
    docker和docker-compose生产的容器,不在同一个网段,解决方式
    MySQL性能优化顺序
    LeetCode算法心得——和可被 K 整除的子数组(前缀和+HashMap)
    模板、策略以及工厂模式
    数字电路逻辑与设计 之循环码和 移存码
  • 原文地址:https://blog.csdn.net/m0_72445027/article/details/134479858