sqlite> EXPLAIN SELECT * FROM COMPANY WHERE Salary >= 20000;,,EXPLAIN 是什么作用??

作者&投稿:闻爸 (若有异议请与网页底部的电邮联系)
sqlite,select * from ......这两句什么区别?难道第二句就是传说中的索引会加快查询效率??~

第二个使用的是 salary_index 这个索引,必须要存在这个索引,否则会报错。

一般我们是不指定的,按照设置的,主键和外键约束来优先查询。

SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令。本文档提供一个样使用sqlite3的简要说明。

开始

启动sqlite3程序,仅仅需要敲入带有SQLite数据库名字的"sqlite3"命令即可。如果文件不存在,则创建一个新的(数据库)文件。然后 sqlite3程序将提示你输入SQL。敲入SQL语句(以分号“;”结束),敲回车键之后,SQL语句就会执行。

例如,创建一个包含一个表"tb11"名字为"ex1"的SQLite数据库,你可以这样做:

$sqlite3 ex1
SQLite version 3.3.17
Enter ".help" for instructions
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!', 10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>

你可以通过敲你所用系统的文件结束符(通常是Ctrl + D)或者中断字符(通常是Ctrl + C)。来终止sqlite3程序。确定你在每个SQL语句结束敲入分号!sqlite3程序通过查找分号来决定一个SQL语句的结束。如果你省略分号,sqlite3将给你一个连续的命令提示符并等你给当前的SQL命令添加更多的文字。这个特点让你输入多行的多个SQL语句,例如:

sqlite> create table tbl2(
...> f1 varchar(30) primary key,
...> f2 text,
...> f3 real
...> );
sqlite>

题外话:查询SQLITE_MASTER表

SQLite数据库的框架被保存在一个名叫"sqlite_master"的特殊的表中。你可以像查询其它表一样通过执行“SELECT”查询这个特殊的表。例如:

$ sqlite3 ex1
SQlite vresion 3.3.10
Enter ".help" for instructions
sqlite> select * from sqlite_master;
type = table
name = tbl1
tbl_name = tbl1
rootpage = 3
sql = create table tbl1(one varchar(10), two smallint)
sqlite>

但你不能在sqlite_master表中执行诸如DROP TABLE, UPDATE, INSERT 或者DELETE命令。sqlite_master表在你创建、删除和索引数据库时自动更新这个表。你不能手工更改sqlite_master表。

TEMPORARY表的结构没有存储在"sqlite_master"表中,由于TEMPORARY表对应用是不可见的,而不是应用程序创建这个表。 TEMPORARY表结构被存储在另外一个名叫"sqlite_temp_master"的特定的表中。"sqlite_temp_master"表是临时表自身。

sqlite3的特殊命令

大多数候,sqlite3读入输入行,并把它们传递到SQLite库中去运行。但是如果输入行以一个点(“.”)开始,那么这行将被sqlite3程序自己截取并解释。这些“点命令”通常被用来改变查询输出的格式,或者执行鞭个预封包(预定义prepackaged)的查询语句。

你可以在任何时候输入“.help”,列出可用的点命令。例如

sqlite> .help
.bail ON|OFF Stop after hitting an error. Default OFF
.databases List names and files of attached databases
.dump ?TABLE? ... Dump the database in an SQL text format
.echo ON|OFF Turn command echo on or off
.exit Exit this program
.explain ON|OFF Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF Turn display of headers on or off
.help Show this message
.import FILE TABLE Import data from FILE into TABLE
.indices TABLE Show names of all indices on TABLE
.load FILE ?ENTRY? Load an extension library
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.prompt MAIN CONTINUE Replace the standard prompts
.quit Exit this program
.read FILENAME Execute SQL in FILENAME
.schema ?TABLE? Show the CREATE statements
.separator STRING Change separator used by output mode and .import
.show Show the current values for various settings
.tables ?PATTERN? List names of tables matching a LIKE pattern
.timeout MS Try opening locked tables for MS milliseconds
.width NUM NUM ... Set column widths for "column" mode
sqlite>

改变输出格式

sqlite3程序可以以八种不同的格式显示一个查询的结果:"csv", "列", "html", "插入", "行", "制表"和"tcl"。你可以用".mode"点命令在这些输出格式之间切换。

默认的输出格式是“列表”。在列表模式下,每条查询结果记录被写在一行中并且每列之间以一个字符串分割符隔开。默认的分隔符是一个管道符号(“|”)。列表符号在当你输出查询结果到另外一个符加处理的程序(如AWK)中去是尤为有用。

sqlite> .mode list
sqlite> select * from tbl1;
hello|10
goodbye|20
sqlite>

你可以用“.separator”点命令来改变分界符。例如,为了把分割符改为一个逗号和一个空格,你可以这样做:

sqlite> .separator ", "
sqlite> select * from tbl1;
hello, 10
goodbye, 20
sqlite>

在“line"模式下,每一个位于条记录中的列在它自己那行显示。每行由列名、一个等号和列数据组成。下一条记录以一个空行隔开。这是一个行模式输出的例子:

sqlite> .mode line
sqlite> select * from tbl1;
one = hello
two = 10

one = goodbye
two = 20
sqlite>

在列模式下,每条记录在一个单独的行中以数据列对齐的方式显示。列如:

sqlite> .mode column
sqlite> select * from tbl1;
one two
---------- ----------
hello 10
goodbye 20
sqlite>

在默认的情况下,每列至少10个字符宽。太宽的数据将被截取。你可以用“.width”命令来调整列宽。如下所示:

sqlite> .width 12 6
sqlite> select * from tbl1;
one two
------------ ------
hello 10
goodbye 20
sqlite>

上面例子中".width"命令设置第一列宽为12第二列宽为6。其它的列宽不变。你可以指定与你查询结果需要的列数一样多的“.width”参数。

如果你指定一列宽为0,那么这个列宽将自动以下面三个数字中的最大值做为列宽:10、表头宽度和最宽的数据列的宽度。这可以让列自动调整宽度。每列的默认设置为自动调整的0值。

出现在输出开头两行的列标示可以用".header"点命令关闭。在上面的例子中,列标示是打开的。可以用下面的方法关闭列标示:

sqlite> .header off
sqlite> select * from tbl1;
hello 10
goodbye 20
sqlite>

另外一个有用的输出模式是"insert"。在插入模式下,被子格式化为看起来像SQL INSERT语句的样式。你可以用插入模式来产生文件(便于)以后用于不同数据库的输入。

当指定插入模式时,你必须给定一个特定参数就是要插入的表名。例如:

sqlite> .mode insert new_table
sqlite> select * from tbl1;
INSERT INTO 'new_table' VALUES('hello',10);
INSERT INTO 'new_table' VALUES('goodbye',20);
sqlite>

最新的输出格式是“html”。在这种模式下,sqlite3把查询的结果写做XHTML表。开始的和结束的(标记)没有写出,但有、和等分界符。html输出对 CGI来说是相当有用地。

把结果写到文件中

默认情况下,sqlte3把结送到标准输出。你可以用“.output”命令改变它。只须把输出文件名做为.output命令的输出参数然后所有后续查询结果将被写到那个文件中。用“.output stdout”再一次改为标准输出。例如:

sqlite> .mode list
sqlite> .separator |
sqlite> .output test_file_1.txt
sqlite> select * from tbl1;
sqlite> .exit
$ cat test_file_1.txt
hello|10
goodbye|20
$

查询数据库结构

sqlite3程序提供几个有用的用于查询数据库结构的快捷命令。这些不是不可以用别的方式来实现。这些命令仅仅是一个快捷方式而已。

例如,为了查看数据库的表列表,你可以敲入“.tables”。

sqlite> .tables
tbl1
tbl2
sqlite>

“.tables”命令相似于设置列表模式然后执行接下来的查询:

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1事实上,你可以查看sqlite3的源代码(可以在源文件树的src/shell.c中),你可找到上面的具体的查询。“.indices”命令作用类似的方式是列出特定表的所有的索引。“.indics”命令须一个参数即所要索引表的表名。最后,但不是至少,是“.schema”命令。不带任何参数,“.schema”命令显示原始的用于创建当前数据库的CREATE TABLE和CREATE INDEX语句。如果你给".schema"命令一个表名,它显示原始的创建该表和它所有索引的CREATE语句。我们可以:sqlite> .schemacreate table tbl1(one varchar(10), two smallint)CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real)sqlite> .schema tbl2CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real)sqlite> ".schema"命令可以用设置列表然后执行以下查询来实现:

SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type!='meta'
ORDER BY tbl_name, type DESC, name

.databases 列出数据库文件名
.tables ?PATTERN? 列出?PATTERN?匹配的表名
.import FILE TABLE 将文件中的数据导入的文件中
.dump ?TABLE? 生成形成数据库表的SQL脚本
.output FILENAME 将输出导入到指定的文件中
.output stdout 将输出打印到屏幕
.mode MODE ?TABLE? 设置数据输出模式(csv,html,tcl…
.nullvalue STRING 用指定的串代替输出的NULL串
.read FILENAME 执行指定文件中的SQL语句
.schema ?TABLE? 打印创建数据库表的SQL语句
.separator STRING 用指定的字符串代替字段分隔符
.show 打印所有SQLite环境变量的设置
.quit 退出命令行接口

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。


下载党必备黑科技神器,解决磁力种子下载没速度的难题!
提升下载速度的解决方案1. 添加 TrackersTrackers就像是BT下载中的导航系统,它记录了用户上传的下载信息,帮助你连接到更多的共享文件上传者,从而提高下载速度。要提升速度,你可以从推荐的Trackers列表获取地址(具体地址略),复制粘贴到下载工具中。例如,qBittorrent和tTorrent Lite都有相应的添加步骤:在...

北汽新能源lite价格
北汽新能源lite车型官方指导价:11.08-16.28万:1、LITE-R300是一款设计新颖的汽车,整车看上去十分Q萌可爱,想必很多人第一眼看到这款车时,就会被其可爱的外形所吸引;2、这款车的长宽高尺寸分别为2986\\/1676\\/1517mm,轴距为1870mm,从尺寸来看,就知道这款车还是挺迷你的了;3...

荣耀v20参数配置详细
荣耀v20参数配置详细如下:外观设计 荣耀V20的logo变更,升级后的logo字母全大写,配色更多彩。采用玻璃背板,在纹理方面做出了一些革新:V型纹理流光效果。6.4英寸的开孔屏,开孔大小只有4.5mm,分辨率为全高清级别。产品配置 荣耀V20采用麒麟980芯片,辅以6GB\/8GB运行内存和128GB\/256GB机身存储;电池...

有什么音质不错的耳机推荐的吗?
耳机的出现,能够让很多人感受到随声随听的音乐体验,现在在任何公共的场所都能看到耳机的影子,可见大家对于耳机的需求量有多大,不仅如此,耳机款式也在不断的更新换代,以下是我整理还音质表现不错的蓝牙耳机。一、南卡Lite pro2蓝牙耳机 NANK南卡潜心研发许久的南卡Lite pro2,一经发售就被备受关注,...

三菱Q系列PLC程序解密方法
通过上面使用的任何数据USB数据渠道。三菱公司的PLC系列ACPU的旧与COM- LITE32开裂为十六进制数字的密码与QCPU系列PLC的AA,0到9可以被指定为小型或大型的字母表。但只允许十六进制密码与USB嗅探如曾经参与过验证范例程式。比其他字母的字符和数字的密码,这个程序不能被打破给予QCPU.

鲍建勇资深激光美容医师
鲍医师一直在私立美容医院的激光美容科工作,他的职业生涯中积累了丰富的临床经验。他精通多种国际先进的激光技术,包括王者风范、欧洲之星(Q激光和像素激光)、莱西尔脱毛机、二氧化碳激光机、N-LITE585染料激光、射频治疗仪以及飞顿蓝光激光机。这些技术使他能够对各类皮肤问题进行精准治疗,如浅表和深层次...

电脑一开机就进入Q-FLASH
是因为主板BIOS设置有误,需要进行重新设置即可,解决步骤如下:1、首先第一步就是要进行开机按【end】键直接进入Q-FLASH刷新界面即可。2、接着就是要进行选择Update BIOS From Drive,然后就是要进行按回车键确定,如下图所示。3、然后就是要进行切换到boot选项,接着选择“hard drive order”,...

ie7以上的浏览器有哪些
一:Trident内核 常见 Trident 内核浏览器,IE最先开发或使用的,也称IE内核;Internet Explorer 8 浏览器 Internet Explorer 9 浏览器 Internet Explorer 10 浏览器 傲游浏览器 2 世界之窗浏览器 360安全浏览器 腾讯TT浏览器 闪游浏览器 Avant Browser Lite 糖果浏览器 GreenBrowser...

PnP问题解决
一、修改启动包首先,删除Litenet生成启动过程中不必要的文件,如KEYBCOM、KEYBOARD.SYS等,这些只在Litenet环境下使用。其次,移除一些Litenet的可执行文件,如QAUTOLOG.EXE等。然后,增加SETMDIR.EXE文件以支持无盘WIN95的启动,并替换RTL8139.SYS为支持PNP功能的驱动程序。二、修改启动文件修改Autoexec....

switchlite充电器通用吗
用MOMAX单口18WPDUM12充电器给SwitchLite充电,电压12.29V,电流0.79A,功率9.77W,开启PD快充。使用MOMAX单口18WPDUM10CN充电器对电压为12.08V、电流为0.87A、功率为10.00W的SwitchLite进行充电,开启PD快充。使用RAGAU1A1C18WPDMSPD012Q充电器为SwitchLite充电。电压12.36V,电流0.08A,功率1.01W不能正常充电。使用RAGAU...

乌鲁木齐市18716406344: sqlite> EXPLAIN SELECT * FROM COMPANY WHERE Salary >= 20000;,,EXPLAIN 是什么作用?? -
错潘安胃: explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句.

乌鲁木齐市18716406344: C++ sqlite语句查询表格是否存在 -
错潘安胃: sqlite3_exec返回 0 表示 strSql 查询语句执行成功了,至于查询到的结果,应该使用回调函数进行解析,即给 sqlite3_exec 填入一个回调函数:int iCount; int nRes = sqlite3_exec(pepsdbase, strSql.c_str(), CB_sqlite_count, &iCount,NULL); if (...

乌鲁木齐市18716406344: PDA中的SQLite如何与pc机上的Oracle数据同步?如果表结构不同又该如何?
错潘安胃: SQLite不能直接和oracle进行同步操纵,你可以经sqlite的数据库导出成标准的sql文本(就是那个中create table xxx(). insert into xxx values(a,b,c))那种格式 sqlite> .output file.sql sqlite> .dump http://www.sqlite.org/sqlite.html http://www.phei.com.cn/module/goods/wssd_content.jsp?bookid=30648

乌鲁木齐市18716406344: SQLite数据库操作类 -
错潘安胃: SQLite Helper类,基于.net c#的SQLite数据库操作类SQLite这个精巧的小数据库,无需安装软件,只需要一个System.Data.SQLite.DLL文件即可操作SQLite数据库.但是据说功能却非常强大.简介:SQLite是一个开源数据库,现在已变得越来...

乌鲁木齐市18716406344: 在android中从sqlite中获得数据很慢怎么解决 -
错潘安胃: 解决方法 1:不应该是用单独的语句,你不应该用单独的sql语句?只是创建一个ArrayList,在这个activity类中存储所有需要的数值.例如: ArrayList myData; 现在在数据库类的帮助下写一个function,就像下边://得到你想要的数据 public ...

乌鲁木齐市18716406344: 在cocos2dx中怎么使用sqlite来纪录数据 -
错潘安胃: 1)下载sqlite源代码,并解压到工程中[这步不需要了,cocos2dx中已经加入了sqlite,只需引用头文件sqlite3.h就可以了]:减压到工程中(shell.c不需要),在xcode中如下:2) 打开数据库: 先用sqlite工具创建一个数据库,叫test.db;(...

乌鲁木齐市18716406344: 如何利用C#代码获取SQLite数据库的元数据 -
错潘安胃: Sqlite数据库,在很多场合已经用得比较多,由于我的代码生成工具的需要,需要把Sqlite的表、字段、视图等信息获取出来,以便实现各种数据库快速生成项目工程的操作.这里就需要利用C#获取Sqlite数据库的元数据了,和其他数据库一样....

乌鲁木齐市18716406344: 怎么编写一个C程序,创建一个SQLite数据库(名字为SelLesson),其中包含两张表? -
错潘安胃: #include <stdio.h>#include <stdlib.h>#include "sqlite3.h"#define _DEBUG_ int main( void ) { sqlite3 *db=NULL; char *zErrMsg = 0; char *pdbName = "SelLesson.db"; char *sql = 0; int rc;//打开指定的数据库文件,如果不存在将创建一个同名...

乌鲁木齐市18716406344: sqlite数据库 判读是否已经创建了 -
错潘安胃: 01.#include <stdio.h> 02.#include <stdlib.h> 03.#include "sqlite3.h" 04.#define _DEBUG_ 05.int main( void ) 06.{ 07.sqlite3 *db=NULL; 08.char *zErrMsg = 0; 09.int rc; 10.rc = sqlite3_open("zieckey.db", &db); //打开指定的数据库文件,如果...

乌鲁木齐市18716406344: 如何建立SQLite数据库并Insert数据? -
错潘安胃: 这是因为Sqlite中数据库是以文件的形式存在磁盘中,每次访问时都要打开一次文件,如果对数据库进行大量的操作,速度会很慢. 解决办法:用事务的形式提交. 因为开始事务后,进行的大量操作的语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也就只用打开一次. 在进行Insert操作的前后的前后分别添加开启和关闭事务语句: rc = sqlite3_exec(db, "begin;", 0,0, &szErrMsg); for (...){//insert into operate}rc = sqlite3_exec(db, "commit;", 0, 0,&szErrMsg);这样速度提高了近千倍.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网