SQLite约束以及连接
来源:互联网 发布:阿里云短信发送频率 编辑:程序博客网 时间:2024/06/05 02:17
前面介绍了SQLite的初步学习,学习了建表,以及对表内容的增删改出等操作,本篇文章深入学习一下SQLite。
SQLite约束
由于开始学习过Oracle数据库的基础知识,对于约束问题有一些初步了解,约束是在表的数据列上强制执行的规则。这些是用来限制可以插入到表中的数据类型,确保了数据库中数据的准确性和可靠性。
约束可以是列级或表级,列级约束仅适用于列,表级约束被应用到整个表
常用约束:
CREATE TABLE SCHOOL(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50), SALARY REAL CHECK(SALARY>0),GREAD INT DEFAULT 100.00,WEIGHT INT NOT NULL UNIQUE);
SQLite中,ALTER TABLE命令允许用户重命名表,或者在表中添加一个新的列,但是重命名列和删除一列,添加以及删除约束无法完成。
SQLite Joins
SQLite的Joins子句用于结合两个或多个数据库中表的记录,JOIN是一种通过共同值来结合两个表中字段的手段。
SQL的三个主要类型连接:
1.交叉连接——CROSS JOIN
2.内连接——INNER JOIN
3.外连接——OUTER JOIN
为了说明这三种连接方式,先创建两个表:
表一
CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL);
信息:
sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) ...> VALUES(1,'Paul',32,'Califronia',20000.00);sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) ...> VALUES(2,'Allen',25,'Texas',15000.00); sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) ...> VALUES(3,'Teddy',23,'Norway',20000.00); sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) ...> VALUES(4,'Mark',25,'Rich-Mond',65000.00); sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) ...> VALUES(5,'David',27,'Texas',85000.00); sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) ...> VALUES(6,'Kim',22,'South-Hall',45000.00);sqlite> INSERT INTO COMPANY values(7,'James',24,'Houston',10000.00);
然后设置输出格式,显示我们的表格信息:
sqlite> .header onsqlite> .mode columnsqlite> SELECT * FROM COMPANY; ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ----------1 Paul 32 Califronia 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0
表二
CREATE TABLE DEPARTMENT( ID INT PRIMARY KEY NOT NULL, DEPT CHAR(50) NOT NULL, EMP_ID INT NOT NULL);
信息:
sqlite> INSERT INTO DEPARTMENT VALUES(1,'IT Billing', 1);sqlite> INSERT INTO DEPARTMENT VALUES(2,'Engineering', 2); sqlite> INSERT INTO DEPARTMENT VALUES(3,'Finance', 7);
显示表格信息:
sqlite> SELECT * FROM DEPARTMENT;ID DEPT EMP_ID ---------- ---------- ----------1 IT Billing 1 2 Engineerin 2 3 Finance 7
交叉连接——CROSS JOIN
交叉连接就是把第一个表的每一行与第二个表的每一行进行匹配,交叉连接有可能产生非常大的表,很少使用。
语法:
SELECT ... FROM table1 CROSS JOIN table2 ...
基于上面的表,写一个交叉连接:
sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;
结果如下:
sqlite> SELECT EMP_ID,NAME,DEPT FROM COMPANY CROSS JOIN DEPARTMENT;EMP_ID NAME DEPT ---------- ---------- ----------1 Paul IT Billing2 Paul Engineerin7 Paul Finance 1 Allen IT Billing2 Allen Engineerin7 Allen Finance 1 Teddy IT Billing2 Teddy Engineerin7 Teddy Finance 1 Mark IT Billing2 Mark Engineerin7 Mark Finance 1 David IT Billing2 David Engineerin7 David Finance 1 Kim IT Billing2 Kim Engineerin7 Kim Finance 1 James IT Billing2 James Engineerin7 James Finance
不难发现,NAME是表一中的,EMP_ID和DEPT是表二中的,因此将表一每一行中的NAME与表二每一行的EMP_ID和DEPT进行匹配,即得出了交叉连接的结果表。
内连接——INNER JOIN
内连接根据条件结合两个表的列值来创建一个新的结果表,将表1的没一行和表2的每一行比较,满足条件则合并起来。
语法:
SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...
INNER关键字可选。
也可用USING表达式声明内连接条件:
SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...
自然连接(NATURAL JOIN)类似于JOIN…USING,会自动测试存在两个表中的每一列的值之间相等值:
SELECT ... FROM table1 NATURAL JOIN table2...
现基于上面的表,写一个内连接的例子:
sqlite> SELECT EMP_ID,NAME,DEPT FROM COMPANY INNER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID; EMP_ID NAME DEPT ---------- ---------- ----------1 Paul IT Billing2 Allen Engineerin7 James Finance
这是根据表1的ID和表2的EMP_ID相等的行的结果表。
外连接——OUTER JOIN
SQL标准定义了三种类型的外连接,LEFT、RIGHT、FULL,但是SQLite只支持左外连接,即LEFT OUTER JOIN。
语法:
SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...
可用USING声明外连接条件:
SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...
外连接的例子:
sqlite> SELECT EMP_ID,NAME,DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT ON COMPANY.ID = DEPARTMENT.EMP_ID;EMP_ID NAME DEPT ---------- ---------- ----------1 Paul IT Billing2 Allen Engineerin Teddy Mark David Kim 7 James Finance
这里ID号不同的NAME也查找出来了,这就是外连接。
- SQLite约束以及连接
- SQLite 约束
- SQLite 约束
- sqlite基础总结 以及QT连接sqlite的一些问题
- SQLite 约束 Constraints
- SQLite数据库约束详解
- SQLite数据库约束详解
- C# 连接sqlite数据库以及操作方法的类
- 列约束以及表约束
- sqlite连接
- SQLite支持外键约束
- Android SQLite 外键约束
- Android sqlite约束-视图-检查
- 约束以及修改数据表
- 约束以及修改数据表
- JAVAWEB开发之多表设计、外键约束、内外连接以及子查询
- Mysql约束----JDBC连接
- Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)
- ThinkPHP的MVC模式和URL访问
- 6000G精品IT教程资源合集 java分布式高并发架构师视频教程 Python教程视频合集 云计算大数据视频教程
- 1294: 简单统计
- 算法设计与分析 合并排序的递归实现算法
- Cocos2dx------从json文件读取数据
- SQLite约束以及连接
- 算法 埃氏筛法求素数个数
- Kotlin入门(4)声明与操作数组
- 如何快速转载CSDN中的博客
- ARP局域网断网攻击原理分析及演示
- 打包jar插件配置 java -jar xxx.jar可执行
- 史上最全的Maven Pom文件标签详解
- 常见的并行程序设计问题的解决方法
- 栈:栈、队列基本概念