mysql笔记-- mysql命令札记2

本文介绍了MySQL中的基本查询操作,包括选择所有数据、特定行的选择、排序、日期计算等,并详细讲解了NULL值的操作、模式匹配及多表联合查询的方法。

4. 从表检索信息

4.1. 选择所有数据
NOTE: ' * ' 在正则表达式中代表通配符的意思;
mysql> select * from test;
+-------+------+------+
| name  | sex  | arg  |
+-------+------+------+
| kevin | M    |   18 |
| kevin | M    |   18 |
+-------+------+------+
2 rows in set (0.00 sec)
4.2. 选择特殊行
选择where 之后的变量作为条件来检索数据表;
mysql> select name from test where name = 'kevin';
+-------+
| name  |
+-------+
| kevin |
| kevin |
+-------+
2 rows in set (0.01 sec)
选择多个条目
mysql> select name ,sex from test;
+-------+------+
| name  | sex  |
+-------+------+
| kevin | M    |
| kevin | M    |
+-------+------+
2 rows in set (0.00 sec)
where 条件组合检索
mysql> select name, sex from test where sex = 'M' and arg=18;  
+-------+------+
| name  | sex  |
+-------+------+
| kevin | M    |
| kevin | M    |
+-------+------+
2 rows in set (0.00 sec)


mysql> select name, sex from test where sex = 'M' or arg=17; 
+-------+------+
| name  | sex  |
+-------+------+
| kevin | M    |
| kevin | M    |
+-------+------+
2 rows in set (0.00 sec)


mysql> select name, sex from test where sex = 'N' or arg=17; 
Empty set (0.00 sec)

以上对比可知,使用where 中or , and 进行组合变量的条件,来进行选择;对于多个选项,可持续的进行and 或or;

4.4. 分类行
按某种方式排序时,检查查询输出通常更容易。为了排序结果,使用ORDER BY子句。
mysql> select arg from test order by arg;
+------+
| arg  |
+------+
|   18 |
|   18 |
|   20 |
+------+
3 rows in set (0.07 sec)
mysql> select name from test order by arg;   
+--------+
| name   |
+--------+
| kevin  |
| kevin  |
| sherry |
+--------+
3 rows in set (0.00 sec)
4.5. 日期计算
MySQL提供了几个函数,可以用来计算日期
curdate(); 读取当前的日期;
year(curdate()); 读取年份;
RIGHT(xxx,n)提取从右起第n个向右的所有字符;
MySQL提供几个日期部分的提取函数,例如YEAR( )、MONTH( )和DAYOFMONTH( ) 分别读取年份,月份,和日期从‘xxxx-xx-xx'中读取;
mysql> select name , year(curdate()) - year('1990-12-11') - (right(curdate(),5)< right('1990-12-11',5)) as age from test order by age;
+--------+------+
| name   | age  |
+--------+------+
| kevin  |   23 |
| kevin  |   23 |
| sherry |   23 |
+--------+------+
3 rows in set (0.00 sec)
4.6. NULL值操作

NULL值可能令人感到奇怪直到你习惯它。概念上,NULL意味着“没有值”或“未知值”,且它被看作与众不同的值。为了测试NULL,你不能使用算术比较 操作符例如=、<或!=。为了说明它,试试下列查询:

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
|     NULL |      NULL |     NULL |     NULL |
+----------+-----------+----------+----------+

很显然你不能通过这些比较得到有意义的结果。相反使用IS NULL和IS NOT NULL操作符:

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|         0 |             1 |
+-----------+---------------+

请注意在MySQL中,0或 NULL意味着假而其它值意味着真。布尔运算的默认真值是1。

NULL操作的常见错误是不能在定义为NOT NULL的列内插入0或空字符串,但事实并非如此。在NULL表示"没有数值"的地方有数值。使用IS [NOT] NULL则可以很容易地进行测试,如下所示:

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
|         0 |             1 |          0 |              1 |
+-----------+---------------+------------+----------------+

因此完全可以在定义为NOT NULL的列内插入0或空字符串,实际是NOT NULL。


.4.7. 模式匹配

MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grepsed的扩展正则表达式模式匹配的格式。

SQL模式匹配允许你使“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOT LIKE比较操作符。


mysql 支持的正则表达式

MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。

扩展正则表达式的一些字符是:

·         ‘.’匹配任何单个的字符。

·         字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”“b”“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。

·         “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。

  • 如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
  • 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”在模式的结尾用“$”

为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:

为了找出以“b”开头的名字,使用“^”匹配名字的开始:

你也可以使用“{n}”“重复n次”操作符重写前面的查询:



mysql> select * from test where name regexp '^k...n$';
+-------+------+------+
| name  | sex  | arg  |
+-------+------+------+
| kevin | M    |   18 |
| kevin | M    |   18 |
+-------+------+------+
2 rows in set (0.00 sec)


mysql> select * from test where name regexp '^k..n$'; 
Empty set (0.00 sec)


mysql> select * from test where name regexp '^k.{3}n$';
+-------+------+------+
| name  | sex  | arg  |
+-------+------+------+
| kevin | M    |   18 |
| kevin | M    |   18 |
+-------+------+------+
2 rows in set (0.00 sec)


mysql> select * from test where name regexp '^k.{4}n$';
Empty set (0.00 sec)


4.8. 计数行
COUNT(*)函数计算行数

min (int type)

max (int type)

计算最大的int型数和最小的int型数;

4.9. 使用1个以上的表

于该查询要注意的几件事情:

  • FROM子句列出两个表,因为查询需要从两个表提取信息。
  • 当从多个表组合(联结)信息时,你需要指定一个表中的记录怎样能匹配其它表的记录。这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2个表中的记录。
  • 因为name列出现在两个表中,当引用列时,你一定要指定哪个表。把表名附在列名前即可以实现。

你不必有2个不同的表来进行联结。如果你想要将一个表的记录与同一个表的其它记录进行比较,可以将一个表联结到自身。

查询中,我们为表名指定别名以便能引用列并且使得每一个列引用与哪个表实例相关联更直观。

mysql> select test.name,test2.name from test ,test2;
+--------+--------+
| name   | name   |
+--------+--------+
| kevin  | kevin  |
| kevin  | sherry |
| kevin  | kevin  |
| kevin  | sherry |
| sherry | kevin  |
| sherry | sherry |
+--------+--------+
6 rows in set (0.00 sec)

mysql> select t1.name,t2.name from test as t1 ,test2 as t2;
+--------+--------+
| name   | name   |
+--------+--------+
| kevin  | kevin  |
| kevin  | sherry |
| kevin  | kevin  |
| kevin  | sherry |
| sherry | kevin  |
| sherry | sherry |
+--------+--------+
6 rows in set (0.04 sec)

【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)内容概要:本文介绍了基于蒙特卡洛和拉格朗日方法的电动汽车充电站有序充电调度优化方案,重点在于采用分散式优化策略应对分时电价机制下的充电需求管理。通过构建数学模型,结合不确定性因素如用户充电行为和电网负荷波动,利用蒙特卡洛模拟生成大量场景,并运用拉格朗日松弛法对复杂问题进行分解求解,从而实现全局最优或近似最优的充电调度计划。该方法有效降低了电网峰值负荷压力,提升了充电站运营效率与经济效益,同时兼顾用户充电便利性。 适合人群:具备一定电力系统、优化算法和Matlab编程基础的高校研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。 使用场景及目标:①应用于电动汽车充电站的日常运营管理,优化充电负荷分布;②服务于城市智能交通系统规划,提升电网与交通系统的协同水平;③作为学术研究案例,用于验证分散式优化算法在复杂能源系统中的有效性。 阅读建议:建议读者结合Matlab代码实现部分,深入理解蒙特卡洛模拟与拉格朗日松弛法的具体实施步骤,重点关注场景生成、约束处理与迭代收敛过程,以便在实际项目中灵活应用与改进。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值