数据库基本查询(表的增删查改)

一、增加

1、添加信息  insert 

语法

insert into table_name (列名) values (列数据1,列数据2,列数据3...)

若插入时主键或唯一键冲突就无法插入。

但如果我们就是要修改一列信息也可以用insert

insert into table_name (列名) values (列数据1,列数据2,列数据3...) on duplicate key update colum=value...

举例

2、替换  replace

语法

replace into table_name (列名) values (列数据1,列数据2,列数据3...)

不论是否冲突直接替换,所以上面提到的insert插入操作可以用replace

举例

二、查询  

1、查询表信息  select

语法

(1)select * from table_name;                 

查看表中全部列信息

(2)select 列名 from table_name;          

查看表中指定列信息(列名之后用as或空格可以让打印出来的列名修改)

上图中 id, name, math 表示想要查询多列信息用逗号隔开。

(3)select 表达式 from table_name;            

上图中chinese+math+english就是表达式,select自动帮我们计算好了。

 (4)select distinct 列名 from table_name;     

查看去重之后列中数据

2、where子句

在上面的select用法中我们只是查看一列列完整的信息,但是除了对列筛选,还要对列中的信息进行筛选,所以就要用到where子句。

运算符介绍

运算符 说明
> < >= <= 大于 小于 大于等于 小于等于
=    比较相等,但是无法比较null
<=>

比较相等,可以比较null

!=     <>    比较不相等,前者不能比较null后者能
between a0 and a1 范围匹配数据从a0到a1
in (option1,2...) 匹配圆括号中任意一个数据
is null 是否为null(推荐使用)
is not null 是否不是null
like 

模糊匹配,%表示匹配任意多

_符号个数表示匹配多少字符

and 逻辑与
or 逻辑或
not 逻辑取反

上述符号使用时支持()圆括号优先级修改。

举例

上文我们提到列名后面跟空格可以修改打印的列名,但是为什么这里会报错呢?

这语句可以分成三部分:select,from,where,分别代表三个阶段:显示数据,选择表,筛选数据。

所以按顺序应该是from where select ,所以上图中在最后一个阶段定义的“总分”是不能出现在筛选数据阶段的。

3、结果排序

语法

asc 升序  

desc 降序

默认asc

select .... from table_name order by 列名 asc/desc

没有order by返回表中顺序

null比任何值小

举例

上图中为什么可以重命名呢?

因为分成三个阶段:select,from,order by,分别代表:显示 选择表 排序

顺序应该是先选择表,显示数据,最后排序,所以在排序之前定义的名称就可以用。

4、筛选分页结果

语法

(1)select ... from table_name limit n;

从表中开始取n行显示。

(2)select ... from table_name limit n,m;

从表中第n+1行(因为表行从0开始)开始取m行显示。

(3)select ... from table_name limit n offset m;

从表中m+1行开始显示n行。

limit不是条件筛选,本质是显示。

举例

三、更新

语法

update table_name set column = 表达式.... 查询语句[where][order by][limit];

对查询结果进行列值更新,一般加上where子句查询,不然就修改一列。

举例

表达式不支持 += *= ....

四、删除

语法

用查询语句就能准确找到要删除值

delete from table_name 查询语句[where][order by][limit];

删除整表 

dalete from table_name;

举例

五、插入查询结果

语法

insert into table_name [column...] select....;

举例

删除一张表中的重复数据

1、先复制原表结构   create table table_name like table_name;

2、用插入查询结果进行不重复数据的插入

insert into no_duplicate_table select distinct * from duplicate_table;

3、最后把目标表重命名

rename table duplicate_table to old_table, no_duplicate_table to duplicate_table;

思考:为什么最后要重命名,不能一开始就把文件要的数据直接写入?

在Linux上面,一般上传文件都不是原子的,就导致速度慢。但是放入临时文件里面进行操作,最后重命名就是原子的,速度快。

六、聚合函数

函数 说明
count ([distinct] 表达式) 查询到的数据个数
sum ([distinct] 表达式) 查询到的数据总和
avg ([distinct] 表达式) 查询到的数据平均数
max ([distinct] 表达式) 查询到的数据最大值
min ([distinct] 表达式) 查询到的数据最小值

要保证数据是可聚合的,不是数字是无意义的。

举例

七、分组查询   group by子句

分组的目的就是为了分组之后方便聚合统计。

语法

select column1,column2,column3... from table_name group by column;

语法理解

1、从table_name中进行分组查询,指定column列名,根据列名中不同的行数据进行分组,相同的行数据就会聚合统计。

2、分组就像一张表在按条件逻辑上进行拆分成多张子表,分别对多张子表进行聚合统计。

举例

现在我们有一个数据库里面存放三张表,分别是emp(员工表),dept(部门表),salgrade(薪资表)

1、显示每个部门平均、最高工资

2、显示每个部门每个职业平均、最低工资

但是我们发现上图想显示一下员工名字就报错了,这是为什么呢?

因为名字是不相同的没有办法分组聚合,而且大原则是只有在group by 之后的列名才能在select之后显示,当然聚合函数也是在select后面显示。

至于想加上名字就不应该用聚合函数来实现,应该用where子句等方式筛选。

3、显示平均工资低于2000的部门和他的平均工资

我们发现这个问题有对聚合出来的数据进行筛选,所以我们使用having子句来实现。

4、hanving子句和where子句的区别与理解

顺序如下图

所以where子句是对任意列进行条件筛选,但是having子句专门对聚合数据进行条件筛选,虽然两者都有条件筛选,但是非常不建议混用。

相关推荐

  1. MySQL 数据库增删(基础版)

    2024-07-15 17:56:01       46 阅读
  2. 数据库】MySQL增删

    2024-07-15 17:56:01       47 阅读
  3. MySQL 增删(基础)

    2024-07-15 17:56:01       53 阅读
  4. 【MySQL】增删基础

    2024-07-15 17:56:01       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 17:56:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 17:56:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 17:56:01       58 阅读
  4. Python语言-面向对象

    2024-07-15 17:56:01       69 阅读

热门阅读

  1. python2与python3中的subprocess.Popen差异

    2024-07-15 17:56:01       20 阅读
  2. 面向开发者的提示词工程第一章-简介

    2024-07-15 17:56:01       23 阅读
  3. Python网页开发的常用框架

    2024-07-15 17:56:01       21 阅读
  4. 721. 账户合并 Medium

    2024-07-15 17:56:01       24 阅读
  5. DMA和DMAC

    2024-07-15 17:56:01       22 阅读
  6. 面试官:说说MySQL 中的悲观锁和乐观锁

    2024-07-15 17:56:01       20 阅读