数据查询
数据查询是学习对数据库的操作中的重点内容。
1 数据表的基本结构
-
关系结构数据库是以表格(Table)进行数据存储,表格由行和列组成
-
经验:执行查询语句返回的结果集是一张虚拟表
2 基本查询
- 语法:SELECT 列名 FROM 表名
关键字 | 描述 |
---|---|
SELECT | 指定要查询的列 |
FROM | 指定要查询的表 |
2.1 查询所有列
#查询t_employees表中所有员工的所有信息
SELECT * FROM t_employees;
SELECT 所有的列名 FROM t_employees;
- 经验:生产环境下,优先使用列名查询。*的方式虽然看起来便捷,但实际上需要转换成全列名,效率低,可读性差
2.2 查询部分列
#查询表中的所有员工的编号、姓氏、邮箱
SELECT EMPLOYEE_ID,FIRST_NAME,Email FROM t_employees;
#查询表中所有员工的编号、部门编号
SELECT EMPLOYEE_ID,DEPARTMENT_ID FROM t_employees;
2.3 对列中的数据进行运算
#查询员工表中所有员工的编号、姓名、年薪
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SALARY * 13 FROM t_employees;
算术运算符 | 描述 |
---|---|
+ | 列与列之间做加法运算 |
- | 列与列之间做减法运算 |
* | 列与列之间做乘法运算 |
/ | 列与列之间做除法运算 |
- 注意: % 在数据库中,代表的是占位符,而并非取余运算符
2.4 列的别名
- 列 AS ‘列名’
#查询员工表中所有员工的编号、姓名、日薪(列的运算 / 22),列名均为中文
SELECT EMPLOYEE_ID AS '编号',FIRST_NAME AS '姓',LAST_NAME AS '名',SALARY / 22 AS'日薪' FROM t_employees;
#起别名,没有对原表的列名发生影响
2.5 查询结果去重
- distinct 列名
#查询员工表中,所有经理的ID编号
SELECT DISTINCT MANAGER_ID AS '经理编号' FROM t_employees;
#查询员工表中,所有的工资 (去掉重复的)
SELECT DISTINCT SALARY FROM t_employees;
3 排序查询
- 语法: SELECT 列名 FROM 表名 ORDER BY 排序列名 [排序规则]
排序规则 | 描述 |
---|---|
ASC | 做升序排序 |
DESC | 做降序排序 |
3.1 依据单列进行排序
#查询员工的编号,名字,薪资,按照工资进行升序排序
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees ORDER BY salary ASC;
#查询员工的编号,名字,薪资,按照姓名进行升序排序
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees ORDER BY FIRST_NAME ASC;
#查询员工的编号,名字,薪资,按照工资进行降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees ORDER BY salary DESC;
- 经验:当进行升序排序时,排序规则可以不显示声明。默认为升序排序规则
3.2 依据多列进行排序
#查询员工编号,名字,薪资,按照工资进行升序排序,如果工资相等,按照编号降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
ORDER BY SALARY ASC,EMPLOYEE_ID DESC
#查询员工编号,名字,薪资,按照工资进行升序排序,如果工资相等,按照姓名降序排序
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees
ORDER BY SALARY ASC,FIRST_NAME DESC
4 条件查询
-
语法: SELECT 列名 FROM 表名 WHERE 条件
关键字 描述 WHERE 在查询结果中,筛选符合条件的查询结果。条件为布尔表达式
4.1 等值判断(=)
#查询工资为2500的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees WHERE salary = 2500;
#查询姓为Steven的
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY FROM t_employees WHERE FIRST_NAME='Steven';
- 注意:与Java不同(==),MySQL中等值判断用 =
4.2 不等值判断(>、<、>=、<=、!=、<>)
#查询员工工资大于6000的员工的信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary>=6000;
#查询员工工资不等于2500的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary<>2500;(!=同理)
4.3 逻辑判断(and、or、not)
#查询员工工资在6000~10000的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary>=6000 AND salary<=10000;
#查询工资是10000的或者是9000的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE salary =10000 OR salary = 9000;
#查询除了工资是10000的员工信息
SELECT EMPLOYEE_ID,FIRST_NAME,salary FROM t_employees
WHERE NOT salary =