type
status
date
slug
summary
tags
category
icon
password
SQLite
命令行中要使用sql语句的时候先打这个
确保 sqlite> 提示符与点命令之间没有空格,否则将无法正常工作。
两个-后面跟上文字就是注释,这个是单行注释
//之间放东西就是多行注释
之后如果sql语句的语法忘记了就看:
SQLite的数据类型(准确来说应该是存储类)
就是说每个类都有一个亲和类型,而且每一列仍然可以存储不同类型的数据,但是存入的时候会将当前类的亲和类型作为数据的存储类型(有点像强制类型转换,就是能转就转,不能转就算了,这里说的能转就是不丢失信息并且转换可逆)
时间的存储
sql中布尔型的值转换为整形的01
创建的数据库名称在关系数据库管理系统中应该是唯一的
这里面的.db实际上就是数据库文件,会被当做数据库来被数据库引擎驱动
创建完数据库之后命令行会出现
之后就可以直接在这之后打命令,表示对当前的数据库进行操作
注意创建数据库文件是在命令的同一目录下创建的
这样就创建了一个数据库文件
退出sqlite提示符
.help可以提示出命令行上所有的指令
dump指令可以将数据库文件转换为sql文件,下面的指令有可以将sql文件转换为db文件
什么叫做转换整个数据库的内容到sql语句中?
感觉就是给一个数据库起别名
就是在进行一个数据库的操作的时候想要操作另一个数据库了,但是操作一个数据库的时候只能在这个数据库的sqlite语句中进行操作,操作也只会影响当前的数据库,此时如果想要操作其他的数据库只能.quit退出当前的数据库操作。这个指令就相当于简化了这个步骤,可以在一个数据库的sql语句中取操作另一个数据库
.database指令是用来显示当前有哪些数据库的
这个时候就附加进来一个test数据库
附加数据库时不能将数据库名附加为temp和main,因为这两个名称已经使用了
附加的逆操作就是分离(detach),用于将附加数据库分离出来
也可以将一个表的数据直接填充到另一个表中
建表的时候只能这样处理,就是要先打一个左括号然后输入信息,最后打入右括号和分号
选取数据之后返回的数据格式是这样的
显示的结果为上图
进行算术运算之前需要打一个select
where语句实际上就是一个条件判断,在数据库中寻找所有满足where后面条件的数据项(或者说数据行)
where语句的实例
甚至可以支持小于大于(就是不等于)等价于!=
要注意所有的sql语句都需要打分号
主要的逻辑运算符
这两个逻辑运算需要提供一个通配符,然后选择符合通配符的选项,但是要注意,like不区分大小写,但是glob区分大小写
逻辑运算符in是需要给出一个集合的(写在in的后面并用括号框起来)
between逻辑运算符要搭配and进行使用,就像英语语法一样
这个查询还可以嵌套(上面这个exist感觉没啥用),上面这个例子就通过where查询了两次
位运算符好像没什么特别大的区别
sql里面的布尔表达式都是一样的,布尔表达式的运算结果还是真或者假
sql里面给数据取名要使用as
如:
sql还提供了一些内置的函数来对表进行汇总计算
sql语句返回当前时间
得到的时间不对主要是因为时区不对
使用这个内置函数可以获取本地时间,但是好像不支持使用as
查表的时候就是进行where字句的判断,满足条件就返回
逻辑运算符not不能单独使用,他只是表示逻辑取反,所以最少要先给他提供一个逻辑运算式
不使用where语句的时候默认更新所有数据项(数据行)
不使用where语句的时候就是删除所有数据行
like语句可以使用的通配符(百分号代表仍以多个字符或者数字,而下划线就代表一个字符或者数字)
glob就有点像是正则表达式了
就是一个选中数据然后进行数据排列的东西
当有多个排序规则的时候就按照先后顺序来确定优先级(规则越前面优先级越高)
多个排序规则之间用逗号隔开
gruop by的基本语法,注意该语句的位置,一定要在where的后面,要在order by的前面
就是将当前表中的数据分成一组,上面的实例按照名字分组,那就是每人就是一个组了
这个时候按照name分组组内就不止一个人了,然后这个时候取sum就是将组内的salary求和,然后选中的还是name列,但是已经不是表内的name列了,而是分组过后的name列,所以此时name是不会有重复的(实际上的name还是按照之前的name来算的,所以下面的having语句的计数是有意义的,但是由于分组了都是重复的名字就不再重复打印了)
having语句在select语句中的位置如上图
having语句是对分组之后的数据进行处理的,所以一定要放在分组之后
这里的having就是代表分组内的name数量要小于2(此时已经按照name分组了)
distinct的语法
distinct用来删除重复的元素
以上面的内容为例,如果按照NAME来进行选取,那么不加distinct的时候就不会进行去重(按名字去重),加上了distinct关键字之后就会将重复的名字删除
- 作者:Noah
- 链接:https://imnoah.top/article/SQLite
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。