准备
- 数据查询操作均采用的是
MySQL
。 - 示例数据库采用的是
northwind
示例数据库。 - 数据库导入手册
关于northwind
示例数据库
-
查询数据库中的表
show tables;
-
查询表的表属性
desc xxx(表名);
投影操作
1.语法
-
投影运算:选择表中的全部或者部分列。
-
语法
select 字段列表 from 表名;
2.特点
- 查询列表可以是:表中的字段、常量值、表达式、函数。
- 查询的结果是一个虚拟的表格。
3.实例
-
查询常量值:查询
helow world
。select 'hello world';
-
查询表中单个、多个字段。
# 在 employees 表中,查询 first_name 字段 select first_name from employees; # 在 employees 表中,查询 first_name,last_name 和 salary 字段 select first_name, last_name, salary from employees;
-
查询表中所有字段:用 * 代替所有字段。
select * from northwind.employees;
-
使用
as
关键字起别名:将选择出的数据赋予新的列名。# 在 employees 表中,查询 employee_id, last_name 和 annual_salary 字段 # 将月薪乘12作为年薪出现 select employee_id, last_name, salary * 12 as annual_salary from employees;
-
去重:使用
distinct
函数去重。# 查询 employees 表中的不同的 job_id select distinct job_id from northwind.employees;
-
拼接操作:使用
concat
函数进行拼接。# 查询 employees 表的 first_name 和 last_name,拼接为 fullname,显示结果为 employee fullname select concat(first_name, ' ', last_name) as "employee fullname" from employees;
选择(筛选)操作
1.语法
-
通过不同的筛选条件来选择到相应的字段
-
语法结构
select 字段列表 from 表名 where 筛选条件;
2.按条件表达式筛选
-
简单条件运算:
> < = != <> >= <=
-
查询employees 表中,工资大于 12000 的员工信息
select * from employees where salary > 12000
-
查询 employees 表中,部门编号不等于 90 的员工
last_name
和部门编号select last_name, department_id from employees where department_id <> 90; 或者 select last_name, department_id from employees where department_id != 90;
3.按逻辑表达式执行
-
常用逻辑运算符:
&& || ! and or not
-
查询 employees 表中,工资在 10000 到 20000 之间的员工 last_name和工资
select last_name, salary from employees where salary >= 10000 and salary <= 20000; 或者 select last_name, salary from employees where salary >= 10000 && salary <= 20000;
-
查询 employees 表中,部门编号不在 90 到 110 之间,或者工资高于 15000 的员工信息
select * from employees where not(department_id >= 90 && department_id <= 110) or salary > 15000; 或者 select * from employees where (department_id < 90 || department_id > 110) or salary > 15000;
4.模糊查询
-
关键字:
like, not like
(一般和通配符搭配使用) -
通配符:
%
代表示任意多个字符(包括0个字符)—
表示任意单个字符
-
查询 employees 表中,员工 last_name 中包含字符
a
的员工信息select * from employees where last_name like '%a%';
-
查询 employees 表中,员工 job_id 中第三个字符为
_
的员工 last_name 和 job_idselect last_name, job_id from employees where job_id like '__\_%'; # 注意将下斜杠转义
5. between and
not between and
-
适当使用可以提高语句的简洁度,是包含临界值的。
-
查询 employees 员工编号在 100 到 120 之间的员工信息
select * from employees where employee_id >= 100 and employee_id <= 120; 可简化为 select * from employees where employee_id between 100 and 120;
6.in
not in
-
判断某字段的值是否属于in列表中的某一项
-
查询 employees 表中,工种编号是 it_prog、ad_vp 中的员工 last_name 和工种编号
select last_name, job_id from employees where job_id in ('it_prog', 'ad_vp', 'ad_pres');
7.is null
is not null
<=>
-
=
或<>
不能用于判断 null 值而is null
或is not null
可以判断 null 值。 -
is null
仅仅可以判断 null 值,<=>
既可以判断 null 值,又可以判断普通的数值。、 -
查询 employees 表中,没有提成的员工 last_name
select last_name from employees where commission_pct <=> null;
-
查询 employees 表中,工资为 12000 的员工 last_name 和工资
select last_name, salary from employees where salary <=> 12000;
希望,带领我进入黑暗中,照亮苍穹。 ——达达乐队《苍穹》