1.数据库的基本概念
1.1 DB
数据库(datebase)存储数据的仓库,保存了一系列有组织的数据
1.2 DBMS
数据库管理系统(Datebase Mangement System),数据库是通过DBMS创建和操作的容器。常见的数据库管理系统:MySql,Oracle,DB2,SqlServer等。
1.3 SQL
结构化查询语言(Structure Query Language):专门用来与数据库通信的语言。
特点:
1. 不是某个特定数据库供应商专有的语言,几乎所有的DBMS都支持SQL。
2. 简单易学。
3. 一种强有力的语言,灵活使用语言元素,可以进行非常高级和复杂的数据库操作。
1.4 表结构化
1. 将数据放入表中,表再放到数据库中,对数据进行分类。
2. 一个数据库中有多张表,每张表都有一个名字,用来标识自己。表名具有唯一。
3. 表具有一些特性,这些特性定义了数据在表中如何存储。
4. 表由列组成,我们也称为字段。所有的表都是由一个或者多个列组成的,每一列就代表一个属性。
5. 表的数据按行储存,每一行就是一个对象。
2.5 语法规范
1. 不区分大小写,但建议关键字大写,表名、列名小写。
2. 每条命令使用分号结尾。
3. 每条命令可以根据需要,进行缩进和换行。
4. 注释:
- 单行注释:#或者--
- 多行注释:/* 注释的内容 */
3 基础查询
查询也叫DQL(Data Query Language)语法。
3.1 语法
SELECT 查询列表 FROM 表名;
查询列表可以是表中的字段、常量值、表达式、函数。
查询的结果是一个虚拟的表格。
3.2 查询表中的单个字段
SELECT 字段名 FROM 表名;
示例:查询所有员工的姓名。
SELECT emplyee_name FROM emplyees;
3.3 查询表中的多个字段
示例:查询所有员工的姓名和年龄。
SELECT emplyee_name,emplyee_age FROM emplyees;
3.4 查询常量值
SELECT 100,'张三';
3.5 查询表达式
SELECT 100 * 200;
3.6 查询函数
SELECT VERSION();
3.7 起别名
方式一:使用AS关键字
SELECT 查询字段 AS 别名 FROM 表名;
方式二:直接空格隔开
SELECT 查询字段 别名 FROM 表名;
3.8 去重
使用 DISTINCT 关键字
SELECT DISTINCT 要去重的字段,其他字段... FROM 表名;
示例:
查询员工表中出现的部门ID,排除重复的id。
SELECT DISTINCT department_id FROM emplyees;
3.9 +号
Mysql中+号只有一个功能:运算符,不能作为连接符。
1. 如果+号两边都是数值型,正常作加法运算。
2. 如果两边有字符型,尝试将字符型数值转化成数值型,如果转换成功,则继续做加法运算,如果转换失败则转为0。比如:'11'会转为11,'1a'会转为1,'11a1'会转为11,'abc'会转为0,'abc11'会转为0。
3. null和任意类型数据作运算,结果都为null。
3.10 CONCAT()连接
CONCAT()函数用于连接字符串。
SELECT CONCAT(str1,str2,...)
3.11 IFNULL
IFNULL()函数,如果值为null,用什么替代。
SELECT IFNULL(字段名,替代值) FROM 表名;
4. 条件查询
4.1 语法
在基础查询的基础之上,后面加上WHERE关键字。
SELECT 查询列表 顺序3
FROM 表名 顺序1
WHERE 筛选条件; 顺序2
4.2 按表达式筛选
条件运算符:>、 <、 >=、 <=、 =、 !=、<> (不等于)。
4.3 按逻辑运算符
逻辑运算符:&& 、||、!,分别对应and、or、not。
4.4 模糊查询
4.4.1. like
like关键字通常与通配符一起使用。
通配符:%代表任意多个字符,包含0个;_代表任意单个字符。
案例一:查询姓名中包含【杨】字的员工信息。
SELECT * FROM emplyees WHERE emplyee_name LIKE '%杨%';
案例二:查询姓名中第二个字是【可】字的员工信息。
SELECT * FROM emplyees WHERE emplyee_name LIKE '_可%';
4.4.2. bwtween ... and
查询在某段范围值内的数据,包含临界值。
例一:查询工资在8000到10000之间的员工信息。
SELECT * FROM emplyees WHERE salary BETWEEN 8000 AND 10000;
例二:查询入职时间在2018-01-01到2022-01-01之间的员工信息。
日期也可以直接比较,条件表达式也可以直接比较日期。
SELECT * FROM emplyees
WHERE hiredate BETWEEN '2018-01-01' AND '2022-01-01';
4.4.3. in
判断某字段的值是否属于in列表中的某一项。
例 : 查询在部门2或者部门3的员工信息。
SELECT * FROM emplyees WHERE department_id in (2,3);
4.4.4. is null
查询值为空的数据,条件表达式不能用于判断null。
错误×写法
SELECT * FROM emplyees WHERE department_id = null;
正确✔写法
SELECT * FROM emplyees WHERE department_id is null;
4.4.5 is not null
查询数据不为空的数据
例:SELECT * FROM emplyees WHERE department_id IS NOT null
5 排序查询
查询出来的数据默认按照表格的保存顺序查询,我们如果需要修改查询结果展示的顺序,可以使用排序查询。
使用ORDER BY关键字实现,ASC代表升序,DESC代表降序。
5.1 语法
SELECT 查询列表
FROM 表
[WHERE 筛选列表]
ORDER BY 排序列表 [ASC升序|DESC降序] -- ASC|DESC不写默认是ASC
5.2 使用单个字段排序
ORDER BY 排序字段 [ASC升序|DESC降序]
例如:将员工信息按工资升序排序
SELECT * FROM emplyees ORDER BY salary ASC
5.3 使用表达式排序
ORDER BY 表达式 [ASC升序|DESC降序]
案例:查询员工姓名、年薪,按照年薪高低降序,其中年薪为月薪*12。
SELECT emplyee_name,salary * 12 FROM emplyees WHERE department_id = 5 ORDER BY salary * 12 DESC;