SQLite学习(二)

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后使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值