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;

猜你喜欢

转载自www.cnblogs.com/shine-rainbow/p/13167736.html