马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
类型
关系型数据库:Oracle/DB2/Mysql(开源)/Sqlserver/sqlite(小型数据库)
非关系型数据库:Redis
sqlite3下令
- 创建(进入)数据库 sqlite3 <student>.db
- .tables 查看所有表名
- .schema ?TABLE? 显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。
- .headers on 显示表头信息
- .mode column 以左对齐的列显示信息
- .quit 退出
SQL语句
create table
创建表
利用形式:
create table 表名称(列1 数据类型, 列2 数据类型, ...);
示例:
create table student(姓名 text, 性别 text, 年龄 integer, 效果 double);
insert into
插入表
利用形式:
insert into 表名称 values(值1, 值2, ...);
示例:
insert into student values("张三", "男", 19, 89.5);
insert into student values("李四", NULL, NULL, 99.99);
insert into student (姓名, 年龄) values ("王二", 18);
select
查看表
利用形式:
select 列1,列2,... from 表名称 where 匹配条件 order by 列名称 asc/desc;
- order by <列名称>asc按升序排列
- order by <列名称>desc按降序排列
示例: select * from 表名称;
查看该表所有信息
select 姓名,效果 from student;
查看student的姓名和效果两列的所有信息
select 姓名,效果 from student where 姓名 like "%张%";
查看student表中匹配姓名为某张某的姓名和效果
select 姓名,效果 from student order by 效果 desc;
student表中的按效果升序排列的姓名和效果
select 姓名 from student where 效果 > 85 order by 效果 desc;
效果>85且按降序排列的学生姓名
delete from
删除表
利用形式:
delete from student where 匹配条件;
示例:
delete from student where 效果>85
删除效果大于85的学生信息
update
更新表
利用形式:
update 表名称 set 列1=值1,列2=值2 where 匹配条件;
示例:
update student set 性别="女", 效果=86.3 where 姓名="王二";
更新王二的性别和效果
drop table
删除表
利用形式:
drop table 表名称;
多表团结查询
cross join:
交错连接
- 如果在连接两个表时未指定连接条件,则数据库体系会将第一个表的每一行与第二个表的每一行合并。这种连接称为交错连接或笛卡尔乘积
-
- 示例:
- select student.id as 学号, student.name as 姓名, lesson.subject as 课程 from student cross join lesson;
-
inner join:
内连接
将表1和表2中所有同时满足条件的数据关联在一起
组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部门
- select student.id as 学号, student.name as 姓名, grade.score as 效果 from student inner join grade on student.id =grade.stuid;
-
- select student.id as 学号, student.name as 姓名, lesson.subject as 课程,grade.score as 效果 from student inner join grade on student.id =grade.stuid inner join lesson on grade.lessonid = lesson.id;
-
- select student.id as 学号, student.name as 姓名, lesson.subject as 课程,grade.score as 效果 from student inner join grade on student.id =grade.stuid inner join lesson on grade.lessonid = lesson.id where 课程 ='语文';
-
outer join
外连接
左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
- select grade.stuid as 学号,student.name as 姓名,lesson.subject as 课程,grade.score as 效果 from grade left outer join student on grade.stuid = student.id inner join lesson on lesson.id = grade.lessonid;
- select grade.stuid as 学号,student.name as 姓名,student.sex as 年龄,student.age as 性别,lesson.subject as 课程,grade.score as 效果 from grade left outer join student on grade.stuid = student.id inner join lesson on lesson.id = grade.lessonid;
函数接口
sqlite3_open
sqlite3_open
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
功能:
打开一个数据库文件
参数:
filename:数据库文件名称
ppDb:数据库句柄
返回值:
成功返回SQLITE_OK
失败返回错误码
sqlite3_errmsg
sqlite3_errmsg
const char *sqlite3_errmsg(sqlite3*);
得到出错原因
sqlite3_exec
sqlite3_exec
int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
功能:
实验SQL语句
参数:
sqlite3*:数据库句柄
sql:要实验的SQL语句字符串的首地点
callback:回调函数(只有在select语句时会利用,别的SQL语句只需传入NULL),对找到的数据要完成的操纵,回调函数必须有正确返回值0
void *:给回调函数的参数
char **:存放错误信息空间首地点
回调函数
int callback(void *arg,int column,char **pcontent,char** ptitle){}
arg:传入的参数
column:表列数
pcontent:查询到的数据
ptitle:表头
返回值:
成功返回SQLITE_OK
失败返回错误码
sqlite3_close
sqlite3_close
int sqlite3_close(sqlite3*);
功能:
关闭sqlite3数据库
示例:
创建student.db
创建student表(学号,姓名,性别,年龄,效果)
插入三名学生
利用select打印三名学生信息
- #include <stdio.h>
- #include <sqlite3.h>
- typedef struct student
- {
- char name[200];
- char sex[100];
- int age;
- double score;
- }stu_t;
- int callback(void *arg,int column,char **pcontent,char** ptitle)
- {
- int i=0;
- for(i=0;i<column;i++)
- {
- printf("\t%s\t",ptitle[i]);
- }
- printf("\n");
-
- for(i=0;i<column;i++)
- {
- printf("\t%s\t",pcontent[i]);
- }
- printf("\n");
- return 0;
- }
- int main()
- {
- int i=0;
- sqlite3 *pDb=NULL;
- char cmdbuff[1000]={0};
- char *perrmsg=NULL;
- int ret=0;
- stu_t s[3]={
- {"张三","男",18,89},
- {"李四","女",20,95},
- {"王五","男",19,88},
- };
- //打开数据库
- ret=sqlite3_open("student.db",&pDb);
- if(ret!=SQLITE_OK)
- {
- fprintf(stderr,"splite3_open failed: %s\n",sqlite3_errmsg(pDb));//stderr不用缓存
- return -1;
- }
- //创建表
- sprintf(cmdbuff,"create table if not exists student(id integer primary key asc,name text,sex text,age integer,score double);");
- ret=sqlite3_exec(pDb,cmdbuff,NULL,NULL,&perrmsg);
- if(ret!=SQLITE_OK)
- {
- fprintf(stderr,"sqlite_exec failed:%s\n",perrmsg);
- sqlite3_free(perrmsg);//执行sqlite_exec出错后要为perrmsg申请空间,所有需要释放
- sqlite3_close(pDb);
- return -1;
- }
- //插入数据
- for(i=0;i<3;i++)
- {
- sprintf(cmdbuff,"insert into student values(NULL,"%s","%s","%d","%lf");",s[i].name,s[i].sex,s[i].age,s[i].score);
- ret=sqlite3_exec(pDb,cmdbuff,NULL,NULL,&perrmsg);
- if(ret!=SQLITE_OK)
- {
- fprintf(stderr,"sqlite_exec failed:%s\n",perrmsg);
- sqlite3_free(perrmsg);
- sqlite3_close(pDb);
- return -1;
- }
- }
- // 查询数据
- sprintf(cmdbuff,"select * from student;");
- ret=sqlite3_exec(pDb,cmdbuff,callback,NULL,&perrmsg);
- if(ret!=SQLITE_OK)
- {
- fprintf(stderr,"sqlite_exec failed:%s\n",perrmsg);
- sqlite3_free(perrmsg);
- sqlite3_close(pDb);
- return -1;
- }
- //关闭数据库
- sqlite3_close(pDb);
- return 0;
-
- }
复制代码 编译时要价-lsqlite3
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |