0
点赞
收藏
分享

微信扫一扫

mysql之增删改查和集合操作

婉殇成长笔记 2022-02-15 阅读 75

mysql学习

创建表的时候 晋江加上 create_time字段,为create_time设置默认值CURRENT_TIMESTAMP

CRUD操作

  • Create( 增 )

    • 单条插入

      INSERT INTO 表名(字段1,字段2,...) VALUES(值1,值2,...)
      
      INSERT INTO class_1(name) VALUES('张三');
      
    • 多条插入

      INSERT INTO 表名(字段1,字段2,...) VALUES(值1,值2,...),(值1,值2,...)
      
      INSERT INTO class_1(name) VALUES('张三'),('李四')
      
  • Retreve ( 查 )

    • 获取所有记录

      SELECT 字段1,字段2(可以用 * 代替全部) FROM 表名
      
      SELECT * FROM class_1
      SELECT name FROM class_1
      
    • 条件查询 ( WHERE,AND,OR

      SELECT 字段1,字段2(可以用 * 代替全部) FROM 表名 WHERE 表达式
      
      SELECT * FROM class_1 WHERE name="张三"
      SELECT * FROM class_1 WHERE name="张三" AND id=3
      
    • 模糊匹配 (LIKE,%

      n%   %n   %n%    n为要模糊查询的内容,%为不确定因素  
      
      
      SELECT * FROM class_1 WHERE name LIKE "%四%";
      
    • 限制返回条数 (LIMIT)

      LIMIT 需要几条数据   (数量)
      
      SELECT * FROM class_1 WHERE name LIKE "%四%" LIMIT 2;
      
    • 过滤重复值 (distinct) 去重

      对查询的结果进行过滤

      SELECT distinct 字段1,字段2,... FROM class_1 可以加表达式
      
      SELECT distinct name FROM class_1;
      
      (可以加入任意表达式)
      SELECT distinct name FROM class_1 WHERE name LIKE "%四%";
      
    • 排序问题

      对查询的结果进行排序

      • 升序 (ASC) ORDER BY

        									ORDER BY  排序字段 ASC 默认
        
        SELECT name,create_time FROM class_1 ORDER BY create_time
        

        数据库默认是升序

      • 降序 (DESC)

        									  ORDER BY  排序字段 desc
        
        SELECT name,create_time,id FROM class_1 ORDER BY id desc
        
    • 获取查询结果的数量(count

      SELECT count(字段) FROM 表名;
      
      SELECT count(*) FROM class_1;
      SELECT count(name) FROM class_1;
      
  • Update(更新)

    UPDATE 表名 SET 字段1=新值,字段2=新值,... WHERE 表达式
    											(需要确定要修改那一条数据)
    		!!!不加表达式 就会 更改全部的数据!!!
    
    UPDATE class_1 SET name='王五' WHERE id=1
    
  • Delete (删除)

    DELETE FROM   表名   表达式
    				(需要确定要删除那一条数据)
    	    !!!不加表达式 就会 删除全部的数据!!!!
    
    DELETE FROM class_1 WHERE id=11
    

    集合操作

    • 并集 UNION

      子语句 SELECT 必须拥有相同数量的列(字段),且列的数据类型也相同

      SELECT name FROM class_1 WHERE name is not NULL
      UNION
      SELECT name FROM class_2 WHERE name is not NULL
      
    • 交集 JOIN,INNER

      1 先将需要求交集的 表 的 字段 提取出来 放到变量里
      2 中间添加 JOIN  交集操作
      3 添加 ON表达式 表1中的字段 和 表2中的字段  相同的值
      4 SELECT s1.name FROM   s1和s2都可以  因为值是相同的
      
      
      -- 交集
      SELECT s1.name FROM
      (SELECT name FROM class_1 WHERE name is not NULL) as s1
      JOIN
      (SELECT name FROM class_2 WHERE name is not NULL) as s2
      ON s1.name = s2.name
      
    • 差集(LEFT JOIN,RIGHT JOIN)

      A对B的 差集 就是 LEFT JOIN

      -- 差集
      SELECT A.name FROM
      (SELECT name FROM class_1 WHERE name is not NULL) as A
      LEFT JOIN
      (SELECT name FROM class_2 WHERE name is not NULL) as B
      ON A.name = B.name
      WHERE B.name is NULL   // 限定A有  B没有的记录
      

      B对A的 差集 就是 RIGHT JOIN

      -- 差集
      SELECT B.name FROM
      (SELECT name FROM class_1 WHERE name is not NULL) as A
      RIGHT JOIN
      (SELECT name FROM class_2 WHERE name is not NULL) as B
      ON A.name = B.name
      WHERE A.name is NULL  // 限定A没有,B有的记录
      
    • 补集

      -- 差集
      -- A->B
      SELECT A.name FROM
      (SELECT name FROM class_1 WHERE name is not NULL) as A
      LEFT JOIN
      (SELECT name FROM class_2 WHERE name is not NULL) as B
      ON A.name = B.name
      WHERE B.name is NULL   
      
      UNION  -- 两个差集相加 就是 补集
      
      -- B->A
      SELECT B.name FROM
      (SELECT name FROM class_1 WHERE name is not NULL) as A
      RIGHT JOIN
      (SELECT name FROM class_2 WHERE name is not NULL) as B
      ON A.name = B.name
      WHERE A.name is NULL
      
举报

相关推荐

0 条评论