您的位置:首页 > 数据库

SQLite学习(二)

2017-07-09 21:08 127 查看

UNION子句

SQLite的UNION子句、运算符用于合并两个或多个SELECT语句的结果,不返回任何重复的行,因此每个SELECT被选择的列数必须相同,相同数目的列表达式,相同的数据类型,并确保它们有相同的顺序,但它们不必具有相同长度。

UNION 的基本语法:

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]


实例:

表一

sqlite> select * from company;
ID          NAME        AGE         ADDRESS     SALARY      SEX
----------  ----------  ----------  ----------  ----------  ----------
1           Paul        32          Califronia  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0


表二:

sqlite> select * from department;
ID          DEPT        EMP_ID
----------  ----------  ----------
1           IT Billing  1
2           Engineerin  2
3           Finance     7


用UNION子句连接两个表:

sqlite> SELECT EMP_ID,NAME,DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID UNION SELECT EMP_ID,NAME,DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;
EMP_ID      NAME        DEPT
----------  ----------  ----------
David
Kim
Mark
Teddy
1           Paul        IT Billing
2           Allen       Engineerin
7           James       Finance


可见产生的结果,NAME取自表一,EMP_ID和DEPT取自表二,表二的EMP_ID是1,2,7,则表一的NAME也选1,2,7,以及对应的DEPT。因为我的两个表的列数不一样,所以呢结果不是很好看。

UNION ALL子句

与UNION一样,只是显示重复行。

语法:

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]

UNION ALL

SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]


实例:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID
UNION ALL
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;


这里将表二内容改一下,为了方便,改成与表一相同的列数:

ID          DEPT                  EMP_ID
----------  --------------------  ----------
1           IT Billing            1
2           Engineering           2
3           Finance               7
4           Engineering           3
5           Finance               4
6           Engineering           5
7           Finance               6


结果:

EMP_ID      NAME                  DEPT
----------  --------------------  ----------
1           Paul                  IT Billing
2           Allen                 Engineerin
3           Teddy                 Engineerin
4           Mark                  Finance
5           David                 Engineerin
6           Kim                   Finance
7           James                 Finance
1           Paul                  IT Billing
2           Allen                 Engineerin
3           Teddy                 Engineerin
4           Mark                  Finance
5           David                 Engineerin
6           Kim                   Finance
7           James                 Finance


SQLite别名

定义别名即是将表或列重命名为一个临时的名字,在数据库中实际名称不会改变

表别名:

语法

SELECT column1, column2....
FROM table_name AS alias_name
WHERE [condition];


实例(以开始的两个表为例):

select c.id,c.name,c.age,d.dept from company as C,department as D where C.ID = D.EMP_ID;
ID          NAME        AGE         DEPT
----------  ----------  ----------  ----------
1           Paul        32          IT Billing
2           Allen       25          Engineerin
7           James       24          Finance


列别名

语法:

SELECT column_name AS alias_name
FROM table_name
WHERE [condition];


实例:

sqlite> SELECT C.ID AS COMPANY_ID, C.NAME AS COMPANY_NAME, C.AGE, D.DEPT FROM COMPANY AS C,DEPARTMENT AS D WHERE  C.ID = D.EMP_ID;
COMPANY_ID  COMPANY_NAME  AGE         DEPT
----------  ------------  ----------  ----------
1           Paul          32          IT Billing
2           Allen         25          Engineerin
7           James         24          Finance


SQLite Alter命令

ALTER TABLE命令可以重命名表以及在已有表中添加列,但是不支持其他操作

重命名表

语法

ALTER TABLE database_name.table_name RENAME TO new_table_name;


实例:

sqlite> ALTER TABLE COMPANY RENAME TO OLD_COMPANY;


查看表:

sqlite> .table
DEPARTMENT   OLD_COMPANY


添加列

语法:

ALTER TABLE database_name.table_name ADD COLUMN column_def...;


实例:

原来的表:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0


添加列:

sqlite> ALTER TABLE OLD_COMPANY ADD COLUMN SEX char(1);
ID          NAME        AGE         ADDRESS     SALARY      SEX
----------  ----------  ----------  ----------  ----------  ---
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0


看结果可知添加了SEX列,但是新添加的列用NULL来填充。

DELETE和DROP TABLE

DELETE删除表中全部数据,DROP TABLE命令删除整个表,然后再重建一遍

语法:

sqlite> DELETE FROM table_name;


sqlite> DROP TABLE table_name;
sqlite> VACUUM;


VACUUM命令清除未使用的空间,一般在DROP TABLE后使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息