前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这些SQL语法,你知道吗?(1)

这些SQL语法,你知道吗?(1)

作者头像
万能数据的小草
发布2024-07-23 15:26:03
800
发布2024-07-23 15:26:03
举报
文章被收录于专栏:万能的小草

SQL(Structured Query Language)是一种用于与关系型数据库进行通信的标准化语言。下面是SQL的基础语法:

表操作

创建表

代码语言:javascript
复制
-- 新建表
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [DEFAULT value] [COMMENT col_comment], ...)]  —列信息
[COMMENT table_comment] —表注释
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] —分区信息
[AS select_statement] 

-- 新建一张相同结构的表
 CREATE TABLE [IF NOT EXISTS] table_name
 LIKE existing_table_name
  • 表名、列名大小敏感,只能包含英文小写字母(a-z)、英文大写字母(A-Z)、数字和下划线(_)且以字母开头。
  • 列类型建议都使用BIGINT、DOUBLE、STRING三个类型
  • 具体示例如下:
代码语言:javascript
复制
-- 创建一张分区表sale_detail。
create table if not exists sale_detail
(
shop_name     string,
customer_id   string,
total_price   double
)
partitioned by (sale_date string,region string);

-- 创建一张保存查询结果数据的表
CREATE TABLE sale_detail_ctas2
AS
SELECT shop_name, customer_id, total_price, '2013' AS sale_date, 'China' AS region
FROM sale_detail;

-- 创建一张相同结构的表
create table sale_detail_like like sale_detail;

查看表信息

代码语言:javascript
复制
desc <table_name>;
desc extended <table_name>; --查看表详细扩展信息。

查看建表语句

代码语言:javascript
复制
SHOW CREATE TABLE <table_name>;

删除表

代码语言:javascript
复制
DROP TABLE [IF EXISTS] table_name;

重命名表

代码语言:javascript
复制
ALTER TABLE table_name RENAME TO new_table_name;
  • rename操作仅修改表的名字,不改动表中的数据。

修改表注释

代码语言:javascript
复制
ALTER TABLE table_name SET COMMENT 'new tbl comment';

列操作

添加列

代码语言:javascript
复制
ALTER TABLE table_name ADD COLUMNS (col_name1 type1,col_name2 type2...);

修改列名

代码语言:javascript
复制
ALTER TABLE table_name CHANGE COLUMN old_col_name RENAME TO new_col_name;

修改列的注释

代码语言:javascript
复制
ALTER TABLE table_name CHANGE COLUMN col_name COMMENT comment_string;

修改列的字段类型

  • 不支持修改列的字段类型,如果必须修改,请重建表。

增删改查

删除数据

代码语言:javascript
复制
-- 清空非分区表里的数据
TRUNCATE TABLE table_name;

-- 删除分区表分区数据
ALTER TABLE table_name DROP PARTITION '分区字段=分区名称'

插入更新数据

代码语言:javascript
复制
-- select计算结果插入
INSERT OVERWRITE|INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [(col1,col2 ...)]
select_statement
FROM from_statement; 

-- values插入
INSERT INTO TABLE tablename 
[PARTITION (partcol1=val1, partcol2=val2,...)][(co1name1,colname2,...)] 
[VALUES (col1_value,col2_value,...),(col1_value,col2_value,...),...]
  • insert into:直接向表或表的分区中追加数据。如果您需要插入少量测试数据,可以配合VALUES使用。
代码语言:javascript
复制
-- 分区表
insert into table sale_detail_insert partition (dt='20200610')
   select shop_name, customer_id, total_price, sale_date, region  from sale_detail; 

-- 非分区表
insert into table sale_detail_insert
   select shop_name, customer_id, total_price, sale_date, region  from sale_detail; 

-- values插入
insert into table srcp partition (p='abc') values ('a',1),('b',2),('c',3);
  • insert overwrite:先清空表中的原有数据,再向表或分区中插入数据。目前INSERT OVERWRITE不支持指定插入列的功能,暂时只能用INSERT INTO。
代码语言:javascript
复制
-- 分区表
insert overwrite table sale_detail_insert partition (dt='20200610')
    select customer_id, shop_name, total_price from sale_detail;  

-- 非分区表
insert overwrite table sale_detail_insert
    select customer_id, shop_name, total_price from sale_detail;

查询

代码语言:javascript
复制
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY order_condition]
[DISTRIBUTE BY distribute_condition [SORT BY sort_condition] ]
[LIMIT number]
  • 以上语句的逻辑执行顺序是FROM->WHERE->GROUY BY->HAVING->SELECT->ORDER BY->LIMIT,了解逻辑执行顺序有助于SQL计算逻辑理解开发。
  1. ORDER BY中只能引用SELECT列表中生成的列,而非访问FROM的源表中的列。
  2. HAVING可以访问GROUP BY key和聚合函数。
  3. SELECT时,如果语句中有GROUP BY,便只能访问GROUP BY key和聚合函数,而不是FROM中源表中的列。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 万能数据的小草 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL(Structured Query Language)是一种用于与关系型数据库进行通信的标准化语言。下面是SQL的基础语法:
  • 表操作
    • 创建表
      • 查看表信息
        • 查看建表语句
          • 删除表
            • 重命名表
              • 修改表注释
              • 列操作
                • 添加列
                  • 修改列名
                    • 修改列的注释
                      • 修改列的字段类型
                      • 增删改查
                        • 删除数据
                          • 插入更新数据
                            • 查询
                            相关产品与服务
                            关系型数据库
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档