一、数据库基础
- 区别数据库(database)与数据库管理系统(DBMS):数据库是通过DBMS创建和操纵的
- 表:存储特定类型(同一种类型,如顾客或订单)数据的结构化清单
– 表名:数据库中每个表名都是唯一的。
– 模式:关于数据库和表的布局及特性的信息。
– 列:表的一个字段。
– 数据类型:限定存储在列中的数据种类
– 行:表中的一条记录
– 主键:唯一标识【不能重用、修改更新】 - SQL: Structured Query Language; 结构化查询语言
二、检索数据:SELECT
- 关键字:作为SQL组成部分的保留字,不可作为表或列的名字
- SELECT语句:
SELECT [列名] FROM [表名]
– 结束语句:以分号分隔
– SQL语句不区分大小写【SELECT、select、Select】
– 处理SQL语句时空格会被忽略,分行不分行无所谓 - 检索多个列: 在列名之间加上逗号
SELECT [列名], [列名], [列名] FROM [表名]
- 检索所有列:通配符-星号(*)
– 除非必要,不使用,会降低性能
– 检索未知列时有用 - 检索出不重复的值:关键字DISTINCT
– 只能作用于某一列,否则失效 - 限制输出结果的数量:
– SQL Server 和Access:SELECT TOP 5 [COL] FROM [TABLE]
– DB2:SELECT [COL] FROM [TABLE] FETCH FIRST 5 ROWS ONLY
– MySQL etc:SELECT [COL] FROM [TABLE] LIMIT 5 OFFSET 5
,选择第6行到第十行 - 使用注释:行内注释用两个连字符(–);多行注释用(/* */)
三、排序检索数据:ORDER BY
- 子句:SQL语句的组成部分,由关键字和数据组成。
- ORDER BY子句:选择一个或多个列的名字进行排序
– 其位置应该在SELECT语句的最后
– 可以用非检索的列进行排序
– 注意Access不允许按照别名进行排序,也可以用实际计算字段或相对位置代替/P91 - 按照多个列排序:用逗号分开列名
- 按列位置排序:用检索出的列的相对列位置代替列名
– 好处是不用重新输入列名
– 可能造成列名错用或忘记更新
– 不能用非检索的列来排序 - 指定排序方向:默认升序排序,降序需使用关键字DESC
SELECT [COL] FROM [TABLE] ORDER BY [COL] DESC
– 仅对所限定的某一列起作用,如果希望对多列设定倒序的话,需要逐一添加关键字
– 区别大小写的排序顺序:取决于数据库的设置方式,可更改
四、过滤数据:WHERE
- 搜索条件或过滤条件:WHERE子句
– 其位置应该在ORDER BY子句之前 - WHERE子句操作符:并非所有DBMS都支持以下操作符
SELECT [COL] FROM [TABLE] WHERE [COL] <> [VALUE];
- 范围值检查:关键词BETWEEN
SELECT [COL] FROM [TABLE] WHERE [COL] BETWEEN [VAL1] AND [VAL2]
– 必须指定最大值最小值
– 其匹配范围包括所有值 - 空值检查:IS NULL子句
– NULL不等同于不匹配,所以在进行匹配过滤或者非匹配过滤时,这部分结果不会返回
五、高级数据过滤
- 组合WHERE子句:使用逻辑操作符
- AND操作符:增加多个过滤条件
– 注意每个条件之间都要使用AND关键字 - OR操作符:匹配任一过滤条件
- 求值顺序:用(圆括号)分组AND和OR操作符
- IN操作符:指定条件范围
SELECT [COL] FROM [TABLE] WHERE [COL] IN ([VAL1], [VAL2]);
– 功能等价与OR操作符,但更有优势,包括执行速度快、更直观等 - NOT操作符:否定其后的过滤条件
SELECT [COL] FROM [TABLE] WHERE NOT [CONDITION]
– 功能有时等价于不等号,但结合IN操作符使用时有优势