使用SQLiteSpy用sql语句操作数据库

申明:

1.创建一个数据库文件,File->New DataBase -> test.db

2.在数据库文件中创建一张数据表(一个数据库文件可以创建多张表),参考

在输入框中输入:CREATE TABLE test (Name varchar(128),Value int(10), age int(10));然后按下F9(执行)

注意:

http://www.w3school.com.cn/sql/sql_create_table.asp

2.1sql语句不区分大小写,也可以写成:create table test (Name varchar(128),Value int(10), age int(10));

2.2最后的分号可以不需要,但是最好加上。如果用sqlite3中的exec函数操作的话没有分号会报错。

2.3其中的Name为第一列的列名,后面的varchar为数据类型,表示边长的字符串,128表示长度

2.4Value为第二列的列名,int表示整数,10表示长度。age同理

3.插入数据 insert

INSERT INTO test VALUES (“测试”,2,3);        //()中的个数必须和表的列数相同,“”也可以是单引号(不对就自己试)INSERT INTO test (Name,Value,age) VALUES (“测试”, 5,3);    //前面的()表示列名,后面的()表示值,两者也必须相同。同时列名也必须是存在的

4.查找数据 select

select * from test      //*代表所有数据,test是表名。这句话相当于查找test中的所有数据select * from test where value = '2';     //查找value=2的所有内容,' '可以省略select columna,columnb from test;         //查诈列a,列表的数据select name from test where value = '2';    //查找value=2的所有name值

5.删除数据delete

delete from test where value = 4;       //将value值为4的记录删除delete from table_name;            //删除所有记录delete * from table_name;            //删除所有记录

6.修改数据 update

update test set name = "测试" where value = 4;          //将value = 4的记录中的name修改为“测试”update test set name = "账单",age = 100 where value = 4;    //可以同时修改多个记录

7.对搜索结果进行排序 order by

select lastname,firstname from persons order by firstname   //根据firstname进行排序
select lastname,firstname from persons order by firstname,lastname   //先根据firstname进行排序,再根据lastname进行排序
select lastname,firstname from persons order by firstname desc  //根据firstname进行倒序排序
select lastname,firstname from persons order by firstname desc,lastname asc  //根据firstname进行倒序排序,再根据lastname进行顺序排序

8.规定要返回记录的数目,并非所有的数据库都支持TOP limit

//注意,sqliteSPY不支持top,可以使用limit
select * from persons limit 3  //查找persons中的前三条记录

9.搜索列中的指定模式 like

select * from persons  where city like '%o%'   //搜索city中带有'o'字母的记录,%为通配符
select * from persons  where city not like '%o%'   //not用于反向选取(不包含)

10.通配符

%:代替一个或多个字符
_:代替一个字符
[charlist]:字符列表中任何一个字符
[^charlist]:不在字符列表中的任何一个字符,或者[!charlist]select * from persons  where city not like 'o%' //搜索以city为o开头的记录
select * from persons  where city not like '[ojbk]%'    搜索city以'ojbk'开头的记录

11.in 允许我们在where中规定多个值

select * from persons  where city in ('0','saffw') //选择city为0和saffw的记录
//和and和or差不多

12.between 选取介于两个值之间的数据范围

select * from persons  where city between 'new york' and 'saffw' //返回new york和saffw之间的数据,包含new york,不包含saffw
select * from persons not where city between 'new york' and 'saffw'    //不包含这个范围
//注意,不同的数据库的between有不同的作用,有的包含包含后面的搜索项,有的不包含后面的搜索项

13.为列名称指定别名 as

//不使用表别名称
select persons.city,persons.firstname,table_1.id from persons,table_1 where persons.lastname = 'laji' and table_1.name = '999'
//使用表别名
select t1.city,t1.firstname,t2.id from persons as t1,table_1 as t2 where t1.lastname = 'laji' and t2.name = '999'

14.根据两个或多个表中列之间的关系,从这些表中查询数据  inner join,left join, right join,full join

//sqliteSPY不支持right join和full join
//两个表中都含有link字段
//不使用join
select table_1.id,persons.firstname,persons.lastname from table_1,persons where table_1.link = persons.link
//使用inner join 会列出两个表中都存在的
select table_1.id,persons.firstname,persons.lastname from table_1 inner join persons on table_1.link = persons.link order by id 
//使用left join 不仅会列出两个表中都存在的,还会列出左边的所有值
select table_1.id,persons.firstname,persons.lastname from table_1 left join persons on table_1.link = persons.link order by id 
//使用right join 不仅会列出两个表中都存在的,还会列出右边的所有值
//使用full join会列出右边的所有值

15.合并过个select语句的结果集 union

select firstname from persons union select firstname from table_1; //会忽略重复值
select firstname from persons union all select firstname from table_1; //不会忽略重复值

16.拷贝结果集到另一张数据表 select into

//sqlitespy不支持select into 语句
create table table_3 as select * from table_1

17.创建表时加入约束

//约束
//not null 强制不接受null值
//unique 约束唯一标识数据库的每条记录 每个表可以有多个unique约束,但是每个表只能有一个primary key约束
//primary key 主键必须包含唯一的值,主键不能包含NULL值,每个表都应该有一个主键,并且只能有一个主键
//forgien key 一个表中的forgien key指向另一个表中的primary key
//check 用于限制列中的值的范围
//default 用于向列中插入默认值

18.not null 约束

//如果不向字段添加值,就无法插入新记录或者更新记录
create table table_4(
id int not null, 
name varchar(255) not null, 
value varchar(255)
);

19.unique约束

//mysql 一个unique约束
create table table_4(
id int not null , 
name varchar(255) not null, 
value varchar(255),
unique(id)
);//sql server/oracle/ms access 一个约束
create table table_4(
id int not null unique, 
name varchar(255) not null, 
value varchar(255)
);//多个约束 相当于unique中的两个值合起来在表中只能出现一次
create table table_4(
id int not null, 
name varchar(255) not null, 
value varchar(255),
constraint lll unique (id,name)
);//SQLite支持ALTER TABLE的有限子集。在SQLite中,ALTER TABLE命令允许用户重命名表,
或向现有表添加一个新的列。重命名列,删除一列,或从一个表中添加或删除约束都是不可能的

20.primary key

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)

21.foreign key

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)

22.check 约束

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)

23.default

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)

24.创建索引 create index

create index search on persons (link)
// search 为索引名字
// persons 为表名
// link 为列名

25.删除索引,表,数据库

//删除索引sqlite的做法,不同的数据库有不同的方法
drop index search//删除表
drop table persons//删除数据库
drop table my.db

26.添加,修改,删除列 alter table

//添加一个列
alter table table_5 add laji1 int default 0
//sqlite无法删除列
//sqlite无法修改列

27.INCREMENT 自动加1

//主键自动加1
create table table_6 (id integer primary key AUTOINCREMENT,name varchar(128));

28.视图 view

29.日期

30.NULL

//无法比较NULL,可以用is null
select * from table_6 where value is null

31.平均值函数 avg()

select avg(value) from as averagevalue table_4    //求平均值,将结果显示为averagevalue
select value as objk from table_4 where value >(select avg(value) from table_4)    
//选取大于平均值的数据

32.匹配的行数 count()

select count(*) as jishu from table_4    //统计总共的行数
select count(distinct value) as jishu from table_4    //统计列中不同数的个数

33.返回第一个记录的值 first()

//无此函数

34.返回最后一个记录的值 last()

//无此函数

35.返回最大值 max

select max(value) from table_4

35.返回最小值 min

select min(value) from table_4

36.计算总和 sum

select sum(value) from table_4

37.对结果集进行分组 group by

SELECT name,sum(value) from table_5 group by name    //根据name对sum之后的值进行分组

38.增加条件 having

select name,sum(value) from table_3 where name = 'zhang' or name = 'wang' group by name
having sum(value) > 150 //选取结果集中大于150的数据

39.将数值字段舍入为指定的小数

SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products

40.创建一个临时表

该表建立后是存储在内存中,不会存在磁盘文件中。当关闭当前文件后,该表会消失。

1.临时表的作用可以用于原来的表的删除操作。因为sq3不支持删除一列,所有可以用临时表作为中间变量,将原表需要的列复制到临死表,删除原表,再重新建立原表,将临时表的内容复制到原表中。(突然想到一个问题,但是未验证。将原表的复制到临时表,删除原表后,突然断电,此时临时表会自动消失,而原表也没有了,那数据就都没有了。那就得先做好一个数据备份了,在进行删除原表的操作了)

2.就是用在某些时候,我们在修改数据后需要点击保存或者取消来确定是否真的要保存这些数据,这时候用临时表会是一个比较好的选择。

create temp table test(name int, id int);
//或者
create temporary table test (name int ,id int);

3.临时表和普通表可以重名。如果重名,在执行删除操作时会先删除临时表,再次执行删除操作,才会删除普通表。添加数据时,两张表都会同时添加。除了删除操作,其他所有操作都将重名的两张表联系起来了。不过在sqlitespy中和实际通过代码编程时会有所不一样。请大家注意。

41.将一张表的数据复制到另外一张表中

 insert into MUsersTemp select null,Accid,Pwd,Ext from Users

MUserTemp为新表,已经创建的表。User为旧表,存在数据。null可以为自增的列。新表中有几列,则也应该插入几列。插入的列的数据类型应该和新表中的列对应相等

 

如需了解更多更细节的方面,可以参考网址

http://www.w3school.com.cn/sql/sql_create_table.asp

sqlitespy有好多语法、函数和sql server不一样。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平