【七天入门数据库】第四天 数据操作语言DML

系列文章传送门:

【七天入门数据库】第一天 MySQL的安装部署

【七天入门数据库】第二天 数据库理论基础

【七天入门数据库】第三天 MySQL的库表操作

【七天入门数据库】第四天 数据操作语言DML

文章目录:

一、insert语句(插入)

二、replace语句(插入)

三、update语句(更新)

四、detete和truncate语句(删除)

五、select语句(查询)

六、多表关联查询

七、SQL函数

一、insert语句(插入)

(一)默认插入

insert into 表名 values (数据1,数据2,.....);

(二)对应插入

insert into 表名(列名1,列名2,.....) values (数据1,数据2,.....);

(三)插入多行

insert into 表名(列名,列名2,.....) select 列名 from 表名;

二、replace语句(插入)

(一)默认插入

replace into 表名 values (数据1,数据2,.....);

(二)指定插入

replace  [into] set 列名1=值1,列名2=值2,.....;

(三)特点

若主键值或唯一值重复时,则原记录删除,再删除,条件可以为范围。

PS:where的使用:where+条件(可配合select筛选)

(四)REPLACE与INSERT语句区别

       replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新记录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。

       使用replace的最大好处就是可以将delete和insert合二为一(效果相当于更新),形成一个原子操作,这样就无需将delete操作与insert操作置于事务中了

三、update语句(更新)

(一)语法

update 表名 set 列名1=新值,列名2=新值,....[where 条件];

(二)注意

修改可以一次修改多行数据,修改的数据可用where子句限定,where子句里是一个条件表达式,只有符合该条件的行才会被修改。没有where子句意味着where字句的表达式值为true。也可以同时修改多列,多列的修改中间采用逗号(,)隔开

四、detete和truncate语句(删除)

(一)语法

1、delete from 表名 [where 条件];

2、truncate table 表名;

(二)DROP、TRUNCATE、DELETE的区别

delete:删数据,保留结构,可回滚,如果数据量大,很慢。

truncate: 删所有数据,保留结构,不可回滚,一次删除所有数据,速度相对很快。

drop: 删数据和表结构,删除速度最快。

五、select语句(查询)

(一)语法:select 列名 from 表名 [where 条件];

(二)特殊用法

1、别名:select 列名 别名 from 表名;

2、统计行数:select count(列名) from 表名[where 条件];

3、去重:select distinct 列名 from 表名 [where 条件];

4、升序:select 列名 from 表名 order by 要排序的列名;

5、降序:select 列名 from 表名 order by 要排序的列名 desc;

6、数组分组:select 列名 from 表名 [where 条件] group by 被分组的列名;

(三)查询结果限定

语法:select 列名 from 表名[where 条件] limit a ,b;

a:代表起始位置,从0开始

b:代表要返回记录行的最大行数

(四)MySQL的通配符

%:用来表示任意多个字符,包含0个字符

_ : 用来表示任意单个字符

escape:用来转义特定字符

六、多表关联查询

(一)inner join

代表选择的是两个表的交差部分,只取得键值一致的。

语法:SELECT 列名1,列名2... FROM 表1 INNER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

(二)left join

代表选择的是前面一个表的全部。左连接是以左表为标准,只查询在左边表中存在的数据。

语法:SELECT 列名1 FROM 表1 LEFT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

(三)right join

代表选择的是后面一个表的全部,右连接将会以右边作为基准,进行检索。

语法:SELECT 列名1 FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.外键=表2.主键 WhERE 条件语句;

(四)自连接

自连接顾名思义就是自己跟自己连接,参与连接的表都是同一张表。(通过给表取别名虚拟出)

(五)交叉连接

不适用任何匹配条件。生成笛卡尔积。

七、SQL函数

  • COUNT(*|列名) 统计行数
  • AVG(数值类型列名) 平均值
  • SUM (数值类型列名) 求和
  • MAX(列名) 最大值
  • MIN(列名) 最小值

PS:除了COUNT()以外,聚合函数都会忽略NULL值。

(一)面试题:count(*) 和 count(1)和count(列名)区别

  1. count(1) and count(*):count(1)和count(*)基本没有差别。

  2. count(1) and count(字段) :count(1) 会统计表中的所有的记录数,包含字段为null 的记录。而count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。

  3. count(*) 和 count(1)和count(列名)区别

    执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

    执行效率上: 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*) 如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count(*)最优。

(二)流程控制函数

1、IF(expr,v1,v2)

判断,流程控制,当expr = true时返回 v1,当expr = false、null 时返回v2。

2、IFNULL(v1,v2)

判断是否为空,如果 v1 不为 NULL,则 IFNULL 函数返回 v1,否则返回 v2。

3、CASE:搜索语句

都看到这里了,创作不易,大家点个赞再走啦!!- ̗̀(๑ᵔ⌔ᵔ๑)

 

你可能感兴趣的:(七天入门数据库,数据库,mysql)