精华内容
下载资源
问答
  • 2021-09-22 23:26:42

    Word 的操作小技巧,本文包括如何插入多行(列),如何进行快速的重复操作,在 Word 中是否也可以使用正则表达式进行比较高级的查找操作呢?本文一一进行讲述。

    插入多行

    在插入表格的时候,可以直接指定插入表格的行数和列数,但是针对已经制作好的表格,我们需要添加行数的时候,该如何操作呢?

    以往我总是直接在表格的末尾敲击回车键,这种方法可以实现增加一行表格。

    如果要增加的表格是很多行的情况,又该如何处理呢?选择 N 行表格,敲击回车,可以实现对应增加 N 行表格。

    对于上述这类情况,都是不断重复性的操作,在 Word 中是提供了重复操作的快捷键的,我觉得很有必要记住它,所以单独列了一节如下。

    重复操作

    按快捷键 F4 可以重复上一操作。

    在Word中使用正则表达式进行查找和替换

    今天上班的时候需要处理一些 Word 文档,对其中的词句进行替换,当时就在想这个 Word 到底支不支持正则表达式呢,没想到上网一查,还真的支持。基本步骤及可用的通配符如下所示,更具体的内容见参考文献2.

    步骤

    1. 在“开始”选项卡上的“编辑”组中,单击“查找”旁边的箭头,然后单击“高级查找”
    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
    1、做透视表统计 2、设置显示格式 3、取消分类汇总 4、拷贝到原数据后面 5、排序

    1、做透视表统计
    2、设置显示格式
    在这里插入图片描述

    3、取消分类汇总
    在这里插入图片描述

    4、拷贝到原数据后面
    在这里插入图片描述

    5、排序

    在这里插入图片描述

    展开全文
  • 数据库表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用指定表格的行数,行数是没有上限的。下面是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)",即"数据库服务器"。

    824e300cccfe26c3ae4dc8c5f775635f.png

    当我们安装了数据库服务器后,就可以在数据库服务器中创建数据库,每个数据库中还可以包含多张表。

    e525e92411be22b58239e939c1819a95.png

    数据库表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用指定表格的行数,行数是没有上限的。下面是tab_student表的结构:

    38cd45d68aaf93d639e07b134437c551.png

    当把表格创建好了之后,就可以向表格中添加数据了。向表格添加数据是以行为单位的!下面是s_student表的记录:

    大家要学会区分什么是表结构,什么是表记录。

     应用程序与数据库

      应用程序使用数据库完成对数据的存储!

    6db92fdd395d8cccc7ea3e0cbaf3de8b.png

    安装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。

    9f594449023a4b46eff84507f96e19f3.png

    连接查询会产生笛卡尔积,假设集合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表中插入一条记录:

    6d1a8467f8ec0342b98aa13b2666d4a8.png

      其中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中,将表格里的一列转换为多行多列的几种方法。例如,以下表格,是一个行业分类表,都放在同一列中。现我们准备把它转为多列。表格里数据除掉标题行行,总共有60列数据,干脆我们就给它转为10行6列...

    今天来说说在Excel中,将表格里的一列转换为多行多列的几种方法。

    例如,以下表格,是一个行业分类表,都放在同一列中。现我们准备把它转为多列。

    540c4b3d16be1324d438a95266bdf476.png

    表格里数据除掉标题行行,总共有60列数据,干脆我们就给它转为10行6列吧。

    那么,一列转多行多列,怎么转换才快速呢?

    动手前,我们先找找规律吧。

    首先,我们要知道,表格单元格数据区域为A2:A61,转为10行6列的表格后,原先的单元格地址对应转换后的表格存放位置,如下:

    7f760617c12614827c0193032973f936.png

    那么问题了,怎么样来调取对应单元格地址的数据呢?

    以下四种方法,让你快速完成将一列转多行。

    ●查找替换法

    ●批量填充法

    ●借助word表格转换法

    ●用indirect函数转换法

    现在分别来说一说这四种方法具体怎么使用。

    一、查找替换法

    1、先做好如下图表底

    a1280f67aad4e375a2620b1d7fb54b72.png

    即在C2单元格输入A2,然后鼠标往右拖动填充至H2单元,使单元格从左往右生成A2、A4……A7数据;

    用同样的方法,在C3:H3单元格从左往左路生成A8、A9……A13数据。

    然后选中C2:H3这两行单元格区域,鼠标往下拖动至H11单元格,单元格即填充完毕。

    2、将“A”替换成“=A”

    表底做好后,我们利用查找替换法将表格里的“A”替换成“=A”。

    e43b4a1d3bf2c18217e41000134efa96.png

    3、将公式转化为数值

    替换后,我们可以看到C2:H11单元格变成是用公式填充。

    1a75e4f64f3bab0033f579194f329cf3.png

    所以,在替换后,我们选中C2:H11单元格区域并复制,然后右键—选择性粘贴,将其粘贴为数值,就完了。

    操作动态图:

    bd1ef8ca48104372e49047921dbd64ea.png

    二、批量填充法

    1、先选取B2:F61单元格区域后,在编辑框里输入公式:=A12,然后按批量填充;

    845ffcfa58a459ce2c5515e38b4fd28d.png

    2、再将填充的公式粘贴为数值;

    3、最后删除多余的行。

    操作动态图:

    721bf87a62b965aa1683e7ed969813a9.png

    技巧提示:因为是单列60行转为10行6列,原先A2:A11这10个单元格保持不变,所以B2:F61里的单元格就从=A12开始填充。

    三、借助word表格转换

    可以将Excel表格里的数据复制粘贴到word里,利用word进行转换,转换后再粘贴回excel表格中。

    操作方法:

    1、将Excel表格里的数据复制粘贴到word文档中,粘贴的时候记得选择【粘贴选项】中的【只保留文本】;

    2、全选粘贴进word文档中的文本,点击word菜单的【插入】—【表格】—【文本转换成表格】;

    ef472cca0f6e712a3e59bcad462cdfc9.png

    3、在弹出的【将文字转换成表格】对话框里,将列数设置为6列,行数10行,最后点击【确定】即可。

    ba8a55c755a135deaaf459f6c9885f70.png

    4、最后,把word文档里转换完的表格复制粘贴到Excel中就完成了。

    操作动态图:

    184fbea8ec3f2f1e506c13b3c0b99f0f.png

    四、用indirect函数转换

    即选择C2:H11单元格区域,在编辑框里输入以下公式:

    =INDIRECT("A"&6*ROW(A1)-5+COLUMN(A1))&""

    然后按填充。

    934cc9e91a0130fe0114cd250efabc46.png

    操作动态图:

    c47a0ff42d35c5b81bda34e707761dc3.png

    用indirect函数转换的方法,我曾写过专门的文章详细介绍此方法,里面还有关于indirect函数的语法。不懂的童鞋,可以再去翻阅以前的文章。

    文章为:

    「Excel技巧」如何利用indirect函数快速将一列转为多行多列排版

    关于Excel一列转多行多列的方法就介绍到这了。你最喜欢哪种方法?

    展开全文
  • Python DataFrame一列拆成多列以及一行拆成多行摘要在进行数据分析时,我们经常需要把DataFrame的一列拆成多列或者根据某列把一行拆成多行,这篇文章主要讲解这两个目标的实现。1.读取数据2.将City列转成多列(以‘|'...
  • 今天跟大家分享一下怎么统计多行多列数据出现的重复次数 1.我们想要统计课程表中。每周各个科目一共上了多少节。 2.首先我们选中课程数据单元格区域 3.点击下图选项(Excel工具箱,百度即可...
  • 问题:如何在Matlab中,将图例绘制成多行多列的? 查找资料过程中发现, 1)有的方法要求多个plot中横坐标具有相同的长度 比如:https://blog.csdn.net/xgf415/article/details/56480011 2)高版本中,部分函数...
  • Oracle一多行数据拼成一行显示字符Oracle一多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CO ...sql 查询重复行数据1.查找表中多余的重复...
  • 在工作和学习中,我们经常要和Excl打交道,对数据进行一些简单和复杂的处理,可以说Office三件套是业界公认的“神器”级别...提取Excl两列(多列)数据相同的数据等等这样要对Excl数据进行一列或者多列的数据处理(提取...
  • 实际写时可以写在select子句中省去此) (四)查询重复 对一个字段查找重复记录 根据sample_code字段找到重复记录 对个字段查找重复记录(这里以2个为例) 根据name和code字段找到重复记录 总结 以上所述是小编给...
  • 之前介绍了提取不重复值得简单方法,今天有位小伙伴问我怎么在多行多列中提取不重复值,下面就给大家分享两种方法。 一、此方法简单快速适用各版本Excel 1、如下图,是某农场的夜班值班表,现在还是那个变态...
  • 使用EXCEL自带的VBA(按alt+F11调出),贴入下列的代码,然后运行,依据A的内容,组合合并B的内容,在E和F输出,代码参考,行数和位置可以自己改 Private Sub Worksheet_Activate() Dim a, b, d, i, m, n...
  • 填写需要查找的值,或者选择需要查找的值所在的单元格。 match_range 匹配区域。必填字段。选取lookup_value的查找区域,也就是你要在哪里找lookup_value。通常选取一整列。 return_range 返回区域。...
  • 虽然excel也能够很简单的实现,但是用Python也未尝不是一种新思路,可以自己试着把文件路径改下,自己体验。 import xlrd from collections import Counter data = xlrd.open_workbook("C:/Users/我是弱智/...
  • 最近在做大数据的实验时,遇到需要类似于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:37
    union 操作符用于合并两个或个 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,'...
  • 23、批量添加文本(数据)到文件首尾:可以添加多行文本到文件的首尾,支持添加过的不进行重复添加,(判断是否重复添加的标准是某一行完全一样,包括空格等符号)。 24、批量添加文本到行首尾:可以批量添加文本到...
  • 正则匹配多行内容 /\*[\s\S]+?\*/ 我想删所有/* */ UE根据关键字筛选行数据并复制筛选出的行 UE perl模式 元字符 说明 . 匹配除换行符以外的任意字符 \w...
  • --1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) --例二: select...
  • 1 EXCEL查找数据的基础方法:菜单 crtl+F 查找 注意:查找数据,查找公式 注意:查找下一个 查找全部 注意:查找查找全部 替换功能 筛选功能 ...2 查找数据可使用公式 ... 情况2:存在有个符合条件得...
  • sqlsever 在多列都有重复项的情况下,如何查询创建时间最近的数据; 使用分组函数:ROW_NUMBER() over (partition by 字段名 order by 排序字段 desc) 示例如下:
  • 查询出重复的ID

    2021-11-19 21:48:35
    GPS平台、网站建设、软件开发、系统运维,找森大...现在有很id重复的数据,怎么把这些重复的都查出来? group by? 请写出SQL语句, 谢谢 我来帮他解答 网友推荐答案 2012-02-22 14:56flyingFish211|当前分类:26 级排名
  • SQL SERVER将多行数据合并成一行(转载) 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个多行内容拼接成一行 比如表中有两列数据 : ep_classes ep_name ...
  • 话不说直接上方法,看哪种方法更适合你:方法一、填充法1、先给每行加上逗号加逗号的方法---高版本的方法:先输入第一行,然后CTRL+E得到低版本的方法:先输入一逗号然后用&符号生成新的一不管哪种方法...
  • vscode快捷键多行批量操作-链式操作

    千次阅读 2021-09-13 16:24:05
    当遇到很行不规则数据需要批量处理的时候,一行一行的复制粘贴很麻烦,因此,需要使用链式操作来快速完成。 一:需要使用到的两个快捷键 ctrl+alt+ 方向键 ==>多行选择 ctrl+alt+d ==>将下一个查找匹配项...
  • 上面这段脚本是假设内存能够装下合并以后的全部数据,如果装不下,那么应该用下面这段脚本: A1 出目录中的所有txt文件的完整路径名称,如果要查找子目录,则加上@s选项 A2 对出的文件进行循环 B2 用游标读取每...
  • 查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)2、删除表中多余的重复记录,...
  • sublime text多行光标批量快捷操作Ctrl+ALT+↓按end定位到行尾sublimetext常用快捷键Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开...
  • Kettle 行列互换之——行转列(多列数据合并成一列变为多行) 原始需求如下: 业务系统设置成这样,见截图. 工资项目为了方便录入,都是做成列的. 但是这些数据需要和另外的费用报销系统的数据关联,费用报销系统的费用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,308
精华内容 15,323
关键字:

多列多行查找重复