#数据修改
#insert
insert语句用于将一行或多行插入到表中。
insert语句的语法:
在insert into子句之后的括号内指定表名和逗号分隔列的列表,然后将括号内相应列的逗号分隔值放在values关键字之后。
创建一个名为tasks的新表来练习insert语句:
使用insert语句将任务插入到tasks表中:
在MySQL中可以使用select语句返回的列和值来填充insert语句的值。
例如将tasks表复制到tasks_bak表:
首先通过复制tasks表的结构,创建一个名为tasks_bak的新表。然后使用insert语句将tasks表中的数据插入tasks_bak表:
查看tasks_bak表中的数据,检查是否复制完成:
#update
使用update语句更新表中的现有数据,也可以使用update语句来更改表中的单个行、一组行或所有行的列值。
update语句的语法:
首先在update关键字后面指定要更新数据的表名,set子句指定要修改的列和新值,最后使用where子句中的条件指定要更新的行。如果省略where子句,则update语句将更新表中的所有行。
例如将Mary Patternson的电子邮件更新为新的电子邮件mary.new@yiibai.com:
首先从employees表查询Mary的电子邮件:
使用update语句对Mary的电子邮件信息进行更新:
set子句将电子邮件列的值设置为新的电子邮件。再次执行select语句验证更改:
#replace
replace语句用于向数据库表插入或更新数据。如果给定行数据不存在,replace语句会插入一个新行;如果给定行数据存在,则replace语句首先删除旧行,然后插入一个新行。
要使用replace语句,至少需要具有insert和delete权限。
例如在testdb数据库的cities表中插入一些行记录:
首先创建一个名为cities的新表:
接下来进行数据插入:
查询cities表中的数据,验证插入操作:
#数据删除
#delete
使用delete语句从表中删除数据。
delete语句的语法:
首先指定要删除数据的表table_name,然后使用条件来指定要在where子句中删除的行记录。除了从表中删除数据外,delete语句还返回删除的行数。
例如要删除officeCode为4的员工:
如果要限制删除的行数,使用limit子句,如果表中的行顺序未指定,应同时使用order by子句:
例如选择法国的客户,按信用额度升序进行排序,并删除前5个客户:
#数据过滤
#where
允许根据指定的过滤表达式或条件,来指定要选择的行。
例如只想从employees表中获取销售代表员工:
where子句可以与逻辑运算符(and、or等)相结合。
例如在办公室代码为1中查找所有销售代表:
where子句还可以与比较运算符相结合:
例如查询办公室代码大于5的员工:
【——全网最全的网络安全学习资料包分享给爱学习的你,关注我,私信回复“资料领取”获取——】
1.网络安全多个方向学习路线
2.全网最全的CTF入门学习资料
3.一线大佬实战经验分享笔记
4.网安大厂面试题合集
5.红蓝对抗实战技术秘籍
6.网络安全基础入门、Linux、web安全、渗透测试方面视频
#运算符(and、or、in、between)
#and运算符
组合两个或多个布尔表达式,只有当两个表达式求值均为true时才返回true,否则返回false。
例如使用示例数据库中的customers表进行演示,customers表结构:
选择国家是USA和CA的客户:
#or运算符
组合了两个或两个以上布尔表达式,当任一条件为真时,返回true。
例如获得美国或者法国的客户:
运算符优先级:当语句中使用多个逻辑运算符时,MySQL会在and运算符之后再对or运算符进行求值。
例如查询位于美国或法国且信用额度大于100000的客户:
如果不使用括号,将返回位于美国的客户,或位于法国且信用额度大于100000的客户:
#in运算符
确定指定的值是否与列表中的值或子查询中的任何值匹配。
in运算符的语法:
可以在where子句中与in运算符一起使用,可使用列表或表达式(expr),列表中的值用逗号分隔;如果column_1的值或expr表达式的结果等于列表中的任何值,则in运算符返回1,否则返回0。
当列表中的值都是常量时,首先MySQL根据column_1的类型或expr表达式的结果来计算值,然后MySQL排序值,最后MySQL使用二进制搜索算法搜索值。如果列表中的expr或任何值为null,则in运算符计算返回null。
例如查找位于美国和法国的办事处:
#between运算符
指定要测试的值范围。
between运算符的语法:
所有表达式(expr、begin_expr和end_expr)比较具有相同的数据类型。expr是在由begin_expr和end_expr定义的范围内测试的表达式。
如果begin_expr<=expr<=end_expr,则between运算符返回true,否则返回0。如果任何表达式为null,则between运算符返回null值。如果想指定一个不含边界值的范围,则使用>和<运算符。
例如查询价格在90和100元范围内的商品:
当使用between运算符与日期类型值时,要获得最佳结果,应使用类型转换,将列或表达式的类型显式转换为DATA类型。
例如获取从2013-01-01到2013-01-31的所有订单:
因为requiredDate列的数据类型是DATE,所以使用转换运算符将文字字符串‘2013-01-01’和‘2013-01-31’转换为DATE数据类型。
#like
like运算符通常用于根据指定的模式,从表中查询选择的数据。MySQL提供两个通配符%和_用于和like运算符一起使用:百分比%通配符允许匹配任何字符串的零个或多个字符;下划线_通配符允许匹配任何单个字符。
例如搜索名字以字符a开头的员工信息,可以在模式末尾使用%通配符:
MySQL将扫描整个employees表,以找到每个其名字以字符a开头,后跟任意数量字符的员工信息。
例如搜索员工以on字符结尾的姓氏,可以使用模式开头的%通配符:
例如查找名字以T开头以m结尾的员工,且包含例如Tom、Tim之间的任何单个字符,可以使用_通配符来构建模式:
#limit
使用limit子句来约束结果集中的行数。Limit子句接受一个或两个参数,参数的值必须为零或正整数。
limit子句的语法:
参数offset指定要返回的第一行的偏移量,第一行的偏移量为0而不是1;count指定要返回的最大行数。
例如查询employees表中前5个客户:
limit子句经常与order by子句(详见【数据排序】)一起使用,首先使用order by子句根据特点条件对结果进行排序,然后使用limit子句来查找最小或最大值。
例如查询信用额度最高的前5名客户:
使用limit解决如何获得结果集中的第n个最高值的问题
例如找出价格第二高的产品:
类似获取售价第三高、第四高的产品为limit 2,1和limit 3,1。
#is null
使用is null运算符测试值是否为NULL值。
例如查询没有销售代表的客户:
#数据排序
#order by
order by子句允许对单个列或多个列排序结果集,和按升序或降序对不同列的结果集进行排序。
order by子句的语法:
ASC表示升序,DESC表示降序,order by子句默认按照升序对结果集进行排序。
例如从customers表中查询联系人,并将姓氏按降序和名字按升序排序联系人:
在上面的查询中,order by子句首先按照contactLastname列降序对结果集进行排序,然后按照contactFirstname列升序对排序结果集进行排序,以生成最终结果集。
#数据分组
#group by
通过列或表达式的值,将一组行分组为一个小分组的汇总行记录。每个分组返回一行,减少了结果集中的行数。
group by子句语法:
group by关键字之后是一个以逗号分隔的列或表达式的列表,作为条件对行进行分组。
例如要将订单状态的值分组到子组中,则要使用group by子句并指定按status列来执行分组:
可以看到group by子句返回值是唯一的,它像distinct运算符一样,删除了值重复的行。
除了列之外,可以按表达式对行进行分组。
例如获取每年的总销售额:
使用YEAR函数(返回一个指定日期的年份值)从订单日期orderDate中提取年份数据,只包括已发货状态Shipped的订单。
#having
使用having子句来指定一组行或聚合的过滤条件。通常与group by子句一起使用,以根据指定的条件过滤分组;如果省略group by子句,则having子句的行为与where子句类似。
注意having子句将过滤条件应用于每组分行,而where子句将过滤条件应用于每个单独的行。
例如使用having子句查询哪些订单的总销售额大于55000: