25.1 MySQL SELECT语句

image-20231018162800076

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/

image-20231017110723771

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, 09和下划线, 共计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)
...

image-20231017195156923

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 的服务器.

image-20231017201723054

* 2. 选中数据右击选择运行SQL文件.

image-20231017202011524

* 3.选择sql文件的路径. 点击开始进行导入.

image-20231017202200081

* 4. 导入成功后点开关闭.

image-20231017202323883

* 5. 刷新后展示数据库.

image-20231017202644717

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. 点击菜单栏的查询 --> 点击新建查询.

image-20231017202904229

* 2. 选择服务器名称与数据库.

image-20231017203253459

查询方式1: 输入命令后点击运行, 会执行编辑器上所有的命令.在下面的信息栏中可以点开结果的信息查看.

image-20231017213913110

查询方式2: 选中想要运行命令, 这是执行选项会变成运行与选择的命令.

image-20231017214026574

美化SQL功能.

image-20231017220246431

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)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进化策略算法

前言 进化策略 (Evolution Strategy) 后面都简称 ES&#xff0c;其本质就是&#xff1a;种群通过交叉产生后代&#xff0c;我们只保留较好的父代和子代&#xff0c;一直这样迭代下去&#xff0c; 我们的保留方式是&#xff1a; 父代产生后代&#xff0c;然后将后代DNA和原来的…

02_单片机及开发板介绍

单片机简介 单片机&#xff0c;又称为微控制器&#xff08;Microcontroller&#xff09;&#xff0c;是一种集成了微处理器核心、存储器、输入/输出接口及各种功能模块的集成电路芯片。它通常由中央处理器&#xff08;CPU&#xff09;、存储器、输入/输出接口以及各种外设组成&…

【Leetcode】 707. 设计链表

你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则还需要属性 prev 以指示链表中的上一个节点…

保序回归与金融时序数据

保序回归在回归问题中的作用是通过拟合一个单调递增或递减的函数&#xff0c;来保持数据点的相对顺序特性。 一、保序回归的作用 主要用于以下情况&#xff1a; 1. 有序数据&#xff1a;当输入数据具有特定的顺序关系时&#xff0c;保序回归可以帮助保持这种顺序关系。例如&…

rust学习—— 控制流if 表达式

控制流 根据条件是否为真来决定是否执行某些代码&#xff0c;或根据条件是否为真来重复运行一段代码&#xff0c;是大部分编程语言的基本组成部分。Rust 代码中最常见的用来控制执行流的结构是 if 表达式和循环。 if 表达式 if 表达式允许根据条件执行不同的代码分支。你提供…

vue-cli脚手架创建项目时报错Error: command failed: npm install --loglevel error

项目背景 环境&#xff1a;vue-cli 5.x 在工程文件中&#xff0c;后端模块wms已经创建完成&#xff0c;现在想新建一个名为vue-web的前端模块 执行命令vue create vue-web时&#xff0c; 报错Error: command failed: npm install --loglevel error 问题分析及解决 排查过程…

Linux性能优化--使用性能工具发现问题

9.0 概述 本章主要介绍综合运用之前提出的性能工具来缩小性能问题产生原因的范围。阅读本章后&#xff0c;你将能够&#xff1a; 启动行为异常的系统&#xff0c;使用Linux性能工具追踪行为异常的内核函数或应用程序。启动行为异常的应用程序&#xff0c;使用Linux性能工具追…

centos 7.9 源码安装htop

1.下载源码 wget http://sourceforge.net/projects/htop/files/latest/download 2.上传到tmp目录&#xff0c;并解压 tar xvzf htop-1.0.2.tar.gz mv htop-1.0.2 /opt/ 进入到 cd /opt/htop-1.0.2/ 3.编译并安装 ./configure && make && make install 4.…

基于混沌博弈优化的BP神经网络(分类应用) - 附代码

基于混沌博弈优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于混沌博弈优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.混沌博弈优化BP神经网络3.1 BP神经网络参数设置3.2 混沌博弈算法应用 4.测试结果…

什么是CSGO大行动,2023年CSGO大行动时间预测

什么是CSGO大行动&#xff0c;2023年CSGO大行动时间预测 什么是CSGO大行动&#xff0c;2023年CSGO大行动时间预测 那天群里在提大行动&#xff0c;不明所以的新同学在问&#xff0c;什么是大行动&#xff0c;是不是官方红锁大行动要来了&#xff1f;当然不是&#xff0c;别自己…

Linux内核的.config 配置文件和defconfig 配置文件

Linux 内核可以通过输入“make menuconfig”来打开图形化配置界面&#xff0c;menuconfig 是一套图形化的配置工具 一、图形化界面的操作 menuconfig 图形化的配置工具需要 ncurses 库支持。ncurses 库提供了一系列的 API 函数供调用者生成基于文本的图形界面&#xff0c;因此…

c++_learning-基础部分

文章目录 基础认识&#xff1a;语言特性&#xff08;面向对象编程&#xff09;&#xff1a;c的类&#xff08;相当于c中的结构体&#xff09;&#xff1a;三大特性&#xff1a;c包含四种编程范式&#xff1a;优缺点&#xff1a; c程序编译的过程&#xff1a;预处理->编译&am…

《软件方法》第1章2023版连载(07)UML的历史和现状

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 1.3 统一建模语言UML 1.3.1 UML的历史和现状 上一节阐述了A→B→C→D的推导是不可避免的&#xff0c;但具体如何推导&#xff0c;有各种不同的做法&#xff0c;这些做法可以称为“方…

WebDAV之π-Disk派盘 + 密码键盘

密码键盘是一款密码管理器,可以存储和管理需要受保护的数据。为方便日常使用,同时也是一款安全输入法,帮您安全便捷地填写账号密码、通用内容、卡包信息。 密码键盘使用军事级的 PBKDF2 有损加密算法保护您的根密码,使用军事级的 AES 加密算法保护您的存储数据。云端再额外…

VBA之正则表达式(43)-- 从网页中提取指定数据

实例需求&#xff1a;由网页中提取下图中颜色标记部分内容&#xff0c;网页中其他部分与此三行格式相同。 方法1 Sub Demo()Dim objRegex As ObjectDim inputString As StringDim objMatches As ObjectDim objMatch As ObjectSet objRegex CreateObject("VBScript.RegEx…

为什么不可大张旗鼓地推动“汉字编程”?

为什么不可大张旗鼓地推动“汉字编程”&#xff1f; 没有不可。 我之前看到过一个vscode插件&#xff0c;是给一个不知道叫什么名字的编程语言用的&#xff0c;从代码到注释全是西里尔字母写的&#xff0c;反正就只有东欧那片区域用。最近很多小伙伴找我&#xff0c;说想要一些…

2023年中国自动驾驶卡车市场发展趋势分析:自动驾驶渗透率快速增长[图]

自动驾驶卡车的技术原理是通过电脑算法控制车辆行驶&#xff0c;辅助驾驶员完成任务。其实现方式主要是基于传感器和计算处理技术。自动驾驶卡车可以随时感知周围环境&#xff0c;灵活避障&#xff0c;自适应调整行驶路径&#xff0c;相比之下传统卡车需要驾驶员进行手动操作&a…

使用postman做接口测试

1.接口测试&#xff1a;针对软件对外提供服务的接口的输入输出进行测试&#xff0c;以及接口间相互逻辑的测试&#xff0c;验证接口功能与接口描述文档的一致性 2.接口测试流程&#xff1a; 1&#xff09;获取接口信息&#xff1a;通过接口文档或抓包来获取接口的基本调用方式和…

C# 取消一个不带CancellationToken的任务?

在异步函数中&#xff0c;一般使用CancellationToken来控制函数的执行。这个Token需要作为参数传递到异步函数中&#xff1a; public staic Task<T> DoAsync(CancellationToken token) {... } 那么如果一个异步函数没有这个Token参数&#xff0c;如何取消呢? 之前看到一…

Dasviewer浏览器里显示模型裁剪不成功,输出无数据是什么原因?

答&#xff1a;Metadata文件需要先放在Terraosgb文件夹瓦块再试试 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便快捷的数据浏览操作。#DasViewer##…