MySQL(二):表的增删改查

表的增删改查

  • 一、 新增数据
  • 二、 查询数据
    • 2.1 全列查询
    • 2.2 指定列查询
    • 2.3 查询字段为表达式
    • 2.4 查询后起别名
    • 2.5 去重查询
    • 2.6 排序查询
    • 2.7 条件查询
    • 2.8 分页查询
  • 三、 修改数据
  • 四、 删除数据

增删改查的前提是,已经将数据库创建好,并选中数据库,同时表也创建好了

一、 新增数据

【SQL语句】

insert into 表名 values(,,..);

【说明】:

  • into可以省略
  • 值的个数要和该表中的列的个数相匹配
  • 值的类型也要和列的类型相匹配

【使用示例】:
MySQL(二):表的增删改查_第1张图片【补充】:

在SQL中,字符串既可以用’ ’ 也可以用 " " 来引用, 同时在SQL中没有字符类型

【指定列插入】
其他未被指定插入的列,填入默认值

insert into 表名 (列名) values();

【使用示例】
MySQL(二):表的增删改查_第2张图片
【insert语句一此插入多条记录】
在values的后面,带有多组( ),每组括号之间用,分隔

【使用示例】
MySQL(二):表的增删改查_第3张图片

【性能比较】

在MySQL中一次插入一条记录,分多次插入,相比于一次插入多条记录要慢上很多,因为MySQL是一个客户端-服务器的程序,每次在客户端输入的命令sql都是通过网络进行传输的,同时在MySQL服务器中是通过一系列复杂的数据结构来组织数据的,每次插入操作都是比较耗时的(在数据结构中进行一定的遍历找到合适的位置),分多次插入自然就会更耗时

二、 查询数据

2.1 全列查询

把整个表中的数据全部都查询出来
【SQL语句】

select * from 表名;

*是通配符,表示匹配任意的列

【使用示例】
MySQL(二):表的增删改查_第4张图片
查询过程:
MySQL(二):表的增删改查_第5张图片
大数据量带来的问题:

如果数据库中的数据特别多(上亿条数据),执行select * 会发生什么情况呢?
服务器先读取磁盘,把这些数据查询出来,在通过网卡把数据传输给客户端,但由于数据量非常大,很有可能就把磁盘IO吃满或者把网络带宽吃满,IO吃满或网络带宽吃满,都会导致服务器卡顿,如果当前操作的数据库是生产环境的数据库,因为select *就可能导致生产环境服务器的卡顿,从而影响到用户的体验

2.2 指定列查询

【SQL语句】

select 列名,列名... from 表名;

【使用示例】
MySQL(二):表的增删改查_第6张图片
当省略调一些不必要的列时,就可以节省大量的磁盘IO 和网络带宽

2.3 查询字段为表达式

查询时带有表达式,让查询的结果进行一些计算
表达式查询,其中的运算都是指列和列之间的运算,而对于行和行之间的运算有其他方法

【代码示例1】
在查询结果中让每个同学的语文成绩都多10分
MySQL(二):表的增删改查_第7张图片
【代码示例2】
MySQL(二):表的增删改查_第8张图片

2.4 查询后起别名

为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称
【SQL语句】

select 列名或表达式 as 别名 from 表名

【代码示例】
MySQL(二):表的增删改查_第9张图片

2.5 去重查询

使用distinct关键字对某列数据进行去重
【SQL语句】

select distinct 列名 from 表名

【代码示例】
MySQL(二):表的增删改查_第10张图片
如果distinct后面指定多个列,必须多个列的值都想同才会进行去重,否则不去重
【代码示例】
MySQL(二):表的增删改查_第11张图片

2.6 排序查询

在查询过程中,对查询到的结果进行排序(针对临时表排序,对于数据库上原有的数据没有影响)

【SQL语句】

select 列名 from 表名 order by 列名;

【使用示例1】:升序排序
MySQL(二):表的增删改查_第12张图片
【使用示例2】:降序排序
MySQL(二):表的增删改查_第13张图片
【注意】:

  • 默认情况下是升序排序(asc),如果想要降序排序需要在末尾加上desc
  • 没有order by 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序
  • NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
  • SQL中,如果用NULL和其他类型进行混合运算结果仍然是NULL

【使用示例3】:使用表达式和别名排序
MySQL(二):表的增删改查_第14张图片
【使用示例4】:可以根据多个字段进行排序,排序优先级随书写顺序、
MySQL(二):表的增删改查_第15张图片

2.7 条件查询

指定条件,对于查询结果,进行筛选

比较运算符:
MySQL(二):表的增删改查_第16张图片
逻辑运算符:
MySQL(二):表的增删改查_第17张图片
【SQL语句】

select * from 表名 where 条件;

【注意】:

  1. WHERE条件可以使用表达式,但不能使用别名。
  2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

【使用示例1】:基本查询
MySQL(二):表的增删改查_第18张图片
MySQL(二):表的增删改查_第19张图片
MySQL(二):表的增删改查_第20张图片

【使用示例2】:AND 和 OR
MySQL(二):表的增删改查_第21张图片

【使用示例3】:观察AND 和 OR 的优先级

MySQL(二):表的增删改查_第22张图片
MySQL(二):表的增删改查_第23张图片
【使用示例4】:范围查询(between…and…)
MySQL(二):表的增删改查_第24张图片
【补充】:

我们使用and也可以实现范围查询,为什么还要有between…and…呢?
这就涉及到了MySQL中自身实现的优化手段,相比于使用and来说,between…and…是更好的进行优化的

【使用示例5】:范围查询(IN)
MySQL(二):表的增删改查_第25张图片
【使用实例6】:模糊查询(LIKE)

MySQL(二):表的增删改查_第26张图片
【使用示例7】:NULL的查询
MySQL(二):表的增删改查_第27张图片

2.8 分页查询

使用limit关键字限制返回的结果条数,使用offset来确定从第几条开始进行返回

在查询结果中,只取出其中的一部分,从而降低开销,加快查询速度。
例如,论坛类的网站,展示帖子的时候,往往会有分页展示的效果,一个论坛可有成千上万条帖子,在我们刚打开页面的时候,只能先看到其中的一小部分,点击翻页后能看到后续的内容

【SQL语句】

select 列名 from 表名 limit N offset M;	
select 列名 from 表名 limit M,N; 

上述两种写法等价,从第M条开始查询,最多返回N条记录
当offset M省略时,表示从第0条记录开始返回
【使用示例1】:
MySQL(二):表的增删改查_第28张图片

limit也可以和where、order by搭配使用的

【使用示例2】:
MySQL(二):表的增删改查_第29张图片

在上面我们提到像select * 这样的操作,容易将数据库的服务器弄挂了,但是除了select* 之外,只要返回的记录足够多,就算是进行了where 的条件筛选后的查询也同样是有风险的,更稳妥的办法是加上limit

三、 修改数据

修改数据,是针对数据库服务器中的数据进行修改

【SQL语句】

update 表名 set 列名=,列名=.... where 子句;

【使用示例1】:
MySQL(二):表的增删改查_第30张图片
【使用示例2】:
MySQL(二):表的增删改查_第31张图片
【使用示例3】:
MySQL(二):表的增删改查_第32张图片

修改操作是针对条件筛选之后,剩下的数据进行的修改,如果没写条件,意味着就是针对所有行进行修改

【使用示例4】:
MySQL(二):表的增删改查_第33张图片

四、 删除数据

【SQL语句】:

delete from 表名 where 条件;

删除符合条件的行

delete from 表名;

把表里面的记录都删了,表只剩下一个空的表了,当表还在
drop table 表名;是将整个表都删掉了

【使用示例】:
MySQL(二):表的增删改查_第34张图片

你可能感兴趣的:(MySQL,mysql,数据库,sql)