找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2082|回复: 0

[百宝云教程] 百宝云之Sqlite数据库的SQL语句总结

[复制链接]
  • TA的每日心情
    开心
    2024-11-7 11:01
  • 签到天数: 850 天

    [LV.10]以坛为家III

    819

    主题

    1137

    回帖

    1万

    积分

    管理员

    积分
    18567

    射手座猴年

    admin实名认证 发表于 2016-3-20 19:05:19 | 显示全部楼层 |阅读模式
    Sqlite3常用SQL语句总结

    教学视频学习地址:
    视频下载地址:
    数据库专题http://pan.baidu.com/s/1c1pY6NA
    在线观看地址:
    Sqlite数据库的基本操作(上)
    http://cclme.cn/forum.php?mod=viewthread&tid=10001
    Sqlite数据库的基本操作(下)
    http://cclme.cn/forum.php?mod=viewthread&tid=10002

    Sqlite数据库基本操作
    建立数据
    假设我们要建一个名叫film数据表,只要键入以下指令就可以了:
    create table film(title, length, year, starring);
    这样我们就建立了一个名叫film数据表,里面有namelengthyearstarring四个字段。
    这个create table指令的语法为:
    create table table_name(field1, field2, field3, ...);
    table_name数据表的名称,fieldx(field1, field2, field3, ...)则是字段的名字。sqlite3与许多SQL数据库软件不同的是,它不在乎字段属于哪一种数据型态:sqlite3的字段可以储存任何东西:文字、数字、大量文字(blub),它会在适时自动转换。

    如果表不存在,则创建数据表,存在则不创建数据表。命令:
    create table if not exists film(title, length, year, starring);


    建立索引
    如果数据表有相当多的数据,我们便会建立索引来加快速度。好比说:
    create index film_title_index on film(title);
    意思是针对film数据表的name字段,建立一个名叫film_name_index的索引。这个指令的语法为
    create index index_name on table_name(field_to_be_indexed);
    一旦建立了索引,sqlite3会在针对该字段作查询时,自动使用该索引。这一切的操作都是在幕后自动发生的,无须使用者特别指令。

    加入一条数据
    接下来我们要加入数据了,加入的方法为使用insert into指令,语法为:
    insert into table_name values(data1, data2, data3, ...);
    例如我们可以加入
    insert into film values ('Silence of the Lambs, The', 118, 1991, 'Jodie Foster');
    insert into film values ('Contact', 153, 1997, 'Jodee Foster');
    insert into film values ('Crouching Tiger, Hidden Dragon', 120, 2000, 'Yun-Fat Chow');
    insert into film values ('Hours, The', 114, 2002, 'Nicole Kidman');
    如果该字段没有数据,我们可以填NULL

    查询数据
    讲到这里,我们终于要开始介绍SQL最强大的select指令了。我们首先简单介绍select的基本句型:
    select columns from table_name where expression;
    最常见的用法,当然是倒出所有数据库的内容:
    select * from film;
    如果数据太多了,我们或许会想限制条数:
    select * from film limit 10;
    或是照着电影年份来排列:
    select * from film order by year limit 10;
    或是年份比较近的电影先列出来:
    select * from film order by year desc limit 10;
    或是我们只想看电影名称跟年份:
    select title, year from film order by year desc limit 10;
    查所有茱蒂佛斯特演过的电影:
    select * from film where starring='Jodie Foster';
    查所有演员名字开头叫茱蒂的电影('%' 符号便是 SQL 的万用字符):
    select * from film where starring like 'Jodie%';
    查所有演员名字以茱蒂开头、年份晚于1985年、年份晚的优先列出、最多十条,只列出电影名称和年份:
    select title, year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10;
    有时候我们只想知道数据库一共有多少条数据:
    select count(*) from film;
    有时候我们只想知道1985年以后的电影有几部:
    select count(*) from film where year >= 1985;
    (进一步的各种组合,要去看SQL专书,不过你大概已经知道SQL为什么这么流行了:这种语言允许你将各种查询条件组合在一起──而我们还没提到「跨数据库的联合查询」呢!)

    如何更改或删除数据
    了解select的用法非常重要,因为要在sqlite更改或删除一条数据,也是靠同样的语法。
    例如有一条数据的名字打错了:
    update film set starring='Jodie Foster' where starring='Jodee Foster';
    就会把主角字段里,被打成'Jodee Foster'的那条(或多条)数据,改回成Jodie Foster
    delete from film where year < 1970;
    就会删除所有年代早于1970年(不含)的电影了。

    如何更改数据表
    alter table AAA rename to BBB;
    AAA数据表改名为BBB

    如何在数据表中增加一个字段
    alter table AAA add column ccc;
    在AAA数据表里增加一个ccc的字段

    如何在数据表中删除一个字段
    ALTER TABLESQLite SQLite支持ALTER TABLE的一个有限子集。在ALTER SQLite中允许一个表或一个新列添加到现有表。删除列,或者添加或从表中删除约束。
    sqlite中是不支持删除有值的列操作的,所以alter table table_name drop column col_name这个语句在sqlite中是无效的,而替代的方法可以如下:
    1.根据原表创建一张新表
    2.删除原表
    3.将新表重名为旧表的名称
    示例例子如下
    1.创建一张旧表Student,包含id(主码),name, tel
    create table student (id integer primary key,name text,tel text)

    2.给旧表插入两个值
    insert into student(id,name,tel) values(101,"Jack","110")
    insert into student(id,name,tel) values(102,"Rose","119")

    3.接下来我们删除电话这个列,首先根据student表创建一张新表teacher
    create table teacher as select id,name from student

    4.然后我们删除student这个表
    drop table if exists student

    5.teacher这个表重命名为student
    alter table teacher rename to student

    结果演示:
    select * from student order by name descdesc降序, asc升序)

    如何删除数据表
    drop table AAA;
    删除AAA数据表
    附录
    1、sqliteStdio编辑数据库教程:http://cclme.cn/forum.php?mod=viewthread&tid=9957
    2、上面只列出了常用的SQL语句,如未发现你需要的SQL语句,请自行百度搜索,关键字可以为“sqlite xxxx”,其中xxxx表示的是你要的功能。如果你愿意分享的话,可以把你的解决办法分享到本论坛。
    课堂的演示代码如下:
    1. // 程序入口功能
    2. 功能 _initial()
    3.         发送文本消息("测试程序已经启动")

    4.         //         runSqlCommand("create table film(title, length, year, starring)")
    5.         runSqlCommand("create table if not exists film(title, length, year, starring)")
    6.         // runSqlCommand("create table if not exists film(title, length, year, starring,time)")

    7.         runSqlCommand("create index film_title_index on film(title)")

    8.         // 插入数据
    9.         runSqlCommand("insert into film values ('Silence of the Lambs, The', 118, 1991, 'Jodie Foster')")
    10.         //runSqlCommand("insert into film values ('Contact', 153, 1997, 'Jodee Foster')")
    11.         runSqlCommand("insert into film values ('Crouching Tiger, Hidden Dragon', 120, 2000, 'Yun-Fat Chow');insert into film values ('Hours, The', 114, 2002, 'Nicole Kidman');")

    12.         // 查询语句
    13.         // runSqlCommand("select * from film")
    14.         // runSqlCommand("select title, length, year, starring from film")
    15.         // runSqlCommand("select title from film")
    16.         // runSqlCommand("select * from film where starring='Jodie Foster'")
    17.         // runSqlCommand("select * from film where starring='Jodie Foster' and year=1991")
    18.         // runSqlCommand("select * from film where starring like 'Jodie%'")

    19.         // 更新数据
    20.         // runSqlCommand("update film set starring='Jodie Foster' where starring='Jodee Foster'")
    21.         // runSqlCommand("update film set length='150', year=2000 where starring='Jodie Foster' and title='Contact'")

    22.         // 删除数据
    23.         // runSqlCommand("delete from film where year < 2000;")
    24. //         if(true)
    25. //         end
    26. //         sendtextmsg("ssss")
    27. 结束

    28. // 按下主按钮触发的功能方法
    29. 功能 _mainbutton()
    30.         发送文本消息("你好mainbutton")
    31. 结束

    32. function Log(data)
    33.         filelog(timenow() & "=== " & data & " ===")
    34.         filelog("\r\n\r\n")// 换行
    35. end

    36. function runSqlCommand(sqlStr)
    37.         var ret = "",arr = 0
    38.         //         ret = sqlitesqlarray("global:测试应用的数据库.db",sqlStr,arr)
    39.         ret = sqlitesqlarray("global:测试应用的数据库.db",sqlStr,arr)
    40.         if(ret)
    41.                 Log("OK! *** " & arr & " ***")
    42.                 return arr
    43.         else
    44.                 Log("Sql执行失败,原因:" & getlasterror(1))
    45.                 return ""
    46.         end
    47. end
    复制代码




  • TA的每日心情
    慵懒
    2019-5-5 19:37
  • 签到天数: 399 天

    [LV.9]以坛为家II

    14

    主题

    612

    回帖

    2131

    积分

    高级会员

    积分
    2131

    猴年

    橙子 发表于 2016-3-21 10:09:18 | 显示全部楼层
    好高深
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|虫虫联盟 ( 备案号:蜀ICP备15018121号-1 )

    GMT+8, 2024-11-22 00:24 , Processed in 0.372695 second(s), 30 queries .

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表