MySQL||数据库查询操作(二)条件查询
程序员文章站
2022-05-09 19:04:42
...
建立一张范例表
为了方便执行操作,我们需要建立一个范例表进行操作,如我们建立一张员工表,表中包含员工的编号,姓名,职务,入职时间,当月收入(美金),当月奖金,系属部门等。
-- 删除数据表
DROP TABLE IF EXISTS emp ;
DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS salgrade;
-- 创建数据表
-- 员工表
CREATE TABLE dept (
deptno INT PRIMARY KEY, -- 部门编号
dname VARCHAR(14) , -- 部门名称
loc VARCHAR(13) -- 部门地址
) ;
-- 员工表
CREATE TABLE emp (
empno INT PRIMARY KEY, -- 员工编号
ename VARCHAR(10), -- 员工姓名
job VARCHAR(9), -- 员工职务
mgr INT, -- 经理的员工编号
hiredate DATE, -- 入职日期
sal DOUBLE, -- 员工收入
comm DOUBLE, -- 奖金
deptno INT -- 部门表外键,代表当前员工属于哪个部门
);
alter table emp add foreign key (deptno) references dept (deptno);
-- 工资等级
CREATE TABLE salgrade (
grade INT, -- 工资等级
losal DOUBLE, -- 当前等级最低收入
hisal DOUBLE -- 当前等级最高收入
);
-- 插入测试数据 —— dept
INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES (30,'SALES','CHICAGO');
INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');
-- 插入测试数据 —— emp
INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,str_to_date('17-12-1980','%d-%m-%Y'),800,NULL,20);
INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,str_to_date('20-2-1981','%d-%m-%Y'),1600,300,30);
INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,str_to_date('22-2-1981','%d-%m-%Y'),1250,500,30);
INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,str_to_date('2-4-1981','%d-%m-%Y'),2975,NULL,20);
INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,str_to_date('28-9-1981','%d-%m-%Y'),1250,1400,30);
INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,str_to_date('1-5-1981','%d-%m-%Y'),2850,NULL,30);
INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,str_to_date('9-6-1981','%d-%m-%Y'),2450,NULL,10);
INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,str_to_date('19-04-1987','%d-%m-%Y'),3000,NULL,20);
INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,str_to_date('17-11-1981','%d-%m-%Y'),5000,NULL,10);
INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,str_to_date('8-9-1981','%d-%m-%Y'),1500,0,30);
INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,str_to_date('23-05-1987','%d-%m-%Y'),1100,NULL,20);
INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,str_to_date('3-12-1981','%d-%m-%Y'),950,NULL,30);
INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,str_to_date('3-12-1981','%d-%m-%Y'),3000,NULL,20);
INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,str_to_date('23-1-1982','%d-%m-%Y'),1300,NULL,10);
-- 插入测试数据 —— salgrade
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);
-- 事务提交
COMMIT;
条件查询
在使用 MySQL SELECT语句时,可以使用 WHERE 子句来指定查询条件,从 FROM 子句的中间结果中选取适当的数据行,达到数据过滤的效果。
where语句的格式:
WHERE <查询条件> {<判定运算1>,<判定运算2>,…}
语句分类:
- <表达式1>
{=|<|<=|>|>=|<=>|<>|!=}
<表达式2> - <表达式1>
[NOT]LIKE
<表达式2> - <表达式1>
[NOT][REGEXP|RLIKE]
<表达式2> - <表达式1>
[NOT]BETWEEN
<表达式2>AND
<表达式3> - <表达式1>
IS[NOT]NULL
使用where语句,有单条件查询,多条件查询,LIKE 语句模糊查询等,具体示例在实际中进行引用。
条件查询中的通配符:
百分号(%)
百分号是 MySQL 中常用的一种通配符,在过滤条件中,百分号可以表示任何字符串,并且该字符串可以出现任意次。
使用百分号通配符要注意以下几点:
- MySQL 默认是不区分大小写的,若要区分大小写,则需要更换字符集的校对规则。
- 百分号不匹配空值。
- 百分号可以代表搜索模式中给定位置的 0 个、1 个或多个字符。
- 尾空格可能会干扰通配符的匹配,一般可以在搜索模式的最后附加一个百分号。
下划线( _ )
下划线通配符和百分号通配符的用途一样,但下划线只匹配单个字符,而不是多个字符,也不是 0 个字符。
-- 查询好厨师
select * from emp where job='CLERK' and sal > 1000;
-- 查询工资在1000-4000之间的厨师或销售员的姓名及年收入
select ename 姓名,sal * 12 年收入 from emp where sal between 1000 and 4000 and (job = 'SALESMAN' or job = 'CLERK');
select ename 姓名,sal * 12 年收入 from emp where sal between 1000 and 4000 and job in ('SALESMAN','CLERK');
-- 查询姓S的员工信息 模糊查询
select * from emp where ename like 'S%'
-- 假设每页数据有2条,我想查第二页员工数据
select * from emp limit 0,2;
-- 查询第1,3,6,9条员工数据
set @rownum=0; --在mysql数据库设置一个变量的语法
select * from (select @rownum:aaa@qq.com+1 序号,ename,job from emp)t where t.序号 in (1,3,6,9); --涉及子查询:先在子查询中创建一个带序号的视图(视图要有名t),在针对视图查询
-- 查询工资大于98年后入职的任意一个员工工资的员工数据
select * from emp where sal > any(select sal from emp where hiredate > str_to_date('1998-0-1','%Y-%m-%d'))
-- 查询81到87年的员工数据
select * from emp where hiredate between str_to_date('1981-0-0','%Y-%m-%d') and str_to_date('1987-0-0','%Y-%m-%d');
上一篇: 关于MySQL簇问题的成功解决
下一篇: DataReader:读取查询结果
推荐阅读