字符函数、数值函数、日期时间函数、聚集函数、判断函数、运算符号、排序、分组、过滤、分页、插入表记录、更新表记录、删除表记录

news2024/11/23 2:19:01

Top

NSD DBA DAY02

  1. 案例1:常用函数
  2. 案例2:查询结果处理
  3. 案例3:管理表记录

1 案例1:常用函数

1.1 问题

  1. 练习字符函数
  2. 练习数学函数
  3. 练习日期函数
  4. 练习聚集函数
  5. 练习数学计算
  6. 练习if函数
  7. 练习case函数

1.2 方案

函数:MySQL服务内置命令

 
  1. 语法:函数名(表头名)

select格式:

 
  1. SELECT 函数(表头名) FROM 库名.表名;
  2. SELECT 函数(表头名) FROM 库名.表名 WHERE 条件;

tarena库下的employees表 保存133个员工的信息如图-1,图-2

查看tarena库employees表的表头

图-1

查看tarena库employees表表记录

员工编号 姓名 入职日期 出生日期 电子邮箱 电话号码 部门编号

图-2

tarena库下的salary表 保存2015以后的工资信息如图-3,图-4

图-3

图-4

行号 发工资日期 员工编号 基本工资 奖金

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:练习字符函数(处理字符或字符类型的表头)

  1. //LENGTH(str)         返字符串长度,以字节为单位
  2. mysql> select name from tarena.user where name = "root" ;
  3. +------+
  4. | name |
  5. +------+
  6. | root |
  7. +------+
  8. 1 row in set (0.00 sec)
  9. mysql> select name , length(name) as 字节个数from tarena.user where name = "root" ;
  10. +------+--------------+
  11. | name | 字节个数 |
  12. +------+--------------+
  13. | root | 4 |
  14. +------+--------------+
  15. 1 row in set (0.00 sec)
  16. //一个汉字3个字节
  17. mysql> select name , length(name) from tarena.employees where employee_id = 3 ;
  18. +-----------+--------------+
  19. | name | length(name) |
  20. +-----------+--------------+
  21. | 李玉英 | 9 |
  22. +-----------+--------------+
  23. //CHAR_LENGTH(str)        返回字符串长度,以字符为单位
  24. mysql> select name from tarena.employees where employee_id = 3 ;
  25. +-----------+
  26. | name |
  27. +-----------+
  28. | 李玉英 |
  29. +-----------+
  30. 1 row in set (0.00 sec)
  31. mysql> select name , char_length(name) from tarena.employees where employee_id = 3 ;
  32. +-----------+-------------------+
  33. | name | char_length(name) |
  34. +-----------+-------------------+
  35. | 李玉英 | 3 |
  36. +-----------+-------------------+
  37. 1 row in set (0.00 sec)
  38. //UPPER(str)和UCASE(str) 将字符串中的字母全部转换成大写
  39. mysql> select name from tarena.user where uid <= 3 ;
  40. +--------+
  41. | name |
  42. +--------+
  43. | root |
  44. | bin |
  45. | daemon |
  46. | adm |
  47. +--------+
  48. 4 rows in set (0.00 sec)
  49. mysql> select upper(name) from tarena.user where uid <= 3 ;
  50. +-------------+
  51. | upper(name) |
  52. +-------------+
  53. | ROOT |
  54. | BIN |
  55. | DAEMON |
  56. | ADM |
  57. +-------------+
  58. 4 rows in set (0.00 sec)
  59. mysql> select ucase(name) from tarena.user where uid <= 3 ;
  60. +-------------+
  61. | ucase(name) |
  62. +-------------+
  63. | ROOT |
  64. | BIN |
  65. | DAEMON |
  66. | ADM |
  67. +-------------+
  68. 4 rows in set (0.00 sec)
  69. //LOWER(str)和LCASE(str)    将str中的字母全部转换成小写
  70. mysql> select lower("ABCD") ;
  71. +---------------+
  72. | lower("ABCD") |
  73. +---------------+
  74. | abcd |
  75. +---------------+
  76. 1 row in set (0.00 sec)
  77. mysql> select lcase("ABCD") ;
  78. +---------------+
  79. | lcase("ABCD") |
  80. +---------------+
  81. | abcd |
  82. +---------------+
  83. 1 row in set (0.00 sec)
  84. mysql>
  85. //SUBSTR(s, start,end)     从s的start位置开始取出到end长度的子串
  86. mysql> select name from tarena.employees where employee_id <= 3 ;
  87. +-----------+
  88. | name |
  89. +-----------+
  90. | 梁伟 |
  91. | 郭岩 |
  92. | 李玉英 |
  93. +-----------+
  94. 3 rows in set (0.00 sec)
  95. //不是输出员工的姓 只输出名字
  96. mysql> select substr(name,2,3) from tarena.employees where employee_id <= 3 ;
  97. +------------------+
  98. | substr(name,2,3) |
  99. +------------------+
  100. | 伟 |
  101. | 岩 |
  102. | 玉英 |
  103. +------------------+
  104. 3 rows in set (0.00 sec)
  105. //INSTR(str,str1)        返回str1参数,在str参数内的位置
  106. mysql> select name from tarena.user where uid <= 3 ;
  107. +--------+
  108. | name |
  109. +--------+
  110. | root |
  111. | bin |
  112. | daemon |
  113. | adm |
  114. +--------+
  115. 4 rows in set (0.00 sec)
  116. mysql> select instr(name,"a") from tarena.user where uid <= 3 ;
  117. +-----------------+
  118. | instr(name,"a") |
  119. +-----------------+
  120. | 0 |
  121. | 0 |
  122. | 2 |
  123. | 1 |
  124. +-----------------+
  125. 4 rows in set (0.00 sec)
  126. //查找名字里有英字及出现的位置
  127. mysql> select name , instr(name,"英") from tarena.employees;
  128. +-----------+-------------------+
  129. | name | instr(name,"英") |
  130. +-----------+-------------------+
  131. | 梁伟 | 0 |
  132. | 郭岩 | 0 |
  133. | 李玉英 | 3 |
  134. | 张健 | 0 |
  135. | 郑静 | 0 |
  136. | 牛建军 | 0 |
  137. | 刘斌 | 0 |
  138. | 汪云 | 0 |
  139. | 张建平 | 0 |
  140. | 郭娟 | 0 |
  141. | 郭兰英 | 3 |
  142. | 王英 | 2 |
  143. //TRIM(s)            返回字符串s删除了两边空格之后的字符串
  144. mysql> select trim(" ABC ");
  145. +-----------------+
  146. | trim(" ABC ") |
  147. +-----------------+
  148. | ABC |
  149. +-----------------+
  150. 1 row in set (0.00 sec)
  151. mysql>

步骤二:练习数学函数(处理数字或数值类型的表头)

命令操作如下所示:

 
  1. //ABS(x)    返回x的绝对值
  2. mysql> select abs(11);
  3. +---------+
  4. | abs(11) |
  5. +---------+
  6. | 11 |
  7. +---------+
  8. 1 row in set (0.00 sec)
  9. mysql> select abs(-11);
  10. +----------+
  11. | abs(-11) |
  12. +----------+
  13. | 11 |
  14. +----------+
  15. 1 row in set (0.00 sec)
  16. mysql>
  17. //PI()        返回圆周率π,默认显示6位小数
  18. mysql> select pi() ;
  19. +----------+
  20. | pi() |
  21. +----------+
  22. | 3.141593 |
  23. +----------+
  24. 1 row in set (0.00 sec)
  25. //MOD(x,y)    返回x被y除后的余数
  26. mysql> select mod(10,3);
  27. +-----------+
  28. | mod(10,3) |
  29. +-----------+
  30. | 1 |
  31. +-----------+
  32. 1 row in set (0.00 sec)
  33. //输出1-10之间的偶数uid号
  34. mysql> select name , uid from tarena.user where uid between 1 and 10 and mod(uid,2) = 0 ;
  35. +----------+------+
  36. | name | uid |
  37. +----------+------+
  38. | daemon | 2 |
  39. | lp | 4 |
  40. | shutdown | 6 |
  41. | mail | 8 |
  42. +----------+------+
  43. 4 rows in set (0.00 sec)
  44. //CEIL(x)、CEILING(x)    返回不小于x的最小整数 (x 是小数)
  45. mysql> select ceil(9.23);
  46. +------------+
  47. | ceil(9.23) |
  48. +------------+
  49. | 10 |
  50. +------------+
  51. 1 row in set (0.00 sec)
  52. mysql> select ceiling(9.23);
  53. +---------------+
  54. | ceiling(9.23) |
  55. +---------------+
  56. | 10 |
  57. +---------------+
  58. 1 row in set (0.00 sec)
  59. mysql>
  60. //FLOOR(x)            返回不大于x的最大整数 (x 是有小数的数字)
  61. mysql> select floor(9.23);
  62. +-------------+
  63. | floor(9.23) |
  64. +-------------+
  65. | 9 |
  66. +-------------+
  67. 1 row in set (0.00 sec)

步骤三:练习日期函数 (获取系统或指定的日期与时间)

 

图-5

命令操作如下所示:

 
  1. mysql> select curtime(); //获取系统时间
  2. +-----------+
  3. | curtime() |
  4. +-----------+
  5. | 17:42:20 |
  6. +-----------+
  7. 1 row in set (0.00 sec)
  8. mysql> select curdate();//获取系统日期
  9. +------------+
  10. | curdate() |
  11. +------------+
  12. | 2023-05-24 |
  13. +------------+
  14. 1 row in set (0.00 sec)
  15. mysql> select now() ;//获取系统日期+时间
  16. +---------------------+
  17. | now() |
  18. +---------------------+
  19. | 2023-05-24 17:42:29 |
  20. +---------------------+
  21. 1 row in set (0.00 sec)
  22. mysql> select year(now()) ; //获取系统当前年
  23. +-------------+
  24. | year(now()) |
  25. +-------------+
  26. | 2023 |
  27. +-------------+
  28. 1 row in set (0.00 sec)
  29. mysql> select month(now()) ; //获取系统当前月
  30. +--------------+
  31. | month(now()) |
  32. +--------------+
  33. | 5 |
  34. +--------------+
  35. 1 row in set (0.00 sec)
  36. mysql> select day(now()) ; //获取系统当前日
  37. +------------+
  38. | day(now()) |
  39. +------------+
  40. | 24 |
  41. +------------+
  42. 1 row in set (0.00 sec)
  43. mysql> select hour(now()) ; //获取系统当前小时
  44. +-------------+
  45. | hour(now()) |
  46. +-------------+
  47. | 17 |
  48. +-------------+
  49. 1 row in set (0.00 sec)
  50. mysql> select minute(now()) ; //获取系统当分钟
  51. +---------------+
  52. | minute(now()) |
  53. +---------------+
  54. | 46 |
  55. +---------------+
  56. 1 row in set (0.00 sec)
  57. mysql> select second(now()) ; //获取系统当前秒
  58. +---------------+
  59. | second(now()) |
  60. +---------------+
  61. | 34 |
  62. +---------------+
  63. 1 row in set (0.00 sec)
  64. mysql> select time(now()) ;//获取当前系统时间
  65. +-------------+
  66. | time(now()) |
  67. +-------------+
  68. | 17:47:36 |
  69. +-------------+
  70. 1 row in set (0.00 sec)
  71. mysql> select date(now()) ; //获取当前系统日期
  72. +-------------+
  73. | date(now()) |
  74. +-------------+
  75. | 2023-05-24 |
  76. +-------------+
  77. 1 row in set (0.00 sec)
  78. mysql> select curdate();//获取当前系统日志
  79. +------------+
  80. | curdate() |
  81. +------------+
  82. | 2023-05-24 |
  83. +------------+
  84. 1 row in set (0.00 sec)
  85. mysql> select dayofmonth(curdate());//获取一个月的第几天
  86. +-----------------------+
  87. | dayofmonth(curdate()) |
  88. +-----------------------+
  89. | 24 |
  90. +-----------------------+
  91. 1 row in set (0.00 sec)
  92. mysql> select dayofyear(curdate());//获取一年中的第几天
  93. +----------------------+
  94. | dayofyear(curdate()) |
  95. +----------------------+
  96. | 144 |
  97. +----------------------+
  98. 1 row in set (0.00 sec)
  99. mysql>
  100. mysql> select monthname(curdate());//获取月份名
  101. +----------------------+
  102. | monthname(curdate()) |
  103. +----------------------+
  104. | May |
  105. +----------------------+
  106. 1 row in set (0.00 sec)
  107. mysql> select dayname(curdate());//获取星期名
  108. +--------------------+
  109. | dayname(curdate()) |
  110. +--------------------+
  111. | Wednesday |
  112. +--------------------+
  113. 1 row in set (0.00 sec)
  114. mysql> select quarter(curdate());//获取一年中的第几季度
  115. +--------------------+
  116. | quarter(curdate()) |
  117. +--------------------+
  118. | 2 |
  119. +--------------------+
  120. 1 row in set (0.00 sec)
  121. mysql> select week(now());//一年中的第几周
  122. +-------------+
  123. | week(now()) |
  124. +-------------+
  125. | 21 |
  126. +-------------+
  127. 1 row in set (0.00 sec)
  128. mysql> select weekday(now());//一周中的周几
  129. +----------------+
  130. | weekday(now()) |
  131. +----------------+
  132. | 2 |
  133. +----------------+
  134. 1 row in set (0.00 sec)

步骤四:练习聚集函数(对数值类型表头下的数据做统计)

命令操作如下所示:

输出3号员工2018每个月的基本工资

 
  1. mysql> select basic from tarena.salary where employee_id=3 and year(date)=2018;
  2. +-------+
  3. | basic |
  4. +-------+
  5. | 9261 |
  6. | 9261 |
  7. | 9261 |
  8. | 9261 |
  9. | 9261 |
  10. | 9261 |
  11. | 9261 |
  12. | 9261 |
  13. | 9261 |
  14. | 9261 |
  15. | 9261 |
  16. | 9724 |
  17. +-------+
  18. 12 rows in set (0.00 sec)

sum(表头名) 求和

 
  1. mysql> select sum(basic) from tarena.salary where employee_id=3 and year(date)=2018;
  2. +------------+
  3. | sum(basic) |
  4. +------------+
  5. | 111595 |
  6. +------------+
  7. 1 row in set (0.00 sec)

avg(表头名) 计算平均值

 
  1. mysql> select avg(basic) from tarena.salary where employee_id=3 and year(date)=2018;
  2. +------------+
  3. | avg(basic) |
  4. +------------+
  5. | 9299.5833 |
  6. +------------+
  7. 1 row in set (0.00 sec)

min(表头名) 获取最小值

 
  1. mysql> select min(basic) from tarena.salary where employee_id=3 and year(date)=2018;
  2. +------------+
  3. | min(basic) |
  4. +------------+
  5. | 9261 |
  6. +------------+
  7. 1 row in set (0.00 sec)

max(表头名) 获取最大值

 
  1. mysql> select max(basic) from tarena.salary where employee_id=3 and year(date)=2018;
  2. +------------+
  3. | max(basic) |
  4. +------------+
  5. | 9724 |
  6. +------------+
  7. 1 row in set (0.00 sec)

count(表头名) 统计表头值个数

 
  1. //输出3号员工2018年奖金小于3000的奖金
  2. mysql> select bonus from tarena.salary where employee_id=3 and year(date)=2018 and bonus<3000;
  3. +-------+
  4. | bonus |
  5. +-------+
  6. | 1000 |
  7. | 1000 |
  8. | 1000 |
  9. +-------+
  10. 3 rows in set (0.00 sec)
  11. //统计3号员工2018年奖金小于3000的次数
  12. mysql> select count(bonus) from tarena.salary where employee_id=3 and year(date)=2018 and bonus<3000;
  13. +--------------+
  14. | count(bonus) |
  15. +--------------+
  16. | 3 |
  17. +--------------+
  18. 1 row in set (0.01 sec)

步骤五:练习数学计算 对行中的列做计算

 

图-6

命令操作如下所示:

输出8号员工2019年1月10 工资总和

 
  1. mysql> select employee_id ,date , basic + bonus as 总工资 from tarena.salary
  2. where employee_id = 8 and date=20190110;
  3. +-------------+------------+----------------+
  4. | employee_id | date | 总工资 |
  5. +-------------+------------+----------------+
  6. | 8 | 2019-01-10 | 24093 |
  7. +-------------+------------+----------------+

输出8号员工的名字和年龄

 
  1. mysql> select name , 2022 - year(birth_date) as 年龄 from tarena.employees
  2. where employee_id = 8 ;
  3. +--------+--------+
  4. | name | 年龄 |
  5. +--------+--------+
  6. | 汪云 | 29 |
  7. +--------+--------+

查看8号员工2019年1月10 基本工资翻3倍的 值

 
  1. mysql> select employee_id , basic , basic * 3 as 工资翻三倍 from tarena.salary
  2. where employee_id=8 and date=20190110;
  3. +-------------+-------+-----------------+
  4. | employee_id | basic | 工资翻三倍 |
  5. +-------------+-------+-----------------+
  6. | 8 | 23093 | 69279 |
  7. +-------------+-------+-----------------+
  8. 1 row in set (0.00 sec)

查看8号员工2019年1月10的平均工资

 
  1. mysql> select employee_id , (basic+bonus)/2 as 平均工资 from tarena.salary where employee_id=8 and date=20190110 ;
  2. +-------------+--------------+
  3. | employee_id | 平均工资 |
  4. +-------------+--------------+
  5. | 8 | 12046.5000 |
  6. +-------------+--------------+
  7. 1 row in set (0.01 sec)

输出员工编号1-10之间偶数员工编号及对应的员工名

 
  1. mysql> select employee_id , name from tarena.employees
  2. where employee_id between 1 and 10 and employee_id % 2 = 0 ;
  3. +-------------+-----------+
  4. | employee_id | name |
  5. +-------------+-----------+
  6. | 2 | 郭岩 |
  7. | 4 | 张健 |
  8. | 6 | 牛建军 |
  9. | 8 | 汪云 |
  10. | 10 | 郭娟 |
  11. +-------------+-----------+
  12. 5 rows in set (0.00 sec)

步骤六:练习if函数

if(条件,v1,v2) 如果条件是TRUE则返回v1,否则返回v2

ifnull(v1,v2) 如果v1不为NULL,则返回v1,否则返回v2

演示if() 语句的执行过程

 
  1. mysql> select if(1 = 2 , "a","b");
  2. +---------------------+
  3. | if(1 = 2 , "a","b") |
  4. +---------------------+
  5. | b |
  6. +---------------------+
  7. 1 row in set (0.00 sec)
  8. mysql> select if( 1 = 1 , "a","b");
  9. +---------------------+
  10. | if(1 = 1 , "a","b") |
  11. +---------------------+
  12. | a |
  13. +---------------------+
  14. 1 row in set (0.00 sec)
  15. mysql>

演示ifnull() 语句的执行过程

 
  1. mysql> select ifnull("abc","xxx");
  2. +---------------------+
  3. | ifnull("abc","xxx") |
  4. +---------------------+
  5. | abc |
  6. +---------------------+
  7. 1 row in set (0.00 sec)
  8. mysql> select ifnull(null,"xxx");
  9. +--------------------+
  10. | ifnull(null,"xxx") |
  11. +--------------------+
  12. | xxx |
  13. +--------------------+
  14. 1 row in set (0.00 sec)
  15. mysql>

查询例子

根据uid 号 输出用户类型

 
  1. mysql> select name , uid ,
  2. #cold_boldif(uid < 1000 , "系统用户","创建用户") as 用户类型 from tarena.user;
  3. +-----------------+-------+--------------+
  4. | name | uid | 用户类型 |
  5. +-----------------+-------+--------------+
  6. | root | 0 | 系统用户 |
  7. | bin | 1 | 系统用户 |
  8. | daemon | 2 | 系统用户 |
  9. | adm | 3 | 系统用户 |
  10. | lp | 4 | 系统用户 |
  11. | sync | 5 | 系统用户 |
  12. | shutdown | 6 | 系统用户 |
  13. | halt | 7 | 系统用户 |
  14. | mail | 8 | 系统用户 |
  15. | operator | 11 | 系统用户 |
  16. | games | 12 | 系统用户 |
  17. | ftp | 14 | 系统用户 |
  18. | nobody | 99 | 系统用户 |
  19. | systemd-network | 192 | 系统用户 |
  20. | dbus | 81 | 系统用户 |
  21. | polkitd | 999 | 系统用户 |
  22. | sshd | 74 | 系统用户 |
  23. | postfix | 89 | 系统用户 |
  24. | chrony | 998 | 系统用户 |
  25. | rpc | 32 | 系统用户 |
  26. | rpcuser | 29 | 系统用户 |
  27. | nfsnobody | 65534 | 创建用户 |
  28. | haproxy | 188 | 系统用户 |
  29. | plj | 1000 | 创建用户 |
  30. | apache | 48 | 系统用户 |
  31. | mysql | 27 | 系统用户 |
  32. | bob | NULL | 创建用户 |
  33. +-----------------+-------+--------------+
  34. 27 rows in set (0.00 sec)

根据shell 输出用户类型

 
  1. mysql> select name , shell ,
  2. #cold_boldif(shell = "/bin/bash" , "交互用户","非交户用户") as 用户类型 from tarena.user;
  3. +-----------------+----------------+-----------------+
  4. | name | shell | 用户类型 |
  5. +-----------------+----------------+-----------------+
  6. | root | /bin/bash | 交互用户 |
  7. | bin | /sbin/nologin | 非交户用户 |
  8. | daemon | /sbin/nologin | 非交户用户 |
  9. | adm | /sbin/nologin | 非交户用户 |
  10. | lp | /sbin/nologin | 非交户用户 |
  11. | sync | /bin/sync | 非交户用户 |
  12. | shutdown | /sbin/shutdown | 非交户用户 |
  13. | halt | /sbin/halt | 非交户用户 |
  14. | mail | /sbin/nologin | 非交户用户 |
  15. | operator | /sbin/nologin | 非交户用户 |
  16. | games | /sbin/nologin | 非交户用户 |
  17. | ftp | /sbin/nologin | 非交户用户 |
  18. | nobody | /sbin/nologin | 非交户用户 |
  19. | systemd-network | /sbin/nologin | 非交户用户 |
  20. | dbus | /sbin/nologin | 非交户用户 |
  21. | polkitd | /sbin/nologin | 非交户用户 |
  22. | sshd | /sbin/nologin | 非交户用户 |
  23. | postfix | /sbin/nologin | 非交户用户 |
  24. | chrony | /sbin/nologin | 非交户用户 |
  25. | rpc | /sbin/nologin | 非交户用户 |
  26. | rpcuser | /sbin/nologin | 非交户用户 |
  27. | nfsnobody | /sbin/nologin | 非交户用户 |
  28. | haproxy | /sbin/nologin | 非交户用户 |
  29. | plj | /bin/bash | 交互用户 |
  30. | apache | /sbin/nologin | 非交户用户 |
  31. | mysql | /bin/false | 非交户用户 |
  32. | bob | NULL | 非交户用户 |
  33. +-----------------+----------------+-----------------+
  34. 27 rows in set (0.00 sec)

插入没有家目录的用户

 
  1. mysql> insert into tarena.user (name, homedir) values ("jerrya",null);

查看时加判断

 
  1. mysql> select name 姓名, ifnull(homedir,"NO home")as 家目录 from tarena.user;
  2. +-----------------+--------------------+
  3. | 姓名 | 家目录 |
  4. +-----------------+--------------------+
  5. | root | /root |
  6. | bin | /bin |
  7. | daemon | /sbin |
  8. | adm | /var/adm |
  9. | lp | /var/spool/lpd |
  10. | sync | /sbin |
  11. | shutdown | /sbin |
  12. | halt | /sbin |
  13. | mail | /var/spool/mail |
  14. | operator | /root |
  15. | games | /usr/games |
  16. | ftp | /var/ftp |
  17. | nobody | / |
  18. | systemd-network | / |
  19. | dbus | / |
  20. | polkitd | / |
  21. | sshd | /var/empty/sshd |
  22. | postfix | /var/spool/postfix |
  23. | chrony | /var/lib/chrony |
  24. | rpc | /var/lib/rpcbind |
  25. | rpcuser | /var/lib/nfs |
  26. | nfsnobody | /var/lib/nfs |
  27. | haproxy | /var/lib/haproxy |
  28. | plj | /home/plj |
  29. | apache | /usr/share/httpd |
  30. | mysql | /var/lib/mysql |
  31. | bob | NO home |
  32. | jerrya | NO home |
  33. +-----------------+--------------------+
  34. 28 rows in set (0.00 sec)
  35. Mysql>

步骤七:练习case函数

命令格式

 
  1. CASE 表头名
  2. WHEN 值1 THEN 输出结果
  3. WHEN 值2 THEN 输出结果
  4. WHEN 值3 THEN 输出结果
  5. ELSE 输出结果
  6. END
  7. CASE
  8. WHEN 判断条件1 THEN 输出结果
  9. WHEN 判断条件2 THEN 输出结果
  10. WHEN 判断条件3 THEN 输出结果
  11. ELSE 输出结果
  12. END

如果表头名等于某个值,则返回对应位置then后面的值并结束判断,

如果与所有值都不相等,则返回else后面的结果并结束判断

命令操作如下所示:

查看部门表(departments)所有行

 
  1. mysql> select * from tarena.departments;
  2. +---------+-----------+
  3. | dept_id | dept_name |
  4. +---------+-----------+
  5. | 1 | 人事部 |
  6. | 2 | 财务部 |
  7. | 3 | 运维部 |
  8. | 4 | 开发部 |
  9. | 5 | 测试部 |
  10. | 6 | 市场部 |
  11. | 7 | 销售部 |
  12. | 8 | 法务部 |
  13. +---------+-----------+
  14. 8 rows in set (0.03 sec)
  15. //输出部门类型
  16. select dept_id, dept_name,
  17. case dept_name
  18. when '运维部' then '技术部门'
  19. when '开发部' then '技术部门'
  20. when '测试部' then '技术部门'
  21. else '非技术部门'
  22. end as 部门类型 from tarena.departments;
  23. +---------+-----------+-----------------+
  24. | dept_id | dept_name | 部门类型 |
  25. +---------+-----------+-----------------+
  26. | 1 | 人事部 | 非技术部门 |
  27. | 2 | 财务部 | 非技术部门 |
  28. | 3 | 运维部 | 技术部门 |
  29. | 4 | 开发部 | 技术部门 |
  30. | 5 | 测试部 | 技术部门 |
  31. | 6 | 市场部 | 非技术部门 |
  32. | 7 | 销售部 | 非技术部门 |
  33. | 8 | 法务部 | 非技术部门 |
  34. +---------+-----------+-----------------+
  35. 8 rows in set (0.00 sec)
  36. mysql> select dept_id,dept_name,
  37. -> case
  38. -> when dept_name="运维部" then "技术部"
  39. -> when dept_name="开发部" then "技术部"
  40. -> when dept_name="测试部" then "技术部"
  41. -> else "非技术部"
  42. -> end as 部门类型 from tarena.departments;
  43. +---------+-----------+--------------+
  44. | dept_id | dept_name | 部门类型 |
  45. +---------+-----------+--------------+
  46. | 1 | 人事部 | 非技术部 |
  47. | 2 | 财务部 | 非技术部 |
  48. | 3 | 运维部 | 技术部 |
  49. | 4 | 开发部 | 技术部 |
  50. | 5 | 测试部 | 技术部 |
  51. | 6 | 市场部 | 非技术部 |
  52. | 7 | 销售部 | 非技术部 |
  53. | 8 | 法务部 | 非技术部 |
  54. +---------+-----------+--------------+
  55. 8 rows in set (0.00 sec)
  56. mysql> select dept_id,dept_name,
  57. -> case
  58. -> when dept_name in ("运维部","开发部","测试部") then "技术部"
  59. -> else "非技术部"
  60. -> end as 部门类型 from tarena.departments;
  61. +---------+-----------+--------------+
  62. | dept_id | dept_name | 部门类型 |
  63. +---------+-----------+--------------+
  64. | 1 | 人事部 | 非技术部 |
  65. | 2 | 财务部 | 非技术部 |
  66. | 3 | 运维部 | 技术部 |
  67. | 4 | 开发部 | 技术部 |
  68. | 5 | 测试部 | 技术部 |
  69. | 6 | 市场部 | 非技术部 |
  70. | 7 | 销售部 | 非技术部 |
  71. | 8 | 法务部 | 非技术部 |
  72. +---------+-----------+--------------+
  73. 8 rows in set (0.00 sec)

2 案例2:查询结果处理

2.1 问题

  1. 分组练习
  2. 排序练习
  3. 过滤练习
  4. 分页练习

2.2 方案

使用tarena库下的表完成练习

对select语句查找到的数据再做处理,语法格式

SELECT 表头名 FROM 库名.表名 [WHERE条件] 分组 | 排序 | 过滤 | 分页;

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:分组练习

命令操作如下所示:

输出符合条件的shell 和 name

 
  1. mysql> select shell , name from tarena.user where shell in ("/bin/bash","/sbin/nologin");
  2. +---------------+-----------------+
  3. | shell | name |
  4. +---------------+-----------------+
  5. | /bin/bash | root |
  6. | /sbin/nologin | bin |
  7. | /sbin/nologin | daemon |
  8. | /sbin/nologin | adm |
  9. | /sbin/nologin | lp |
  10. | /sbin/nologin | mail |
  11. | /sbin/nologin | operator |
  12. | /sbin/nologin | games |
  13. | /sbin/nologin | ftp |
  14. | /sbin/nologin | nobody |
  15. | /sbin/nologin | systemd-network |
  16. | /sbin/nologin | dbus |
  17. | /sbin/nologin | polkitd |
  18. | /sbin/nologin | sshd |
  19. | /sbin/nologin | postfix |
  20. | /sbin/nologin | chrony |
  21. | /sbin/nologin | rpc |
  22. | /sbin/nologin | rpcuser |
  23. | /sbin/nologin | nfsnobody |
  24. | /sbin/nologin | haproxy |
  25. | /bin/bash | plj |
  26. | /sbin/nologin | apache |
  27. +---------------+-----------------+
  28. 22 rows in set (0.00 sec)

统计每种解释器用户的个数 (按照shell表头值分组统计name表头值个数)

 
  1. mysql> select shell as 解释器 , count(name) as 总人数 from tarena.user where shell in ("/bin/bash","/sbin/nologin") group by shell;
  2. +---------------+-----------+
  3. | 解释器 | 总人数 |
  4. +---------------+-----------+
  5. | /bin/bash | 2 |
  6. | /sbin/nologin | 20 |
  7. +---------------+-----------+
  8. 2 rows in set (0.00 sec)

统计每个部门的总人数 (按照部门表头分组统计name表头值的个数)

 
  1. mysql> select dept_id , count(name) from tarena.employees group by dept_id ;
  2. +---------+-------------+
  3. | dept_id | count(name) |
  4. +---------+-------------+
  5. | 1 | 8 |
  6. | 2 | 5 |
  7. | 3 | 6 |
  8. | 4 | 55 |
  9. | 5 | 12 |
  10. | 6 | 9 |
  11. | 7 | 35 |
  12. | 8 | 3 |
  13. +---------+-------------+
  14. 8 rows in set (0.00 sec)

步骤二: 排序练习

命令操作如下所示:

查看满足条件记录的name和uid 字段的值

 
  1. mysql> select name , uid from tarena.user where uid is not null and uid between 100 and 1000 ;
  2. +-----------------+------+
  3. | name | uid |
  4. +-----------------+------+
  5. | systemd-network | 192 |
  6. | polkitd | 999 |
  7. | chrony | 998 |
  8. | haproxy | 188 |
  9. | plj | 1000 |
  10. +-----------------+------+
  11. 5 rows in set (0.00 sec)

按照uid升序排序

 
  1. mysql> select name , uid from tarena.user where uid is not null and uid between 100 and 1000 order by uid asc;
  2. +-----------------+------+
  3. | name | uid |
  4. +-----------------+------+
  5. | haproxy | 188 |
  6. | systemd-network | 192 |
  7. | chrony | 998 |
  8. | polkitd | 999 |
  9. | plj | 1000 |
  10. +-----------------+------+
  11. 5 rows in set (0.00 sec)

按照uid降序排序

 
  1. mysql> select name , uid from tarena.user where uid is not null and uid between 100 and 1000 order by uid desc;
  2. +-----------------+------+
  3. | name | uid |
  4. +-----------------+------+
  5. | plj | 1000 |
  6. | polkitd | 999 |
  7. | chrony | 998 |
  8. | systemd-network | 192 |
  9. | haproxy | 188 |
  10. +-----------------+------+
  11. 5 rows in set (0.00 sec)

查看2015年1月10号员工编号小于10的工资总额

 
  1. mysql> select employee_id , date , basic , bonus , basic+bonus as total from tarena.salary where date=20150110 and employee_id <= 10;
  2. +-------------+------------+-------+-------+-------+
  3. | employee_id | date | basic | bonus | total |
  4. +-------------+------------+-------+-------+-------+
  5. | 2 | 2015-01-10 | 17000 | 10000 | 27000 |
  6. | 3 | 2015-01-10 | 8000 | 2000 | 10000 |
  7. | 4 | 2015-01-10 | 14000 | 9000 | 23000 |
  8. | 6 | 2015-01-10 | 14000 | 10000 | 24000 |
  9. | 7 | 2015-01-10 | 19000 | 10000 | 29000 |
  10. +-------------+------------+-------+-------+-------+
  11. 5 rows in set (0.00 sec)

以工资总额升序排 ,总额相同按照员工编号升序排

 
  1. mysql> select employee_id , basic+bonus as total from tarena.salary where date=20150110 and employee_id <= 10 order by total asc ,employee_id asc;
  2. +-------------+-------+
  3. | employee_id | total |
  4. +-------------+-------+
  5. | 3 | 10000 |
  6. | 4 | 23000 |
  7. | 6 | 24000 |
  8. | 2 | 27000 |
  9. | 7 | 29000 |
  10. +-------------+-------+
  11. 5 rows in set (0.00 sec)

步骤三:过滤练习

在查找到的数据里 过滤符合条件的数据。

 
  1. select 表头名 from 库.表 where 筛选条件 having 筛选条件;

命令操作如下所示:

查找部门总人数少于10人的部门名称及人数

 
  1. //第一步,查看所有员工的部门名称
  2. select dept_id , name from tarena.employees;
  3. //第二步,按部门编号分组 统计人名个数
  4. mysql> select dept_id , count(name) as numbers from tarena.employees group by dept_id;
  5. +---------+---------+
  6. | dept_id | numbers |
  7. +---------+---------+
  8. | 1 | 8 |
  9. | 2 | 5 |
  10. | 3 | 6 |
  11. | 4 | 55 |
  12. | 5 | 12 |
  13. | 6 | 9 |
  14. | 7 | 35 |
  15. | 8 | 3 |
  16. +---------+---------+
  17. 8 rows in set (0.00 sec)
  18. //第三步,查找部门人数少于10人的部门名称及人数
  19. mysql> select dept_id , count(name) as numbers from tarena.employees group by dept_id having numbers < 10;
  20. +---------+---------+
  21. | dept_id | numbers |
  22. +---------+---------+
  23. | 1 | 8 |
  24. | 2 | 5 |
  25. | 3 | 6 |
  26. | 6 | 9 |
  27. | 8 | 3 |
  28. +---------+---------+
  29. 5 rows in set (0.00 sec)

步骤四:分页练习

分析:

作用:限制查询结果显示行数(默认显示全部查询结果)

使用SELECT查询时,如果结果集数据量很大,比如1万行数据,放在一个页面显示的话数据量太大,可以分100次显示 每次只显示100行。

语法:

 
  1. SELECT语句 LIMIT 数字;            //显示查询结果前多少条记录
  2. SELECT语句 LIMIT 数字1,数字2;    //显示指定范围内的查询记录
  3. 数字1 表示起始行 (0表示第1行) 数字2表示总行数

例如:

 
  1. limit 1 ; 显示查询结果的第1行
  2. limit 3 ; 显示查询结果的前3行
  3. limit 10 ; 显示查询结果的前10行
  4. limit 0,1 ;      从查询结果的第1行开始显示,共显示1行
  5. limit 3,5 ; 从查询结果的第4行开始显示,共显示5行
  6. limit 10,10; 从查询结果的第11行开始显示,共显示10行

命令操作如下所示:

查看有解释器的用户信息

 
  1. mysql> select * from tarena.user where shell is not null ;

只显示查询结果的第1行

 
  1. mysql> select * from tarena.user where shell is not null limit 1;

只显示查询结果的前3行

 
  1. mysql> select * from tarena.user where shell is not null limit 3;

仅仅显示查询结果的第1行 到 第3 (0 表示查询结果的第1行)

 
  1. mysql> select * from user where shell is not null limit 0,3;

从查询结果的第4行开始显示,共显示3行

 
  1. mysql> select name,uid , gid , shell from user where shell is not null limit 3,3;

查看uid 号最大的用户名和UID

 
  1. mysql> select name , uid from tarena.user order by uid desc limit 1 ;
  2. +-----------+-------+
  3. | name | uid |
  4. +-----------+-------+
  5. | nfsnobody | 65534 |
  6. +-----------+-------+
  7. 1 row in set (0.00 sec)

3 案例3:管理表记录

3.1 问题

  1. 练习插入表记录
  2. 练习修改表记录
  3. 练习删除表记录

3.2 方案

使用tarena库下的user表完成表记录管理的练习。

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:练习插入表记录

命令操作如下所示:

查看表头

 
  1. mysql> desc tarena.user;
  2. +----------+-------------+------+-----+---------+----------------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +----------+-------------+------+-----+---------+----------------+
  5. | id | int | NO | PRI | NULL | auto_increment |
  6. | name | char(20) | YES | | NULL | |
  7. | password | char(1) | YES | | NULL | |
  8. | uid | int | YES | | NULL | |
  9. | gid | int | YES | | NULL | |
  10. | comment | varchar(50) | YES | | NULL | |
  11. | homedir | varchar(80) | YES | | NULL | |
  12. | shell | char(30) | YES | | NULL | |
  13. +----------+-------------+------+-----+---------+----------------+
  14. 8 rows in set (0.00 sec)

插入1条记录给所有表头赋值

(给所有表头赋值表头可以省略不写)id表头的值不能重复,主键的知识在后边课程里讲

 
  1. mysql> insert into tarena.user values(40,"jingyaya","x",1001,1001,"teacher","/home/jingyaya","/bin/bash");
  2. Query OK, 1 row affected (0.05 sec)

查看表记录

 
  1. mysql> select * from tarena.user where name="jingyaya";
  2. +----+----------+----------+------+------+---------+----------------+-----------+
  3. | id | name | password | uid | gid | comment | homedir | shell |
  4. +----+----------+----------+------+------+---------+----------------+-----------+
  5. | 40 | jingyaya | x | 1001 | 1001 | teacher | /home/jingyaya | /bin/bash |
  6. +----+----------+----------+------+------+---------+----------------+-----------+
  7. 1 row in set (0.00 sec)
  8. mysql>

插入多行记录给所有列赋值

 
  1. insert into tarena.user values
  2. (41,"jingyaya2","x",1002,1002,"teacher","/home/jingyaya2","/bin/bash"),
  3. (42,"jingyaya3","x",1003,1003,"teacher","/home/jingyaya3","/bin/bash");

插入1行给指定列赋值,必须写列名,没赋值的列 没有数据 后通过设置的默认值赋值

 
  1. mysql> insert into tarena.user(name,uid,shell)values("benben",1002,"/sbin/nologin");

插入多行给指定列赋值,必须写列名,没赋值的列 没有数据 后通过设置的默认值赋值

 
  1. mysql> insert into tarena.user(name,uid,shell)values("benben2",1002,"/sbin/nologin"),("benben3",1003,"/sbin/nologin");

查看记录

 
  1. mysql> select * from tarena.user where name like "benben%";
  2. +----+---------+----------+------+------+---------+---------+---------------+
  3. | id | name | password | uid | gid | comment | homedir | shell |
  4. +----+---------+----------+------+------+---------+---------+---------------+
  5. | 41 | benben | NULL | 1002 | NULL | NULL | NULL | /sbin/nologin |
  6. | 42 | benben2 | NULL | 1002 | NULL | NULL | NULL | /sbin/nologin |
  7. | 43 | benben3 | NULL | 1003 | NULL | NULL | NULL | /sbin/nologin |
  8. +----+---------+----------+------+------+---------+---------+---------------+
  9. 3 rows in set (0.00 sec)

使用select查询结果赋值(查询表头个数和 插入记录命令表头个数要一致)

 
  1. mysql> select user from mysql.user;
  2. +------------------+
  3. | user |
  4. +------------------+
  5. | mysql.infoschema |
  6. | mysql.session |
  7. | mysql.sys |
  8. | root |
  9. +------------------+
  10. 4 rows in set (0.00 sec)
  11. mysql> insert into tarena.user(name) (select user from mysql.user);
  12. Query OK, 4 rows affected (0.09 sec)
  13. Records: 4 Duplicates: 0 Warnings: 0

查看插入后的数据

 
  1. mysql> select * from tarena.user where name like "mysql%" or name="root";
  2. +----+------------------+----------+------+------+--------------+----------------+------------+
  3. | id | name | password | uid | gid | comment | homedir | shell |
  4. +----+------------------+----------+------+------+--------------+----------------+------------+
  5. | 1 | root | x | 0 | 0 | root | /root | /bin/bash |
  6. | 26 | mysql | x | 27 | 27 | MySQL Server | /var/lib/mysql | /bin/false |
  7. | 44 | mysql.infoschema | NULL | NULL | NULL | NULL | NULL | NULL |
  8. | 45 | mysql.session | NULL | NULL | NULL | NULL | NULL | NULL |
  9. | 46 | mysql.sys | NULL | NULL | NULL | NULL | NULL | NULL |
  10. | 47 | root | NULL | NULL | NULL | NULL | NULL | NULL |
  11. +----+------------------+----------+------+------+--------------+----------------+------------+
  12. 6 rows in set (0.00 sec)

使用set命令赋值

 
  1. mysql> insert into tarena.user set name="yaya" , uid=99 , gid=99 ;
  2. Query OK, 1 row affected (0.06 sec)
  3. mysql> select * from tarena.user where name="yaya";
  4. +----+------+----------+------+------+---------+---------+-------+
  5. | id | name | password | uid | gid | comment | homedir | shell |
  6. +----+------+----------+------+------+---------+---------+-------+
  7. | 28 | yaya | NULL | 99 | 99 | NULL | NULL | NULL |
  8. +----+------+----------+------+------+---------+---------+-------+
  9. 1 row in set (0.00 sec)

步骤二:练习修改表记录

命令操作如下所示:

 
  1. //修改前查看
  2. mysql> select name , comment from tarena.user where id <= 10 ;
  3. +----------+----------+
  4. | name | comment |
  5. +----------+----------+
  6. | root | root |
  7. | bin | bin |
  8. | daemon | daemon |
  9. | adm | adm |
  10. | lp | lp |
  11. | sync | sync |
  12. | shutdown | shutdown |
  13. | halt | halt |
  14. | mail | mail |
  15. | operator | operator |
  16. +----------+----------+
  17. 10 rows in set (0.00 sec)
  18. //修改符合条件
  19. mysql> update tarena.user set comment=NULL where id <= 10 ;
  20. Query OK, 10 rows affected (0.09 sec)
  21. Rows matched: 10 Changed: 10 Warnings: 0
  22. //修改后查看
  23. mysql> select name , comment from tarena.user where id <= 10 ;
  24. +----------+---------+
  25. | name | comment |
  26. +----------+---------+
  27. | root | NULL |
  28. | bin | NULL |
  29. | daemon | NULL |
  30. | adm | NULL |
  31. | lp | NULL |
  32. | sync | NULL |
  33. | shutdown | NULL |
  34. | halt | NULL |
  35. | mail | NULL |
  36. | operator | NULL |
  37. +----------+---------+
  38. 10 rows in set (0.00 sec) [root@localhost ~]#
  39. //修改前查看
  40. mysql> select name , homedir from tarena.user;
  41. +------------------+--------------------+
  42. | name | homedir |
  43. +------------------+--------------------+
  44. | root | /root |
  45. | bin | /bin |
  46. | daemon | /sbin |
  47. | adm | /var/adm |
  48. | lp | /var/spool/lpd |
  49. | sync | /sbin |
  50. | shutdown | /sbin |
  51. | halt | /sbin |
  52. | mail | /var/spool/mail |
  53. | operator | /root |
  54. | games | /usr/games |
  55. | ftp | /var/ftp |
  56. | nobody | / |
  57. | systemd-network | / |
  58. | dbus | / |
  59. | polkitd | / |
  60. | sshd | /var/empty/sshd |
  61. | postfix | /var/spool/postfix |
  62. | chrony | /var/lib/chrony |
  63. | rpc | /var/lib/rpcbind |
  64. | rpcuser | /var/lib/nfs |
  65. | nfsnobody | /var/lib/nfs |
  66. | haproxy | /var/lib/haproxy |
  67. | plj | /home/plj |
  68. | apache | /usr/share/httpd |
  69. | mysql | /var/lib/mysql |
  70. | bob | NULL |
  71. | jerrya | NULL |
  72. | jingyaya | /home/jingyaya |
  73. | benben | NULL |
  74. | benben2 | NULL |
  75. | benben3 | NULL |
  76. | mysql.infoschema | NULL |
  77. | mysql.session | NULL |
  78. | mysql.sys | NULL |
  79. | root | NULL |
  80. +------------------+--------------------+
  81. 36 rows in set (0.00 sec)
  82. //不加条件批量修改
  83. mysql> update tarena.user set homedir="/student" ;
  84. Query OK, 36 rows affected (0.09 sec)
  85. Rows matched: 36 Changed: 36 Warnings: 0
  86. //修改后查看
  87. mysql> select name , homedir from tarena.user;
  88. +------------------+----------+
  89. | name | homedir |
  90. +------------------+----------+
  91. | root | /student |
  92. | bin | /student |
  93. | daemon | /student |
  94. | adm | /student |
  95. | lp | /student |
  96. | sync | /student |
  97. | shutdown | /student |
  98. | halt | /student |
  99. | mail | /student |
  100. | operator | /student |
  101. | games | /student |
  102. | ftp | /student |
  103. | nobody | /student |
  104. | systemd-network | /student |
  105. | dbus | /student |
  106. | polkitd | /student |
  107. | sshd | /student |
  108. | postfix | /student |
  109. | chrony | /student |
  110. | rpc | /student |
  111. | rpcuser | /student |
  112. | nfsnobody | /student |
  113. | haproxy | /student |
  114. | plj | /student |
  115. | apache | /student |
  116. | mysql | /student |
  117. | bob | /student |
  118. | jerrya | /student |
  119. | jingyaya | /student |
  120. | benben | /student |
  121. | benben2 | /student |
  122. | benben3 | /student |
  123. | mysql.infoschema | /student |
  124. | mysql.session | /student |
  125. | mysql.sys | /student |
  126. | root | /student |
  127. +------------------+----------+
  128. 36 rows in set (0.00 sec)

步骤三:练习删除表记录

命令操作如下所示:

 
  1. //删除前查看
  2. mysql> select * from tarena.user where id <= 10 ;
  3. +----+----------+----------+------+------+---------+----------+----------------+
  4. | id | name | password | uid | gid | comment | homedir | shell |
  5. +----+----------+----------+------+------+---------+----------+----------------+
  6. | 1 | root | x | 0 | 0 | NULL | /student | /bin/bash |
  7. | 2 | bin | x | 1 | 1 | NULL | /student | /sbin/nologin |
  8. | 3 | daemon | x | 2 | 2 | NULL | /student | /sbin/nologin |
  9. | 4 | adm | x | 3 | 4 | NULL | /student | /sbin/nologin |
  10. | 5 | lp | x | 4 | 7 | NULL | /student | /sbin/nologin |
  11. | 6 | sync | x | 5 | 0 | NULL | /student | /bin/sync |
  12. | 7 | shutdown | x | 6 | 0 | NULL | /student | /sbin/shutdown |
  13. | 8 | halt | x | 7 | 0 | NULL | /student | /sbin/halt |
  14. | 9 | mail | x | 8 | 12 | NULL | /student | /sbin/nologin |
  15. | 10 | operator | x | 11 | 0 | NULL | /student | /sbin/nologin |
  16. +----+----------+----------+------+------+---------+----------+----------------+
  17. 10 rows in set (0.00 sec)
  18. //仅删除与条件匹配的行
  19. mysql> delete from tarena.user where id <= 10 ;
  20. Query OK, 10 rows affected (0.06 sec)
  21. //查不到符合条件的记录了
  22. mysql> select * from tarena.user where id <= 10 ;
  23. Empty set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/882692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将树莓派转身为强大的Web服务器:使用Nginx和cpolar实现远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

【Python】使用python解析普通格式的报文为someip格式报文

文章目录 1.安装scapy库2.示例 1.安装scapy库 使用 pip 安装 scapy 第三方库&#xff0c;打开 cmd&#xff0c;输入以下命令&#xff1a; pip install scapy出现如图所示&#xff0c;表示安装成功&#xff1a; 2.示例 要解析someip格式报文&#xff0c;需要导入someip模块&a…

《Rethinking the Expressive Power of GNNs via Graph Biconnectivity》阅读笔记

一.文章概述 现如今存在许多工作探索GNN的表达能力&#xff0c;然而对于其中大多数方法&#xff0c;仍然缺乏对它们可以系统地和可证明地获取哪些额外表达力的深刻理解。在本文中&#xff0c;作者通过图双连通性&#xff08;biconnectivity&#xff09;引入一类新的表达能力度…

Java并发编程(七)实践[生产者-消费者]

生产者-消费者 概述 生产者消费者问题&#xff0c;也称有限缓冲问题&#xff0c;是一个多线程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个线程在多线程开发中,如果生产者(生产数据的线程)处理速度很快,而消费者(消费数据的线程)处理速度很慢,那么生产者就必须…

CMake生成的VS项目之后运行弹出错误框:无法启动...\Debug\~.exe,找不到指定的文件夹

问题&#xff1a; CMake生成的VS项目之后运行弹出错误框&#xff1a;无法启动…\Debug~.exe&#xff0c;找不到指定的文件夹 首先确实Debug文件夹中没有.exe文件 问题的根本是项目缺东西&#xff0c;有问题&#xff0c;当所有问题解决了&#xff0c;也就不会出现这个问题的&am…

【Mariadb高可用MHA】

目录 一、概述 1.概念 2.组成 3.特点 4.工作原理 二、案例介绍 1.192.168.42.3 2.192.168.42.4 3.192.168.42.5 4.192.168.42.6 三、实际构建MHA 1.ssh免密登录 1.1 所有节点配置hosts 1.2 192.168.42.3 1.3 192.168.42.4 1.4 192.168.42.5 1.5 192.168.42.6 …

02-C++数据类型-高级

数据类型-高级 4、复合类型 4.4、结构简介 struct inflatable {char name[20];float vol;double price; };inflatable vincent; //C struct inflatable goose; //C例子 // structur.cpp -- a simple structure #include <iostream> struct inflatable // structu…

【数据库系统】--【2】DBMS架构

DBMS架构 01DBMS架构概述02 DBMS的物理架构03 DBMS的运行和数据架构DBMS的运行架构DBMS的数据架构PostgreSQL的体系结构RMDB的运行架构 04DBMS的逻辑和开发架构DBMS的层次结构DBMS的开发架构DBMS的代码架构 05小结 01DBMS架构概述 02 DBMS的物理架构 数据库系统的体系结构 数据…

(二)结构型模式:5、装饰器模式(Decorator Pattern)(C++实例)

目录 1、装饰器模式&#xff08;Decorator Pattern&#xff09;含义 2、装饰器模式的UML图学习 3、装饰器模式的应用场景 4、装饰器模式的优缺点 5、C实现装饰器模式的简单实例 1、装饰器模式&#xff08;Decorator Pattern&#xff09;含义 装饰模式&#xff08;Decorato…

学习 Iterator 迭代器

今天看到一个面试题&#xff0c; 让下面解构赋值成立。 let [a,b] {a:1,b:2} 如果我们直接在浏览器输出这行代码&#xff0c;会直接报错&#xff0c;说是 {a:1,b:2} 不能迭代。 看了es6文档后&#xff0c;具有迭代器的就一下几种类型&#xff0c;没有Object类型&#xff0c;…

探索Java中的静态变量与实例变量:存储区域、生命周期以及内存分配方式的区别

文章目录 静态变量实例变量不可变对象静态变量和实例变量有什么区别&#xff1f;静态变量实例变量 Object 类都有哪些公共方法&#xff1f;Java 创建对象有哪几种方式&#xff1f;ab 与 a.equals(b) 有什么区别&#xff1f;总结 &#x1f389;欢迎来到Java面试技巧专栏~探索Jav…

Nacos详解(springcloud+nacos实战)

Nacos详解 Nacos1.介绍2.Nacos专业术语2.1 服务 (Service)2.2 服务注册中心 (Service Registry)2.3服务提供方 (Service Provider)2.4服务消费方 (Service Consumer)2.5版本依赖关系 Nacos 注册中心1. 启动NacosServer2 使用 Nacos 做注册中心2.1 nacos-client-b2.2 nacos-clie…

部门用户权限应用的设计和创建(进行中)

数据库表设计 代码实现之前首先是表设计&#xff0c; 六个基本步骤 1.需求分析 (分析用户需求,包括数据、功能和性能需求&#xff09; 2.概念结构设计(主要采用 E-R图) 3.逻辑结构设计 (将ER图转换成表,实现从E-R模型到关系模型转换&#xff09; 4.数据库物理设计 (为设计的…

深度学习的“前世今生”

1、“感知机”的诞生 20世纪50年代&#xff0c;人工智能派生出了这样两个学派&#xff0c;分别是“符号学派”及“连接学派”。前者的领军学者有Marvin Minsky及John McCarthy&#xff0c;后者则是由Frank Rosenblatt所领导。 符号学派的人相信对机器从头编程&#xff0c;一个…

Vue-5.编译器idea

关闭 IDEA 自动更新 IDEA无法搜索插件 填写idea下载插件的官方地址点击ok测试成功则ok https://plugins.jetbrains.com/idea 全局内存配置&#xff08;重启后生效&#xff09; 部署 Alibaba Cloud toolkit&#xff08;部署代码的利器&#xff09; Git&#xff08;需要安装gi…

人工智能原理(4)

目录 一、确定性推理 1、推理方式 2、控制策略 二、推理的逻辑基础 1、永真和可满足性 2、等价性和永真蕴含 3、置换与合一 三、自然演绎推理 四、归结演绎推理 1、子句型 2、鲁滨逊归结原理 3、归结策略 一、确定性推理 推理&#xff1a;就是按照某种策略从已有事…

微机原理与接口技术 学习笔记(二) 存储器

文章目录 一&#xff0c;存储器1.1 概述1.1.1 半导体存储器的分类按制造工艺&#xff1a; 易失性或挥发性存储器 / 不易失性或不挥发性存储器按制造工艺&#xff1a; 1.1.2 半导体存储器的性能指标1.1.3 半导体存储器的一般结构及组成 1.2 随机存取存储器 RAM1.2.1 静态RAM1.2.…

操作符和表达式求值

目录 1.运算符的优先级和结合性 1.1运算符的优先级 1.2结合性 2.操作符的使用最终带来的是一个表达式的值 2.1.隐式类型转换&#xff08;整型提升&#xff09; 2.1.1整形提升的例子 2.2算术转换 1.运算符的优先级和结合性 运算符是编程语言中的基本元素之一&#xff0c;主…

临床试验三原则-对照、重复、随机

临床试验必须遵循三个基本原则&#xff1a;对照、重复、随机。 一、对照原则和对照的设置 核心观点&#xff1a;有比较才有鉴别。 对照组和试验组同质可比。 三臂试验 安慰剂&#xff1a;试验组&#xff1a;阳性对照组1&#xff1a;n&#xff1a;m&#xff08;n≥m&#xff…

论文略读:城市道路场景下车辆编队运动规划与控制算法研究

1. 一些观点&#xff1a; &#xff08;1&#xff09;我曾经认为不能复现的论文都是垃圾。我现在看到能够量产的论文之后发现&#xff0c;论文的复现实属难得&#xff0c;即使给你代码&#xff0c;反复钻研&#xff0c;一个月之久才敢说略微看懂&#xff0c;所以论文的复现实在是…