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.mzph.cn/news/111528.shtml

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

相关文章

【C++面向对象】1. 类、对象

文章目录 【 1. 类 & 对象的定义 】1.1 类的定义1.2 对象的定义 【 2. 类的成员 】2.1 数据成员2.2 成员函数类的内部定义成员函数类的外部定义成员函数成员函数的访问实例 【 3. 类的访问修饰符 】3.1 public 公有成员3.2 private 私有成员3.3 protected 保护成员3.4 继承…

【离线/并查集】CF1213 G

想起来好久没写题解了&#xff0c;随便写一下把 感觉写多了div3后面的题就变得简单了&#xff0c;div3似乎没什么思维含量&#xff0c;甚至有时候能开出div3的2100.... 心血来潮写一下这个*1800的题解&#xff0c;思路一下就出了&#xff0c;但是一开始多了个log被卡了&#x…

【R】数据相关性的可视化

一千零一技|相关性分析及其可视化&#xff1a;copy&paste&#xff0c;搞定 .libPaths(c("/bioinfo/home/software/miniconda3/envs/R4.0/lib/R/library")) #data("mtcars") library("PerformanceAnalytics") # pdf("test.pdf") #…

惊艳!这些独特的搜索引擎你都知道吗?

随着互联网的普及和发展&#xff0c;搜索引擎已经成为我们日常获取信息的重要工具。然而&#xff0c;当我们想要寻找一些特定类型的信息时&#xff0c;普通的搜索引擎可能无法满足我们的需求。这时&#xff0c;一些特殊的搜索引擎便能派上用场本。 文将介绍几种常用的特殊搜索引…

EDID详解

文章目录 字节含义一些概念YCC位 文章目录 字节含义一些概念YCC位 字节含义 EDID通常由128个字节组成&#xff0c;这些字节提供了关于显示器的各种详细信息。以下是EDID中每个字节位表示的一般含义&#xff1a; Header&#xff08;头部&#xff09;: 字节0: Header&#xff…

hue实现对hiveserver2 的负载均衡

如果你使用的是CDH集群那就很是方便的 在Cloudera Manager中&#xff0c;进入HDFS Service 进入Instances标签页面&#xff0c;点击Add Role Instances按钮&#xff0c;如下图所示 点击Continue按钮&#xff0c;如下图所示 返回Instances页面&#xff0c;选择HttpFS角色…

【MyBatis】mvc模式以及Mapper文件中的namespace以及ORM思想

目录 什么是MVC三层架构&#xff0c;初步了解&#xff1f; namespace的作用是什么&#xff1f; Mapper文件中的namespace&#xff1f; ORM思想&#xff08;对象关系映射思想&#xff09; 其中提供了一套映射规则和API 什么是MVC三层架构&#xff0c;初步了解&#xff1f; 三…

9.构造器与垃圾收集器 对象的前世今生

9.1 对象与变量的生存空间 栈与堆&#xff1a;生存空间 在Java中&#xff0c;程序员会在乎内存中的两种区域&#xff1a;对象的生存空间堆&#xff08;heap&#xff09;和方法调用及变量的生存空间&#xff08;stack&#xff09;。当Java虚拟机启动时&#xff0c;它会从底层的…

【Netty专题】【网络编程】从OSI、TCP/IP网络模型开始到BIO、NIO(Netty前置知识)

目录 前言前置知识一、计算机网络体系结构二、TCP/IP协议族2.1 简介*2.2 TCP/IP网络传输中的数据2.3 地址和端口号2.4 小总结 三、TCP/UDP特性3.1 TCP特性TCP 3次握手TCP 4次挥手TCP头部结构体 3.2 UDP特性 四、总结 课程内容一、网络通信编程基础知识1.1 什么是Socket1.2 长连…

软件工程与计算总结(十七)软件构造

一.概述 1.定义 软件构造是以编程为主的活动&#xff0c;类似于软件实现。但软件构造又不止编程这么简单&#xff0c;除了核心的编程任务之外&#xff0c;还设计详细设计&#xff08;数据结构与算法设计&#xff09;、单元测试、集成与集成测试以及其他活动~ 2.软件构造是设计…

简单谈谈我参加数据分析省赛的感受与体会

数据分析省赛的感受与体会 概要考试前的感受与体会考试注意事项小结 概要 大数据分析省赛指的是在省级范围内举办的大数据分析竞赛活动。该竞赛旨在鼓励和推动大数据分析领域的技术创新和人才培养&#xff0c;促进大数据技术与应用的深度融合&#xff0c;切实解决实际问题。参…

Android中级——MVVM

MVVM MVVM是什么&#xff1f;MVVM实现前提ModelViewModelView MVVM是什么&#xff1f; Model-View-ViewMode架构&#xff0c;可看作MVP改进版&#xff0c;将此前Presenter的逻辑操作交给ViewMode中的Binder去处理 Mode&#xff1a;封装数据存储及相关操作逻辑&#xff0c;与MV…

Kali Linux 安装搭建 hadoop 平台 详细教程

1&#xff09;前期环境准备&#xff1a;&#xff08;虚拟机、jdk、ssh&#xff09; 2&#xff09;SSH相关配置 安装SSH Server服务器&#xff1a;apt-get install openssh-server 更改默认的SSH密钥 cd /etc/ssh mkdir ssh_key_backup mv ssh_host_* ssh_key_backup 创建新…

【C++进阶(八)】C++继承深度剖析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 继承 1. 前言2. 继承的基本概念3. 继承关系和访…

酷开会员值得回味的经典老剧还记得吗?酷开系统家庭影院带你重温

那些年&#xff0c;大家的娱乐生活主要集中在那一台9寸的黑白电视机中&#xff1b;那些年&#xff0c;家家户户的孩子们晚上都会聚到电视机前欢声笑语&#xff1b;那些年&#xff0c;是诸多经典的电视剧陪伴了很多人的闲暇时光……那些年陪伴我们成长&#xff0c;在记忆中熠熠生…

下笔如有神:用VS Code写markdown

文章目录 Markdown All in One快捷键指令 输出PDFMarkdown Preview Enhancedmarkdown基本语法 Markdown All in One VS Coode中最推荐的Markdown插件是Markdown All in One&#xff0c;下文简称为mdAIO。千万别搜完markdown后下一个叫Markdown的插件&#xff0c;这个插件的名字…

新年学新语言Go之四

一、前言 任何编程语言都有类型系统&#xff0c;类型系统解决了数据的存取问题&#xff0c;它决定了使用这个类型需要开辟内存空间大小以及数据是如何存放的&#xff0c;也解决如何读出数据&#xff0c;因为在内存中相同二进制值不同类型的含义是不一样的&#xff0c;关于Go基…

Oracle的立场:官网更换首页与以色列站在一起

Oracle公司的官网&#xff0c;更换了首页内容&#xff0c;明确表明立场&#xff1a;Oracle与以色列站在一起。 声明指出&#xff1a; Oracle谴责针对以色列及其公民的恐怖袭击。Oracle将为其员工、以色列政府和国防机构提供一切必要的支持。 Magen David Adom是一家为以色列公民…

1024,毕业后工作的五个月

入职 一晃一下又到了1024&#xff0c;彼时已经成为打工人在写分享了&#xff0c;自己已经搬砖5个月了&#xff0c;总感觉4月份拍毕业照、去川渝毕业旅行看plmm还是在昨天&#xff0c;但五月下旬入职到现在已经5个月了。给大家简单的share一下工作和生活。 在5月初光速毁约ks入…

《数据结构、算法与应用C++语言描述》使用C++语言实现数组队列

《数据结构、算法与应用C语言描述》使用C语言实现数组队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一端称…