最近更新时间:2024.03.11 16:10:24
首次发布时间:2024.03.11 16:10:24
本文介绍一些常用的的 SQL 语法,以帮助您更方便的使用 SQL 查询分析。
在本地命令行工具中,执行以下命令,连接数据库服务。
mysql -h{HOST} -P{PORT} -uadmin -p{PASSWORD}
CREATE DATABASE IF NOT EXISTS sqlDemo_DB;
通过创建 ES 外表,将分布式查询和全文检索相结合,实现查询分析实例中的索引数据。
CREATE EXTERNAL TABLE `es_table` ( `k1` bigint(20) COMMENT "", `k2` datetime COMMENT "", `k3` varchar(20) COMMENT "", `k4` varchar(100) COMMENT "", `k5` varchar(20) COMMENT "" ) ENGINE=ELASTICSEARCH PROPERTIES ( "hosts" = "https://es-data-svc-0080c**.o-0080c**:9200", "index" = "sql-demo", "user" = "admin", "password" = "qaPwxxx", "http_ssl_enabled" = "true" );
参数 | 说明 |
---|---|
hosts | 与 ES 实例构建连接的服务地址,需要自主进行构建。服务地址的格式为 |
index | 目标索引的名称。 |
user | 连接 ES 实例的用户。 |
password | 用户的密码。 |
http_ssl_enabled | 是否启用 HTTPS 访问模式,默认为 false。 注意 如果实例切换传输协议,已经在 SQL 分析节点中创建的外表将无法继续使用,您需要重新创建外表才可以继续查询分析索引数据。 |
enable_docvalue_scan | 是否开启通过 ES 列式存储获取查询字段的值,默认为 true。 说明
|
enable_keyword_sniff | 是否对 ES 中 |
nodes_discovery | 是否开启 ES 节点发现,默认为 true。 |
当库表无需存在时,您可以选择删除库表。
DROP DATABASE [IF EXISTS] db_name;
示例:
DROP DATABASE db_test;
SELECT 命令用于从数据库中选取数据。
SELECT [hint_statement, ...] [ALL | DISTINCT] select_expr [, select_expr ...] [FROM table_references] [WHERE where_condition] [GROUP BY [GROUPING SETS | ROLLUP | CUBE] {col_name | expr | position}] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}]
语法说明:
hint_statement
:在 selectlist 前面使用 hint 表示可以通过 hint 去影响优化器的行为以期得到想要的执行计划。ALL | DISTINCT
:对结果集进行筛选,all
为全部,distinct/distinctrow
将筛选出重复列,默认为all
。ALL EXCEPT
:对全部结果集进行筛选,except 指定要从全部结果集中排除的一个或多个列的名称。输出中将忽略所有匹配的列名称。select_expr, ...
:检索并在结果中显示的列,使用别名时,as为自选。table_references
检索的目标表,可以是一个或者多个表(包括子查询产生的临时表)。where_definition
:WHERE 条件子句,用于对行数据进行筛选。where_condition 是一个表达式,对于要选择的每一行,其计算结果为true
。如果没有 WHERE 子句,该语句将选择所有行。在 WHERE 表达式中,您可以使用除聚合函数之外的任何 MySQL 支持的函数和运算符。INTO OUTFILE 'file_name'
:保存结果至新文件(之前不存在)中。Group by
:对结果集进行分组。Having
:Having 从句不是过滤表中的行数据,而是过滤聚合函数产出的结果。通常要和聚合函数( COUNT()
、 SUM()
、AVG()
、MIN()
、MAX())以及Group by
从句一起使用。Order by
:对结果集进行排序。Order by 通过比较一列或者多列的大小来对结果集进行排序,DESC
表示降序,ASC
表示升序。LIMIT
从句。Order by 是比较耗时耗资源的操作,为了限制内存的使用,如果用户没有指定 LIMIT 从句,则默认返回前 65535 个排序结果。Limit n
: 限制输出结果中的行数。limit m,n
表示从第 m 行开始输出 n 条记录。,说明
使用limit m,n
时,需要和order by
结合使用,否则每次执行的数据可能会不一致。
示例:
select Name from student where age in (18,20,25);
select type,avg(price) from tb_book group by type;
select * except(age) from student;
select distinct type from tb_book;
select * from tb_book order by id desc limit 3;
select * from tb_book where name like('_h%');
%
和_
两种通配符。%
可以匹配一个或多个字符,_
可以匹配一个字符。select sum(price) as total,type from tb_book group by type;
展示当前可见的 Database。
SHOW DATABASES [FROM catalog] [filter expr];
SHOW DATABASES
会展示当前所有的数据库名称。SHOW DATABASES FROM catalog
会展示catalog
中所有的数据库名称。SHOW DATABASES filter_expr
会展示经过过滤后的数据库名称。SHOW DATABASES FROM catalog filter_expr
这种语法不支持。示例:
SHOW DATABASES;
emr_catalog
中所有的数据库名称:SHOW DATABASES from emr_catalog;
like 'doc%'
过滤后的数据库名称:SHOW DATABASES like 'doc%';
USE 命令用来选择使用的数据库。
USE [CATALOG_NAME].DATABASE_NAME
说明
使用USE CATALOG_NAME.DATABASE_NAME
, 会先将当前的 Catalog 切换为CATALOG_NAME
, 然后再将当前的 Database 切换为DATABASE_NAME
。
示例:
use demo;
use emr_catalog.demo;
SET 命令主要用来修改系统变量,支持为全局或会话级别设置系统变量。您可以通过 SHOW VARIABLES
命令查看系统变量。
SET variable_assignment [, variable_assignment] ...
说明
示例:
设置时区:SET time_zone = "Asia/Shanghai";