今天学习了数据库的知识
首先数据库分为关系型数据库和非关系型数据库
关系型数据库:
Mysql
Oracle
SqlServer
Sqlite
非关系型数据库:
Redis
NoSQL
我们首先来看一下数组、链表、文件、数据库的区别
数组、链表: 内存存放数据的方式(代码运行结束、关机数据丢失)
文件、数据库: 外存存放数据的方式(代码运行结束、关机数据不会丢失)
文件:数据量很小 处理效率很低
数据库:数据量很大 处理数据(增删改查)效率高
SQL命令
1. .headers on/off 打开/关闭 数据库中列名称
2. .mode csv/column/html/insert/line/list/tabs/tcl
3. .schema 表名称 查看表名称对应的表的格式(有哪几列?每一列类型?)
4. .width 宽度 设置显示时的数据宽度
5..tables 查看数据库文件中的所有表
SQl语言
其主要应用就是:增删改查
1.使用sqlite3打开数据库文件
sqlite3 数据库文件名
sqlite3 ./student.db
已经成功打开数据库文件
2.创建表
create table
eg:
sqlite> create table student (id integer primary key asc, name varchar(255), sex varchar(32),
age integer, score integer);
3.插入数据
insert into
eg:
sqlite> insert into student values (1001, "张三", "男", 19, 80);
sqlite> insert into student (id, name, score) values (1002, "李四", 100);
sqlite> insert into student values (1002, "王二", "女", 18, NULL);
4.查找数据
select
eg:
sqlite> select * from student;
sqlite> select name, score from student;
*代表全部
5.内容匹配
where
eg:
sqlite> select * from student where name like "%张%";
6.主键
key:键值
内键:在表中唯一标识一条数据称为内键
外键:与外部表进行标识的数据称为外键
在创建表时,我已经将id设为了主键并且为升序
7.删除
delete from
eg:
delete from student where name="李四";
8.修改
update
eg:
update student set sex="男",age=19 where name="王二";
9.排序
order by
eg:
select * from student order by id desc;
改为了降序排列
多表联合查询
1.交叉连接
cross join
eg:
sqlite> select student.name as 学生姓名, lesson.name as 课程名
...> from student cross join lesson;
2.内连接
inner join
eg:
sqlite> select score.id as 成绩编号, student.name as 学生姓名, score.score as 成绩
...> from score inner join student on score.stuid=student.id;
3.外连接
outer join
eg1:
sqlite> select score.id as 成绩编号, student.name as 学生姓名, score.score as 成绩
...> from student left outer join score on score.stuid=student.id;
eg2:
sqlite> select score.id as 成绩编号, student.name as 学生姓名, score.score as 成绩
...> from student left outer join score on score.stuid=student.id
...> where name="张三"
...> order by 成绩 desc;