MySQL数据库 数据库基本操作(二):表的增删查改(上)

1. CRUD

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写,就是数据库基本操作中针对表的一系列操作.

2. 新增(create) -->insert

语法:
insert into 表名 [列名1,列名2...] values (val1,val2...)

[注意]

  • 列名可以没有,如果没有列名,所有的列都应该插入,即val包含所有列的值.
  • 后面的val必须和前面的列名对应.
  • 各个数据之间用,隔开.

2.1 单行数据+全列插入

insert into emp values (null,'张十一','java程序员',16000);

在这里我们看到,salary一列原生是decimal类型的数据,但是我们这里在插入的时候salary一列输入的是int类型的数据,也插入成功了,这是因为sql对int类型进行了隐式类型转换 这里我们就提到了sql语言的特性:
sql语言是一种弱类型的语言,在一种语言中越支持隐式类型转换,类型越弱.

2.2 多行插入+指定列插入

insert into emp (id,name,role) values(8,'李十二','测试工程师');

3. 查询(retrieve) -->select

语法:
select 列名1,列名2(或是表达式) from 表名

3.1 全列查询 -->*

select * from emp

查询该表中所有数据

[注意]

这是一个危险的操作,虽然这个操作在现在看来没有什么异样,但是如果数据非常多,这个操作很容易造成损失,这种查询引起服务器的响应之后,返回的数据量非常大,会把网络带宽吃满 ,导致别的客户端出现异常.

3.2 指定列查询

select id,name from emp;

查询id和name两列数据

3.3 查询字段为表达式

select id ,name,role,salary+100 from emp;

查询的时候返回的结果集为所有人的工资加100

[注意]

查询的所有操作都不会对原生存在硬盘上的数据进行改变,这里虽然是在原来的薪水加上了100,但是只是返回的结果加上了100,返回的结果是一张临时表.

3.4 别名 -->as

语法:

select 列名 as 别名 from 表名;
select id ,name , chinese+math+english as total from student;

返回所有学生的总成绩,并设置为total

3.5 去重 -->distinct

语法:

select distinct 列名 from 表名;
select distinct chinese from student;

上述结果我们看到返回的值把周八那一行的语文成绩去重.

当然我们也可以对多列进行去重:
select distinct chinese,math from student;

3.6 排序 -->order by

语法:
asc为升序,desc为降序,默认为asc

select 列名 from 表明 order by 列名 [升降序]
select * from student order by math desc;

我们看到,学生们的顺序按数学成绩的降序排列了起来.

[注意]

  • 没有order by的句子返回的查询,返回的顺序都是未定义的,永远不要依赖这个顺序.
  • NULL数据排序的时候,视为比任何数据都小.升序在上面,降序在下面.
  • 可以使用表达式或者别名 进行排序.
    select id,name,chinese+math+english as total from student order by total ;
    把学生的成绩按照总分升序排序.
  • 可以对多个字段进行排序,优先级随书写顺序 .
    select * from student order by chinese,math;

    这里我们看到田七和周八的语文成绩是一样的,最后按math排序.田七在周八的后面.

3.7 条件查询 -->where

比较运算符:

运算符 说明
>, >=, <, <= 大于,大于等于,小于,小于等于
= 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=> 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <> 不等于
BETWEEN a0 AND a1 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, ...) 如果是 option 中的任意一个,返回 TRUE(1)
IS NULL 是 NULL
IS NOT NULL 不是 NULL
LIKE 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

逻辑运算符:

运算符 说明
AND 多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR 任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT 条件为 TRUE(1),结果为 FALSE(0)

[注意]

  • where可以使用表达式,但是不可以使用别名 .
    原因: 是执行顺序的缘故,遍历表-->带入条件-->计算列名中的表达式,定义别名-->排序,聚合,
    定义别名在带入条件的后面,所以无法识别.
  • AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分.

案例:

  • 基本查询
    • select * from student where english < 100;
      查询英语成绩小于100的同学.
    • select * from student where chinese+math+english<320;
      查询总分小于320的同学
  • and 和 or
    • select * from student where chinese+math+english<320 and math>=120;
      查询总分小于320但数学成绩大于等于120的同学
    • select * from student where chinese+math+english<320 or math>=120;
      查询总分小于320和数学成绩大于等于120的同学
  • 范围查询
    1. between...and...
      select * from student where math between 100 and 110;
      查询数学成绩在100~110之间的同学
    2. in
      针对每个记录,带入到条件中,看当前这个数值是否在( )描述的集合中存在.
      select * from student where math in (120,133);
  • 模糊查询 -->like
    • select name from student where name like '周%';

      %代表的是一个或者多个字符,找到所有姓周的人.
    • select name from student where name like '周_';

      找到姓周但是是两个字的名字.

3.8 分页查询-->limit

这个语法限制了最多返回多少条记录 .

语法:

select 列名 from 表名 limit n 限制返回的记录为n

select 列名 from 表名 limit n offset s 从s开始查询,返回n条记录

案例:

  • select name,math+chinese+english as total from student order by total desc limit 3;
    查询班级前三名
  • select name,math+chinese+english as total from student order by total desc limit 3 offset 1;
    查询班级总成绩2~4名

4. 修改 -->update

语法:
update 表名 set 列名=表达式 限制条件

案例:

  • update student set english=92 where name='周八';
    把周八的英语成绩改成92
  • update student set english= english+10;
    将所有人的英语成绩加10分

5. 删除 -->delete

语法:
delete from 表名 限制条件

案例:

  • delete from student where name ='周八';
    删除周八的成绩
相关推荐
qq_441996056 分钟前
Mybatis官方生成器使用示例
java·mybatis
巨大八爪鱼12 分钟前
XP系统下用mod_jk 1.2.40整合apache2.2.16和tomcat 6.0.29,让apache可以同时访问php和jsp页面
java·tomcat·apache·mod_jk
PGCCC13 分钟前
【PGCCC】Postgresql 存储设计
数据库·postgresql
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
计算机-秋大田2 小时前
基于微信小程序的养老院管理系统的设计与实现,LW+源码+讲解
java·spring boot·微信小程序·小程序·vue
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
魔道不误砍柴功4 小时前
简单叙述 Spring Boot 启动过程
java·数据库·spring boot
失落的香蕉4 小时前
C语言串讲-2之指针和结构体
java·c语言·开发语言
锐策4 小时前
〔 MySQL 〕数据库基础
数据库·mysql
枫叶_v4 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端