Java教程

经典SQL

本文主要是介绍经典SQL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一个SQLite典型table样例:

卡号 车牌号 入场时间 照片路径

------- ---------- -------------------- ------------------------------

0xb212f 渝HKB9DT 2015/8/22 04:35:23 /path/to/photos/渝HKB9DT.jpg

0x756ed 宁V29DTH 2015/8/22 04:35:24 /path/to/photos/宁V29DTH.jpg

0xa175d 台D09DTH 2015/8/22 04:35:27 /path/to/photos/台D09DTH.jpg

0x4784e 台WAKB9D 2015/8/22 04:35:29

0x032ed 沪E4LSAK 2015/8/22 04:35:31 /path/to/photos/沪E4LSAK.jpg

0x083fd 桂J8CXF5 2015/8/22 04:35:33 /path/to/photos/桂J8CXF5.jpg

0xee16d 鄂J4LSAK 2015/8/22 04:35:35 /path/to/photos/鄂J4LSAK.jpg

0x30fbd 桂CVXF5E 2015/8/22 04:35:37 /path/to/photos/桂CVXF5E.jpg

0xd80bd 吉AKB9DT 2015/8/22 04:35:39

0xbf89d 宁J34LSA 2015/8/22 04:35:42

0x9573d 粤FPNDTH 2015/8/22 04:35:43 /path/to/photos/粤FPNDTH.jpg

0xc81bd 台PVXF5E 2015/8/22 04:35:45

0xd3ccf 吉XXF5EX 2015/8/22 04:35:47 /path/to/photos/吉XXF5EX.jpg

创建上述table的SQL语句:

sqlite> CREATE TABLE carinfo(cardid text primary key,

> licence text not null,

> time_in text not null,

> photo text,

> check(length(licence)==7));

NULL不是真,也不是假,也不是0,也不是空字符串,它表示未知,它就是它自己。

SQLite约束条件:

not null 不可为空

unique 不可重复

primary key 主键,不可为空,不可重复

check 测试特定的字段值是否符合自定义表达式的约束

主键和unique字段的区别:

A) 主键不可为null(如果为null系统为自动递增),unique字段可以是null

B) 一个表有且只有一个主键,但可以有0个或多个unique字段

C) 逻辑设计上,主键用以标识记录,而unique字段就是说明不重复

一言以蔽之:primary key = unique + not null

SQLite的表总有且只有一个主键,这是一个64bits的整型字段.

SQLite系统视图sqlite_master记录了数据库中所有的表、视图、索引和trigger。

SQLite存储类(数据类型):

integer 整数,可以是1、2、3、4、6或8个字节,SQLite会根据数值大小自动调整。

real 实数(浮点数),一律使用8个字节存储

text 文本,最大支持长度为1,000,000,000个字符的单个字符串

blob 二进制对象,最大支持长度为1,000,000,000个字节

null 没有值

说明:

SQLite支持动态数据类型,根据具体的输入决定其类型。

经典SQL

======

1,gec@ubuntu:~ $ sqlite3 parking.db

解析:

启动sqlite3,并指定一个数据库名parking.db。如果该数据库不存在,sqlite3并不会立即创建它,而是要等到其中有了实质性的内容(比如表、视图等)才会真正创建。

2,sqlite> create table carinfo(_id integer primary key not null, licence text);

解析:

在数据库parking.db中(后续的所有命令都是针对此数据库,故不再另做说明)创建表carinfo

此表包括两个域:_id和licence,其中

A) _id是类型是整数,并且是主键,并且不能为空

B) licence类型是文本,没有约束条件

3,sqlite> insert into carinfo(licence) values(‘粤B9MK48’); // 第1辆车信息

sqlite> insert into carinfo(_id, licence) values(100, ‘粤ASLF45’); // 第2辆车信息

解析:

在表carinfo中插入两条记录。

由于_id是主键,因此如果没写的话,系统会自动递增填充

4,sqlite> select * from carinfo;

解析:

将carinfo中的信息全部列出来。

5,sqlite> select last_insert_rowid();

解析:

汇报最后一条记录的主键的值

6,sqlite> .tables

carinfo

解析:

汇报当前所有的表(包括其视图,如果有的话)

7,sqlite> .schema

CREATE TABLE carinfo(_id integer primary key not null, licence text);

解析:

返回所有DLL(表、索引和视图的定义)语句

8,sqlite> select * from sqlite_master;

type name tbl_name sql

---------- ---------- --------------- ------------------------------------------------

table carinfo carinfo CREATE TABLE carinfo(_id integer primary key, licence text)

index carinfo_id carinfo CREATE INDEX carinfo_idx on carinfo (licence)

view schema schema CREATE VIEW schema as select * from sqlite_master

解析:

查看系统详细的schema信息,即所有的表、索引、视图和trigger。

9,sqlite> .dump

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE carinfo(_id integer primary key not null, licence text);

INSERT INTO “carinfo” VALUES(1,‘粤B9MK48’);

INSERT INTO “carinfo” VALUES(5,‘粤F8EI45’);

INSERT INTO “carinfo” VALUES(44,NULL);

INSERT INTO “carinfo” VALUES(100,‘粤ASLF4’);

INSERT INTO “carinfo” VALUES(101,‘未知车牌’);

CREATE INDEX carinfo_idx on carinfo (licence);

CREATE VIEW schema as select * from sqlite_master;

COMMIT;

解析:

不带参数的.dump将导出整个数据库的DDL(数据库定义语句)和DML(数据库操作语句)命令。

注意:

.dump默认从屏幕输出,如果要将DDL和DML保存为一个文件,做法如下:

sqlite> .output parking.sql

sqlite> .dump

sqlite> .output stdout

10,sqlite> .read parking.sql

解析:

读取导出的SQL语句,并立即执行里面的所有内容

11,sqlite> .prompt ‘SQLite > ‘

解析:

修改sqlite命令提示符

12,sqlite> .mode col

解析:

修改输出模式为列模式

13,sqlite> .header on

解析:

修改输出模式为开启首行头部信息

14,sqlite> .width 5 10 20

解析:

修改输出模式中从左到右每一个字段的宽度

15,sqlite> .show

解析:

查看当前的输出模式格式

16,sqlite> drop table example;

sqlite> drop table if exists example;

解析:

第一行表示直接丢弃表example

第二行表示在表example存在的情况下,将其丢弃

17,sqlite> alter table carinfo rename to parkinginfo;

解析:

将表carinfo更名为parkinginfo

18,sqlite> alter table parkinginfo add column time_in text;

解析:

为表parkinginfo增加一个字段:time_in,后面的text是类型,还可以加上可选的约束列表

19,sqite> select * from parkinginfo where licence like ‘粤%’;

解析:

找出表parkinginfo中字段licence以粤字开头的记录

注意:

like不区分大小写字母,如果要区分,请用glob代替like,并用*代替%

%代表任意长度的任意字符,类似于shell中的通配符*;%是贪婪匹配

_代表一个任意字符,类似于shell中的通配符?

20,sqlite> select * from parkinginfo where licence not like ‘粤%’;

解析:

找出表parkinginfo中字段licence不以粤字开头的记录

21,sqlite> select * from parkinginfo order by licence;

解析:

按licence排序输出(默认升序,即asc),降序使用如下命令:

select * from parkinginfo order by licence desc;

22,sqlite> select * from parkinginfo limit 10, 20;

解析:

限制输出结果集中的第10到20行记录

23,sqlite> insert into parkinginfo values(83, ‘粤L99NK5’, ‘2011/11/11 11:11:11’);

sqlite> insert into parkinginfo values(NULL, ‘赣SU097L’, ‘2011/11/11 11:11:12’);

解析:

如果插入的记录包含所有的字段,则可省略字段列表。NULL可以用来出发主键的自动增长,NULL可以写成null。

24,sqlite> insert into 粤 select cardid, licence from carinfo where licence like ‘粤%’;

解析:

将表carinfo中凡是车牌(license)以粤开头的记录插入表粤中。

注意:

由于insert子句没有指定字段列表,因此select子句中的cardid、licence必须是表粤的所有字段。

25,sqlite> update 台 set cardid=‘0x88880000’ where cardid=‘0x4784e059’;

解析:

修改一个表台中的字段cardid。

26,sqlite> select distinct * from 台 order by cardid;

解析:

选择不重复的记录

这篇关于经典SQL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!