MySQL基础教程之DML语句详解

目录
  • DML 语句
  • 1.插入记录
  • 2.更新记录
  • 3.简单查询记录
  • 4.删除记录
  • 5.查询记录详解(DQL语句)
    • 5.1.查询不重复的记录
    • 5.2.条件查询
    • 5.3.聚合查询
    • 5.4.排序查询
    • 5.5.limit查询
    • 5.6.连表查询
    • 5.7.子查询
    • 5.8.记录联合
    • 5.9.select语句的执行顺序
  • 6.总结

DML 语句

DML(Data Manipulation Language)语句:数据操纵语句。

用途:用于添加、修改、删除和查询数据库记录,并检查数据完整性。

常用关键字:insert、update、delete、select等。

DML 操作的对象是库表的数据(记录)。

主要包括插入(insert)、更新(update)、删除(delete)和查询(select)。

DML 语句是开发人员使用最频繁的操作。

1.插入记录

插入一条记录

insert into tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen);

一次性插入多条数据

insert into tablename

 (field1,field2,...,fieldn)

values

 (value1,value2,...,valuen),

 (value1,value2,...,valuen);

2.更新记录

更新单表数据

update tablename set field1=value1,filed2=value2,...fieldn=valuen [where condition]

同时更新多个表的数据

update t1,t2,...,tn set t1.field1=expr1,tn.field=exprn [where condition];

通常用于根据一个表的字段来动态地更新另外一个表的字段

在此说明:中括号 “[ ]” 代表的是可选参数,即可有可无的参数。

3.简单查询记录

简单的条件查询。符号“*”代表查询所有字段,如果只想看其中某些列,则写表的列名。

select * from tablename [where condition];

select field1,field2,...,fieldn from tablename [where condition];

别名

    给列名或表名取别名的关键字:AS 或者不写关键字。如:

select field1 AS f1,field2 f2  from tablename;

select t2.field1 AS f1,t1.field2 f2  from table1 as t1,table2 t2;

不取别名,则查询结果的列名为表原本的列名;

取别名,则查询结果的列名为别名

4.删除记录

删除单表记录

delete from tablename [where condition];

同时删除多个表的数据

delete t1,t2,...,tn from t1,t2,...,tn [where condition];

说明:不加where 条件则删除全表数据

单表“增改查删”操作案例:

多表“删除”操作案例:

  再看个删除案例

 最后再看个删除案例

多表删除结论:

  条件成立,则删除有条件表的对应数据,没条件的则全表删除;

  条件不成立,则都不删除。

留个疑问:多表删除不给where 条件会怎样呢?

关于同时更新多个表数据的操作,可以自行探索,毕竟有思考的学习最有价值。

5.查询记录详解(DQL语句)

DQL(Data Query Language)即数据库查询语言。

数据库查询语句就像玩积木一样,一块一块的拼凑,每个中括号“[]”代表一块积木。

先通过递进的方式一条一条列出查询语法。

5.1.查询不重复的记录

select distinct filed from tablename;

distinct 关键字是对 “查询结果集” 去重,再看个例子就明白了。

5.2.条件查询

--查询所有列:

select * from tablename [where condition];

--查询指定列:

select [field1,field2,...,fieldn] from tablename [where condition];

常用的条件(condition)

等于:field = xxx

大于:field > xxx

小于:field < xxx

不等于:field != xxx

不等于:field <> xxx

等于null:field is null

不等于null:field is not null

多个条件之间用逻辑运算符:and 和 or 

模糊查询之"_":field like _x_xx_     符号"_"代表匹配单个任意字符,可以在你喜欢的字符旁加上"_"

模糊查询之"%":field like %x%xx%     符号"%"代表匹配0~n个任意字符,可以在你喜欢的字符旁加上"%"

in语句查询:field in(value1,value2,...)  查询field 和 in 数组配得上的,不配就没有数据

not in语句查询:field not in(value1,value2,...)   查询field 和 in 数组配不上的,不配就有数据

其它常用条件具体怎么用,参考常用条件去操作。

5.3.聚合查询

--最简单的聚合查询:
select [field1,field2,...,fieldn] fun_name from tablename group by field;
--完整语法:
select [field1,field2,...,fieldn] fun_name from tablename
 [where condition]
 [group by field1,field2,...,fieldn [with rollup]]
 [having condition];

说明:

fun_name  表示聚合函数,常用有:求和sum()、记录数count(*)、平均值avg()、最大值max()、最小值min();

[where condition] 就是上面讲的条件查询;

[group by field1,field2,...,fieldn [with rollup]] 

  group by 关键字表示对field字段进行分类聚合;

  with rollup 关键字表示是否对分类聚合后的结果进行再汇总

[having condition] 对分类聚合后的查询结果集进行条件的过滤

where 和 having 的区别:

  1. where 是分组前的条件过滤;having 是分组后的条件过滤。
  2. where 是用原表列名做条件过滤;having 是用查询结果集列名做条件过滤。

    优先选择where 条件过滤,这样可以减少结果集,进而提高分类聚合的效率。

中括号"[]"代表可选的意思,也就是说group by 前面的[where condition] 可有可无,后面的[with rollup] 和 [having condition] 也是可有可无。

group by 和distinct 的区别:    group by 是对指定列进行分组;distinct 是对查询结果进行去重。

加入where 和 having的例子:

列名为avg(stu_age) 看着有点怪怪,给他取个别名就一目了然:

5.4.排序查询

--最简单的排序查询:
select * from tablename order by field;
--完整语法:
select [field1,field2,...,fieldn] fun_name from tablename
 [where condition]
 [group by field1,field2,...,fieldn [with rollup]]
 [having condition]
 [order by field1 [desc|asc], field2 [desc|asc],...,fieldn [desc|asc]];
DESC 代表降序(从大到小);ASC 代表升序(从小到大),asc为默认排序。也就是说你只要记住desc 就可以了。碰巧的是desc 是查询表设计的关键字,而且语法很简单:desc tablename;

单列排序:

多列排序:用符号 “,” 隔开即可

5.5.limit查询

  又称为限制查询、范围查询、分页查询

--最简单的limit查询:offset_start和数组下标一样,从0开始算
select * from tablename limit offset_start,row_count;
--完整语法:这条sql是单表查询的完整版
select [field1,field2,...,fieldn] fun_name from tablename
 [where condition]
 [group by field1,field2,...,fieldn [with rollup]]
 [having condition]
 [order by field1 [desc|asc], field2 [desc|asc],...,fieldn [desc|asc]]
 [limit offset_start,row_count];

例子1:从第1条开始,查询两条数据

例子2:从第2条开始,查询两条数据

=========================

= 以上就是关于单表查询的语法 =

= 以下则是关于两表联查的语法 =

=========================

5.6.连表查询

在需要关联多个表数据时使用。 学习左连接和内连接即可。

左连接:选出左表所有的记录,不管右表有没有和它匹配;左表是主,关联右表信息

select * from t1 left join t2 on t1.field1=t2.field2;

内连接:仅选出两张表中互相匹配的记录,没有匹配则结果为空

select * from t1 inner join t2 on t1.field1=t2.field2;

select * from t1,t2 where t1.field1=t2.field2;

5.7.子查询

在需要另外一个查询结果作为查询条件时使用。子查询用“()” 括起来。

如:查询学生“张三”的成绩

某些情况下,子查询可以转化为连表查询。如上面的例子可以写成连表查询:

5.8.记录联合

 将两个过多个表的查询结果合并成结果集输出。合并的条件是多个表的查询结果字段数要相同,注意是查询结果字段数不是表字段数。

select f1,f2,...,fn from t1

union/union all

select f1,f2,...,fn from t2

...

union/union all

select f1,f2,...,fn from tn

查询结果字段数不等,则报错

固定查询结果集字段数

5.9.select语句的执行顺序

自行证明该执行顺序是否正确,也算是对前面所学知识的一个巩固。​

(7)  SELECT 

(8)  DISTINCT <select_list>

(1)  FROM <left_table>

(3)  <join_type> JOIN <right_table>

(2)  ON <join_condition>

(4)  WHERE <where_condition>

(5)  GROUP BY <group_by_list>

(6)  HAVING <having_condition>

(9)  ORDER BY <order_by_condition>

(10) LIMIT <limit_number>​

6.总结

到此为止,关于日常操作最为频繁的表数据的插入(insert)、更新(update)、删除(delete)和查询(select)语句就讲完了。最为繁杂的查询语句,又名为DQL语句,是DML语句中的重点。

到此这篇关于MySQL基础教程之DML语句的文章就介绍到这了,更多相关MySQL基础之DML语句内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解mysql DML语句的使用

    前言: 在上篇文章中,主要为大家介绍的是DDL语句的用法,可能细心的同学已经发现了.本篇文章将主要聚焦于DML语句,为大家讲解表数据相关操作. 这里说明下DDL与DML语句的分类,可能有的同学还不太清楚. DDL(Data Definition Language):数据定义语言,用于创建.删除.修改.库或表结构,对数据库或表的结构操作.常见的有create,alter,drop等. DML(Data Manipulation Language):数据操纵语言,主要对表记录进行更新(增.删.改).

  • MySQL DML语句整理汇总

    DML操作是指对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查询(select),是开发人员日常使用最频繁的操作. 1.插入(insert) 格式1. INSERT INTO emp(ename,hiredate,sal,deptno) VALUES('zzx1','2000-01-01','2000',1); 格式2. INSERT INTO emp VALUES('lisa','2003-02-01','3000',2); 不用指定

  • MySQL数据操作-DML语句的使用

    说明 DML(Data Manipulation Language)数据操作语言,是指对数据库进行增删改的操作指令,主要有INSERT.UPDATE.DELETE三种,代表插入.更新与删除,这是学习MySQL必要掌握的基本知识. 方语法中 [] 中内容可以省略. INSERT操作 逐行插入 语法格式如下: insert into t_name[(column_name1,columnname_2,...)] values (val1,val2); 或者 insert into t_name se

  • MySQL基础教程之DML语句详解

    目录 DML 语句 1.插入记录 2.更新记录 3.简单查询记录 4.删除记录 5.查询记录详解(DQL语句) 5.1.查询不重复的记录 5.2.条件查询 5.3.聚合查询 5.4.排序查询 5.5.limit查询 5.6.连表查询 5.7.子查询 5.8.记录联合 5.9.select语句的执行顺序 6.总结 DML 语句 DML(Data Manipulation Language)语句:数据操纵语句. 用途:用于添加.修改.删除和查询数据库记录,并检查数据完整性. 常用关键字:insert

  • Python基础教程之pytest参数化详解

    目录 前言 源代码分析 装饰测试类 装饰测试函数 单个数据 一组数据 组合数据 标记用例 嵌套字典 增加测试结果可读性 总结 前言 上篇博文介绍过,pytest是目前比较成熟功能齐全的测试框架,使用率肯定也不断攀升.在实际 工作中,许多测试用例都是类似的重复,一个个写最后代码会显得很冗余.这里,我们来了解一下 @pytest.mark.parametrize装饰器,可以很好的解决上述问题. 源代码分析 def parametrize(self,argnames, argvalues, indir

  • Docker基础教程之Dockerfile语法详解

    前言 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明ima

  • android基础教程之context使用详解

    在android中有两种context,一种是application context,一种是activity context,通常我们在各种类和方法间传递的是activity context. 区别联系: 复制代码 代码如下: public class MyActivity extends Activity {    public void method() {       mContext = this;    // since Activity extends Context       m

  • 查看当前mysql使用频繁的sql语句(详解)

    #mysql -uroot -p 输入密码 mysql> show full processlist;    查看完全的SQL语句 mysql> show processlist;         查看整体情况 这样子可以针对SQL语句进行优化. 以上这篇查看当前mysql使用频繁的sql语句(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 基于Android studio3.6的JNI教程之opencv实例详解

    基本环境: Android studio3.6 NDK:r14b(尽量使用该版本) Opencv3.4.1 android sdk (1)新建工程OpenCVDemo,选择,一定要选择Native c++类型,最后要选c++14支持. (2)File->Project Structure->SDK Location,设置这3个路径,NDK选择r14b. (3)任意找一张图片,复制到res/drawable. (4)修改布局文件res/layout/ activity_main.xml <

  • 基于Android studio3.6的JNI教程之helloworld思路详解

    jdk环境变量配置: path中增加下面2个路径,也就是android studio的路径,android有自带的jdk. E:\Android\Android Studio\jre\bin E:\Android\Android Studio\bin 新建工程: 一定要选择Native c++类型,最后要选c++11支持. SDK设置: File->Settings File->Project Structure 首先确定工程的目录结构,然后尝试运行一下工程,使用模拟器,确保工程没问题, 在M

  • ES6学习教程之Promise用法详解

    前言 promise用了这么多年了,一直也没有系统整理过.今天整理整理promise的相关东西,感兴趣的可以一起看一看.我尽量用更容易理解的语言来剖析一下promise 我准备分两篇文章来说明一下promise 一篇来理解和使用promise(本篇) 另一篇来从promise使用功能的角度来剖析下promise的源码(下一篇) 1.什么是Promise 我的理解是:实现让我们用同步的方式去写异步代码的一种技术.是异步解决方案的一种. 他可以将多个异步操作进行队列化,让它们可以按照我们的想法去顺序

  • MySQL一些常用高级SQL语句详解

    目录 一.MySQL进阶查询 二.MySQL数据库函数 三.MySQL存储过程 总结 一.MySQL进阶查询 首先先创建两张表 mysql -u root -pXXX #登陆数据库,XXX为密码 create database jiangsu; #新建一个名为jiangsu的数据库 use jiangsu; #使用该数据库 create table location(Region char(20),Store_name char(20)); #创建location表,字段1为Region,数据类

  • MySQL中的SQL标准语句详解

    目录 前言 对数据库的操作 对表的操作 表的创建 表的插入 表的修改 表的删除 表的查询 条件查询 前言 例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言. 语法要求: SQL语句可以单行或多行书写,以分号结尾: 可以用空格和缩进来来增强语句的可读性: 关键字不区别大小写,建议使用大写: 对数据库的操作 #语法: CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHAR

随机推荐