DQL语句
0 查询语句的所有关键词的书写顺序
select 字段名1, 字段名2,...
from 表名
where 过滤条件
group by 参与分组字段1,参与分组字段2,..
having 过滤条件
order by 排序字段1 排序方式,排序字段2 排序方式,...
1 简单查询语句
--.查询指定字段的数据
select 字段名1,字段名2 from 表名;
--查询员工所有字段
方式一:将所有字段都罗列出来
select 字段名1,字段名2,... from 表名;
方式二:使用 通配符 *,* 表示表中的所有字段,其排列顺序是创建表时字段的顺序
select * from 表名;
* 的问题:
1.在学习过程中,做练习的使用使用 * 查询所有信息更方便
2.在工作中,养成好习惯不要写 * ,因为 * 会降低查询效率
如果写 * ,那么系统是不知道表中到底有哪些字段的,需要查询数据词典来获取表中的所有字段信息
相比于直接写 字段名,多了一步查询表中字段信息的操作,降低了查询效率
2 where 条件
1.比较运算
= < <= > >= != <>
2.逻辑运算
与 and
条件A and 条件B 只有条件A成立(条件A的值为true)且条件B也成立时, A and B 成立
或 or
条件A or 条件B 只要条件A 或条件B其中一个成立, A or B 成立
非 not
not 条件A 条件A 不成立 则 not 条件A 成立
3.范围条件
连续范围: between A and B
where 字段 between A and B 表示字段的值在A 到 B之间,可以取值A和B
字段 >= A and 字段 <= B
注意:
1.如果想要使范围有意义,则A的值必须小于B
where not 字段 between A and B 字段的值不在A到B之间,不能取值A和B
字段 < A or 字段 > B
不连续范围
in(结合)
where 字段 in(A,B,C,...) 字段的值只要等于集合中任意一个值就成立
字段 = A or 字段 = B or 字段 = C
where 字段 not in(A,B,C,...) 字段的值不能等于集合中的任何一个值
字段 != A and 字段 != B and 字段 != C
any(集合)
where 字段 = any(A,B,C,...) 字段的值只要等于集合中任意一个值就成立
字段 = A or 字段 = B or 字段 = C
where not 字段 = any(A,B,C,...) 字段的值不能等于集合中的任何一个值
字段 != A and 字段 != B and 字段 != C
where 字段 != any(A,B,C,...) 字段的值只要不等于集合中的一个值成立
字段 != A or 字段 != B or 字段 != C
all(集合)
where 字段 = all(A,B,C,...) 字段中的值必须等于集合中的所有值
字段 = A and 字段 = B...
where 字段 < all(A,B,C,...)
字段 < A and 字段 < B...
where not 字段 = all(A,B,C,...) 字段的值只要不等于集合中的一个值就成立
字段 != A or 字段 != B...
where 字段 != all(A,B,C,...) 字段的值不能等于集合中的任何一个值
字段 != A and 字段 != B...
4.模糊查询 like
通配符:
% : 代表任意多个字符
_ : 代表任意单个字符
转义字符: 功能 将特殊字符的特殊去除,只保留其原本字符的含义
在MySQL的默认转义字符是 \
在Oracle中需要自定义转义字符 escape '转义字符'
where 字段 like '...'
例子:
-- 查询emp表中ename名字中含有字母 O 的员工
Select ename
From emp
Where ename like ' % O % ' ;
-- 查询emp表中ename第二个字母是 O 的员工
Select ename
From emp
Where ename Like ' _ O % ' ;
-- 查询emp表中ename名字中含有 _ 的员工
select ename
From emp
Where ename Like ' %S_% ' Escape ' S ';
5.空值判断
where 字段 is null 字段的值为空 条件成立
where 字段 is not null 字段的值不为空,条件成立