简单查询(DQL)
1. 查询一个字段?
select 字段名 form 表名;
其中要注意:
select 和 form 都是关键字
字段名和表名都是标识符
强调:
所有SQL语句都是“;”结尾
2.查询两个字段,或者多个字段怎么办?
使用“,”号隔开
select 字段名,字段名 form 表名;
3.查询所有字段怎么办?
方法一:(开发用)
把每个字段都写上
方法二:
用*
select * form 表名;
这种方法的缺点:
-
效率低
-
可读性差
在实际开发中不建议,可以自己玩没问题
你可以在DOS命令窗口想要快速的看一看全表数据可以采用这一种方式
4. 给查询的列起别名?
使用as关键字
例如: mysql>select deptno,dname as deptname from dept;
注意:只是将显示的查询结果列名显示为deptname,原来表的列名还是:dname
记住:select语句只是查询,而不会进行修改操作
as可以省略
例如: mysql>select deptno,dname deptname from dept;
假设起别名的时候,别名里面有空格,怎么办
例如: mysql>select deptno,dname dept name from dept;
DBMS看到这样的语句,进行SQL语句的编译,不合语法,编译报错。
解决方法
别名里面有空格的时候加上’’
例如:例如: mysql>select dname ‘dept name’ from dept;
注意:在所有的数据库当中,字符串统一使用单引号括起来,
单引号是标准的,双引号在oracle数据库中用不了。但是在mysql中可以使用
5. 计算年新
例如:mysql>select ename,sal*12 from emp;//结论:字段可以使用数学表达式!
起别名:mysql>select ename,sal*12 as yearsal from emp;
起别名中文:mysql>select ename,sal*12 as ‘年新’ from emp;
条件查询
1.什么是条件查询?
不是将表中所有数据都查出来,是查询出来符合条件的。
语法格式:
select
字段1,字段2,字段3…
from
表名
where
条件:
2.都有哪些条件?
=等于
查询工资等于800的员工姓名和编号?
select empno,ename form emp where sal =800;
<>或!=不等于
查询工资不等于800的员工姓名和编号?
select empno,ename form emp where sal !=800;
select empno,ename form emp where sal <>800;
<小于
查询工资小于2000的员工姓名和编号?
select empno.ename from emp where sal < 2000;
<=小于等于
查询工资小于等于2000的员工姓名和编号?
select empno.ename from emp where sal <= 2000;
>大于
查询工资大于2000的员工姓名和编号?
select empno.ename from emp where sal > 2000;
>=大于等于
查询工资大于等于2000的员工姓名和编号?
select empno.ename from emp where sal >= 2000;
between…and…两个值之间,等同于>=and<=
查询工资在2450和3000之间的员工信息?包括2450和3000
第一种方式:>=and<=(and是并且的意思)
select emono,ename,sal from emp were sal>= 2450 and sal<=3000;
第二种方式:between…and…
select
emp
where
sal between 2450 and 3000;
注意:使用between and的时候,必须遵守左小右大。
between and 是闭区间,包括两端的值。
is null为null(is not null 不为空)
查询哪些员工的津贴/补助为null?
select empno,ename,sql,comm from emp where comm is null;
注意:在数据库当中null不能使用等号进行衡量。需要使用is null 因为
数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量。
查询哪些员工的津贴/补助不为null?
select empno,ename,sql,comm from emp where comm is not null;
and 并且
or或者
查询工作岗位是MANAGER和SALESMAN的员工
select empno,ename,job from emp where job=‘MANAGER’;
select empno,ename,job from emp where job=‘SALESMAN’;
select
empno,ename,job
from
emp
where
job=‘SALESMAN’ or job=‘MANAGER’;
and和or同时出现的话,有优先级问题吗?
查询工资大于2500,并且部门编号为10或20部门的员工?
select
*
from
emp
where
sal>2500 and deptno =10 or deptno=20;
分析以上语句的问题?
and优先级比or高。
以上语句会先执行and,然后执行or.
以上这个语句表示什么含义?
找出部门工资大于2500并且部门编号为10的员工,或者20部门所有的员工找出来。
select
*
from
emp
where
sal>2500 and (deptno =10 or deptno=20);
and和or同时出现,and优先级较高。如果想要or先执行需要加()
以后在开发中,如果不确定优先级,就加()就行了
in包含,相当于多个or(not in 不在这个范围中)
查询工作岗位是MANAGER和SALESMAN的员工?
select empno,ename,job from emp where job=‘MANAGER’ or job =‘SALESMAN’;
select empno,ename,job from emp where job in(‘MANAGER’ , ‘SALESMAN’);
注意:in不是一个区间。in后面跟的是具体的值。
查询工资800和5000的员工信息?
select ename,sal from emp where sal=800 or sal=5000;
select ename,sal from emp where sal in (800,5000);
//not in 表示不在这几个值当中的数据
select ename,sal from emp where sal not in (800,5000);
not 可以取非,主要用在is 或 in 中
is null
is not null
in
not in
like
称为模糊查询,支持%或下划线匹配
%匹配任意多个字符
下划线:任意一个字符。
(%是一个特殊的符合,_也是一个特殊符合)
找出名字中含有o的?
select ename from emp where ename like ‘%o%’;
找出名字以T结尾的?
select ename from emp where ename like ‘%T’;
找出名字以K开始的?
select ename form emp where enam like ‘K%’;
找出第二个字每是A的?
select ename from emp where ename like ‘_A%’;
找出第三个字母是R的?
select ename from emp where ename like ‘__R%’;
t_student学生表
name字段
=================
zhangsan
lisi
wangwu
zhaoliu
jack_son
找出名字中有"_"的?
select name from t_student where name like ‘%_%’;//这样不行。
select name from t_student where name like ‘%_%’;//\转义字符。