1、将查询结果保存为一张新表
create table new_table as select * from old_talbe;
慎用create table as select,一定要注意默认值的问题:
https://blog.csdn.net/evilcry2012/article/details/85337283
从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2 SELECT * FROM table1;
2、进入mysql的控制台后,使用source命令执行
Mysql>source 【sql脚本文件的路径全名】
3、SQL语句中count(1)count()count(字段)用法的区别
一. count(1)和count()的区别
- count(1)和count(*)的作用:
都是检索表中所有记录行的数目,不论其是否包含null值。 - 区别:但是count(1)比count()效率更高
二 . count(字段)与count(1)和count()的区别
count(字段)的作用是检索表中的这个字段的非空行数,不统计这个字段值为null的记录
执行效率分析:
l 列名为主键,count(列名)会比count(1)快
l 列名不为主键,count(1)会比count(列名)快
l 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count()
l 如果有主键,则 select count(主键)的执行效率是最优的
l 如果表只有一个字段,则 select count()最优。
4、sql 语句NVL()用法
NVL函数是一个空值转换函数,有两种写法:
(1) NVL(表达式1,表达式2)
如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。
(2) NVL2(表达式1,表达式2,表达式3)
如果表达式1为空值,返回值为表达式3的值。如果表达式1不为空,返回值为表达式2的值。
5、What does SQL clause “GROUP BY 1” mean?
https://stackoverflow.com/questions/7392730/what-does-sql-clause-group-by-1-mean
6、Hive执行sql文件:hive -f t.sql
7、# [用SQL命令查看MYSQL数据库大小](不能用于Hive)(https://www.cnblogs.com/ggwudivs/p/9947616.html)
1)、进入information_schema 数据库(存放了其他的数据库的信息)
use information_schema;
2)、查询所有数据的大小:
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables;
3)、查看指定数据库的大小:
比如查看数据库home的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='home';
4)、查看指定数据库的某个表的大小
比如查看数据库home中 members 表的大小
select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='home' and table_name='members';
8、sql语句中将两个字段的值连接
select database_name, table_name, concat(database_name, '.', table_name) as full_name from table_tmp;
9、## SQL之case when then用法详解
--简单case函数
case sex
when '1' then '男'
when '2' then '女’
else '其他' end
--case搜索函数
case when sex = '1' then '男'
when sex = '2' then '女'
else '其他' end
语法:
CAST (expression AS data_type)
参数说明:
expression:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
11、数据库导出:
mysqldump -h 172.16.163.214 -u root -p --default-character-set=utf8 jcmdb > /root/mydb.sql
数据库导入:
进入mysql的控制台后,使用source命令执行
Mysql>source 【sql脚本文件的路径全名】
12、KUDU不能使用
delete from table_name where year_month='';
只能用
alter table table_name drop partition(year_month='');
13、# sql针对某一字段去重,并且保留其他字段
今天客户提了一个小需求,希望我能提供一条sql语句,帮助他对数据中 _field 这个字段的值去重,并且保留其他字段的数据。第一反应是select distinct,但这种语句在对某个字段去重时,无法保留其他字段,所以select distinct不成立。因为用户对去重没有要求,字段值重复时保留任意一行就行,所以我想到当字段值重复时,选出对应主键最大的那条数据作为保留数据,这样可以实现用户的去重需求。但是用户的表中又没有主键,没办法,我们只好先使用窗口函数创建主键了。
因为平时喜欢用hive on spark写sql,所以sql语句使用中间表的形式来写,_field为去重字段,other_fields为原表table中_field外的其他字段
1.创建主键(存在主键则无需创建,窗口函数需要遍历所有行数据,数据量大时会很慢)
TEMP table1 = select row_number() over (order by _field) as id, _field, other_fields from table
2.选出每个_field对应的最大主键
TEMP table2 = select max(id) as max_id from table1 group by _field
3.找出选中的主键对应的原表数据
TEMP table3 = select _field, other_fields from table2 left join table on table2.max_id = table1.id
14、判断某一字段是否重复:
select _field, count(1) from table_name
group by _field having count(1)>1;
15、SQL连接两个字段
select concat(field1_name,field2_name) from table_name;
16、向动态分区表插入数据
insert into t2 partition(etl_dt) select * from t1;
17、Hive复制表结构新建表:
CREATE TABLE student2 LIKE student;
18、SQL类型转换
cast(field as decimal(10,0))
19、深入理解where 1=1的用处
https://www.imooc.com/article/41863
20、sqlite3 查看表结构
select * from sqlite_master where type="table" and name="emperors";
select * from sqlite_master where type='table';
21、为什么Hive不支持CHAR/VARCHAR类型?
HIVE不是标准的SQL,它实现的叫HQL, 其实就是一个Map-reduce的解释能简化JAVA编程,他的类型基本上是JAVA语言的类型了
22、SQL UNION 和 UNION ALL 操作符
https://www.w3school.com.cn/sql/sql_union.asp
UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值,UNION会去重。
23、# char,varchar和nvarchar有什么区别?
1、CHAR。CHAR存储定长数据很方便。不论你存储的数据是否达到了10个字节,都要占去10个字节的空间
2、VARCHAR。存储变长数。
varchart(n):长度为 n 个字节的可变长度且非 Unicode 的字符数据。范围1 ~ 8000
3、NVARCHAR。它表示存储的是Unicode数据类型的字符。所有的字符都用两个字节表示,即英文字符也是用两个字节表示。
nvarchar(n):包含 n 个字符的可变长度 Unicode 字符数据。范围1 ~ 4000
一般来说,如果含有中文字符,用nvarchar,如果纯英文和数字,用char/varchar
例:
varchar(4) 可以输入4个字节,也可以输入两个汉字
nvarchar(4) 可以输四个汉字,也可以输4个字母,但最多四个
24、通过-f 参数来执行查询文件
impala-shell -f impala-shell.sql
25、hive高级应用之不进入交互,执行 hive sql
hive -e "select * from student;"
26、hive执行sql文件:
hive -f t.sql
27、hive导入txt文件(https://www.cnblogs.com/xk-bench/p/9201578.html)
load data local inpath '/tmp/fun_user.txt' into table fun_user_external;
加载完后用Impala可能看不到,需要在Impala下执行以下命令:
refresh 库名.表名;
28、hive动态分区数据导入
https://blog.csdn.net/liubiaoxin/article/details/48931247
29、mysql如何实现多行查询结果合并成一行(默认是逗号分隔)
select group_concat(field_a) from table1;
30、用SQL删除一列字段:
ALTER TABLE store
DROP COLUMN address
;
31、GROUP_CONCAT(),1024这就是一般MySQL系统默认的最大长度(https://www.jianshu.com/p/011157cce605)
SET group_concat_max_len=102400;
32、# sqoop 导入增量数据到hive
https://blog.csdn.net/leprovision/article/details/87698064
sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123 --table trade_detail --hive-import --hive-overwrite --hive-table trade_detail --fields-terminated-by '\t'
33、【Hive】load数据,跳过第一行
在建表时,进行如下参数设置。
tblproperties(
"skip.header.line.count"="n", --跳过文件行首n行
"skip.footer.line.count"="n" --跳过文件行尾n行
)
34、创建自增字段
create table customers (
customer_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, first_name TEXT,
last_name TEXT
);
35、HiveSQL中没有Left、Right函数
可以用substr(column,1,nchar)代替
substr在Mysql和HiveSQL中都可以使用
注意:substr从1开始,包头包尾
left/right从0开始,包头不包尾
36、MySQL_TEXT与BLOB字段类型的区别
https://blog.csdn.net/wanlixingzhe/article/details/95324243
TEXT与BLOB的主要差别就是BLOB保存二进制数据,TEXT保存字符数据。目前几乎所有博客内容里的图片都不是以二进制存储在数据库的,而是把图片上传到服务器然后正文里使用标签引用,这样的博客就可以使用TEXT类型。而BLOB就可以把图片换算成二进制保存到数据库中。
37、# MySQL查询一张表有多少个字段
select count(*) from information_schema.COLUMNS where TABLE_SCHEMA='数据库名' and table_name='表名'
38、MySQL的sql_mode解析与设置
https://blog.csdn.net/CCCCalculator/article/details/70432123
https://blog.csdn.net/wang_517766334/article/details/3152939
设置的sqlmode在退出或者重启mysql后sqlmode即失效,要让sqlmode的设置永久有效,可以修改mysql的配置文件。在mysql配置文件中添加sql_mode的字段,后面加上相应的sqlmode模式,如下图所示将sqlmode设置为ansi。
39、解决“LOAD DATA local INFILE”时出现The used command is not allowed with this MySQL version问题
https://blog.csdn.net/ziyou434/article/details/82504130
https://www.cnblogs.com/xiaohuomiao/p/10646266.html
mysql -u Name -p --local-infile=1;
40、mysql 批量创建表及自动分区
https://www.jianshu.com/p/56bac8e455a5
41、mysqldump 数据迁移
mysqldump -uroot -ppassword --default-character-set=utf-8 --single-transaction --skip-opt -q [-d(t)] database_name --tables table_name1, table_name2, table_name3 > /data/s.sql
锁表问题:
https://blog.csdn.net/weiliu1463/article/details/25305371
mysqldump的--skip-opt问题 :
http://blog.sina.com.cn/s/blog_504818d0010084lr.html
https://imysql.com/2013/01/17/mysql-faq-mysqldump-skip-opt.html
mysqldump --master-data=2 --single-transaction:
https://blog.csdn.net/linuxheik/article/details/71480882
查看被锁的表:
select * from INFORMATION_SCHEMA.INNODB_TRX;
mysqldump如果不添加--single-transaction --skip-opt两个参数,则MySQL事务隔离级别为不可重复读(read-committed),如果添加则为可重复读(repeatable-read)
https://www.jianshu.com/p/50c389f00614
42、看你的mysql当前默认的存储引擎:
mysql> show variables like '%storage_engine%';
43、MySQL修改密码
mysql> set password for root@localhost = password('123');
44、Mysql优化
https://www.cnblogs.com/sharpest/p/10390035.html
45、# MySQL自动设置create_time和update_time
CREATE TABLE ProfitAndLossHistory
(
StockId
char(6) NOT NULL COMMENT '股票代码',
StockName
varchar(10) NOT NULL COMMENT '股票名称',
ProfitOrLoss
tinyint(1) NOT NULL COMMENT 'True为盈利,False为亏损',
ProfitOrLossFund
float NOT NULL COMMENT '累计盈亏资金',
PositionFund
int(11) NOT NULL COMMENT '持仓资金(单位W,四舍五入)',
RecentRange
int(11) NOT NULL COMMENT '近期涨跌幅度(百分之)',
Hotspot
int(10) unsigned NOT NULL COMMENT '热点天数(非热点为0)',
BuyTimes
int(10) unsigned NOT NULL COMMENT '第几次购买',
DaysOfPossession
int(11) NOT NULL COMMENT '持有天数(最低两天)',
Weekdays
int(10) unsigned NOT NULL COMMENT '买入时周几',
IsBuyCurrentHighPoint
tinyint(1) NOT NULL COMMENT '买入点仍是目前高点(1为是,0为否)',
TrendAfterSale
int(11) NOT NULL COMMENT '卖后走势(0为卖后当天上涨,1为1天后上涨,2为2天上涨,3为3天后上涨,4为4天后上涨,5为5天即以上上张,-1为1天后下跌,-2为2天后下跌,-3为3天后下跌,-4为4天后下跌,-5为5天即以上下跌)',
InsertTime
timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
UpdateTime
timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='盈亏较大的交易历史(波动1000以上)';
46、SQLite Delete 删除语句
DELETE FROM table_name WHERE [condition];
47、建视图时字段起个别名的方法
https://blog.csdn.net/tianping168/article/details/3292636
48、interval关键字用法
https://blog.csdn.net/arenzhj/article/details/16902141
49、create table as 和create table like的区别
https://www.cnblogs.com/bjx2020/p/10224811.html
50、LEFT JOIN关联表中ON,WHERE后面跟条件的区别
https://blog.csdn.net/wqc19920906/article/details/79785424
51、## TRUNC函数的用法
截取今天:
SQL> select sysdate,trunc(sysdate,'dd') from dual;
SYSDATE TRUNC(SYSDATE,'DD')
2009-03-24 21:31:17 2009-03-24 00:00:00
截取本周第一天:
SQL> select sysdate,trunc(sysdate,'d') from dual;
SYSDATE TRUNC(SYSDATE,'D')
2009-03-24 21:29:32 2009-03-22 00:00:00
截取本月第一天:
SQL> select sysdate,trunc(sysdate,'mm') from dual;
SYSDATE TRUNC(SYSDATE,'MM')
2009-03-24 21:30:30 2009-03-01 00:00:00
52、DATE_ADD()
https://blog.csdn.net/weixin_38750084/article/details/87874604
select DATE_ADD('2019-02-19 00:00:00',INTERVAL 1 DAY) from dual;
53、## sql语句中日期相减的操作
select datediff(month, 开始日期,结束日期); --两日期间隔月
select datediff(day, 开始日期,结束日期); --两日期间隔天
54、# sql查询字段个数
select count(*) from information_schema.COLUMNS where table_name='表名';
55、MySQL8中LOAD DATA INFILE出现The used command is not allowed with this MySQL version问题
https://blog.csdn.net/qinglingls/article/details/88981950
56、MySQL中外键的定义、作用、添加和删除
https://blog.csdn.net/lk142500/article/details/83590862
57、MySQL加载txt文件
alter table table_name add column dw_etl_dt int default 20200401;
alter table table_name partition by LIST(dw_etl_dt)
(
partition p20200401 values in (20200401);
)
select count(*) from table_name where dw_etl_dt=20200401;
select count(*) from table_name partition(p20200401);
alter table table_name add partition(
partition p20200402 values in (20200402)
);
load data infile '' terminated by '|' lines (a,b,@dw_etl_dt) set dw_etl_dt=if(isnull(@dw_etl_dt),20200401,@dw_etl_dt)
http://blog.sina.com.cn/s/blog_4d398f210100x9nn.html
https://dev.mysql.com/doc/refman/5.7/en/load-data.html
58、mysql 的show processlist和show full processlist区别
https://www.pianshen.com/article/88711276723/
showprocesslist只能列出当前100条。如果想全部列出,可以使用SHOW FULL PROCESSLIST命令
59、mysql执行truncate drop 时卡死问题解决
https://blog.csdn.net/zoujian1991/article/details/111871735
show processList
找到状态不正常的kill掉
60、MySQL grant 语法的详细解析
https://blog.csdn.net/yufengicd/article/details/9704865
61、MYSQL获取月份多少天
SELECT day(LAST_DAY('2012-09-01'))
62、## mysql int类型范围
INT 4 -2147483648 2147483647
63、This inspection detects situations when list creation could be rewritten with list literal.(https://blog.csdn.net/u014418725/article/details/89145380)
point_collection = list()
point_collection.append(point_list)
64、# Mysql中设置小数点用什么数据类型 decimal
Decimal(n,m)表示数值中共有n位数,其中整数n-m位,小数m位。例:decimal(10,6),数值中共有10位数,其中整数占4位,小数占6位。
65、# 主键和候选键有什么区别?
表格的每一行都由主键唯一标识,一个表只有一个主键。
主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键
66、查看字段注释(https://blog.csdn.net/weixin_31022063/article/details/113149728)
SHOW FULL COLUMNS FROM tbl_name [FROM db_name]//列出字段及详情
67、MySQL 转成字符串(https://www.cnblogs.com/xing-nb/p/12218946.html)
SELECT CAST(123 AS CHAR)
68、mysql 字符串拼接的几种方式(https://blog.csdn.net/syslbjjly/article/details/90640975)
SELECT CONCAT("name=","lich",NULL) AS test;
69、字段转换为字符串
select cast(now() as char)
70、Mysql修改字段名、修改字段类型(https://blog.csdn.net/u010002184/article/details/79354136)
alter table table1 change column1 column1 varchar(100) DEFAULT 1.2 COMMENT '注释';
71、mysql添加字段(https://blog.51cto.com/victor2016/1868716)
alter table t1 add d1 char(10) before d2;
alter table t2 add d3 char(10) after d4
72、# MySQL 添加字段 修改字段 删除字段
alter table users drop name;
73、mysql 如何获取当前时间 前、后一小时的时间?(https://blog.csdn.net/z13197919100/article/details/79236048)
前一个小时:
select date_sub(now(), interval 1 hour);
74、mysql 1分钟前_mysql 数据库取前后几秒 几分钟 几小时 几天的语句(https://blog.csdn.net/weixin_35870469/article/details/113150947)
select SUBDATE(now(),interval 60 second);
75、mysql Date类型与String类型转换(https://www.cnblogs.com/zkwarrior/p/14872332.html)
DATE_FORMAT(now(),"%Y-%m-%d %T") 2015-09-01 17:10:52
76、python连接MySQL并查询(https://blog.csdn.net/yushupan/article/details/85061143)
results = cursor.fetchall()
for result in results:
print (result)
77、varchar与char有什么区别?(https://blog.csdn.net/qq_20264581/article/details/83755789)
区别一,定长和变长
char 表示定长,长度固定,varchar表示变长,即长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。
78、