-
2021-09-22 23:26:42
Word 的操作小技巧,本文包括如何插入多行(列),如何进行快速的重复操作,在 Word 中是否也可以使用正则表达式进行比较高级的查找操作呢?本文一一进行讲述。
插入多行
在插入表格的时候,可以直接指定插入表格的行数和列数,但是针对已经制作好的表格,我们需要添加行数的时候,该如何操作呢?
以往我总是直接在表格的末尾敲击回车键,这种方法可以实现增加一行表格。
如果要增加的表格是很多行的情况,又该如何处理呢?选择 N 行表格,敲击回车,可以实现对应增加 N 行表格。
对于上述这类情况,都是不断重复性的操作,在 Word 中是提供了重复操作的快捷键的,我觉得很有必要记住它,所以单独列了一节如下。
重复操作
按快捷键
F4
可以重复上一操作。在Word中使用正则表达式进行查找和替换
今天上班的时候需要处理一些 Word 文档,对其中的词句进行替换,当时就在想这个 Word 到底支不支持正则表达式呢,没想到上网一查,还真的支持。基本步骤及可用的通配符如下所示,更具体的内容见参考文献2.
步骤
- 在“开始”选项卡上的“编辑”组中,单击“查找”旁边的箭头,然后单击“高级查找”
- 选中“使用通配符”复选框。
可用的通配符表
用于查找 类型 示例 任一字符 ? s?t 可找到“sat”和“set”。 任何字符串 * s*d 可找到“sad”和“started”。 单词开头 < <(inter) 可找到“interesting”和“intercept”,但找不到“splintered”。 单词结尾 > (in)> 可找到“in”和“within”,但找不到“interesting”。 指定字符之一 [ ] w[io]n 可找到“win”和“won”。 此范围内的任一字符 [-] [r-t]ight 可找到“right”和“sight”。范围必须是升序。 除了括号内范围中的字符之外的任一字符 [!x-z] t[!a-m]ck 可找到“tock”和“tuck”,但找不到“tack”或“tick”。 前一个字符或表达式的 n 个匹配项 {n} fe{2}d 可找到“feed”,但找不到“fed”。 前一个字符或表达式的至少 n 个匹配项 {n,} fe{1,}d 可找到“fed”和“feed”。 前一个字符或表达式的 n 到 m 个匹配项 {n,m} 10{1,3} 可找到“10”、“100”和“1000”。 前一个字符或表达式的一个或多个匹配项 @ lo@t 可找到“lot”和“loot”。 参考文章
更多相关内容 -
excel表格多列数据中查找重复行数据
2020-07-22 15:08:35 -
mysql一行多列变成一列多行_MySql必备基础知识(一)
2020-11-20 05:20:19数据库表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用指定表格的行数,行数是没有上限的。下面是tab_student表的结构: 当把表格创建好了之后,就可以向表格中添加...1 数据库概念(了解)
1.1 什么是数据库
数据库就是用来存储和管理数据的仓库!
数据库存储数据的优先:
可存储大量数据;
方便检索;
保持数据的一致性、完整性;
安全,可共享;
通过组合分析,可产生新数据。
1.2 数据库的发展历程
没有数据库,使用磁盘文件存储数据;
层次结构模型数据库;
网状结构模型数据库;
关系结构模型数据库:使用二维表格来存储数据;
关系-对象模型数据库;
MySQL就是关系型数据库!
1.3 常见数据库
Oracle(神谕):甲骨文
DB2:IBM;
SQL Server:微软;
Sybase:赛贝斯;
MySQL:甲骨文; Mysql AB--(sun--(oracle
1.4 理解数据库
RDBMS = 管理员(manager)+仓库(database)
database = N个table
table:
表结构:定义表的列名和列类型!
表记录:一行一行的记录!
我们现在所说的数据库泛指"关系型数据库管理系统(RDBMS - Relational database management system)",即"数据库服务器"。
当我们安装了数据库服务器后,就可以在数据库服务器中创建数据库,每个数据库中还可以包含多张表。
数据库表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用指定表格的行数,行数是没有上限的。下面是tab_student表的结构:
当把表格创建好了之后,就可以向表格中添加数据了。向表格添加数据是以行为单位的!下面是s_student表的记录:
大家要学会区分什么是表结构,什么是表记录。
应用程序与数据库
应用程序使用数据库完成对数据的存储!
安装MySQL数据库
2.1 安装MySQL
参考:MySQL安装图解.doc
2.2 MySQL目录结构
MySQL的数据存储目录为data,data目录通常在C:Documents and SettingsAll UsersApplication DataMySQLMySQL Server 5.1data位置。在data下的每个目录都代表一个数据库。
MySQL的安装目录下:
bin目录中都是可执行文件;
my.ini文件是MySQL的配置文件;
3 基本命令
3.1 启动和关闭mysql服务器
启动:net start mysql;
关闭:net stop mysql;
在启动mysql服务后,打开windows任务管理器,会有一个名为mysqld.exe的进程运行,所以mysqld.exe才是MySQL服务器程序。
3.2 客户端登录退出mysql
在启动MySQL服务器后,我们需要使用管理员用户登录MySQL服务器,然后来对服务器进行操作。登录MySQL需要使用MySQL的客户端程序:mysql.exe
登录:mysql -u root -p 123 -h localhost;
-u:后面的root是用户名,这里使用的是超级管理员root;
-p:后面的123是密码,这是在安装MySQL时就已经指定的密码;
退出:quit或exit;
在登录成功后,打开windows任务管理器,会有一个名为mysql.exe的进程运行,所以mysql.exe是客户端程序。
SQL语句
SQL概述
1.1 什么是SQL
SQL(Structured Query Language)是"结构化查询语言",它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。SQ标准(ANSI/ISO)有:
SQL-92:1992年发布的SQL语言标准;
SQL:1999:1999年发布的SQL语言标准;
SQL:2003:2003年发布的SQL语言标准;
这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。
虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为"方言"。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言。
1.2 语法要求
SQL语句可以单行或多行书写,以分号结尾;
可以用空格和缩进来来增强语句的可读性;
关键字不区别大小写,建议使用大写;
2 分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
3 DDL
3.1 基本操作
查看所有数据库名称:SHOW DATABASES;
切换数据库:USE mydb1,切换到mydb1数据库;
3.2 操作数据库
创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1;
创建数据库,例如:CREATE DATABASE mydb1,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。
删除数据库:DROP DATABASE [IF EXISTS] mydb1;
删除数据库,例如:DROP DATABASE mydb1,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算mydb1不存在,也不会的报错。
修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8
修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的"-",即UTF-8要书写为UTF8。
3.3 数据类型
MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。
常用类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
decimal:泛型型,在表单钱方面使用该类型,因为不会出现精度缺失问题;
char:固定长度字符串类型;
varchar:可变长度字符串类型;
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型;
3.4 操作表
创建表:
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
......
);
例如:
再例如:
查看当前数据库中所有表名称:SHOW TABLES;
查看指定表的创建语句:SHOW CREATE TABLE emp,查看emp表的创建语句;
查看表结构:DESC emp,查看emp表结构;
删除表:DROP TABLE emp,删除emp表;
修改表:
修改之添加列:给stu表添加classname列:
ALTER TABLE stu ADD (classname varchar(100));
修改之修改列类型:修改stu表的gender列类型为CHAR(2):
ALTER TABLE stu MODIFY gender CHAR(2);
修改之修改列名:修改stu表的gender列名为sex:
ALTER TABLE stu change gender sex CHAR(2);
修改之删除列:删除stu表的classname列:
ALTER TABLE stu DROP classname;
修改之修改表名称:修改stu表名称为student:
ALTER TABLE stu RENAME TO student;
3 基本命令
3.1 启动和关闭mysql服务器
启动:net start mysql;
关闭:net stop mysql;
在启动mysql服务后,打开windows任务管理器,会有一个名为mysqld.exe的进程运行,所以mysqld.exe才是MySQL服务器程序。
3.2 客户端登录退出mysql
在启动MySQL服务器后,我们需要使用管理员用户登录MySQL服务器,然后来对服务器进行操作。登录MySQL需要使用MySQL的客户端程序:mysql.exe
登录:mysql -u root -p 123 -h localhost;
-u:后面的root是用户名,这里使用的是超级管理员root;
-p:后面的123是密码,这是在安装MySQL时就已经指定的密码;
-h:后面给出的localhost是服务器主机名,它是可以省略的,例如:mysql -u root -p 123;
退出:quit或exit;
在登录成功后,打开windows任务管理器,会有一个名为mysql.exe的进程运行,所以mysql.exe是客户端程序。
SQL语句
SQL概述
1.1 什么是SQL
SQL(Structured Query Language)是"结构化查询语言",它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。SQ标准(ANSI/ISO)有:
SQL-92:1992年发布的SQL语言标准;
SQL:1999:1999年发布的SQL语言标签;
SQL:2003:2003年发布的SQL语言标签;
这些标准就与JDK的版本一样,在新的版本中总要有一些语法的变化。不同时期的数据库对不同标准做了实现。
虽然SQL可以用在所有关系型数据库中,但很多数据库还都有标准之后的一些语法,我们可以称之为"方言"。例如MySQL中的LIMIT语句就是MySQL独有的方言,其它数据库都不支持!当然,Oracle或SQL Server都有自己的方言。
1.2 语法要求
SQL语句可以单行或多行书写,以分号结尾;
可以用空格和缩进来来增强语句的可读性;
关键字不区别大小写,建议使用大写;
2 分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
3 DDL
3.1 基本操作
查看所有数据库名称:SHOW DATABASES;
切换数据库:USE mydb1,切换到mydb1数据库;
3.2 操作数据库
创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1;
创建数据库,例如:CREATE DATABASE mydb1,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。
删除数据库:DROP DATABASE [IF EXISTS] mydb1;
删除数据库,例如:DROP DATABASE mydb1,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算mydb1不存在,也不会的报错。
修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8
修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的"-",即UTF-8要书写为UTF8。
3.3 数据类型
MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。
常用类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
decimal:泛型型,在表单钱方面使用该类型,因为不会出现精度缺失问题;
char:固定长度字符串类型;
varchar:可变长度字符串类型;
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型;
3.4 操作表
创建表:
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
......
);
例如:
再例如:
查看当前数据库中所有表名称:SHOW TABLES;
查看指定表的创建语句:SHOW CREATE TABLE emp,查看emp表的创建语句;
查看表结构:DESC emp,查看emp表结构;
删除表:DROP TABLE emp,删除emp表;
修改表:
修改之添加列:给stu表添加classname列:
ALTER TABLE stu ADD (classname varchar(100));
修改之修改列类型:修改stu表的gender列类型为CHAR(2):
ALTER TABLE stu MODIFY gender CHAR(2);
修改之修改列名:修改stu表的gender列名为sex:
ALTER TABLE stu change gender sex CHAR(2);
修改之删除列:删除stu表的classname列:
ALTER TABLE stu DROP classname;
修改之修改表名称:修改stu表名称为student:
ALTER TABLE stu RENAME TO student;
4 DML
4.1 插入数据
语法:
INSERT INTO 表名(列名1,列名2, …) VALUES(值1, 值2)
语法:
INSERT INTO 表名 VALUES(值1,值2,…)
因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:
注意:所有字符串数据必须使用单引用!
4.2 修改数据
语法:
UPDATE 表名 SET 列名1=值1, … 列名n=值n [WHERE 条件]
update person set gender='男' where id=2;
4.3 删除数据
语法:
DELETE FROM 表名 [WHERE 条件]
语法:
TRUNCATE TABLE 表名
虽然TRUNCATE和DELETE都可以删除表的所有记录,但有原理不同。DELETE的效率没有TRUNCATE高!
TRUNCATE其实属性DDL语句,因为它是先DROP TABLE,再CREATE TABLE。而且TRUNCATE删除的记录是无法回滚的,但DELETE删除的记录是可以回滚的(回滚是事务的知识!)。
数据查询语法(DQL)
DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
语法:
SELECT selection_list /*要查询的列名称*/
FROM table_list /*要查询的表名称*/
WHERE condition /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BY sorting_columns /*对结果分组*/
LIMIT offset_start, row_count /*结果限定*/
创建名:
学生表:stu
雇员表:emp
部分表:dept
1 基础查询
1.1 查询所有列
SELECT * FROM stu;
1.2 查询指定列
SELECT sid, sname, age FROM stu;
2 条件查询
2.1 条件查询介绍
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、、>=;
BETWEEN…AND;
IN(set);
IS NULL;
AND;
OR;
NOT;
2.2 查询性别为女,并且年龄50的记录
SELECT * FROM stu
WHERE gender='female' AND ge<50;
2.3 查询学号为S_1001,或者姓名为liSi的记录
SELECT * FROM stu
WHERE sid ='S_1001' OR sname='liSi';
2.4 查询学号为S_1001,S_1002,S_1003的记录
SELECT * FROM stu
WHERE sid IN ('S_1001','S_1002','S_1003');
2.5 查询学号不是S_1001,S_1002,S_1003的记录
SELECT * FROM tab_student
WHERE s_number NOT IN ('S_1001','S_1002','S_1003');
2.6 查询年龄为null的记录
SELECT * FROM stu
WHERE age IS NULL;
2.7 查询年龄在20到40之间的学生记录
SELECT *
FROM stu
WHERE age>=20 AND age<=40;
或者
SELECT *
FROM stu
WHERE age BETWEEN 20 AND 40;
2.8 查询性别非男的学生记录
SELECT *
FROM stu
WHERE gender!='male';
或者
SELECT *
FROM stu
WHERE gender<>'male';
或者
SELECT *
FROM stu
WHERE NOT gender='male';
2.9 查询姓名不为null的学生记录
SELECT *
FROM stu
WHERE NOT sname IS NULL;
或者
SELECT *
FROM stu
WHERE sname IS NOT NULL;
3 模糊查询
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
3.1 查询姓名由5个字母构成的学生记录
SELECT *
FROM stu
WHERE sname LIKE '_____';
模糊查询必须使用LIKE关键字。其中 "_"匹配任意一个字母,5个"_"表示5个任意字母。
3.2 查询姓名由5个字母构成,并且第5个字母为"i"的学生记录
SELECT *
FROM stu
WHERE sname LIKE '____i';
3.3 查询姓名以"z"开头的学生记录
SELECT *
FROM stu
WHERE sname LIKE 'z%';
其中"%"匹配0~n个任何字母。
3.4 查询姓名中第2个字母为"i"的学生记录
SELECT *
FROM stu
WHERE sname LIKE '_i%';
3.5 查询姓名中包含"a"字母的学生记录
SELECT *
FROM stu
WHERE sname LIKE '%a%';
4 字段控制查询
4.1 去除重复记录
去除重复记录(两行或两行以上记录中系列的上的数据都相同),例如emp表中sal字段就存在相同的记录。当只查询emp表的sal字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT:
SELECT DISTINCT sal FROM emp;
4.2 查看雇员的月薪与佣金之和
因为sal和comm两列的类型都是数值类型,所以可以做加运算。如果sal或comm中有一个字段不是数值类型,那么会出错。
SELECT *,sal+comm FROM emp;
comm列有很多记录的值为NULL,因为任何东西与NULL相加结果还是NULL,所以结算结果可能会出现NULL。下面使用了把NULL转换成数值0的函数IFNULL:
SELECT *,sal+IFNULL(comm,0) FROM emp;
4.3 给列名添加别名
在上面查询中出现列名为sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为total:
SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
给列起别名时,是可以省略AS关键字的:
SELECT *,sal+IFNULL(comm,0) total FROM emp;
5 排序
5.1 查询所有学生记录,按年龄升序排序
SELECT *
FROM stu
ORDER BY sage ASC;
或者
SELECT *
FROM stu
ORDER BY sage;
5.2 查询所有学生记录,按年龄降序排序
SELECT *
FROM stu
ORDER BY age DESC;
5.3 查询所有雇员,按月薪降序排序,如果月薪相同时,按编号升序排序
SELECT * FROM emp
ORDER BY sal DESC,empno ASC;
6 聚合函数
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
6.1 COUNT
当需要纵向统计时可以使用COUNT()。
查询emp表中记录数:
SELECT COUNT(*) AS cnt FROM emp;
查询emp表中有佣金的人数:
SELECT COUNT(comm) cnt FROM emp;
注意,因为count()函数中给出的是comm列,那么只统计comm列非NULL的行数。
查询emp表中月薪大于2500的人数:
SELECT COUNT(*) FROM emp
WHERE sal > 2500;
统计月薪与佣金之和大于2500元的人数:
SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) > 2500;
查询有佣金的人数,以及有领导的人数:
SELECT COUNT(comm), COUNT(mgr) FROM emp;
6.2 SUM和AVG
当需要纵向求和时使用sum()函数。
查询所有雇员月薪和:
SELECT SUM(sal) FROM emp;
查询所有雇员月薪和,以及所有雇员佣金和:
SELECT SUM(sal), SUM(comm) FROM emp;
查询所有雇员月薪+佣金和:
SELECT SUM(sal+IFNULL(comm,0)) FROM emp;
统计所有员工平均工资:
SELECT SUM(sal), COUNT(sal) FROM emp;
或者
SELECT AVG(sal) FROM emp;
6.3 MAX和MIN
查询最高工资和最低工资:
SELECT MAX(sal), MIN(sal) FROM emp;
分组查询
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。
7.1 分组查询
查询每个部门的部门编号和每个部门的工资和:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno;
查询每个部门的部门编号以及每个部门的人数:
SELECT deptno,COUNT(*)
FROM emp
GROUP BY deptno;
查询每个部门的部门编号以及每个部门工资大于1500的人数:
SELECT deptno,COUNT(*)
FROM emp
WHERE sal>1500
GROUP BY deptno;
7.2 HAVING子句
查询工资总和大于9000的部门编号以及工资和:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal) > 9000;
注意,WHERE是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而HAVING是对分组后数据的约束。
8 LIMIT
LIMIT用来限定查询结果的起始行,以及总行数。
8.1 查询5行记录,起始行从0开始
SELECT * FROM emp LIMIT 0, 5;
注意,起始行从0开始,即第一行开始!
8.2 查询10行记录,起始行从3开始
SELECT * FROM emp LIMIT 3, 10;
8.3 分页查询
如果一页记录为10条,希望查看第3页记录应该怎么查呢?
第一页记录起始行为0,一共查询10行;
第二页记录起始行为10,一共查询10行;
第三页记录起始行为20,一共查询10行;
多表连接查询
连接查询
内连接
外连接
左外连接
右外连接
全外连接(MySQL不支持)
自然连接
子查询
连接查询
连接查询就是求出多个表的乘积,例如t1连接t2,那么查询出的结果就是t1*t2。
连接查询会产生笛卡尔积,假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。可以扩展到多个集合的情况。
那么多表查询产生这样的结果并不是我们想要的,那么怎么去除重复的,不想要的记录呢,当然是通过条件过滤。通常要查询的多个表之间都存在关联关系,那么就通过关联关系去除笛卡尔积。
你能想像到emp和dept表连接查询的结果么?emp一共14行记录,dept表一共4行记录,那么连接后查询出的结果是56行记录。
也就你只是想在查询emp表的同时,把每个员工的所在部门信息显示出来,那么就需要使用主外键来去除无用信息了。
使用主外键关系做为条件来去除无用信息
上面查询结果会把两张表的所有列都查询出来,也许你不需要那么多列,这时就可以指定要查询的列了。
还可以为表指定别名,然后在引用列时使用别名即可。
2.1 内连接
上面的连接语句就是内连接,但它不是SQL标准中的查询方式,可以理解为方言!SQL标准的内连接为:
内连接的特点:查询结果必须满足条件。例如我们向emp表中插入一条记录:
其中deptno为50,而在dept表中只有10、20、30、40部门,那么上面的查询结果中就不会出现"张三"这条记录,因为它不能满足e.deptno=d.deptno这个条件。
2.2 外连接(左连接、右连接)
外连接的特点:查询出的结果存在不满足条件的可能。
左连接:
左连接是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。
这么说你可能不太明白,我们还是用上面的例子来说明。其中emp表中"张三"这条记录中,部门编号为50,而dept表中不存在部门编号为50的记录,所以"张三"这条记录,不能满足e.deptno=d.deptno这条件。但在左连接中,因为emp表是左表,所以左表中的记录都会查询出来,即"张三"这条记录也会查出,但相应的右表部分显示NULL。
2.3 右连接
右连接就是先把右表中所有记录都查询出来,然后左表满足条件的显示,不满足显示NULL。例如在dept表中的40部门并不存在员工,但在右连接中,如果dept表为右表,那么还是会查出40部门,但相应的员工信息为NULL。
连接查询心得:
连接不限与两张表,连接查询也可以是三张、四张,甚至N张表的连接查询。通常连接查询不可能需要整个笛卡尔积,而只是需要其中一部分,那么这时就需要使用条件来去除不需要的记录。这个条件大多数情况下都是使用主外键关系去除。
两张表的连接查询一定有一个主外键关系,三张表的连接查询就一定有两个主外键关系,所以在大家不是很熟悉连接查询时,首先要学会去除无用笛卡尔积,那么就是用主外键关系作为条件来处理。如果两张表的查询,那么至少有一个主外键条件,三张表连接至少有两个主外键条件。
自然连接
大家也都知道,连接查询会产生无用笛卡尔积,我们通常使用主外键关系等式来去除它。而自然连接无需你去给出主外键等式,它会自动找到这一等式:
两张连接的表中名称和类型完成一致的列作为条件,例如emp和dept表都存在deptno列,并且类型一致,所以会被自然连接找到!
当然自然连接还有其他的查找条件的方式,但其他方式都可能存在问题!
子查询
子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。
子查询出现的位置:
where后,作为条件的一部分;
from后,作为被查询的一条表;
当子查询出现在where后作为条件时,还可以使用如下关键字:
any
all
子查询结果集的形式:
单行单列(用于条件)
单行多列(用于条件)
多行单列(用于条件)
多行多列(用于表)
练习:
工资高于smith的员工。
分析:
查询条件:工资>smith工资,其中smith工资需要一条子查询。
第一步:查询smith的工资
第二步:查询高于smith工资的员工
结果:
子查询作为条件
子查询形式为单行单列
工资高于30部门所有人的员工信息
分析:
查询条件:工资高于30部门所有人工资,其中30部门所有人工资是子查询。高于所有需要使用all关键字。
第一步:查询30部门所有人工资
第二步:查询高于30部门所有人工资的员工信息
结果:
子查询作为条件
子查询形式为多行单列(当子查询结果集形式为多行单列时可以使用ALL或ANY关键字)
查询工作和工资与smith完全相同的员工信息
分析:
查询条件:工作和工资与smith完全相同,这是子查询
第一步:查询出smith的工作和工资
第二步:查询出与smith工作和工资相同的人
结果:
子查询作为条件
子查询形式为单行多列
查询员工编号为1006的员工名称、员工工资、部门名称、部门地址
分析:
查询列:员工名称、员工工资、部门名称、部门地址
查询表:emp和dept,分析得出,不需要外连接(外连接的特性:某一行(或某些行)记录上会出现一半有值,一半为NULL值)
条件:员工编号为1006
第一步:去除多表,只查一张表,这里去除部门表,只查员工表
第二步:让第一步与dept做内连接查询,添加主外键条件去除无用笛卡尔积
第二步中的dept表表示所有行所有列的一张完整的表,这里可以把dept替换成所有行,但只有dname和loc列的表,这需要子查询。
第三步:查询dept表中dname和loc两列,因为deptno会被作为条件,用来去除无用笛卡尔积,所以需要查询它。
第四步:替换第二步中的dept
子查询作为表
子查询形式为多行多列
关系型!
关系型数据库管理系统
因为没有插入age和gender列的数据,所以该条记录的age和gender值上为NULL
删除表所有记录
删除stu表,再创建stu表。等同与删除stu表所有记录。
在多表查询中,在使用列时必须指定列所从属的表,例如emp.deptno表示emp表的deptno列。
其中AS是可以省略的
INNER可以省略,MySQL默认的连接方式就是内连接
不使用WHERE,而是使用ON
OUTER可以省略
内连接
左连接
右连接
大于所有
-
「Excel技巧」Excel快速实现将一行转为多行多列的四种方法
2021-01-17 16:58:09今天来说说在Excel中,将表格里的一列转换为多行多列的几种方法。例如,以下表格,是一个行业分类表,都放在同一列中。现我们准备把它转为多列。表格里数据除掉标题行行,总共有60列数据,干脆我们就给它转为10行6列...今天来说说在Excel中,将表格里的一列转换为多行多列的几种方法。
例如,以下表格,是一个行业分类表,都放在同一列中。现我们准备把它转为多列。
表格里数据除掉标题行行,总共有60列数据,干脆我们就给它转为10行6列吧。
那么,一列转多行多列,怎么转换才快速呢?
动手前,我们先找找规律吧。
首先,我们要知道,表格单元格数据区域为A2:A61,转为10行6列的表格后,原先的单元格地址对应转换后的表格存放位置,如下:
那么问题了,怎么样来调取对应单元格地址的数据呢?
以下四种方法,让你快速完成将一列转多行。
●查找替换法
●批量填充法
●借助word表格转换法
●用indirect函数转换法
现在分别来说一说这四种方法具体怎么使用。
一、查找替换法
1、先做好如下图表底
即在C2单元格输入A2,然后鼠标往右拖动填充至H2单元,使单元格从左往右生成A2、A4……A7数据;
用同样的方法,在C3:H3单元格从左往左路生成A8、A9……A13数据。
然后选中C2:H3这两行单元格区域,鼠标往下拖动至H11单元格,单元格即填充完毕。
2、将“A”替换成“=A”
表底做好后,我们利用查找替换法将表格里的“A”替换成“=A”。
3、将公式转化为数值
替换后,我们可以看到C2:H11单元格变成是用公式填充。
所以,在替换后,我们选中C2:H11单元格区域并复制,然后右键—选择性粘贴,将其粘贴为数值,就完了。
操作动态图:
二、批量填充法
1、先选取B2:F61单元格区域后,在编辑框里输入公式:=A12,然后按批量填充;
2、再将填充的公式粘贴为数值;
3、最后删除多余的行。
操作动态图:
技巧提示:因为是单列60行转为10行6列,原先A2:A11这10个单元格保持不变,所以B2:F61里的单元格就从=A12开始填充。
三、借助word表格转换
可以将Excel表格里的数据复制粘贴到word里,利用word进行转换,转换后再粘贴回excel表格中。
操作方法:
1、将Excel表格里的数据复制粘贴到word文档中,粘贴的时候记得选择【粘贴选项】中的【只保留文本】;
2、全选粘贴进word文档中的文本,点击word菜单的【插入】—【表格】—【文本转换成表格】;
3、在弹出的【将文字转换成表格】对话框里,将列数设置为6列,行数10行,最后点击【确定】即可。
4、最后,把word文档里转换完的表格复制粘贴到Excel中就完成了。
操作动态图:
四、用indirect函数转换
即选择C2:H11单元格区域,在编辑框里输入以下公式:
=INDIRECT("A"&6*ROW(A1)-5+COLUMN(A1))&""
然后按填充。
操作动态图:
用indirect函数转换的方法,我曾写过专门的文章详细介绍此方法,里面还有关于indirect函数的语法。不懂的童鞋,可以再去翻阅以前的文章。
文章为:
「Excel技巧」如何利用indirect函数快速将一列转为多行多列排版
关于Excel一列转多行多列的方法就介绍到这了。你最喜欢哪种方法?
-
Python DataFrame一列拆成多列以及一行拆成多行
2020-12-03 19:16:08Python DataFrame一列拆成多列以及一行拆成多行摘要在进行数据分析时,我们经常需要把DataFrame的一列拆成多列或者根据某列把一行拆成多行,这篇文章主要讲解这两个目标的实现。1.读取数据2.将City列转成多列(以‘|'... -
Excel怎么统计多行多列数据出现的重复次数
2021-09-03 17:12:59今天跟大家分享一下怎么统计多行多列数据出现的重复次数 1.我们想要统计课程表中。每周各个科目一共上了多少节。 2.首先我们选中课程数据单元格区域 3.点击下图选项(Excel工具箱,百度即可... -
一个figure存在多个legend:多行多列图例
2018-07-18 22:05:54问题:如何在Matlab中,将图例绘制成多行多列的? 查找资料过程中发现, 1)有的方法要求多个plot中横坐标具有相同的长度 比如:https://blog.csdn.net/xgf415/article/details/56480011 2)高版本中,部分函数... -
sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果
2021-02-07 12:57:52Oracle一列的多行数据拼成一行显示字符Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CO ...sql 查询重复行数据1.查找表中多余的重复... -
数据分析之EXCL筛选多列相同的数据(满足多列条件的数据)进行处理
2018-07-11 13:06:26在工作和学习中,我们经常要和Excl打交道,对数据进行一些简单和复杂的处理,可以说Office三件套是业界公认的“神器”级别...提取Excl两列(多列)数据相同的数据等等这样要对Excl数据进行一列或者多列的数据处理(提取... -
MySQL根据某一个或者多个字段查找重复数据的sql语句
2021-02-08 03:53:31实际写时可以写在select子句中省去此列) (四)查询重复 对一个字段查找重复记录 根据sample_code字段找到重复记录 对多个字段查找重复记录(这里以2个为例) 根据name和code字段找到重复记录 总结 以上所述是小编给... -
Excel如何提取不重复唯一值中级篇(多行多列)
2021-11-06 19:33:54之前介绍了提取不重复值得简单方法,今天有位小伙伴问我怎么在多行多列中提取不重复值,下面就给大家分享两种方法。 一、此方法简单快速适用各版本Excel 1、如下图,是某农场的夜班值班表,现在还是那个变态... -
EXCEL中按照一列的相同编号,组合另一列的多行内容
2019-04-16 15:50:23使用EXCEL自带的VBA(按alt+F11调出),贴入下列的代码,然后运行,依据A列的内容,组合合并B列的内容,在E和F列输出,代码参考,行数和列位置可以自己改 Private Sub Worksheet_Activate() Dim a, b, d, i, m, n... -
VLookUp一对多升级版,可以返回所有匹配结果,支持多列或多行作为搜索和返回区域...
2018-01-05 01:39:00填写需要查找的值,或者选择需要查找的值所在的单元格。 match_range 匹配区域。必填字段。选取lookup_value的查找区域,也就是你要在哪里找lookup_value。通常选取一整列。 return_range 返回区域。... -
用Python实现从文件夹中提取多个excel列表的重复值
2022-04-28 09:50:32虽然excel也能够很简单的实现,但是用Python也未尝不是一种新思路,可以自己试着把文件路径改下,自己体验。 import xlrd from collections import Counter data = xlrd.open_workbook("C:/Users/我是弱智/... -
Hbase按指定列族中指定列的列值查找数据Hbase命令
2021-06-27 21:27:41最近在做大数据的实验时,遇到需要类似于sql中 select XXX from where xxxxx=xxx... Base列族包含Number、Name、Sex、Prof列;//学号、姓名、性别、专业 Score列族包含English、Math、Market、Java、Python、BigData. -
查询SQL一行多列的数据中最大值
2019-12-10 16:34:37union 操作符用于合并两个或多个 select语句的结果集。 请注意,union 内部的 select 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条select语句中的列的顺序必须相同。SQLunion 语法SELECT ... -
Matlab用两句话搞定数据中的重复行
2020-07-15 08:51:14直接上代码,最后面两句是用于查找重复数据的行号 随机生成A数据,在9,18,19位置加入重复的行 A = rand(8,8); A(9,:) = A(2,:); A = [A;rand(8,8)]; A(18,:) = A(6,:); A(19,:) = A(6,:); [B,ia,ib] = unique(A,'... -
TXT文件批量处理工具.rar
2020-04-10 21:33:0823、批量添加文本(数据)到文件首尾:可以添加多行文本到文件的首尾,支持添加过的不进行重复添加,(判断是否重复添加的标准是某一行完全一样,包括空格等符号)。 24、批量添加文本到行首尾:可以批量添加文本到... -
正则匹配多行内容UE perl模式 UE根据关键字筛选行数据并复制筛选出的行
2021-11-16 16:11:28正则匹配多行内容 /\*[\s\S]+?\*/ 我想删所有/* */ UE根据关键字筛选行数据并复制筛选出的行 UE perl模式 元字符 说明 . 匹配除换行符以外的任意字符 \w... -
SQL 查询重复和删除重复行的绝招(包括多行和单行)
2014-11-29 09:17:56--1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) --例二: select... -
EXCEL,如何进行查找,单条件和多条件查询
2020-12-24 18:18:561 EXCEL查找数据的基础方法:菜单 crtl+F 查找 注意:查找数据,查找公式 注意:查找下一个 查找全部 注意:查找,查找全部 替换功能 筛选功能 ...2 查找数据可使用公式 ... 情况2:存在有多个符合条件得... -
SQLSever (分组查询)查询多字段重复内容的每组数据的一行或者多行 ROW_NUMBER() over (partition by 字段名...
2021-04-21 15:59:27sqlsever 在多列都有重复项的情况下,如何查询创建时间最近的数据; 使用分组函数:ROW_NUMBER() over (partition by 字段名 order by 排序字段 desc) 示例如下: -
查询出重复的ID
2021-11-19 21:48:35GPS平台、网站建设、软件开发、系统运维,找森大...现在有很多id重复的数据,怎么把这些重复的都查出来? group by? 请写出SQL语句, 谢谢 我来帮他解答 网友推荐答案 2012-02-22 14:56flyingFish211|当前分类:26 级排名 -
数据库groub by分组后,把多行数据合并成一行数据(Oracle、Postgres)
2021-02-08 05:58:34SQL SERVER将多行数据合并成一行(转载) 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes ep_name ... -
excel相同字段多行合并_EXCEL里如何快速把多行数据合并为一行并以逗号隔开?...
2020-11-21 18:11:26话不多说直接上方法,看哪种方法更适合你:方法一、填充法1、先给每行加上逗号加逗号的方法---高版本的方法:先输入第一行,然后CTRL+E得到低版本的方法:先输入一列逗号然后用&符号生成新的一列不管哪种方法... -
vscode快捷键多行批量操作-链式操作
2021-09-13 16:24:05当遇到很多行不规则数据需要批量处理的时候,一行一行的复制粘贴很麻烦,因此,需要使用链式操作来快速完成。 一:需要使用到的两个快捷键 ctrl+alt+ 方向键 ==>多行选择 ctrl+alt+d ==>将下一个查找匹配项... -
access 合并多行字符串_数据文件合并与拆分
2020-11-20 02:02:38上面这段脚本是假设内存能够装下合并以后的全部数据,如果装不下,那么应该用下面这段脚本: A1 列出目录中的所有txt文件的完整路径名称,如果要查找子目录,则加上@s选项 A2 对列出的文件进行循环 B2 用游标读取每... -
解决Oracle删除重复数据只留一条的方法详解
2021-04-30 09:56:49查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)2、删除表中多余的重复记录,... -
sublime text常用快捷键及多行列模式批量操作教程
2021-05-15 21:57:20sublime text多行光标批量快捷操作Ctrl+ALT+↓按end定位到行尾sublimetext常用快捷键Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开... -
[转]Oracle 多行的数据合并
2021-05-07 08:44:15Kettle 行列互换之——行转列(多列数据合并成一列变为多行) 原始需求如下: 业务系统设置成这样,见截图. 工资项目为了方便录入,都是做成列的. 但是这些数据需要和另外的费用报销系统的数据关联,费用报销系统的费用...