wordpress 视频图片网站,wordpress 腾讯cdn,WordPress引用阿里云矢量图,做游戏网站用什么软件文章目录 CRUD新增全列插入指定列插入插入查询结果 查询全列查询指定列查询查询字段为表达式表达式不包含字段表达式包含一个字段表达式包含多个字段 补充#xff1a;别名去重查询排序条件查询 补充#xff1a;运算符区间查询模糊查询NULL的查询 分页查询聚合查询聚合函数 分… 文章目录 CRUD新增全列插入指定列插入插入查询结果 查询全列查询指定列查询查询字段为表达式表达式不包含字段表达式包含一个字段表达式包含多个字段 补充别名去重查询排序条件查询 补充运算符区间查询模糊查询NULL的查询 分页查询聚合查询聚合函数 分组查询 修改删除 CRUD
CRUD是指创建Create、读取Retrieve、更新Update和删除Delete四个操作的首字母缩写即增删查改它是数据库或持久层在软件系统中执行的基本功能。这四个操作构成了大多数应用程序和服务中数据管理的基础。
接下来我们就介绍一数据库基本的增删改查。
新增
语法
INSERT [INTO] tbl_name[(column [, column] ...)] VALUES (value_list) [, (value_list)] ...;value_list: value, [, value] ...INSERT、VALUES以及(value_list)是必须的其余都被[]括起来属于可选项选择不同的可选项可以达到全列插入与指定列插入、单行数据插入与多行数据插入以及这两组的组合。
我们先新建一个二维表方便观察现象
CREATE TABLE IF NOT EXISTS demo1 (id BIGINT,name VARCHAR(20),gender TINYINT
);全列插入
语法
INSERT [INTO] tbl_name VALUES (value_list) [, (value_list)] ...;VALUES后可以跟多个小括号每个小括号就是一行数据多行数据的小括号之间用,(逗号)连接 只有一个小括号就是单行数据插入多个小括号就是多行数据插入 全列插入的VALUES后的每个小括号中的值要与列一一对应数量、数据类型否则会报错
例如 SELECT * FROM demo1;是全列查询语句。 指定列插入
语法
INSERT [INTO] tbl_name[(column [, column] ...)] VALUES (value_list) [, (value_list)] ...;在表名后、()里使用属性(字段)名指定列如果要指定多个列用,(逗号)分隔。注意即使只插入一列()也不能省略一行中没有被指定插入的列会用默认值填充即NULL表示缺失值显式地指定所有属性名就是全列插入同样也可以多行数据插入
例如 插入查询结果
建议先学习查询后再来。
语法
INSERT INTO tbl_name [(column1)[,column2...]] SELECT ...查询出的列与要插入的列的数量和类型要一致一一对应
例如将旧表中的数据导入新表 查询 为了方便举例我们后续可能会用到下表 语法
SELECT[DISTINCT] {* | {column1 [, column2] ...} [FROM tbl_name][WHERE ...][ORDER BY column [ASC | DESC], ...]LIMIT ...; 查询涉及到的关键字很多分别有着不同的功能但各个部分不是独立的。下面介绍时只是按照功能进行的分类实际查询时一般不会只用到某个分类比如同时要求去重、条件查询、排序这要求我们要依据需求编写合理的SQL查询语句 查询是不影响原表永久表的每次返回的是一个临时表 全列查询
语法
SELECT * FROM tbl_name;*通配符代表我要查询的结果中包含所有的字段列。当一张表中数据量很大时建议不要使用全列查询会有很大的磁盘开销和网络开销
例如 指定列查询
语法
SELECT column1 [, column2]... FROM tbl_name;SELECT后面紧跟要查询的列之间用,(逗号)分隔
例如 查询字段为表达式
表达式不包含字段
语法
SELECT column1, 常量 ... FROM tbl_name;例如 查询结果中返回的临时表会在指定位置生成一列如上图 表达式包含一个字段
例如将表中的某列的值全部加10
SELECT column1 10, column2... FROM tbl_name;表达式包含多个字段
例如使用考试表查询总分 补充别名
在MySQL中别名的使用包括列别名和表别名两种类型。
使用别名可以带来多个重要的好处主要包括提高查询的可读性、简化复杂查询、解决字段名冲突和提升性能等方面。
列别名的引入旨在提高查询结果的可读性并允许在查询中使用更符合情境的标签来代表列。也可以给表达式起别名
表别名则主要用于简化查询中的表引用特别是在多表查询的情况下。通过为每个表定义一个简短的别名可以大大增强SQL语句的可读性和编写效率。
语法
...列名 [AS] 别名...
...表名 [AS] 别名...
# 别名大多数情况下都是字符串可以选择使用引起来不过当别名中包含空格必须使用引起来例如优化查询考试总分 去重查询
语法
SELECT DISTINCT {* | {column1 [, column2] ...} FROM tbl_name;判断为重复的条件所有查询列的数值相等例如全列去重查询当两行数据的所有列的值相等才判断为重复并去重 排序
语法
SELECT[DISTINCT] {* | {column1 [, column2] ...} FROM tbl_name[ORDER BY column1 [ASC | DESC], ...];ASC为升序DESC为降序用于指定排序方式。可以不指定此时按照MySQL默认的升序排序 使用到ORDER BY后面跟字段名(或查询列表的表达式)和排序方式表示按照该字段的值进行升序/降序排序 ORDER BY后面可以跟多个字段。在SQL中可以使用逗号分隔多个字段来指定排序顺序。 当使用多个字段进行排序时首先按照第一个字段进行排序如果第一个字段的值相同则按照第二个字段进行排序以此类推。每个字段都可以指定升序ASC或降序DESC排序。排序优先级取决于书写顺序 与查看表结构的关键字重名但查看表结构的DESC是describe的缩写排序的DESC是descend的缩写这是SQL设计时的反例。
例如根据总分对exam表排名 不能将ORDER BY后的别名用单引号引起来否则排序就会失效 【注意】
NULL数据排序视为比任何值都小升序排在最上面降序排在最下面没有ORDER BY子句的查询返回的顺序是未定义的 条件查询
条件查询基于比较运算符和逻辑运算符可以构成较为复杂的条件对数据进行过滤从而达到需求。下面给出的区间查询、模糊查询和NULL的查询都是条件查询只是将这些场景单独拿出来具体的场景要具体分析采用什么条件进行过滤
语法
SELECT{* | {column1 [, column2] ...} FROM tbl_name[WHERE ...];补充运算符
【比较运算符】
运算符说明大于大于等于小于小于等于等于。NULL不安全NULL NULL 的结果为 NULL等于。NULL安全 NULL NULL的结果是1(TRUE)!不等于BETWEEN a AND b范围匹配。[a, b]如果 a values b返回1(TRUE)INoption, …如果是option中的任意一个返回1(TRUE)IS NULL是 NULL。是返回1(TRUE)不是返回0(FALSE)IS NOT NULL不是NULL。是返回0(FALSE)不是返回1(TRUE)LIKE模糊匹配。%表示任意多个(包括0个)任意字符_表示任意一个字符 【逻辑运算符】
运算符说明ANDAND连接的多个条件必须都为TRUE结果才是1(TRUE)OROR连接的任意一个条件为TRUE结果为1(TRUE)NOT条件为TRUE返回0(FALSE) WHERE条件可以使用表达式但不能使用别名这与SQL语句的执行顺序有关 先确定表即执行FROM根据条件过滤出合适的数据行即执行WHERE显示要查询的列即执行SELECT 我们的列别名一般会在SELECT声明这使得执行WHERE时识别不出别名 运算符是有优先级的比如逻辑运算符NOT AND OR不过不建议死记建议使用小括号()来手动设置优先级确保万无一失 MySQL不支持链式比较如 a column b必须改写为column a AND column b NULL值不参与除了判断NULL之外的任何条件查询它会被过滤掉。比如找语文成绩高于60分的成绩其中一位同学语文成绩一列为NULL那么就会直接过滤掉不参与。 如果想知道某个表达式的值写法SELECT 表达式;。例如SELECT NULL NULL;将返回1(TRUE) 标准的比较运算符如, , , 在用于NULL值时会返回NULL比如SELECT NULL 10;结果为NULL对NULL使用算术运算符将返回NULL。例如任何数字与NULL进行加法运算的结果都将是NULL。 区间查询
语法
SELECT{* | {column1 [, column2] ...} FROM tbl_nameWHERE {column1 BETWEEN a AND b | column1 a AND column1 b};例如查询总分在200~300的学生 模糊查询
语法
SELECT{* | {column1 [, column2] ...} FROM tbl_nameWHERE column1 LIKE [%][_...]值[_...][%];举例说明查询姓刘的同学的成绩 刘%就代表刘的后面包含若干个(包括0个)字符满足该条件的都会被选中。
查询姓名只有两个字的同学的成绩 上图两个_号连在了一起表示两个字符必须是两个字符的才会被选中。
比如我要查询姓刘且名字只有两个字的同学就得LIKE 刘_查询名字中包含玄的同学就得LIKE %玄%。 NULL的查询
语法
SELECT {* | {column1 [, column2] ...} FROM tbl_name WHERE {column1 IS NULL | column1 IS NOT NULL};区分NULL值 与 字符串NULL采用LIKE NULL实际上查询的时字符串NULL而不是NULL。
小结一下目前遇到的有关NULL的知识点
NULL的基本概念 定义NULL在MySQL中代表一个未知的值。它是一种“没有类型”的特殊值用于表示无值、未知值、缺失值等情况。默认值在创建表结构时如果某字段未指定默认值则默认为NULL值。这意味着如果在插入数据时没有提供该字段的值它将自动被设置为NULL。 NULL值的比较与操作 比较运算符标准的比较运算符如, , , 在用于NULL值时会返回NULL这表明结果既不是TRUE也不是FALSE而是不确定的。因此要检查一个值是否为NULL应使用IS NULL或IS NOT NULL运算符。算术运算符对NULL使用算术运算符将返回NULL。例如任何数字与NULL进行加法运算的结果都将是NULL。排序行为在ORDER BY子句中NULL值在升序排序时默认位于最后但在降序排序时则位于首位。 分页查询
语法
-- 从 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编号前5的同学的成绩 例如查询总分排名前3的同学的成绩 聚合查询
聚合函数
聚合函数Aggregate Functions在SQL中用于对一组值执行计算并返回单个值。
常见聚合函数如下
函数说明COUNT()返回查询到的数据数量SUM()返回查询到的数据的总和非数值没有意义AVG()返回查询到的数据的平均值非数值没有意义MAX()返回查询到的数据的最大值MIN()返回查询到的数据的最小值 语法
SELECT 聚合函数([DISTINCT expr]) [,聚合函数(DISTINCT expr)]... FROM tbl_name [WHERE...];聚合函数主要接受列名、列上的表达式以及通过CASE语句条件表达式作为参数。其他类型的参数如直接的常量或复杂的子查询要么在技术上可行但通常不推荐要么需要特别考虑查询的上下文和目的。 聚合函数会忽略NULL(除了COUNT(*))例如SUM()计算某列总和时会忽略NULL值不会出现多个数值相加其中包含NULL值导致结果为NULL的情况。所以如果某列的值全为NULL值最终返回0 聚合函数的高级用法 嵌套聚合函数SQL允许在聚合函数内部使用其他聚合函数进行更复杂的计算例如计算每个部门的最高工资与最低工资之差。 使用DISTINCT关键字有时需要对唯一值进行聚合计算而不是考虑所有行。这时可以使用DISTINCT关键字来确保只考虑唯一的值。 计算百分比聚合函数还可用于计算百分比或比例例如计算每个部门的工资在总工资中的占比。 例如查询班级人数记录条数 例如查询全班人总分的平均数(有缺考科目的不计) 可以使用ROUND()函数来处理结果 ROUND() 函数用于对数值进行四舍五入到指定的小数位数。 它接受一到两个参数 第一个参数要四舍五入的数值。这可以是一个列名、一个表达式的结果或者是一个直接的数值。第二个参数可选指定要四舍五入到的小数位数。如果省略此参数则默认四舍五入到最接近的整数。如果第二个参数是负数则表示在小数点左侧进行四舍五入即四舍五入到十位、百位等。 例如查询全班数学成绩的最大值和最小值 分组查询
语法
SELECT 查询目标 FROM tbl_name [WHERE...] GROUP BY 分组字段名 [HAVING...];WHERE和HAVING的区别 执行时机不同WHERE是分组之前的过滤不满足WHERE条件不参与分组HAVING是分组之后对结果进行过滤判断条件不同WHERE不能对聚合函数进行判断过滤而HAVING可以 分组查询常和聚合查询一起使用使用聚合函数对分组后各组数据进行指定求值分组查询的查询目标一般为聚合函数和分组字段查询其他字段无任何意义执行顺序WHERE 聚合函数 HAVING 例如有这样一张表 查询各个职务的平均薪资 查询平均工资低于10000的职务除游戏角色外的平均工资和最高工资 修改
语法
UPDATE tbl_name SET column1 expr [, column2 expr ...][WHERE ...] [ORDER BY ...] [LIMIT ...];SET后指定列并修改值WHERE条件用于过滤筛选出要修改指定列的数据行ORDER BY用于排序LIMIT用于控制修改的数据行数在标准的 SQL 中UPDATE 语句本身并不直接支持 ORDER BY 子句可以使用不报错。ORDER BY 通常用于 SELECT 语句中以指定结果集的排序方式。并且在 UPDATE 语句中排序通常不是必要的。对于需要排序的场景需要结合使用子查询或临时表并在子查询中指定排序。在 SELECT 语句中LIMIT 可以接受两个参数第一个参数是偏移量第二个参数是要返回的记录数。但在 UPDATE 语句中这种用法是不被支持的仅支持一个参数的LIMIT子句。UPDATE操作如果不加WHERE子句将会修改表中的所有记录十分危险
例如将孙悟空同学的英语成绩和语文成绩分别改为9590分 例如将总分小于200分的同学的英语成绩减去5分 删除
语法
DELETE FROM tbl_name [WHERE ...] [ORDER BY ...] [LIMIT ...];在标准的 SQL 中DELETE 语句本身并不直接支持 ORDER BY 子句可以使用不报错。ORDER BY 通常用于 SELECT 语句中以指定结果集的排序方式。并且在 DELETE 语句中排序通常不是必要的。对于需要排序的场景需要结合使用子查询或临时表并在子查询中指定排序。 在 SELECT 语句中LIMIT 可以接受两个参数第一个参数是偏移量第二个参数是要返回的记录数。但在 DELETE 语句中这种用法是不被支持的仅支持一个参数的LIMIT子句与UPDATE语句一样。 DELETE操作如果不加WHERE子句将会删除表中的所有记录十分危险
例如删除孙悟空同学的成绩 完