文章目录

  • 1、查询的时候别名可以重复吗
  • 2、多表查询(left join)时如何能去掉重复列
  • 3、怎么查看数据的覆盖率
  • 4、Jupyter中显示DataFrame的全部行和列


1、查询的时候别名可以重复吗

在使用 MySQL查询时,当表名很长或者执行一些特殊查询的时候,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名代替表原来的名称。

为表取别名的基本语法格式为:
<表名> [AS] <别名>
也可以给列、投影取别名。

如果查询语句在同一层的话,不可以重复使用别名,如果是嵌套后在嵌套就可以,例如

select * from (select * from (select * from tablename) a) a

这里两个a不在同一层 就可以
如果这样就不行:

select * from (select * from tablename) a,(select * from tablename2) a
--解答来自https://zhidao.baidu.com/question/758413885542406124.html

2、多表查询(left join)时如何能去掉重复列

需求背景:数据库中有主表A,有其他表B、C、D、E、F、G…主表A与其他表使用字段report_id进行关联,现将各个表连接起来做成宽表。

基本做法:A表左连接left join其余表。

因为使用SELECT *,查询出来的表中有多个一模一样的report_id列,如何去除重复列?

1. 显示指定select的列名,即只要base.report_id:

此方法较常用,但是当列名特别多时,会大大降低写代码的效率,因此尝试将这个写列名过程变简单快速一些。即快速写出Select表中除了某个字段的所有字段

2. 关于简单写出查询除了某一列的其他列的SQL语句

SELECT
	CONCAT(' select ',GROUP_CONCAT(COLUMN_NAME),' from ', TABLE_NAME,' ;')
 FROM information_schema.COLUMNS
 WHERE table_name = 'xxxx'
 AND TABLE_SCHEMA = 'ccms_xxx' and COLUMN_NAME != 'id';

执行上面sql得出一条新的sql语句。如图中快速写出了选择除了id这一列的其他列的语句。

mysql重复的列名 mysql别名重复_数据


如此一来,我们select一个表的多个字段的代码就快了很多,生成上述语句后,可去掉其他不要的字段,仅对与其他表重复的字段使用<别名.字段>的写法即可。

用此方法左连接的某一个表的代码可快速写出。

3、怎么查看数据的覆盖率

多表连接后面对的是列数很多的表,怎么看这些列的数据覆盖率如何?

dataframe.isna().mean()

会输出每一列的覆盖率,如图:

mysql重复的列名 mysql别名重复_多表查询_02

isna()和 isnull()区别:

  • isnan 判断是否NAN(not a number),一般是数值字段的null
  • isnull() 主要是判断字符型是否有值, 可以判断所有的空值,但是python的数值字段比如int float 为空的时候默认是NAN

4、Jupyter中显示DataFrame的全部行和列

在Jupyter或其他环境中,若DataFrame有很多行,默认显示前5行和后5行,中间的数据用省略号表示

加上如下代码显示所有的行和列:

pd.options.display.max_columns = None
pd.options.display.max_rows = None