任务3 测试TBase的SQL语句
任务目的
此任务会在TBase上运行基本的CRUD (Create添加数据、Retrieve读取查询、Update更新数据、Delete删除数据)SQL语句,学员由此掌握TBase分布式数据库的基本SQL语法与使用方式。
任务步骤
1.Create添加数据语句的使用
创建一个数据库poc_test,字符集和字符序均保持默认,不进行指定。
CREATE DATABASE poc_test;
创建一个数据库poc_test_utf8,指定字符集为utf8。
CREATE DATABASE poc_test_utf8 ENCODING 'utf8';
创建一个数据库poc_testc_collate_zh_cn,指定字符序为zh_CN.UTF8
CREATE DATABASE poc_testc_collate_zh_cn lc_collate 'zh_CN.UTF8' TEMPLATE template0;
显示已经创建的库的具体信息与配置。
\l
进入前面创建的poc_test数据库,创建含有复合主键的表type014。
\c poc_test
CREATE TABLE type014(col1 INT NOT NULL,col2 INT NOT NULL,PRIMARY KEY(col1,col2));
在poc_test数据库中,创建含有唯一索引的表type015。
CREATE TABLE type015(col1 INT,col2 INT,UNIQUE(col1));
在poc_test数据库中,创建表type001,并为该表新增一列。
CREATE TABLE IF NOT EXISTS type001(col1 INTEGER,col2 INTEGER);
ALTER TABLE type001 ADD COLUMN id INT NULL;
为type001的id列新增索引。
CREATE INDEX type001_id_idx ON type001(id);
向type001表中插入一行数据。
INSERT INTO type001 VALUES(101,102,103);
2.Retrieve读取查询语句的使用
在poc_test数据库中,查询表type001中的数据。
SELECT * FROM type001;
在poc_test数据库中,查询表type001中id小于200的id列数据。
SELECT id FROM type001 WHERE id<200;
创建t1、t2表并各插入三条数据进行多表查询测试。
CREATE TABLE IF NOT EXISTS t1(id INT,name VARCHAR(10),entry_time TIMESTAMP,score NUMERIC(5,2) NULL,height SMALLINT,PRIMARY KEY(id));
CREATE TABLE IF NOT EXISTS t2(id INT,name VARCHAR(10),entry_time TIMESTAMP,score NUMERIC(5,2) NULL,height SMALLINT,PRIMARY KEY(id));
INSERT INTO t1(id,name,entry_time,score,height) VALUES(458972,'zyx','2014-08-26 08:30',534.05,180);
INSERT INTO t1(id,name,entry_time,score,height) VALUES(547894,'wsc','2013-05-26 14:30',625.55,175);
INSERT INTO t1(id,name,entry_time,score,height) VALUES(953124,'wq','2010-08-15 06:45',420.56,165);
INSERT INTO t2(id,name,entry_time,score,height) VALUES(458972,'zyx','2014-08-26 08:30',534.05,180);
INSERT INTO t2(id,name,entry_time,score,height) VALUES(547894,'wsc','2013-05-26 14:30',625.55,175);
INSERT INTO t2(id,name,entry_time,score,height) VALUES(462519,'cdg','2006-12-25 20:45',710.20,160);
使用JOIN、LEFT JOIN、RIGHT JOIN进行多表查询。
SELECT t1.id,t1.name,t1.score FROM t1 LEFT JOIN t2 ON t1.id=t2.id ORDER BY t1.id;
SELECT t1.id,t1.name,t1.score FROM t1 RIGHT JOIN t2 ON t1.id=t2.id ORDER BY t2.id;
SELECT t1.id,t2.name FROM t1 JOIN t2 ON t1.id=t2.id ORDER BY t2.id;
GROUP BY查询语句。
SELECT MAX(tb.aa),LENGTH(tb.name)-1 FROM
(
SELECT name,AVG(score) AS aa
FROM t1 WHERE height<175 GROUP BY name
)
tb GROUP BY LENGTH(tb.name)-1;
ORDER BY查询语句。
SELECT tb.id,tb.name,tb.height,ROUND(tb.height*0.8+10)-1 FROM
(
SELECT id,name,height,score FROM t1 WHERE height<175 ORDER BY height
)
tb ORDER BY ROUND(height*0.8+10)-1,2;
HAVING查询语句。
SELECT SUM(t2.id),name FROM t2 WHERE height<175 GROUP BY name HAVING SUM(t2.id) > 294106;
3.Update更新数据语句的使用
修改type001表中id为103的行,将id改为109。
SELECT * FROM type001;
UPDATE type001 SET id=109 WHERE id=103;
SELECT * FROM type001;
修改type001表中id字段默认值为0
ALTER TABLE type001 ALTER COLUMN id SET DEFAULT 0;
修改type001表中col2字段类型为float8。
ALTER TABLE type001 ALTER COLUMN col2 TYPE float8;
4.Delete删除数据语句的使用
删除type001的索引type001_id_idx。
DROP INDEX IF EXISTS type001_id_idx;
删除type001表中的id列。
ALTER TABLE type001 DROP COLUMN id;
删除type001表。
DROP TABLE IF EXISTS type001;
学员评价