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

 

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_34759481/article/details/81201216