Linux云计算 |【第四阶段】RDBMS1-DAY3

主要内容:

子查询(单行单列、多行单列、单行多列、多行多列)、分页查询limit、联合查询union、插入语句、修改语句、删除语句

一、子查询

子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式;

1)子查询返回的数据分类

  • 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据
  • 单行多列:返回一行数据中多个列的内容
  • 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围
  • 多行多列:查询返回的结果是一张临时表

2)子查询常出现的位置

- select之后:仅支持单行单列

- from之后:支持多行多列

- where或having之后:支持单行单列、单行多列、多行单列

子查询应用实例

1)单行单列

例如:查询运维部所有员工信息

① 分析:首先从departments部门表中查出运维部的编号

mysql> select dept_id from departments where dept_name='运维部';
+---------+
| dept_id |
+---------+
|       3 |
+---------+
1 row in set (0.00 sec)

② 组合:再从employees员工表中查找该部门编号和运维部编号相同的员工;

mysql> select * from employees 
    -> where dept_id=(select dept_id from departments where dept_name='运维部');
+-------------+-----------+------------+------------+--------------------+--------------+---------+
| employee_id | name      | hire_date  | birth_date | email              | phone_number | dept_id |
+-------------+-----------+------------+------------+--------------------+--------------+---------+
|          14 | 廖娜      | 2012-05-20 | 1982-06-22 | liaona@tarena.com  | 15827928192  |       3 |
|          15 | 窦红梅    | 2018-03-16 | 1971-09-09 | douhongmei@tedu.cn | 15004739483  |       3 |
|          16 | 聂想      | 2018-09-09 | 1999-06-05 | niexiang@tedu.cn   | 15501892446  |       3 |
|          17 | 陈阳      | 2004-09-16 | 1991-04-10 | chenyang@tedu.cn   | 15565662056  |       3 |
|          18 | 戴璐      | 2001-11-30 | 1975-05-16 | dailu@tedu.cn      | 13465236095  |       3 |
|          19 | 陈斌      | 2019-07-04 | 2000-01-22 | chenbin@tarena.com | 13621656037  |       3 |
+-------------+-----------+------------+------------+--------------------+--------------+---------+
6 rows in set (0.00 sec)

例如:查询2018年12月所有比100号员工基本工资高的工资信息

① 分析:首先查询2018年12月100号员工的基本工资

mysql> select basic from salary
    -> WHERE YEAR(date)=2018 and MONTH(date)=12 and employee_id=100;
+-------+
| basic |
+-------+
| 14585 |
+-------+
1 row in set (0.00 sec)

② 组合:再查询2018年12月所有比100号员工基本工资高的工资信息

mysql> select employee_id,date,basic from salary
    -> where YEAR(date)=2018 and MONTH(date)=12
    -> and basic>(select basic from salary WHERE YEAR(date)=2018 and MONTH(date)=12 and employee_id=100);
+-------------+------------+-------+
| employee_id | date       | basic |
+-------------+------------+-------+
|           1 | 2018-12-10 | 17016 |
|           2 | 2018-12-10 | 20662 |
|           4 | 2018-12-10 | 17016 |
|         127 | 2018-12-10 | 17016 |
+-------------+------------+-------+
65 rows in set (0.00 sec)

③ 扩展:通过内连接,查询2018年12月所有比100号员工基本工资高的工资信息

mysql> select s.employee_id,date,basic,name from salary s
    -> inner join employees e
    -> on s.employee_id = e.employee_id
    -> where year(date)=2018 and month(date)=12 and basic > (
    -> select basic from salary where year(date)=2018 and month(date)=12 and employee_id=100);
+-------------+------------+-------+-----------+
| employee_id | date       | basic | name      |
+-------------+------------+-------+-----------+
|           1 | 2018-12-10 | 17016 | 梁伟      |
|           2 | 2018-12-10 | 20662 | 郭岩      |
|           4 | 2018-12-10 | 17016 | 张健      |
|         127 | 2018-12-10 | 17016 | 李瑞      |
+-------------+------------+-------+-----------+
65 rows in set (0.00 sec)

例如:查询部门员工人数比开发部人数少的部门

① 分析1:首先从departments表中查询开发部的编号

mysql> select dept_id from departments where dept_name='开发部';
+---------+
| dept_id |
+---------+
|       4 |
+---------+
1 row in set (0.00 sec)

② 组合:再从employees表中查询并统计开发部的员工人数

mysql> select count(*) from employees where dept_id=(
    -> select dept_id from departments where dept_name='开发部');
+----------+
| count(*) |
+----------+
|       55 |
+----------+
1 row in set (0.00 sec)

③ 分析2:分组查询各部门人数

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

④ 组合:查询部门员工人数比开发部人数少的部门

mysql> select dept_id,COUNT(*) from employees group by dept_id
    -> having count(*) < (select count(*) from employees 
    -> WHERE dept_id=(select dept_id from departments where dept_name='开发部'));
+---------+----------+
| dept_id | COUNT(*) |
+---------+----------+
|       1 |        8 |
|       2 |        5 |
|       3 |        6 |
|       5 |       12 |
|       6 |        9 |
|       7 |       35 |
|       8 |        3 |
+---------+----------+
7 rows in set (0.00 sec)

例如:查询每个部门的人数,显示部门ID,部门名字,及人数总数(别名amount)

① 分析:查询所有部门的信息

mysql> select d.* from departments as d;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 人事部    |
|       2 | 财务部    |
|       3 | 运维部    |
|       4 | 开发部    |
|       5 | 测试部    |
|       6 | 市场部    |
|       7 | 销售部    |
|       8 | 法务部    |
|       9 | NULL      |
+---------+-----------+
9 rows in set (0.00 sec)

② 组合:查询每个部门的人数

mysql> select d.*, (
    ->  select count(*) from employees as e
    ->  where d.dept_id=e.dept_id
    -> ) as amount
    -> from departments as d;
+---------+-----------+--------+
| dept_id | dept_name | amount |
+---------+-----------+--------+
|       1 | 人事部    |      8 |
|       2 | 财务部    |      5 |
|       3 | 运维部    |      6 |
|       4 | 开发部    |     55 |
|       5 | 测试部    |     12 |
|       6 | 市场部    |      9 |
|       7 | 销售部    |     35 |
|       8 | 法务部    |      3 |
|       9 | NULL      |      0 |
+---------+-----------+--------+
9 rows in set (0.00 sec)

扩展:通过内连接,实现查询每个部门的人数(结果相同)

mysql> select d.dept_id,d.dept_name,count(*) from employees e
    -> inner join departments d
    -> on e.dept_id = d.dept_id
    -> group by dept_id ;

2)多行多列

例如:查询人事部和财务部员工信息

方法1:

① 分析:查询人事部和财务部部门编号

mysql> select dept_id from departments where dept_name='人事部';
mysql> select dept_id from departments where dept_name='财务部';

② 组合:查询部门编号是两个部门编号的员工信息

mysql> select employee_id,name from employees
    -> where dept_id=(select dept_id from departments where dept_name='人事部') or
    -> dept_id=(select dept_id from departments where dept_name='财务部');

- 方法2:

① 分析:查询人事部和财务部部门编号

mysql> select dept_id from departments where dept_name in ('人事部','财务部');
+---------+
| dept_id |
+---------+
|       1 |
|       2 |
+---------+
2 rows in set (0.00 sec)

② 组合:查询部门编号是两个部门编号的员工信息

mysql> select employee_id,name from employees
    -> where dept_id in (select dept_id from departments where dept_name in ('人事部','财务部'));
+-------------+-----------+
| employee_id | name      |
+-------------+-----------+
|           1 | 梁伟      |
|           2 | 郭岩      |
|           3 | 李玉英    |
|           4 | 张健      |
|           5 | 郑静      |
|           6 | 牛建军    |
|           7 | 刘斌      |
|           8 | 汪云      |
|           9 | 张建平    |
|          10 | 郭娟      |
|          11 | 郭兰英    |
|          12 | 王英      |
|          13 | 王楠      |
+-------------+-----------+
13 rows in set (0.00 sec)

例如:查询人事部2018年12月所有员工工资

① 分析:查询人事部部门编号

mysql> select dept_id from departments where dept_name='人事部';
+---------+
| dept_id |
+---------+
|       1 |
+---------+
1 row in set (0.00 sec)

② 分析:查询人事部人员的编号

mysql> select employee_id from employees
    -> where dept_id=(select dept_id from departments where dept_name='人事部');
+-------------+
| employee_id |
+-------------+
|           1 |
|           2 |
|           3 |
|           4 |
|           5 |
|           6 |
|           7 |
|           8 |
+-------------+
8 rows in set (0.00 sec)

③ 组合:查询人事部所有员工2018年12月的工资

mysql> select * from salary
    -> where year(date)=2018 and month(date)=12 and employee_id in (
    -> select employee_id from employees
    -> where dept_id=(select dept_id from departments where dept_name='人事部')
    -> );
+------+------------+-------------+-------+-------+
| id   | date       | employee_id | basic | bonus |
+------+------------+-------------+-------+-------+
| 6252 | 2018-12-10 |           1 | 17016 |  7000 |
| 6253 | 2018-12-10 |           2 | 20662 |  9000 |
| 6254 | 2018-12-10 |           3 |  9724 |  8000 |
| 6255 | 2018-12-10 |           4 | 17016 |  2000 |
| 6256 | 2018-12-10 |           5 | 17016 |  3000 |
| 6257 | 2018-12-10 |           6 | 17016 |  1000 |
| 6258 | 2018-12-10 |           7 | 23093 |  4000 |
| 6259 | 2018-12-10 |           8 | 23093 |  2000 |
+------+------------+-------------+-------+-------+
8 rows in set (0.00 sec)

扩展:通过内连接,查询人事部2018年12月所有员工工资

mysql> select date,name,basic from salary as s
    -> inner join employees as e
    -> on s.employee_id = e.employee_id
    -> WHERE year(date)=2018 AND MONTH(date)=12 AND s.employee_id in(
    -> select employee_id from employees where dept_id=(select dept_id from departments where dept_name='人事部')
    -> );
+------------+-----------+-------+
| date       | name      | basic |
+------------+-----------+-------+
| 2018-12-10 | 梁伟      | 17016 |
| 2018-12-10 | 郭岩      | 20662 |
| 2018-12-10 | 李玉英    |  9724 |
| 2018-12-10 | 张健      | 17016 |
| 2018-12-10 | 郑静      | 17016 |
| 2018-12-10 | 牛建军    | 17016 |
| 2018-12-10 | 刘斌      | 23093 |
| 2018-12-10 | 汪云      | 23093 |
+------------+-----------+-------+
8 rows in set (0.00 sec)

3)单行多列

例如:查找2018年12月基本工资和奖金都是最高的工资信息

① 分析:查询2018年12月最高的基本工资

mysql> select max(basic) from salary
    -> where year(date)=2018 and month(date)=12;
+------------+
| max(basic) |
+------------+
|      25524 |
+------------+
1 row in set (0.00 sec)

② 分析:查询2018年12月最高的奖金

mysql> select max(bonus) from salary
    -> where year(date)=2018 and month(date)=12;
+------------+
| max(bonus) |
+------------+
|      11000 |
+------------+
1 row in set (0.00 sec)

③ 组合:查找2018年12月基本工资和奖金都是最高的工资信息

mysql> select * from salary
    -> where year(date)=2018 and month(date)=12
    -> and basic = (select max(basic) from salary where year(date)=2018 and month(date)=12)
    -> and bonus = (select max(bonus) from salary where year(date)=2018 and month(date)=12);
+------+------------+-------------+-------+-------+
| id   | date       | employee_id | basic | bonus |
+------+------------+-------------+-------+-------+
| 6368 | 2018-12-10 |         117 | 25524 | 11000 |
+------+------------+-------------+-------+-------+
1 row in set (0.01 sec)

4)多行多列

例如:查询3号部门及其部门内员工的编号、名字和email

① 分析:使用内连接,查询3号部门和员工的所有信息

mysql> select d.dept_name, e.* from departments as d
    -> inner join employees as e
    -> on d.dept_id=e.dept_id;

② 分析:将上述结果当成一张临时表,必须为其起别名。再从该临时表中查询

mysql> select dept_id, dept_name, employee_id, name, email
    -> from (
    -> select d.dept_name, e.* from departments as d
    -> inner join employees as e
    -> on d.dept_id=e.dept_id ) as tmp_table
    -> where dept_id=3;
+---------+-----------+-------------+-----------+--------------------+
| dept_id | dept_name | employee_id | name      | email              |
+---------+-----------+-------------+-----------+--------------------+
|       3 | 运维部    |          14 | 廖娜      | liaona@tarena.com  |
|       3 | 运维部    |          15 | 窦红梅    | douhongmei@tedu.cn |
|       3 | 运维部    |          16 | 聂想      | niexiang@tedu.cn   |
|       3 | 运维部    |          17 | 陈阳      | chenyang@tedu.cn   |
|       3 | 运维部    |          18 | 戴璐      | dailu@tedu.cn      |
|       3 | 运维部    |          19 | 陈斌      | chenbin@tarena.com |
+---------+-----------+-------------+-----------+--------------------+
6 rows in set (0.00 sec)

扩展:直接使用内连接,增加where条件判断实现如上案例

mysql> select employee_id,name,email,dept_name from employees e
    -> inner join departments d
    -> on e.dept_id = d.dept_id
    -> where e.dept_id=3;
+-------------+-----------+--------------------+-----------+
| employee_id | name      | email              | dept_name |
+-------------+-----------+--------------------+-----------+
|          14 | 廖娜      | liaona@tarena.com  | 运维部    |
|          15 | 窦红梅    | douhongmei@tedu.cn | 运维部    |
|          16 | 聂想      | niexiang@tedu.cn   | 运维部    |
|          17 | 陈阳      | chenyang@tedu.cn   | 运维部    |
|          18 | 戴璐      | dailu@tedu.cn      | 运维部    |
|          19 | 陈斌      | chenbin@tarena.com | 运维部    |
+-------------+-----------+--------------------+-----------+
6 rows in set (0.00 sec)

二、分页查询

使用SELECT查询时,当结果集数据量很大,比如几万行数据,放在一个页面显示的话数据量太大,若通过分页显示,每次显示100条,可减缓阅读数据压力;要实现分页功能,实际上就是从结果集中显示第1至100条记录作为第1页,显示第101至200条记录作为第2页,以此类推;

  • 分页:从结果集中“截取”出第M至N条记录。这个查询可以通过`LIMIT , 子句实现;
  • 起始索引从0开始;
  • 每页显示内容速算:`LIMIT (PAGE-1)*SIZE, SIZE`;

例如:按employee_id升序排序,取出前5位员姓名

mysql> select employee_id,name from employees
    -> order by employee_id
    -> LIMIT 0,5;
+-------------+-----------+
| employee_id | name      |
+-------------+-----------+
|           1 | 梁伟      |
|           2 | 郭岩      |
|           3 | 李玉英    |
|           4 | 张健      |
|           5 | 郑静      |
+-------------+-----------+
5 rows in set (0.00 sec)

例如:按employee_id升序排序,取出6号至8号员姓名

mysql> select employee_id,name from employees
    -> order by employee_id
    -> LIMIT 5,3;
+-------------+-----------+
| employee_id | name      |
+-------------+-----------+
|           6 | 牛建军    |
|           7 | 刘斌      |
|           8 | 汪云      |
+-------------+-----------+
3 rows in set (0.00 sec)

三、联合查询UNION(相当于全外连接)

作用:将多条select语句的结果,合并到一起,称之为联合操作。

语法:( ) UNION ( );

要求查询时,多个select语句的检索到的字段数量必须一致

每一条记录的各字段类型和顺序最好是一致的

UNION关键字默认去重,可以使用UNION ALL包含重复项

例如:

mysql> (select 'yes') union (select 'yes');
+-----+
| yes |
+-----+
| yes |
+-----+
1 row in set (0.00 sec)
 
mysql> (select 'yes') union all (select 'yes');
+-----+
| yes |
+-----+
| yes |
| yes |
+-----+
2 rows in set (0.00 sec)

例如:查询1972年前或2000年出生的员工(两种方法,查询结果数量相同)

- 普通方法:(过滤)

mysql> select name,birth_date from employees
-> where year(birth_date)<1972 or year(birth_date)=2000;

- 联合查询方法:(拼接)

mysql> (select name,birth_date from employees where year(birth_date)<1972) UNION
-> (select name,birth_date from employees where year(birth_date)=2000);

四、插入语句

1、不指定字段名的插入

  • 格式:INSERT INTO VALUES (值1, 值2,....);
  • 格式:INSERT INTO VALUES (值1, 值2,....) , (值1, 值2,....) ...;
  • 支持多行VALUES插入

注意事项:

① 需要为所有的字段指定值;

② 值的顺序必须与表中字段的顺序一致;

③ 字符类型的字段,要用引号 “ ” 括起来;

例如:给departments表中插入VALUES值(dept_id,dept_name)

mysql> insert into departments values(10, '行政部');
Query OK, 1 row affected (0.01 sec)

常见报错:表中已有dept_id为1号部门,再插入则出错(dept_id是主键,不允许重复)

mysql> insert into departments values(1, '行政部');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

例如:给employees表中插入VALUES值(employee_id,name,hire_date,birth_date,email,phone_number,dept_id)

mysql> insert into employees values
    -> (134, '张三', '2019-5-10', '2000-10-12', 'zhangsan@tedu.cn', '15088772354', 9),
    -> (135, '李四', '2020-8-20', '1999-6-23', 'lisi@tedu.cn', '13323458734', 9);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

2、指定字段名的插入

  • 格式:INSERT INTO (字段1,字段2,...) VALUES (值1,值2,....);
  • 格式:INSERT INTO (字段1,字段2,...) VALUES (值1,值2,....) , (值1,值2,....);
  • 若设置主键是自动增长的,可以不指定主键的值
  • 支持子查询插入

注意事项:

① 字段和值的顺序要一致(字段1,字段2)-->(值1,值2)

② 字段名先后顺序不重要

③ 没有赋值的字段使用默认值或自增长赋值

例如:给departments表中插入VALUES值(dept_id,dept_name),字段先后顺序不重要

mysql> insert into departments (dept_name, dept_id) values ('售后部', 11);
Query OK, 1 row affected (0.00 sec)

例如:主键由于是自动增长的【auto_increment】,可以不指定主键的值

mysql> desc departments;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| dept_id   | int(4)      | NO   | PRI | NULL    | auto_increment |
| dept_name | varchar(10) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> insert into departments (dept_name) values ('咨询部');
Query OK, 1 row affected (0.00 sec)

例如:支持子查询插入

mysql> insert into employees
    -> (name,hire_date,birth_date,email,phone_number,dept_id)
    -> (
    -> select name,hire_date,birth_date,email,phone_number,dept_id from employees
    -> where name='张三'
    -> );
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

  

3、使用Set语句

  • 格式:INSERT INTO SET 字段名1=字段值1, 字段名2=字段值2, ...;

例如:

mysql> insert into departments set dept_name='采购部';   //dept_id自动递增
Query OK, 1 row affected (0.00 sec)
mysql> select * from departments;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 人事部    |
|       2 | 财务部    |
|       3 | 运维部    |
|       4 | 开发部    |
|       5 | 测试部    |
|       6 | 市场部    |
|       7 | 销售部    |
|       8 | 法务部    |
|       9 | Null     |
|      10 | 行政部    |
|      11 | 售后部    |
|      12 | 咨询部    |
|      13 | 采购部    |
+---------+-----------+
13 rows in set (0.00 sec)

五、修改语句

1、修改单表记录

  • 格式:UPDATE SET 字段名1=字段值1, 字段名2=字段值2, ... WHERE 筛选条件;

注意事项:

- 字段值要与字段类型相匹配;

- 对于字符类型的字段,值要用双引号“”括起来;

- 若不使用where限定条件,会更新所有记录字段值;

- 限定条件时,只更新匹配条件的记录的字段值;

例如:修改人事部的名称为人力资源部

mysql> update departments set dept_name='人力资源部'
    -> where dept_name='人事部';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

2、修改多表连接记录

  • 格式:

UPDATE 表1 AS 表1别名

INNER | LEFT | RIGHT JOIN 表2 AS 表2别名

ON 连接条件

SET 字段名1=字段值1, 字段名2=字段值2, ...

WHERE 连接条件;

例如:修改李四所在部门为企划部

mysql> update departments as d
    -> inner join employees as e
    -> on d.dept_id=e.dept_id
    -> set d.dept_name='企划部'
    -> where e.name='李四';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from departments;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 人事部    |
|       2 | 财务部    |
|       3 | 运维部    |
|       4 | 开发部    |
|       5 | 测试部    |
|       6 | 市场部    |
|       7 | 销售部    |
|       8 | 法务部    |
|       9 | 企划部    |
|      10 | 行政部    |
|      11 | 售后部    |
|      12 | 咨询部    |
|      13 | 采购部    |
+---------+-----------+
13 rows in set (0.00 sec)

六、删除记录

1、删除单表记录

  • 格式:DELETE FROM WHERE 筛选条件;

删除的是满足条件的整行记录,而不是某个字段;

注意事项:不加条件删除表中的所有行;

例如:删除重复的员工张三,只保留一个张三的信息

mysql> select * from employees where name='张三';
+-------------+--------+------------+------------+------------------+--------------+---------+
| employee_id | name   | hire_date  | birth_date | email            | phone_number | dept_id |
+-------------+--------+------------+------------+------------------+--------------+---------+
|         134 | 张三   | 2019-05-10 | 2000-10-12 | zhangsan@tedu.cn | 15088772354  |       9 |
|         136 | 张三   | 2019-05-10 | 2000-10-12 | zhangsan@tedu.cn | 15088772354  |       9 |
+-------------+--------+------------+------------+------------------+--------------+---------+
2 rows in set (0.00 sec)
mysql> delete from employees where employee_id=136;
Query OK, 1 row affected (0.00 sec)

2、删除多表记录

  • 格式:

DELETE 表1别名, 表2别名

FROM 表1 AS 表1别名

INNER | LEFT | RIGHT JOIN 表2 AS 表2别名

ON 连接条件

WHERE 筛选条件;

例如:删除9号部门中所有的员工

mysql> delete e
    -> from employees as e
    -> inner join departments as d
    -> on e.dept_id = d.dept_id
    -> where d.dept_id = 9;
Query OK, 2 rows affected (0.00 sec)

3、清空表的表记录

  • 格式:TRUNCATE TABLE 表名;

- TRUNCATE不支持WHERE条件

- 自增长列,TRUNCATE后从1开始;DELETE继续编号

- TRUNCATE不能回滚,DELETE可以

- 效率略高于DELETE

例如:清空wage_grade表

mysql> truncate table wage_grade;
Query OK, 0 rows affected (0.01 sec)

补充:drop,delete 与 truncate 的区别?

1.TRUNCATE 和 DELETE 只删除数据,而 DROP 则删除整个表(结构和数据)。

2. DELETE 删除操作作为事务记录在日志中保存以便进行进行回滚操作。

3. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

4. 表和索引所占空间。当表被 TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,而 DELETE 操作不会减少表或索引所占用的空间。drop 语句将表所占用的空间全释放掉。

思维导图:

小结:

本篇章节为【第四阶段】RDBMS1-DAY3 的学习笔记,这篇笔记可以初步了解到 子查询(单行单列、多行单列、单行多列、多行多列)、分页查询limit、联合查询union、插入语句、修改语句、删除语句。


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安宝特案例 | 某知名日系汽车制造厂,借助AR实现智慧化转型

案例介绍 在全球制造业加速数字化的背景下&#xff0c;工厂的生产管理与设备维护效率愈发重要。 某知名日系汽车制造厂当前面临着设备的实时监控、故障维护&#xff0c;以及跨地域的管理协作等挑战&#xff0c;由于场地分散和突发状况的不可预知性&#xff0c;传统方式已无法…

大模型部署——NVIDIA NIM 和 LangChain 如何彻底改变 AI 集成和性能

DigiOps与人工智能 人工智能已经从一个未来主义的想法变成了改变全球行业的强大力量。人工智能驱动的解决方案正在改变医疗保健、金融、制造和零售等行业的企业运营方式。它们不仅提高了效率和准确性&#xff0c;还增强了决策能力。人工智能的价值不断增长&#xff0c;这从它处…

Html 转为 MarkDown

在 RAG 中,通常需要将 HTML 转为 Markdown,有很多第三方 API 都支持 HTML 的转换,本文使用一个代码文档的例子 https://www.joinquant.com/help/api/help#name:Stock,将聚宽 API 转为 Markdown。本文通过两种方式进行实现,使用收费和开源的解决方案。聚宽 API 格式转为 Ma…

【Linux】几种常见配置文件介绍

配置文件目录 linux 系统中有很多配置文件目录 /etc/systemd/system /lib/systemd/system /usr/lib/systemd/system 【结果就是这个目录配置文件是源头】 这三者有什么样的关系呢&#xff1f; 以下是网络上找的资料汇总&#xff0c;并加了一些操作验证。方便后期使用 介…

鸿蒙NEXT开发环境搭建(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

Linux 进程的基本概念及描述

目录 0.前言 1. 什么是进程 1.1 进程的定义与特性 1.2 进程与线程的区别 2.描述进程 2.1 PCB (进程控制块) 2.2 task_struct 3.查看进程 3.1 查看进程信息 3.1.1 /proc 文件系统 3.1.2 ps 命令 3.1.2 top 和 htop 命令 3.2 获取进程标识符 3.2.1使用命令获取PID 3.2.2 使用C语言…

中原台球展,2025郑州台球展会,中国台球产业链发展大会

阳春三月&#xff0c;万物复苏&#xff0c;商机无限&#xff1b;品牌宣传正当季&#xff0c;产品招商正当时&#xff0c;新品发布好时期。抓住台球发展的这波财富机遇&#xff0c;借助壹肆柒郑州台球展这个超级平台&#xff0c;将品牌和产品快速打造成为覆盖全国市场的顶流。20…

数据治理003-数据域

数据仓库是面向主题&#xff08;数据综合、归类并进行分析利用的抽象&#xff09;的应用。 数据仓库模型设计除横向的分层外&#xff0c;通常也需要根据业务情况进行纵向划分数据域。数据域是联系较为紧密的数据主题的集合&#xff0c;通常是根据业务类别、数据来源、数据用途…

InternLM + LlamaIndex RAG 实践

llamaindexInternlm2 RAG实践 参考教程 正式介绍检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;技术以前&#xff0c;大家不妨想想为什么会出现这样一个技术。 给模型注入新知识的方式&#xff0c;可以简单分为两种方式&#xff0c;一种…

线性代数(持续更新)

一.矩阵及其计算 1.矩阵的概念 矩阵就是一个数表 元素全是0&#xff0c;是零矩阵&#xff0c;用0来表示 当mn时&#xff0c;称为n阶矩阵&#xff08;方阵&#xff09; 只有一行的叫行矩阵&#xff0c;只有一列的叫列矩阵 只有对角线有元素的叫做对角矩阵&#xff0c;用dia…

(Linux驱动学习 - 4).Linux 下 DHT11 温湿度传感器驱动编写

DHT11的通信协议是单总线协议&#xff0c;可以用之前学习的pinctl和gpio子系统完成某IO引脚上数据的读与写。 一.在设备树下添加dht11的设备结点 1.流程图 2.设备树代码 &#xff08;1&#xff09;.在设备树的 iomuxc结点下添加 pinctl_dht11 &#xff08;2&#xff09;.在根…

HuggingChat macOS 版现已发布

Hugging Face 的开源聊天应用程序 Hugging Chat&#xff0c;现已推出适用于 macOS 的版本。 主要特点 Hugging Chat macOS 版本具有以下亮点: 强大的模型支持: 用户可以一键访问多个顶尖的开源大语言模型&#xff0c;包括 Qwen 2.5 72B、Command R、Phi 3.5、Mistral 12B 等等&…

WebRTC入门

主要参考资料&#xff1a; WebRTC 在 ESP32 系列硬件平台上的实现: https://www.bilibili.com/video/BV1AEHseWEda/?spm_id_from333.337.search-card.all.click&vd_sourcedd284033cd0c4d1f3f59a2cd40ae4ef9 火山 RTC豆包大模型&#xff0c;给用户体验装上银色子弹: https:…

【网络安全】Cookie与ID未强绑定导致账户接管

未经许可,不得转载。 文章目录 前言正文前言 DigiLocker 是一项在线服务,旨在为公民提供一个安全的数字平台,用于存储和访问重要的文档,如 Aadhaar 卡、PAN 卡和成绩单等。DigiLocker 通过多因素身份验证(MFA)来保护用户账户安全,通常包括 6 位数的安全 PIN 和一次性密…

【RabbitMQ】面试题

在本篇文章中&#xff0c;主要是介绍RabbitMQ一些常见的面试题。对于前几篇文章的代码&#xff0c;都已经在码云中给出&#xff0c;链接是mq-test: 学习RabbitMQ的一些简单案例 (gitee.com)&#xff0c;如果存在问题的话欢迎各位提出&#xff0c;望共同进步。 MQ的作用以及应用…

sentinel原理源码分析系列(一)-总述

背景 微服务是目前java主流开发架构&#xff0c;微服务架构技术栈有&#xff0c;服务注册中心&#xff0c;网关&#xff0c;熔断限流&#xff0c;服务同学&#xff0c;配置中心等组件&#xff0c;其中&#xff0c;熔断限流主要3个功能特性&#xff0c;限流&#xff0c;熔断&…

《OpenCV》—— 指纹验证

用两张指纹图片中的其中一张对其验证 完整代码 import cv2def cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)def verification(src, model):sift cv2.SIFT_create()kp1, des1 sift.detectAndCompute(src, None)kp2, des2 sift.detectAndCompute(model, None)fl…

使用 Llama 3.1 和 Qdrant 构建多语言医疗保健聊天机器人的步骤

长话短说&#xff1a; 准备好深入研究&#xff1a; 矢量存储的复杂性以及如何利用 Qdrant 进行高效数据摄取。掌握 Qdrant 中的集合管理以获得最佳性能。释放上下文感知响应的相似性搜索的潜力。精心设计复杂的 LangChain 工作流程以增强聊天机器人的功能。将革命性的 Llama …

在线代码编辑器

在线代码编辑器 文章说明前台核心代码后台核心代码效果展示源码下载 文章说明 采用Java结合vue3设计实现的在线代码编辑功能&#xff0c;支持在线编辑代码、运行代码&#xff0c;同时支持导入文件&#xff0c;支持图片识别&#xff0c;支持复制代码&#xff0c;可将代码导出为图…

《RabbitMQ篇》基本概念介绍

MQ功能 解耦 MQ允许不同系统或组件之间松散耦合。发送者和接收者不需要直接连接&#xff0c;从而提高了系统的灵活性和可维护性。异步处理 使用MQ可以实现异步消息传递&#xff0c;发送者可以将消息放入队列后立即返回&#xff0c;不必等待接收者处理。这提高了系统的响应速度…