zoukankan      html  css  js  c++  java
  • SQL语句开发之常见的DML语句

    DML(Data Manipulation Language)

    • 新增表中的数据:insert into
    • 删除表中的数据:delete
    • 修改表中的数据:update
    • 查询表中的数据:select

    任务一:向表中写入数据

    ds1AwV

    编写Insert语句的思路

    • 确认要把数据插入到哪个表中 imc_class
    • 确认表的数据库结构,哪些列不能为null,哪些列可以为NULL,对于不能为NULL的列是否有默认值。(class_null)
    • 确认对应插入列的插入值的清单 values('mysql'),('redis')

    se1HD1

    # 创建数据库
    CREATE DATABASE imc_db;
    # 使用imc_db库
    use imc_db;
    # 创建imc_class
    CREATE TABLE `imc_class` (
      `class_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT '课程分类ID',
      `class_name` varchar(10) NOT NULL DEFAULT '' COMMENT '分类名称',
      `add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '填加时间',
      PRIMARY KEY (`class_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='课程分类';
    # AUTO_INCREMENT=14表示从第14条记录开始插入
    # 插入记录
    INSERT INTO imc_class(class_name) VALUES ('MYSQL'),('Redis'),('MongoDB'),('Oracle');
    # 创建唯一键
    create UNIQUE INDEX uqx_classname on imc_class(class_name);
    

    WZrx1x

    继续插入class_name为mysql的数据

    Do9r0P

    由于唯一键约束导致插入失败,但可以找一种讨巧的方案,即删除之前旧的数据插入新的数据。

    # 继续插入class_name为mysql的数据
    INSERT INTO imc_class(class_name) VALUES('MYSQL') 
    ON DUPLICATE KEY UPDATE
    add_time = CURRENT_TIME
    

    yb4ITI

    受影响的行数为2行,即先删除旧数据,再插入新数据,新数据的创建时间已发生变化。

    RKywtV

    任务二:查询表中的数据

    fwKv5d

    编写查询语句的思路

    • 首先确定需要获取的数据存在哪些表中 确定from子句
    • 其次是确定我们要取现表中的那些列 确定select子句
    • 确定是否需要对表中的数据进行过滤 确定where子句

    Where子句支持的过滤方法

    查询出课程表中课程标题含有MySQL的课程

    select * from imc_class where class_name like '%MySQL%';
    

    MySQL的比较运算符

    比较运算符 说明
    = > >= <= <> != <>和!=都表示不等于
    between min and max 列的值大于等于最小值,小于等于最大值
    is null、is not null 判断列的值是否为null
    in、not in 判断列的值是否在指定的范围内
    and,&& and运算符两百ode表达式都为真时,返回的结果才为真
    or,|| or运算符两边的表达式有一条为真,返回的结果就是真
    XOR XOR运算符两边的表达式一真一假时返回真,两真两假时返回假<异或>

    任何运算符和NULL值运算结果都为NULL

    多表关联之内关联

    ukk3aM

    多表关联之左外关联

    yBA2Ui

    多表关联之右外关联

    adZyft

    使用Group By ... Having子句的作用

    • 把结果集按照某些列分成不同的组,并对分组后的数据进行聚合操作

    wF6g0v

    • 可以通过可选的having子句对聚合后的数据进行过滤

    常用的聚合函数

    聚合函数 说明
    count(*)/count(col) 计算符合条件的数据行数
    Sum(col_name) 计算表中符合条件的数值列的合计数
    avg(col_name) 计算表中符合条件的数值列的平均数
    max(col_name) 计算表中符合条件的任意列中数据的最大值
    min(col_name) 计算表中符合条件的任意列中数据的最小值

    使用order by子句对查询结果进行排序

    • 使用order by子句对查询结果进行排序是最安全的方法
    • 列名后增加asc关键字指定该列的升序进行排序(或是指定desc关键字指定该列的降序进行排序)
    • order by 子句也可以使用select子句中未出现的列或是函数

    使用Limit子句限制返回结果集的行数

    • 常用于数据列表分页
    • 一定要和order by 子句配合使用
    • limit起始偏移量,结果集的行数

    视图

    创建视图

    R0Y0IS

    任务三:按条件删除表中的数据

    T8giaz

    编写Delete语句的思路

    • 确定要删除的数据存储在哪张表中 from子句
    • 确定删除数据的过滤条件 where子句
    • 确定是否只删除有限条数据 order by ... limit 子句

    修改表中符合条件的数据

    ongveJ

    编写update语句的思路

    • 确定要更新的数据存储在哪张表中 update子句
    • 确定要更新的列及值 set 子句
    • 确定更新数据的条件 where子句
    # 向已创建的表中添加某一列信息
    alter table imc_course add is_recommend tinyint default 0 comment '是否推荐,0不推荐,1推荐'
    # 重新查看建表语句
    show create table imc_course;
    # 随机推荐10门课程 Rand()随机函数 + limit
    select course_id from imc_course order by Rand() limit 10;
    
  • 相关阅读:
    23种设计模式之过滤模式
    23种设计模式之建造者模式
    23种设计模式之桥接模式
    23种设计模式之策略模式
    Redis缓存相关问题
    docker命令大全
    过滤器filter和springmvc拦截器的区别及实现
    23种设计模式之装饰器模式
    Model ModelMap ModelView三者的区别你造吗
    解决并发问题的一般思路及使用redis实现秒杀
  • 原文地址:https://www.cnblogs.com/shine-rainbow/p/13167736.html
Copyright © 2011-2022 走看看