• 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

     

  • 相关阅读:
    羊大师解析,羊奶香浓迎五一健康生活新选择
    Gradle系列【4】Project对象
    单向链表·初识【c语言】
    HTML+CSS+JavaScript仿京东购物网站制作 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
    数据结构和算法是人工智能的基石
    点云从入门到精通技术详解100篇-基于 CRF 模型语义优化的车载激光点云分类(续)
    webservice笔记
    如何完全、干净地卸载Oracle 11g数据库?
    动动嘴即可搜视频 抖音与Siri达成合作
    第五章 树和二叉树(上)【24王道数据结构笔记】
  • 原文地址:https://blog.csdn.net/m0_72445027/article/details/134479858