SQLite学习(二)

来源:互联网 发布:年轻的程序员 编辑:程序博客网 时间:2024/05/29 10:19

UNION子句

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

UNION 的基本语法:

SELECT column1 [, column2 ]FROM table1 [, table2 ][WHERE condition]UNIONSELECT 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 Billing2           Allen       Engineerin7           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 ALLSELECT 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            12           Engineering           23           Finance               74           Engineering           35           Finance               46           Engineering           57           Finance               6

结果:

EMP_ID      NAME                  DEPT----------  --------------------  ----------1           Paul                  IT Billing2           Allen                 Engineerin3           Teddy                 Engineerin4           Mark                  Finance5           David                 Engineerin6           Kim                   Finance7           James                 Finance1           Paul                  IT Billing2           Allen                 Engineerin3           Teddy                 Engineerin4           Mark                  Finance5           David                 Engineerin6           Kim                   Finance7           James                 Finance

SQLite别名

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

表别名:

语法

SELECT column1, column2....FROM table_name AS alias_nameWHERE [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 Billing2           Allen       25          Engineerin7           James       24          Finance   

列别名

语法:

SELECT column_name AS alias_nameFROM table_nameWHERE [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 Billing2           Allen         25          Engineerin7           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> .tableDEPARTMENT   OLD_COMPANY

添加列

语法:

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

实例:

原来的表:

ID          NAME        AGE         ADDRESS     SALARY----------  ----------  ----------  ----------  ----------1           Paul        32          California  20000.02           Allen       25          Texas       15000.03           Teddy       23          Norway      20000.04           Mark        25          Rich-Mond   65000.05           David       27          Texas       85000.06           Kim         22          South-Hall  45000.07           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.02           Allen       25          Texas       15000.03           Teddy       23          Norway      20000.04           Mark        25          Rich-Mond   65000.05           David       27          Texas       85000.06           Kim         22          South-Hall  45000.07           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后使用。

原创粉丝点击