MySQL数据的增删改查

CRUD

CRUD指的是创建(Create),读取(Retrieve),更新(Update)和删除(Delete),它是数据库或者持久层在软件系统中执行的基本功能,构成了大多数应用程序和服务器中的数据管理基础

新增-Create

全列插入+多行插入

其中insert,value以及(字段值1)是必须的,其他的按照需要自行选择,全列插入是指的values后的每个小括号的值要与列一一对应,否则会报错,如果是进行多行插入,需要自行在values后面增添括号,语法如下:

-- 需要注意,VALUES后的字段值必须与表名后的字段名一一对应
INSERT INTO 表名(字段名1, 字段名2, ..., 字段名n) VALUES(字段值1, 字段值2, ..., 字段值
n);
-- 需要注意,VALUES后的字段值必须与创建表时的字段顺序保持一一对应
INSERT INTO 表名 VALUES(字段值1, 字段值2, ..., 字段值n);
-- 一次性插入多条数据
INSERT INTO 表名(字段名1, 字段名2, ..., 字段名n) VALUES(字段值1, 字段值2, ..., 字段值
n),(字段值1, 字段值2, ..., 字段值n), ... , (字段值1, 字段值2, ..., 字段值n);
INSERT INTO 表名 VALUES(字段值1, 字段值2, ..., 字段值n), (字段值1, 字段值2, ..., 字段值
n), ..., (字段值1, 字段值2, ..., 字段值n);

指的列插入:

  • 一行中没有被指定插入的列,会用默认值填充,即NULL,表示缺失值。
  • 显示的指定所有的属性名,就是全列插入。
  • 指定列同样可以多行插入

查询-Retrieve

SELECT ALL/DISTINCT * | 字段名1 AS 别名1[,字段名1 AS 别名1, ..., 字段名n AS 别名n]
FROM 表名 WHERE 查询条件
        ALL表示查询所有满足条件的记录,可以省略;
        DISTINCT 表示去掉查询结果中重复的记录 ,AS可以给数据列、数据表取一个别名

        

全列查询:select * from + 表名 

         *:通配符:代表要查询结果包含所有的字段
        这是一个非常危险的操作,如果数据量太大,会消耗大量的内存和CPU资源,可能导致数据库服务器的性能下降。

指定列查询:select 后面紧跟查询的列,之间用,(逗号)隔开

查询字段为表达式

表达式不包含字段:查询结果返回一个临时表,会在指定位置生成一列

select col1,常量,...from 表名

例如:

表达式包含一个字段:例如将id+5

表达式包含多个字段:例如虚拟的考试表以及总分

别名:

在MySQL中,别名使用包括行别名和列别名

使用别名可以带来多个重要的好处,主要包括提高查询的可读性、简化复杂查询、解决字段名冲突和提升性能等方面。

列别名的引入旨在提高查询结果的可读性,并允许在查询中使用更符合情境的标签来代表列。(也可以给表达式起别名)

表别名则主要用于简化查询中的表引用,特别是在多表查询的情况下。通过为每个表定义一个简短的别名,可以大大增强SQL语句的可读性和编写效率。
例如:求考试得分:

去重查询:distinct

        判断为重复的条件:所有的查询列都相等,*表示全列去重

由于表中没有全列都相同的的数据,返回的临时表与原表一致

由于两名同学的数学成绩相同,去重查询只保留一个

排序:order by

SELECT
 [DISTINCT] {* | {column1 [, column2] ...} 
 FROM tbl_name
 [ORDER BY column1 [ASC | DESC], ...];
  1. ASC为升序,DESC为降序,不指定时MySQL默认的升序排序
  2. 使用到ORDER BY,后面跟字段名(或查询列表的表达式)和排序方式,表示按照该字段的值进行升序/降序排序;
  3. ORDER BY后面可以跟多个字段。在SQL中,可以使用逗号分隔多个字段来指定排序顺序。
  4. 当使用多个字段进行排序时,首先按照第一个字段进行排序,如果第一个字段的值相同,则按照第二个字段进行排序,以此类推。每个字段都可以指定升序(ASC)或降序(DESC)排序。(排序优先级取决于书写顺序)
  5. 查看表结构的关键字重名,但查看表结构的DESC是describe的缩写,排序的DESC是descend的缩写,这是SQL设计时的反例。

例如:根据总分对exam进行降序排名:

注:NULL视为比任何值都小,降序排在最下面。
       没有order by子句的查询,返回的顺序是未定义的

条件查询

        基于比较运算符和逻辑运算符,可以对复杂的条件进行过滤,从而达到要求,其中,区间查询,模糊查询以及null查询都是条件查询。
前置知识:运算符:

运算符说明
>,<,>=,<=大于,小于,大于等于,小于等于
=等于。NULL不安全,NULL=NULL结果为NULL
<=>等于。NULL安全,NULL<=>结果为1(TRUE)
!=,<>不等于
between a and b范围匹配[a,b],成立返回1(TRUE)
in(option)若是option中的一个,返回1(TRUE)
is null是null.成立返回1(true),不成立返回0(false)
is not null不是null.成立返回0(false),不成立返回1(true)
like模糊匹配,%表示任意多个字符,_表示一个字符

逻辑运算符

运算符说明
AND连接的多个条件都是true,结果是1
OR连接的任意一个条件为true,结果为1
NOT条件为true,返回0

注意事项:

  1. where条件可以使用表达式,但是不能使用别名,与SQL语句的执行顺序有关
    1)先确定表,即执行from
    2)根据过滤条件筛选合适的行,即执行where
    3)显示要查询的列,即执行select,由于列别名一般在select声明,因此执行where时识别不出别名
  2. 不支持链式比较,如a>col>b ,必须写为col>b AND col < a
  3. 运算符有优先级,但是一般使用时加上()自己设置优先级,保证万无一失
  4. NULL不参与除判断NULL之外的任何条件查询,它会被过滤掉
  5. 标准运算符作用与NULL时返回NULL,对其使用算数运算符也返回NULL

区间查询

SELECT
 {* | {column1 [, column2] ...} 
 FROM tbl_name
 WHERE {column1 BETWEEN a AND b | column1 >= a AND column1 <= b};

例如:查询总分在100~200的学生

模糊查询

SELECT
 {* | {column1 [, column2] ...} 
 FROM tbl_name
 WHERE column1 LIKE '[%][_...]值[_...][%]';

例如,查姓唐同学的成绩,%代表唐后面所有字符都被选中,类似还有%唐,%唐%,分别表示唐前面的字符被选中,唐左右的字符被选中

查询姓孙有两个字的名学生的成绩,两个__(连在一起了)表示孙后面的两个字符

null查询
区分NULL值和字符串’NULL‘,采用like 'NULL'实际上查的是字符串的NULL,不是NULL

分页查询 :limit

限制查询结果集的条数,通过分页查询可以有效的控制一次查询出的结果集中的记录条数,可以有效的减少数据库的压力,同时对用户也比较友好

-- 从 0 开始,筛选 n 条结果
SELECT ... FROM tbl_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM tbl_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM tbl_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

记录的序号从0开始,第一条记录是0
如果起始位置超出了结果集的范围,可以执行但是返回的是空集

例如:查询id编号为前3的同学

查询总分前五的同学:

 

修改 - UPDATE

UPDATE tbl_name SET column1 = expr [, column2 = expr ...]
 [WHERE ...] [ORDER BY ...] [LIMIT ...];

注意:update如果不加where语句,将会修改表中的所有记录,十分危险!!!
例如,将唐三藏的数学改为95分

删除:DELETE
 

DELETE FROM  tbl_name [WHERE ...] [ORDER BY ...] [LIMIT ...];

注意:delete如果不加where语句,将会删除表中的所有记录,十分危险!!!
例如:删除宋公明学生的成绩:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值