目录
- 一、认识数据库
- (一)数据库简介
- (二)数据库类型
- 二、SQLite数据库
- (一)SQLite简介
- (二)学习所需工具
- (1)scott.db
- (2)SQLiteSpy.exe
- (三)SQL语言
- SQL语言分类
- 1.简单查询
- 2.限定查询
- (1)关系运算
- (2)取值范围运算
- (3)基数范围运算
- (4)模糊查询
- (5)空判断
- (6)逻辑运算
一、认识数据库
(一)数据库简介
简单来说数据库是用于持久化存储数据的软件,数据库本质上是把程序中的数据保存到计算机硬盘中,在需要的时候可以对数据进行增、删、修、查。
(二)数据库类型
数据库产品非常多,常见的有两类:
- 关系型数据库:行与列的格式,例如Excel表格的形式。常见的是SQLite、MySQL、SQLServer、Oracle、DB2…
- 非关系型数据库:使用JSON格式。常见的有MongoDB。
二、SQLite数据库
(一)SQLite简介
SQLite是一种轻量级的关系型数据库,本体只有几兆大小。SQLite常见的数据操作都有,但是由于本体较小,相比其它数据库:
- 语法结构不严格
- 在很多系统或软件框架中自带
- 主要进行本体数据库存储和管理,不太擅长高并发的服务器系统
(二)学习所需工具
链接:https://pan.baidu.com/s/15bOv56PzRBMf978cCdw__Q?pwd=1luw
提取码:1luw
(1)scott.db
.db或.db3格式是SQLite数据库的格式,scott.db内部存储的是本次的学习数据。
scott.db中用到的表的关键信息:
(2)SQLiteSpy.exe
这是一个免安装直接打开就能使用的SQLite操作软件,内置了SQLite数据库。
使用SQLiteSpy打开学习数据的操作步骤如下:
- 双击打开SQLiteSpy软件
- 在软件中点击File,点击Open Database
- 在弹出的窗口中选中scott.db就可也以打开学习数据了
在SQLite中,.db文件是数据库文件,这个文件可以认为等效于.xlsx表格文件。
在Excel中,点击下方的标签,切换一个又一个的表(Sheet),在数据库中使用表(Table)来表示相同含义。
(三)SQL语言
为了统一不同的数据库产品的操作方式,IBM公司在上世纪70年代发明了SQL语言,SQL语言已经成为关系型数据库的通用操作语言。
SQL语言分类
SQL语言可以分为三类:
(1) 数据操作语言 DML
①数据查询语言 DQL
通过各种条件的限制,筛选和整理出需要数据。
②更新操作
包括对数据的增删改,网络编程与Qt等课程中学习。
(2) 数据定义语言 DDL
定义数据库格式,常见于设计数据库表,一般由软件架构师负责。
(3)数据控制语言 DCL
用于操作数据库账户的控制权限,一般由数据库管理员负责。
1.简单查询
简单查询的结果包含所有的行(记录),依次展示每条数据,但是可以控制显示哪些列(字段)。
[]表示可选填内容 |表示或者
*表示全查 DISTINCT表示去掉重复行
例1:查询emp表中的所有内容,相当于在SQLiteSpy中双击表名。
SELECT * FROM emp;
在SQLiteSpy中填写上述语句,点击键盘F9或依次鼠标点击Execute→Execute SQL
例2:查询所有雇员的编号(empno)、姓名(ename)、职位(job)、基本工资(sal)。
SELECT empno,ename,job,sal
FROM emp;
例3:查询每个雇员的编号、姓名和基本年薪(基本工资x12)
SELECT empno,ename,sal*12 FROM emp;
也可以给每个列起别名
SELECT empno,ename,sal*12 年薪 FROM emp;
给列起别名(特别是中文别名)后期用的不算多,也不建议使用中文。
练:查询每个雇员的编号、姓名、职位、年薪,每个月有200元的餐补,有200元的交通补助,夏天每个月有300元的高温补贴,年底奖金3个月
薪资。
SELECT empno,ename,job,sal*15+12*(200+200)+3*300 income
FROM emp;
例4:查询公司的职位有哪些?
SELECT job FROM emp;
优化👇:
-- 增加DISTINCT关键字可以消除重复项
SELECT DISTINCT job FROM emp;
-- 需要注意的是,重复项指的是每一列的数据都相同。
2.限定查询
在简单查询的基础上限制结果的行数,就是限定查询。
限定查询主要通过WHERE子句完成,支持六种运算:
关系运算、取值范围运算、基数范围运算、模糊查询、空判断、逻辑运算
(1)关系运算
关系运算是最简单的运算符号,包括:
符号 | 意思 |
---|---|
> | 大于 |
>= | 大于等于 |
<= | 小于等于 |
!=或<> | 不等于 |
==或= | 等于 |
例1:查询薪金在2000以上的雇员信息。
SELECT * FROM emp WHERE sal>2000;
练1:查询基本工资小于1600的雇员信息。
SELECT *
FROM emp
WHERE sal<1600;
练2:查询姓名是SMITH的雇员信息。
SELECT * FROM emp WHERE ename='SMITH';
练3:查询职位不是销售的雇员信息。
SELECT *
FROM emp
WHERE job!="SALESMAN";
(2)取值范围运算
使用BETWEEN a AND b表示一个[a,b]的闭区间。
例1:查询工资在1000-2000区间的雇员信息。
SELECT *
FROM emp
WHERE sal BETWEEN 1000 AND 2000;
例2:查询在1981年雇佣的雇员信息。
分析:雇佣日期在1981年1月1日到1981年12月31日。
时间和日期一定要按照标准格式的字符串编写。
SELECT *
FROM emp
WHERE hiredate BETWEEN '1981-01-01' AND '1981-12-31';
练1:查询员工编号在7500-7800之间的雇员信息。
SELECT *
FROM emp
WHERE empno BETWEEN 7500 AND 7800;
(3)基数范围运算
数据在几个可选的选项中存在,使用IN操作完成。
例1:查询出雇员编号为7369、7566、7839和8899(不存在)的雇员。
SELECT *
FROM emp
WHERE empno IN (7369,7566,7839,8899);
例2:查询出雇员编号不为7369、7566、7839和8899(不存在)的雇员。
-- NOT是取反
SELECT *
FROM emp
WHERE empno NOT IN (7369,7566,7839,8899);
练1:查询出公司的柜员(CLERK)和销售(SALESMAN)的信息。
SELECT * FROM emp WHERE job IN ('CLERK','SALESMAN');
🚨IN不能与NULL一起使用,一起使用没有任何效果。
(4)模糊查询
模糊查询可以只通过部分内容查询所完成的数据,使用LIKE配合两个标记符:
符号 | 含义 |
---|---|
_ | 匹配任意一个字符 |
% | 匹配任意多个(0,1,…,n)字符 |
_ | 匹配任意一个字符 |
– | – |
% | 匹配任意多个(0,1,…,n)字符 |
例1:查询所有姓名以字母A开头的雇员信息。
SELECT *
FROM emp
WHERE ename LIKE 'A%';
练习:
① 查询姓名第二个字母是A的雇员信息。
SELECT * FROM emp WHERE ename LIKE "_A%";
②查询姓名中包含字母A的雇员信息。
SELECT * FROM emp WHERE ename LIKE "%A%";
(5)空判断
NULL是一种特殊的数据状态,表示无内容。
例1:查询不领取佣金的雇员信息。
-- 错误的写法:NULL不能使用关系运算符判断❌
SELECT *
FROM emp
WHERE comm=NULL;
使用IS NULL来判断一个数据是否为空。
使用IS NOT NULL或者NOT IS NULL判断非空。
-- 上面的例子的正确写法✅
SELECT *
FROM emp
WHERE comm IS NULL;
例2:查询领取佣金的雇员信息。
SELECT *
FROM emp
WHERE comm IS NOT NULL;
或
SELECT *
FROM emp
WHERE NOT comm IS NULL;
(6)逻辑运算
符号 | 含义 |
---|---|
AND | 所有条件都满足,结果才满足 |
OR | 所有的条件满足一个,结果就满足 |
NOT | 反转结果 |
例1:查询出工资高于1300的销售人员信息。
分析:要同时满足两个筛选条件 sal>1300 job=‘SALESMAN’
SELECT *
FROM emp
WHERE sal>1300 AND job='SALESMAN';
例2:查询出公司的柜员(CLERK)和销售(SALESMAN)的信息。
SELECT *
FROM emp
WHERE job='CLERK' OR job='SALESMAN';
练:
(1)查询出工资范围不在1200-1300区间的雇员信息。
SELECT *
FROM emp
WHERE sal NOT BETWEEN 1200 AND 1300;
(2)查询出10部门的经理信息。
SELECT *
FROM emp
WHERE job='MANAGER' AND deptno=10;
(3)查询出工资高于3000或者职位是柜员的雇员信息。
SELECT * FROM emp WHERE sal>3000 OR job=='CLARK';
(4)查询出所有职位不是柜员的雇员信息。
SELECT *
FROM emp
WHERE NOT job='CLERK';