SQL-基础02
SQL进阶
TOP 子句
用于规定要返回的记录的数目,对于拥有数千条记录的大型表来说,TOP子句是非常有用的。注意:并非所有的数据库系统都支持 TOP 子句
1 | select TOP Number|percent 字段名(s) from 表名; |
LIKE 子句
用于在where 子句中搜索列中的指定模式。
1 | select 字段名(s) from 表名 where 字段名 like "%a"; |
通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或者多个字符,必须与 LIKE 运算符一起使用。
1 | -- % 匹配多个字符 |
IN 操作符
允许我们在 where 子句中规定多个值。
1 | select 字段名 from 表名 where 字段名 in (Value1,value2,...); |
BETWEEN 操作符
用在where 子句中,作用是选取介于两个值之间的数据范围
1 | select * from 表名 where 字段名 between Value1 and Value2; |
ALIAS 别名
1 | select * from 表名 as 表别名; |
JOIN 联表
用于多个表中的字段名之间的关系,从这些表中查询数据
- JOIN :如果表中有至少一个匹配,则返回行
- LEFT JOIN : 内连接,即使右表中没有匹配,也从左表返回所有行
- RIGHT JOIN : 右连接,即使左表中没有匹配,也从右表返回所有行
- FULL JOIN : 只要其中一个表中存在匹配,就返回行
1 | --联表方式1 |
UNION 和 UNION ALL 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。注意:查出来的字段数量相同,列的类型也相同,对应的顺序也需要相同。
1 | -- UNION 默认不允许取重复的值 |
SELECT INTO
用于从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。
1 | select * into 新表名 from 旧表名; |
AUTO INCREMENT 字段
每次插入新纪录时,自动创建主键字段的值
1 | -- 在mysql 中的用法 |
CREATE VIEW 视图
在 SQL 中,是基于 SQL 语句的结果集的可视化的表。视图包括行和列,就像一个真实的表。视图中的字段来自真实表中的字段。可以向视图中添加 SQL 函数、 WHERE 以及 JOIN 语句,也可以提交数据。注意:数据库的设计和结构不会受视图中的函数、WHERE 以及 JOIN 语句的影响。
1 | create view 视图名 as select 字段名 from 表名 where 条件; |
注意:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。
SQL 约束 Constraints
约束用于限制加入表的数据的类型。可以在创建表时规定约束(通过create table语句),或者在表创建之后也可以(通过 alter table 语句)。
主要的几种约束:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
NOT NULL 非空约束
强制列不接受 NULL 值。强制该字段必须有值,无值的话不能添加或者更新记录。
1 | CREATE TABLE Persons |
UNIQUE 唯一约束
UNIQUE 约束唯一标识数据库表中额每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或者集合提供唯一性的保证。其中 PRIMARY KEY 中拥有自动定义的 UNIQUE 约束。
注意:每个表中可以有多个 UNIQUE 约束,但是只能有一个 PRIMARY KEY 约束。
创建表时添加 UNIQUE 约束:
1 | --MySQL中,创建表时添加 UNIQUE 约束 |
表已经创建,修改其中的 UNIQUE 约束:
1 | -- 如果是单列的添加 UNIQUE 约束 |
撤销 UNIQUE 约束
1 | --MySQL中 |
PRIMARY KEY 主键约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一值。主键不能包含NULL值。每个表都应该有一个主键,并且每个表只能有一个主键。
创建表时添加 PRIMARY KEY 约束
1 | -- MySQL中 |
已存在的表的 PRIMARY KEY 约束
1 | -- MySQL / SQL Sever / Oracle / MS Access 中添加 PRIMARY KEY |
注意:如果使用alter table 方式 添加主键,必须吧主键列声明为不包含 NULL 值 (在表首次创建时)。
撤销 PRIMARY KEY 约束
1 | -- MySQL 中 |
FOREIGN KEY 外键约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY 。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
创建表时添加 FOREIGN KEY 约束
1 | --MySQL中 |
已经存在表的 FOREIGN KEY 约束
1 | --如果是单列添加 FOREIGN KEY |
撤销 FOREIGN KEY 约束
1 | -- MySQL中 |
CHECK 检查约束
CHECK 约束用于限制列中的值的范围。只允许这个列特定的值。
创建表时添加 CHECK 约束
1 | -- MySQL 中 |
已经存在表时的 CHECK 约束
1 | -- 添加 CHECK 约束 |
撤销 CHECK 约束
1 | -- SQL Sever / Oracle / MS Access |
DEFAULT 默认约束
DEFAULT 约束用于向列中插入默认值。如果没有指定其他的值,那么会默认值添加到所有的新纪录中
创建表时添加 DEFAULT 约束
1 | --MySQL / SQL Sever / Oracle / MS Access 中 |
已经存在表时的 CHECK 约束
1 | -- MySQL 中 |
撤销 DEFAULT 约束
1 | -- MySQL 中 |
Date 函数
SQL 日期
当我们处理日期时,最难的任务恐怕是确保所插入的日期的格式,与数据库中日期列的格式相匹配。只要数据包含的知识日期部分,运行查询就不会出现问题。但是,如果涉及时间,情况就有点复杂了。
最重要的是内建日期处理函数。
MySQL Date 函数
函数 | 描述 |
---|---|
NOW () | 返回当前的日期和时间 |
CURDATE () | 返回当前的日期 |
CURTIME () | 返回当前的时间 |
DATE () | 提取日期或日期/时间表达式的日期部分 |
EXTRACT () | 返回日期/时间按的单独部分 |
DATE_ADD () | 给日期添加指定的时间间隔 |
DATE_SUB () | 从日期减去指定的时间间隔 |
DATEDIFF () | 返回两个日期之间的天数 |
DATE_FORMAT () | 用不同的格式显示日期/时间 |
SQL Sever Date 函数
函数 | 描述 |
---|---|
GETDATE () | 返回当前日期和时间 |
DATEPART () | 返回日期/时间的单独部分 |
DATEADD () | 在日期中添加或减去指定的时间间隔 |
DATEDIFF () | 返回两个日期之间的时间 |
CONVERT () | 用不同的格式显示日期/时间 |
SQL Date 数据类型
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式 YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式 YYYY-MM-DD HH:MM:SS
- YEAR - 格式 YYYY 或者 YY
SQL Sever 使用下列数据类型再数据库中存储日期或日期/时间值:
- DATE - 格式 YYYY-MM-DD
- DATETIME - 格式 YYYY-MM-DD HH:MM:SS
- SMALLDATETIME - 格式 YYYY-MM-DD HH:MM:SS
- TIMESTAMP - 格式:唯一的数字
SQL 日期处理
注意:尽量不要使用时间部分,这样的话查询更容易,且维护起来也更容易。
SQL NULL 值
IS NULL 与 IS NOT NULL
NULL 值是遗漏的位置数据。默认地,表的列可以存放 NULL 值。
使用 IS NULL 得到列中的值是为NULL ,不能使用运算符:
1 | select * from 表名 where 字段名 IS NULL; |
使用 IS NOT NULL 得到列中的值不为 NULL :
1 | select * from 表名 where 字段名 IS NOT NULL; |
SQL ISNULL () 等函数
SQL ISNULL() —微软的、NVL() —-Oracle的 、IFNULL() 、COALESCE () 这两个是MySQL的 函数。
计算字段为空处的值。
1 | --SQL Server / MS Access中 |
SQL 服务器 –RDBMS
现代的 SQL 服务器构建在 RDBMS 之上。
DBMS - 数据库管理系统(Database Management System)
数据库管理系统是一种可以访问数据库中数据的计算机程序。
DBMS 使我们有能力在数据库中提取、修改或者存贮信息。
不同的 DBMS 提供不同的函数供查询、提交以及修改数据。
RDBMS - 关系数据库管理系统(Relational Database Management System)
关系数据库管理系统 (RDBMS) 也是一种数据库管理系统,其数据库是根据数据间的关系来组织和访问数据的。
20 世纪 70 年代初,IBM 公司发明了 RDBMS。
RDBMS 是 SQL 的基础,也是所有现代数据库系统诸如 Oracle、SQL Server、IBM DB2、Sybase、MySQL 以及 Microsoft Access 的基础。