25.1 MySQL SELECT语句
1. SQL概述
1.1 SQL背景知识
1946年, 世界上诞生了第一台电脑, 而今借由这台电脑的发展, 互联网已经成为一个独立的世界.
在过去几十年里, 许多技术和产业在互联网的舞台上兴衰交替.
然而, 有一门技术却从未消失, 甚至日益强大, 那就是SQL.SQL(Structured Query Language,结构化查询语言)是一种使用关系模型的数据库应用语言m 它的设计初衷是用来与数据直接交互.
上世纪70年代, IBM的研究员发布了一篇关于数据库技术的论文<<SEQUEL: 一门结构化的英语查询语言>>, 这可以说是SQL的奠基之作.
而到了现如今, 虽然有一些细微的变化, 但SQL作为一门结构化的查询语言并没有发生太大的变化.无论是前端工程师还是后端算法工程师, 都需要与数据打交道, 并且需要了解如何高效地提取他们所需的数据.
尤其是对于数据分析师而言, 他们的工作就是与数据打交道, 整理不同的报告以引导业务决策.SQL有多个版本和标准, 最重要的是SQL92和SQL99.
它们分别代表了1992年和1999年发布的SQL标准.
我们今天使用的SQL语言仍然遵循这些标准.需要提醒的是, 不同的数据库厂商支持SQL语句, 但每个厂商可能会有一些特殊的内容或扩展.
因此, 在使用SQL时需要根据具体的数据库系统来选择合适的语法和功能.
TIOBE编程语言排行榜是一个根据搜索引擎查询结果和编程语言讨论的数据来评估编程语言受欢迎程度的指标.SQL之所以一直保持高排名, 是因为它作为一种用于管理关系型数据库的标准语言, 被广泛应用于各个行业和领域.
无论是大型企业还是小型公司, 几乎都需要使用关系型数据库进行数据存储和查询.
而SQL作为关系型数据库的标准查询语言, 成为了处理和管理数据的核心工具.排行榜地址: https://www.tiobe.com/tiobe-index/
1.2 SQL分类
SQL是一种用于管理和操作关系型数据库的标准化查询语言.
根据应用领域和功能特点, 可以将SQL分为以下几个主要的分类:
* 1. 数据定义语言(DDL): DDL语句用于定义和管理数据库的结构, 包括创建, 修改和删除数据库, 表, 索引, 视图等.常见的DDL语句包括CREATE, ALTER和DROP等.* 2. 数据操作语言(DML): DML语句用于对数据库中的数据进行操作, 包括查询, 插入, 更新和删除数据.常见的DML语句包括SELECT, INSERT, UPDATE和DELETE等.* 3. 数据查询语言(DQL): DQL语句用于从数据库中提取数据, 常用于查询和检索数据的需求.DQL的核心命令是SELECT语句, 可以通过选择特定的列, 过滤条件和排序来获取需要的数据.* 4. 数据控制语言(DCL): DCL语句用于控制数据库用户的访问权限和数据完整性, 包括授权和回收权限, 事务处理和数据约束等.常见的DCL语句包括GRANT, REVOKE和COMMIT等.* 5. 事务控制语言(TCL): TCL语句用于管理和控制事务, 可用于维护数据的一致性和完整性.常见的TCL语句包括BEGIN TRANSACTION, COMMIT和ROLLBACK等.* 6. 数据库管理语言(DML): DML语句用于管理数据库的元数据, 包括数据库, 表和索引的创建, 修改和删除.常见的DML语句包括CREATE DATABASE, CREATE TABLE和CREATE INDEX等.除了以上分类, 还有其他一些衍生的SQL语言和扩展, 如存储过程语言(如PL/SQL和T-SQL), 面向对象数据库语言(如SQL/OLB)等,
它们通过扩展SQL的功能, 提供了更强大和灵活的数据库操作能力.
1.3 SQL语言规则和约定
当涉及到使用SQL语言时, 遵守一些规则和规范是至关重要的.
遵守以下的规则和规范将有助于提高SQL代码的可读性, 可维护性和一致性.
以下是SQL语言的一些常用规则和约定:
* 1. 编写风格:- 为了增加可读性, 可以将SQL语句写在一行或多行, 并使用适当的缩进.- 每条命令应以分号(;), \g或\G结束, 标志着命令的结束.
# 多行书写, 分号结束.
SELECT column1, column2
FROM table_name
WHERE condition;
* 2. 标点符号:- 必须使用成对的括号, 单引号和双引号, 并正确结束.- 在输入SQL时,请使用英文状态下的半角输入方式。- 用单引号表示字符串型和日期时间类型的数据. (双引号可以使用, 但是不推荐.)- 可以使用双引号("")给列取别名, 并尽使用as关键字取别名. (单引号可以使用, 但是不推荐.)
SELECT id AS 编号, name AS 姓名 FROM t_stu; # 字段别名使用AS关键字来指定
SELECT id 编号, name 姓名 FROM t_stu; # 如果字段别名中不包含空格或特殊字符, 那么AS关键字可以省略
SELECT id AS "编 号", name AS "姓 名" FROM t_stu; # 如果字段别名中有空格, 那么不能省略""
* 3. 大小写规范(建议遵守):- 在Windows环境下, MySQL对大小写不敏感(因为Windows系统对大小写不敏感); 在Linux环境下, MySQL对大小写敏感.- 数据库名, 表名, 表的别名和变量名是区分大小写的.- SQL关键字, 函数名, 列名和列的别名不区分大小写.- 建议采用统一的书写规范, 例如数据库名, 表名, 表别名, 字段名和字段别名都使用小写, 而SQL关键字和函数名则使用大写.
# 不区分大小写, 都可以执行成功.
show databases;
SHOW DATABASES;# 关键字大写, 表名, 字段小写.
SELECT column1, column2
FROM table_name
WHERE condition;
* 4. 注释:- 可以使用适当的注释结构来注释代码, 增加代码的可读性和可理解性.- 行级注释: # 注释单行 (MySQL特有的方式)- 行级注释:-- 注释单行 (-- 后面必须包含一个空格)- 块级注释:/* 注释多行 */
# 注释-- 注释/*
注释1
注释2
...
*/
* 5. 命名规则:- 数据库名和表名不得超过30个字符, 变量名限制为29个字符.- 对象名只能包含A–Z, a–z, 0–9和下划线, 共计63个字符.- 对象名中不应包含空格.- 在同一个MySQL软件中, 数据库名和表名应保持唯一性.- 如果字段名与保留字, 数据库系统或常用方法冲突, 应使用``(着重号)引起来.
# 创建表格
# create table student info(...); # 表名错误, 因为表名有空格
CREATE CREATE student_info(...);# order与关键字重复, 还想使用需要``包裹.
CREATE TABLE `order`();
* 6. 保持字段名和类型的一致性:- 在为字段命名并指定其数据类型时, 应确保一致性.- 如果一个表中的某一字段是整数类型, 同名字段在其他表中也应保持整数类型.
# 保持字段类型的一致.
CREATE CREATE student(id int, name varchat, ...)
CREATE CREATE teacher(id int, name varchat, ...)
2. 导入数据
首先学习数据的查询, 这里准备了一张表, 将数据导入到数据自己MySQL数据库中.
2.1 命令导入
导入数据命令: source sql文件路径
-- MySQL 8.1 使用命令导入的方式, 语句不需要;结尾
mysql> source C:\Users\13600\Desktop\atguigudb.sql
Query OK, 0 rows affected, 1 warning (0.00 sec)
...
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| atguigudb | -- 增加这个库
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+
6 rows in set (0.02 sec)
2.2 Navicat导入
* 1. 先使用Navicat 连接MySQL 5.7 的服务器.
* 2. 选中数据右击选择运行SQL文件.
* 3.选择sql文件的路径. 点击开始进行导入.
* 4. 导入成功后点开关闭.
* 5. 刷新后展示数据库.
3. 查看结构
查看表结构: desc 表名称;
-- 使用数据库
mysql> use atguigudb
Database changed-- 查看员工表数据
mysql> desc employees;
+----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| employee_id | int | NO | PRI | 0 | |
| first_name | varchar(20) | YES | | NULL | |
| last_name | varchar(25) | NO | | NULL | |
| email | varchar(25) | NO | UNI | NULL | |
| phone_number | varchar(20) | YES | | NULL | |
| hire_date | date | NO | | NULL | |
| job_id | varchar(10) | NO | MUL | NULL | |
| salary | double(8,2) | YES | | NULL | |
| commission_pct | double(2,2) | YES | | NULL | |
| manager_id | int | YES | MUL | NULL | |
| department_id | int | YES | MUL | NULL | |
+----------------+-------------+------+-----+---------+-------+
11 rows in set (0.01 sec)
其中, 各个字段的含义分别解释如下:
* 1. Field: 表示字段名称.
* 2. Type: 表示字段类型, 这里barcode, goodsname是文本型的, price是整数类型的.
* 3. Null: 表示该列是否可以存储NULL值.
* 4. Key: 表示该列是否已编制索引.PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次.
* 6. Default: 表示该列是否有默认值.
* 6. Extra: 表示可以获取的与给定列有关的附加信息, 例如AUTO_INCREMENT(自动递增主键)等.
4. SELECT语句
-- 在SQL中, SELECT 1; 是一个简单的查询语句, 它的含义是从数据源中选择并返回一个值为1的列.
mysql> SELECT 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)-- 执行 SELECT 9/2; 这个查询语句后, 将返回结果为4.5的列.
mysql> SELECT 9/2;
+--------+
| 9/2 |
+--------+
| 4.5000 |
+--------+
1 row in set (0.00 sec)
5. SELECT … FROM语句
SELECT ... FROM语句有两种语法:
* 1. 选择全部字段查询语法: SELECT * FROM 表名;
* 2. 选择字段查询语法: SELECT 字段1, ... FROM 表名;
一般情况下, 除非需要使用表中所有的字段数据, 最好不要使用通配符"*".
使用通配符虽然可以节省输入查询语句的时间, 但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率.
通配符的优势是, 当不知道所需要的列的名称时, 可以通过它获取它们.
在生产环境下, 不推荐你直接使用 SELECT * 进行查询.
-- 查看整张部门表的数据
mysql> SELECT * FROM departments;
+---------------+----------------------+------------+-------------+
| department_id | department_name | manager_id | location_id |
+---------------+----------------------+------------+-------------+
| 10 | Administration | 200 | 1700 |
| 20 | Marketing | 201 | 1800 |
| 30 | Purchasing | 114 | 1700 |
| 40 | Human Resources | 203 | 2400 |
| 50 | Shipping | 121 | 1500 |
| ... | ... | ...| ... | -- 省略
| 260 | Recruiting | NULL | 1700 |
| 270 | Payroll | NULL | 1700 |
+---------------+----------------------+------------+-------------+
27 rows in set (0.00 sec)
-- 查看一部分部门表的数据
mysql> SELECT department_id, department_name FROM departments;
+---------------+----------------------+
| department_id | department_name |
+---------------+----------------------+
| 10 | Administration |
| 20 | Marketing |
| 30 | Purchasing |
| 40 | Human Resources |
| 50 | Shipping |
| ... | ... | -- 省略
| 260 | Recruiting |
| 270 | Payroll |
+---------------+----------------------+
27 rows in set (0.00 sec)
Navicat的查询方式:
* 1. 点击菜单栏的查询 --> 点击新建查询.
* 2. 选择服务器名称与数据库.
查询方式1: 输入命令后点击运行, 会执行编辑器上所有的命令.在下面的信息栏中可以点开结果的信息查看.
查询方式2: 选中想要运行命令, 这是执行选项会变成运行与选择的命令.
美化SQL功能.
6. 字段的别名
给字段起别名的好处主要包括以下几点:
* 1. 增加可读性: 别名可以使得数据更易于理解和解释.在某些情况下, 原始字段名可能过于复杂或含糊不清, 使用别名可以解决这个问题.
* 2. 简化操作: 通过给长字段名或复杂字段名设置别名, 可以简化查询和数据处理的操作.
* 3. 保护隐私: 在涉及到敏感数据的情况下, 别名可以用于隐藏原始字段名, 从而保护个人隐私.
* 4. 提高可维护性: 如果字段名需要更改, 只需更改别名而无需更改所有相关的查询和代码, 这可以降低维护成本.
总的来说, 别名可以使数据和查询更易于理解, 使用和维护.
-- 为字段其别名, 最好见名知意
mysql> SELECT department_id AS dept_id, department_name AS dept_name FROM departments;
+---------+----------------------+
| dept_id | dept_name |
+---------+----------------------+
| 10 | Administration |
| 20 | Marketing |
| 30 | Purchasing |
| 40 | Human Resources |
| 50 | Shipping |
| 60 | IT |
| ... | ... | -- 省略
| 270 | Payroll |
+---------+----------------------+
27 rows in set (0.00 sec)
-- 查看员工表的信息(名, 年收入)
mysql> SELECT first_name "name", salary * 12 AS "Annual Salary" FROM employees;
+-------------+---------------+
| name | Annual Salary |
+-------------+---------------+
| Steven | 288000.00 |
| Neena | 204000.00 |
| Lex | 204000.00 |
| Alexander | 108000.00 |
| Bruce | 72000.00 |
| ... | ... | -- 省略
| Michael | 156000.00 |
| Pat | 72000.00 |
| Susan | 78000.00 |
| Hermann | 120000.00 |
| Shelley | 144000.00 |
| William | 99600.00 |
+-------------+---------------+
107 rows in set (0.00 sec)
7. 去除重复行
默认情况下, 查询会返回全部行, 这些行中就可能包含一些重复的信息.
-- 查看员工的部门id
mysql> SELECT department_id FROM employees;
+---------------+
| department_id |
+---------------+
| NULL |
| 10 |
| 20 |
| 20 |
| 30 |
| 30 |
| 30 |
| --- | -- 省略
| 110 |
| 110 |
+---------------+
107 rows in set (0.00 sec)
在SELECT语句中使用关键字DISTINCT去除重复行.
-- 对员工的部门id去重.
mysql> SELECT DISTINCT department_id FROM employees;
+---------------+
| department_id |
+---------------+
| NULL |
| 10 |
| 20 |
| 30 |
| 40 |
| 50 |
| 60 |
| 70 |
| 80 |
| 90 |
| 100 |
| 110 |
+---------------+
12 rows in set (0.00 sec)
-- 对员工的部门id和薪资组合去重, 单这两个条件都一样时才会去重.
mysql> SELECT DISTINCT department_id, salary FROM employees;
+---------------+----------+
| department_id | salary |
+---------------+----------+
| 90 | 24000.00 |
| 90 | 17000.00 |
| 60 | 9000.00 |
| 60 | 6000.00 |
| 60 | 4800.00 |
| 60 | 4200.00 |
| .. | ..... | -- 省略
| 40 | 6500.00 |
| 70 | 10000.00 |
| 110 | 12000.00 |
| 110 | 8300.00 |
+---------------+----------+
74 rows in set (0.00 sec)
注意事项:
* 1. DISTINCT 需要放到所有列名的前面, 如果写成 SELECT salary, DISTINCT department_id FROM employees 会报错.
* 2. DISTINCT 其实是对后面所有列名的组合进行去重, 最后的结果是74条, 因为这74个部门id不同, 都有salary这个属性值.如果你想要看都有哪些不同的部门(department_id), 只需要写 DISTINCT department_id即可, 后面不需要再加其他的列名了.
8. 着重号
设计表名和字段时, 避免使用数据库的保留字或常用方法名称是非常重要的.
如果使用这些名称, 可能会导致SQL查询出现错误或混淆.当名称冲突时, 可以使用反引号(`)将表名或字段名括起来; 反引号在键盘上通常与波浪号(~)共享一个键.
-- 查看所有表格, 其中有一张表是order, mysql中order是一个关键字, 主要用于对查询结果进行排序.
mysql> show tables;
+---------------------+
| Tables_in_atguigudb |
+---------------------+
| countries |
| ... | -- 省略
| order |
| regions |
+---------------------+
10 rows in set (0.01 sec)
-- 错误的示例
mysql> SELECT * FROM order;
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near 'order' at line 1错误 1064 (42000): 您的 SQL 语法有误;
请检查与您的 MySQL 服务器版本相对应的手册, 以了解在第 1 行 'order' 附近应使用的正确语法.
-- 使用注重号
mysql> SELECT * FROM `order`;
+----------+------------+
| order_id | order_name |
+----------+------------+
| 1 | shkstart |
| 2 | tomcat |
| 3 | dubbo |
+----------+------------+
3 rows in set (0.00 sec)
9. 查询常数
在SQL中, 可以使用SELECT语句对常数进行查询, 并在查询结果中添加一列固定的常数列.
这样做的原因可能是为了整合不同的数据源, 并使用常数列作为表的标记.如果你想对employees数据表中的员工的姓进行查询,
同时增加一列字段corporation(团队), 这个字段的固定值为'MySQL', 可以使用以下查询语句:
-- 增加额外字段并设置固定的值.
mysql> SELECT 'MySQL' AS corporation, last_name FROM employees;
+-------------+-------------+
| corporation | last_name |
+-------------+-------------+
| MySQL | King |
| MySQL | Kochhar |
| MySQL | De Haan |
| MySQL | Hunold |
| MySQL | Ernst |
| ... | ... | -- 省略
| MySQL | Higgins |
| MySQL | Gietz |
+-------------+-------------+
107 rows in set (0.00 sec)
10. 过滤数据
可以使用WHERE子句, 将不满足条件的行过滤掉.
注意事项: WHERE子句紧随FROM子句语法: SELECT 字段1,字段2, ... FROM 表名 WHERE 过滤条件;
-- 例如, 过滤出部门编号为90的部分信息员工信息.
mysql> SELECT-> employee_id, -- 部门ID-> first_name, -- 名字-> job_id, -- 职位id-> department_id -- 部分id-> FROM-> employees-> WHERE -> department_id = 90; -- 匹配部门id = 90的行
+-------------+------------+---------+---------------+
| employee_id | first_name | job_id | department_id |
+-------------+------------+---------+---------------+
| 100 | Steven | AD_PRES | 90 |
| 101 | Neena | AD_VP | 90 |
| 102 | Lex | AD_VP | 90 |
+-------------+------------+---------+---------------+
3 rows in set (0.00 sec)
11. 空值与空字符串
MySQL中, 空值(NULL)和空字符串("")是两种不同的概念, 具有不同的特性和用法.* 1. 空值: 表示数据项不存在或未知.在MySQL中, NULL是一种特殊的标记, 表示字段或数据项没有值或值未知.当一个字段被设置为NULL时, 表示该字段没有存储任何有效的数据.在存储NULL值的字段上, 不会分配任何实际的存储空间. 相反, MySQL会在记录中存储一个指示该字段为NULL的标记.在查询中, 需要使用 IS NULL 或 IS NOT NULL 运算符来判断某列是否为空值, 例如: SELECT * FROM table WHERE column IS NULL.* 2. 空字符串: 则表示一个字符串中没有任何字符, 即长度为0的字符串.它是一个实际存在的值, 但与NULL不同, 空字符串是一个有效的数据项.在查询中, 空字符串可以与其他字符串进行比较, 例如: SELECT * FROM table WHERE column = "".空字符串对于可变长度字符串类型会占用1个字节的存储空间, 而对于固定长度字符串类型则会占用字段定义的存储空间.以下是空值和空字符串的一些区别:
存储空间: NULL不需要占用实际的存储空间, 而空字符串("")需要占用一定的存储空间, 因为它是一个实际存在的值.
数据比较: 在MySQL中, NULL不能和任何其他值进行直接比较, 包括自身. 而空字符串("")可以进行比较操作.
数据处理: 在进行数据插入或更新操作时, 如果没有为字段指定值, MySQL将默认将其设置为NULL, 而不是空字符串("").
空值与任何其他值进行运算的结果通常都是NULL.
这是因为空值表示缺失或未知的值, 因此无法与其他值进行准确的运算.
mysql> SELECT-> employee_id, -- 员工id-> salary, -- 月薪-> commission_pct, -- 佣金-> 12 * salary * (1 + commission_pct) -> AS -> "annual_sal" -- 年薪-> FROM -> employees;
+-------------+----------+----------------+------------+
| employee_id | salary | commission_pct | annual_sal |
+-------------+----------+----------------+------------+
| 100 | 24000.00 | NULL | NULL | -- NULL参数运算的结果还是NULL
| ... | ... | ... | ... | -- 省略
| 145 | 14000.00 | 0.40 | 235200.00 |
+-------------+----------+----------------+------------+
107 rows in set (0.00 sec)
如果commission_pct的值可能为NULL, 那么在计算年薪时可能会出现问题, 因为NULL值会导致计算结果也是NULL.
为了处理这种情况, 可以使用COALESCE函数或IFNULL函数来将NULL值替换为0或其他默认值.
例: COALESCE(commission_pct, 0), 如果commission_pct的值为NULL, 则返回0; 否则返回commission_pct本身的值.
这样可以确保在计算年薪时不会因为NULL值而出现错误.以下是使用COALESCE函数修改后的查询语句:
mysql> SELECT-> employee_id, -- 员工id-> salary, -- 月薪-> commission_pct, -- 佣金-> 12 * salary * (1 + COALESCE(commission_pct, 0))-> AS-> "annual_sal" -- 年薪-> FROM -> employees;
+-------------+----------+----------------+------------+
| employee_id | salary | commission_pct | annual_sal |
+-------------+----------+----------------+------------+
| 100 | 24000.00 | NULL | 288000.00 |
| ... | ... | ... | ... | -- 省略
| 145 | 14000.00 | 0.40 | 235200.00 |
+-------------+----------+----------------+------------+
12. 练习
* 1.查询员工12个月的工资总和, 并起别名为ANNUAL SALARY.
mysql> SELECT-> 12 * salary * (1 + COALESCE(commission_pct, 0))-> AS-> "ANNUAL SALARY"-> FROM-> employees;
+---------------+
| ANNUAL SALARY |
+---------------+
| 288000.00 |
| 204000.00 |
| 204000.00 |
| 108000.00 |
| ... |
+---------------+
107 rows in set (0.02 sec)
* 2. 查询employees表中去除重复的job_id以后的数据.
mysql> SELECT DISTINCT-> job_id-> FROM-> employees;
+------------+
| job_id |
+------------+
| AC_ACCOUNT |
| AC_MGR |
| AD_ASST |
| ... |
| SA_REP |
| SH_CLERK |
| ST_CLERK |
| ST_MAN |
+------------+
19 rows in set (0.01 sec)
* 3.查询工资大于12000的员工姓名和工资.
mysql> SELECT-> first_name,-> last_name,-> salary-> FROM-> employees-> WHERE-> salary > 12000;
+------------+-----------+----------+
| first_name | last_name | salary |
+------------+-----------+----------+
| Steven | King | 24000.00 |
| Neena | Kochhar | 17000.00 |
| Lex | De Haan | 17000.00 |
| John | Russell | 14000.00 |
| Karen | Partners | 13500.00 |
| Michael | Hartstein | 13000.00 |
+------------+-----------+----------+
6 rows in set (0.00 sec)
* 4.查询员工号为176的员工的姓名和部门号.
mysql> SELECT-> first_name,-> last_name,-> department_id-> FROM-> employees-> WHERE-> employee_id = 176;
+------------+-----------+---------------+
| first_name | last_name | department_id |
+------------+-----------+---------------+
| Jonathon | Taylor | 80 |
+------------+-----------+---------------+
1 row in set (0.01 sec)
* 5.显示表departments的结构, 并查询其中的全部数据.
mysql> DESC departments;
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| department_id | int | NO | PRI | 0 | |
| department_name | varchar(30) | NO | | NULL | |
| manager_id | int | YES | MUL | NULL | |
| location_id | int | YES | MUL | NULL | |
+-----------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> SELECT-> *-> FROM-> departments;
+---------------+----------------------+------------+-------------+
| department_id | department_name | manager_id | location_id |
+---------------+----------------------+------------+-------------+
| 10 | Administration | 200 | 1700 |
| 20 | Marketing | 201 | 1800 |
| ... | ... | ... | ... |
| 270 | Payroll | NULL | 1700 |
+---------------+----------------------+------------+-------------+
27 rows in set (0.01 sec)
相关文章:

25.1 MySQL SELECT语句
1. SQL概述 1.1 SQL背景知识 1946年, 世界上诞生了第一台电脑, 而今借由这台电脑的发展, 互联网已经成为一个独立的世界. 在过去几十年里, 许多技术和产业在互联网的舞台上兴衰交替. 然而, 有一门技术却从未消失, 甚至日益强大, 那就是SQL.SQL(Structured Query Language&…...

【VSCode】Windows环境下,VSCode 搭建 cmake 编译环境(通过配置文件配置)
除了之前的使用 VSCode 插件来编译工程外,我们也可以使用配置文件来编译cmake工程,主要依赖 launch.json 和 tasks.json 文件。 目录 一、下载编译器 1、下载 Windows GCC 2、选择编译器路径 二、配置 debug 环境 1、配置 lauch.json 文件 2、配置…...

useragent识别访问设备
背景需求 ruoyi框架,前后端分离。现在要在用户访问的时候根据不同的设备跳转到不同的登录页面。 教程 router/index.js 修改src/router/index.js,在这里增加自己的要跳转的页面 permission.js 在白名单中添加自己的登录页面 增加以下识别的代码 le…...

紫光同创FPGA实现UDP协议栈网络视频传输,带录像和抓拍功能,基于YT8511和RTL8211,提供2套PDS工程源码和技术支持
目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案紫光同创FPGA精简版UDP方案紫光同创FPGA带ping功能UDP方案紫光同创FPGA精简版UDP视频传输方案 3、设计思路框架OV5640摄像头配置及采集数据缓冲FIFOUDP协议栈详解MAC层发送MAC发送模式MAC层接收ARP发送ARP接收ARP缓…...

【机器学习】逻辑回归
文章目录 逻辑回归定义损失函数正则化 sklearn里面的逻辑回归多项式逻辑回归 逻辑回归 逻辑回归,是一种名为“回归”的线性分类器,其本质是由线性回归变化而来的,一种广泛使用于分类问题中的广义回归算法。 线性回归是机器学习中最简单的的…...

DITA-OT 4.0新特性 - PDF themes,定制PDF样式的新方法
随着DITA-OT 4.0的发布,它提供了一种新的定制PDF样式方法,这种方法就是PDF theme。这篇文章来聊一聊这种定制PDF输出的新方法和实验结果。 在进入PDF theme细节之前,为各位读者梳理一下DITA-OT将DITA和Markdown发布成PDF的几种方法。 - 1 …...
MySQL 8.0 OCP认证精讲视频、环境和题库之四 多实例启动 缓存、事务、脏读
一、配置第一个mysqld服务 1、编辑选项文件,指定以下选项: [mysqld] basedir/mysql80 datadir/mysql80/data1 socket/mysql80/data1/mysqld.sock pid-file/mysql80/data1/mysqld.pid log-error/mysql80/dat…...

对代码感兴趣 但不擅长数学怎么办——《机器学习图解》来救你
目前,该领域中将理论与实践相结合、通俗易懂的著作较少。机器学习是人工智能的一部分,很多初学者往往把机器学习和深度学习作为人工智能入门的突破口,非科班出身的人士更是如此。当前,国内纵向复合型人才和横向复合型人才奇缺;具有…...

【EI会议征稿】第三届大数据、信息与计算机网络国际学术会议(BDICN 2024)
第三届大数据、信息与计算机网络国际学术会议(BDICN 2024) 2024 3rd International Conference on Big Data, Information and Computer Network 第三届大数据、信息与计算机网络国际学术会议(BDICN 2024)定于2024年1月12-14日在…...

【Arduino+ESP32+腾讯云+sg90】强制门户+腾讯云控制开关灯
作者有话说 博主对于Arduino开发并没有基础,但是为了实现更加方便的配网,这几天一直在尝试用ESP32-12F(因为手头刚好有一个,其他的也可以)来做远程开关灯!不知道大家是否注意到,上一篇利用STM32…...

windows中elasticsearch7中添加用户名密码验证
1.找到elsatic的bin目录输入cmd 2.生成ca证书 输入 elasticsearch-certutil ca 在es7根目录生成ca证书,输入密码时直接回车即可,否则后面会报错 Please enter the desired output file [elastic-stack-ca.p12]: #这里直接回车即可 Enter password for…...

linux安装达梦数据库(命令行安装)
安装达梦数据库 创建安装用户 1,创建安装用户组dinstall [rootdmDMServer1 ~]# groupadd -g 12345 dinstallgroupadd : 创建组 -g : 指定组id(GID) 12345: 指定的组名称 dinstall : 组名 2,创建安装用户dmdba [rootdmDMSe…...

Flutter——最详细(CustomScrollView)使用教程
CustomScrollView简介 创建一个 [ScrollView],该视图使用薄片创建自定义滚动效果。 [SliverList],这是一个显示线性子项列表的银子列表。 [SliverFixedExtentList],这是一种更高效的薄片,它显示沿滚动轴具有相同范围的子级的线性列…...

解决容器内deepspeed微调大模型报错
解决容器内deepspeed微调大模型报错:[launch.py:315:sigkill_handler] Killing subprocess 问题描述:解决办法 问题描述: 在容器中用deepspeed微调百川大模型2时,出现上述错误,错误是由于生成容器时,共享内…...

UE 插件模块引用
如Plugons中的模块A想要引用模块B: 1、模块A中的.uplugin文件加入↓ 2、模块A中的.Build.cs文件加入↓ 3、在模块A需要用到模块B的地方直接include 4、重新generate Project 5、重新编译 注意两个模块之间不能循环引用...

python元组、拆包和装包
注意 元组不能修改元素 元组:如果元素为字符串且元素为1个,必须加一个, ********* t1 (aa,) 下标和切片 in not in for ... in ... 元组转为列表 拆包、装包...
1-Docker安装MySQL8.0
1 背景知识记录 1.1 MySQL 的基本配置记录 MySQL的配置文件目录(/etc/mysql): root2dd6033b5c17:/etc/mysql# pwd /etc/mysql root2dd6033b5c17:/etc/mysql# ls conf.d my.cnf my.cnf.fallback MySQL的data文件目录(/var/lib/my…...

配电房智能化改造在加油站等的应用
随着科技的发展和智能化趋势的推进,对加油站配电房进行智能化改造成为了一个必然的选择。智能化改造不仅可以提高加油站的工作效率,减少事故发生率,还可以实现能源的合理利用,提高经济效益。 力安科技加油站智能化改造升级是一种高…...
集准测试-架构真题(五十六)
如果数据库单标即可实现业务功能,采用()方式进行数据交换与处理较为合适。如果通过数据库不同表的连接操作获取数据才能实现业务功能,这时候采用()方式进行数据交换与处理合适。 主动记录数据网关包装器数…...

木与空间的舞蹈:奥地利住宅的独特设计
国外著名设计师,为一位业主设计了一座住宅,附带有附属建筑和有盖的入口,形成了像庭院一样的建筑群。 这座住宅采用了当地的传统建筑风格,有长方形的平面和陡峭的顶棚,与周围的房屋相符。然而,内部设计别具一…...
el-table表格增加序号列index vue2和vue3的写法
<el-table><!--每页从1开始的序号--><el-table-column label"序号" width"60" align"center" type"index" /><!--一直递增的序号 vue2写法--><el-table-column label"序号" width"60"…...
【仿生机器人】仿生机器人智能架构:从感知到个性的完整设计
仿生机器人智能架构:从感知到个性的完整设计 仿生机器人不仅需要模拟人类的外表,更需要具备类人的认知、情感和个性特征。本研究提出了一个综合性的软件架构,实现了从环境感知到情感生成、从实时交互到人格塑造的完整智能系统。该架构突破了…...
程序代码篇---Python串口
在 Python 里,serial库(一般指pyserial)是串口通信的常用工具。下面为你介绍其常用的读取和发送操作函数及使用示例: 1. 初始化串口 要进行串口通信,首先得对串口对象进行初始化,代码如下: i…...
正则表达式检测文件类型是否为视频或图片
// 配置化文件类型检测(集中管理支持的类型) const FILE_TYPE_CONFIG {video: {extensions: [mp4, webm, ogg, quicktime], // 可扩展支持更多格式regex: /^video\/(mp4|webm|ogg|quicktime)$/i // 自动生成正则},image: {extensions: [jpeg, jpg, png,…...
Python训练day40
知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中 展平操作:除第一个维度batchsize外全部展平 dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业:仔细学习下测试和训练…...

如何轻松、安全地管理密码(新手指南)
很多人会为所有账户使用相同、易记的密码,而且常常多年不换。虽然这样方便记忆,但安全性非常低。 您可能听说过一些大型网站的信息泄露事件,同样的风险也可能存在于您的WordPress网站中。如果有不法分子获取了访问权限,您的网站和…...

【软件工具】批量OCR指定区域图片自动识别内容重命名软件使用教程及注意事项
批量OCR指定区域图片自动识别内容重命名软件使用教程及注意事项 1、操作步骤1-5: 安装与启动:安装成功后,在桌面或开始菜单找到软件图标,双击启动。 导入图片:进入软件主界面,点击 “导入图片” 按钮&a…...

FreeRTOS任务之深入篇
目录 1.Tick1.1 Tick的概念1.2 Tick与任务调度1.3 Tick与延时函数 2.任务状态2.1 运行状态 (Running)2.2 就绪状态 (Ready)2.3 阻塞状态 (Blocked)5.4 暂停状态 (Suspended)2.5 特殊状态:删除状态 (Deleted)5.6 任务状态转换2.7 实验 3.Delay函数3.1 两个函数3.2 实…...
[c#]判定当前软件是否用管理员权限打开
有时一些软件的逻辑中需要使用管理员权限对某些文件进行修改时,那么该软件在执行或者打开的场合,就需要用使用管理员身份运行才能达到效果。那么在c#里,如何判定该软件是否是对管理员身份运的呢? 1.取得当前的windows用户。 2.取得…...
为什么 uni-app 开发的 App 没有明显出现屏幕适配问题Flutter 开发的 App 出现了屏幕适配问题
🧩 一、为什么 uni-app 开发的 App 没有明显出现屏幕适配问题? ✅ 1. uni-app 是基于 H5 的运行环境(或类 H5) uni-app 默认使用的是 H5 的渲染引擎(如 WebView 或小程序渲染引擎)。在 H5 中,…...