1.简单的查询语句(DQL)
语法格式:
select 字段名1,字段名2,字段名,…from 表名;
提示:
1、任何一条sql语句以“;”语句
2、sql语句不区分大小写,即大小写都一样
查询全部字段
select * from emp; //实际开发中不建议使用‘*‘,效率比较低
查询员工的年薪?(字段可以参与数学运算)
select ename,sal*12 from emp;
+--------+----------+
| ename | sal*12 |
+--------+----------+
| SMITH | 9600.00 |
| ALLEN | 19200.00 |
| WARD | 15000.00 |
| JONES | 35700.00 |
| MARTIN | 15000.00 |
| BLAKE | 34200.00 |
| CLARK | 29400.00 |
| SCOTT | 36000.00 |
| KING | 60000.00 |
| TURNER | 18000.00 |
| ADAMS | 13200.00 |
| JAMES | 11400.00 |
| FORD | 36000.00 |
| MILLER | 15600.00 |
+--------+----------+
给查询结果的列重命名?
select ename,sal*12 as yearsal from emp;
select ename,sal*12 yearsal from emp; //中间的as可以省略
+--------+----------+
| ename | yearsal |
+--------+----------+
| SMITH | 9600.00 |
| ALLEN | 19200.00 |
| WARD | 15000.00 |
| JONES | 35700.00 |
| MARTIN | 15000.00 |
| BLAKE | 34200.00 |
| CLARK | 29400.00 |
| SCOTT | 36000.00 |
| KING | 60000.00 |
| TURNER | 18000.00 |
| ADAMS | 13200.00 |
| JAMES | 11400.00 |
| FORD | 36000.00 |
| MILLER | 15600.00 |
+--------+----------+
别名中有中文?
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '??薪 from emp' at line 1
中文需要用单引号 括起来''
+--------+----------+
| ename | 年薪 |
+--------+----------+
| SMITH | 9600.00 |
| ALLEN | 19200.00 |
| WARD | 15000.00 |
| JONES | 35700.00 |
| MARTIN | 15000.00 |
| BLAKE | 34200.00 |
| CLARK | 29400.00 |
| SCOTT | 36000.00 |
| KING | 60000.00 |
| TURNER | 18000.00 |
| ADAMS | 13200.00 |
| JAMES | 11400.00 |
| FORD | 36000.00 |
| MILLER | 15600.00 |
+--------+----------+
14 rows in set (0.00 sec)
标准sql语句中要求字符串使用单引号括起来。
条件查询 以及 查询关键字
语法格式:
select
字段,字段...
from
表名
where
条件;
执行顺序:先from,然后where ,最后select
查询工资等于5000的员工姓名?
select ename from emp where sal = 5000;
+-------+
| ename |
+-------+
| KING |
+-------+
查询smith的工资
select sal from emp where ename = 'smith';
+--------+
| sal |
+--------+
| 800.00 |
+--------+
查找工资不低于3000的员工
select ename from emp where sal >= 3000;
+-------+
| ename |
+-------+
| SCOTT |
| KING |
| FORD |
+-------+
不等于 <> !=
找到工资1100在3000之间的工资,包括1100和3000
select ename from emp where sal <= 3000 and sal>=1100;
select ename from emp where sal between 1100 and 3000;
between在使用时,必须左小右大
between and 除了可以使用在数字方面之外,还可以使用在字符串方面
select ename from emp where ename between 'a' and 'c';
+-------+
| ename |
+-------+
| ALLEN |
| BLAKE |
| ADAMS |
+-------+
用在字符上面是左闭区右开
que:找出哪些人没有津贴? 在数据库中NULL不是一个值,代表什么也没有,为空。
空不是一个值,不能用等号衡量。
必须使用is null 或者is not null
select ename,comm from emp where comm is null; //只能用 = ,不能用is
+--------+------+
| ename | comm |
+--------+------+
| SMITH | NULL |
| JONES | NULL |
| BLAKE | NULL |
| CLARK | NULL |
| SCOTT | NULL |
| KING | NULL |
| ADAMS | NULL |
| JAMES | NULL |
| FORD | NULL |
| MILLER | NULL |
+--------+------+
que:找出那些人津贴不为NULL?
select ename,comm from emp where comm is not null;
+--------+---------+
| ename | comm |
+--------+---------+
| ALLEN | 300.00 |
| WARD | 500.00 |
| MARTIN | 1400.00 |
| TURNER | 0.00 |
+--------+---------+
que:找出哪些人没有津贴?
select ename,comm from emp where comm is null or comm = 0;
注意null和0不是一个概念
+--------+------+
| ename | comm |
+--------+------+
| SMITH | NULL |
| JONES | NULL |
| BLAKE | NULL |
| CLARK | NULL |
| SCOTT | NULL |
| KING | NULL |
| TURNER | 0.00 |
| ADAMS | NULL |
| JAMES | NULL |
| FORD | NULL |
| MILLER | NULL |
+--------+------+
找出工作岗位是MANAGER和SALESMAN的员工? 要用or查询,一个人只有一个岗位
select ename,job from emp where job = 'MANAGER' or job = ‘SALESMAN’;
and 和or 联合用:找出薪资大于1000并且部门编号是20或30的员工. 其中and优先级大于or
select ename,deptno,sal from emp where sal>1000 and deptno = 20 or deptno = 30; //错误
select ename,sal,deptno from emp where sal>1000 and (deptno = 20 or deptno = 30);//正确
注意:当运算符的优先级不确定的时候加小括号
in 等同于 or:找出工作岗位是MANAGER 和SALESMAN的员工?
select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';
select ename,job from emp where in('SALESMAN','MANAGER');
select ename ,sal from emp where in(1000,5000); //这是找出一千和五千的人,不是大于1000小于5000
not in:不在这几个值当中:排除这几个值
分节,模糊查询
que:模糊查询 like ?
找出名字当中含有O的?
(在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_)
%代表任意多个字符,_代表任意1个字符。
select ename from emp where ename like '%O%';
找出第二个字母是A的?
select ename from emp where ename like '_A%';
找出名字中带下划线的名字,则需要使用到转义字符 \ 后加 _ 代表将下划线转为一个普通的字符
select ename from emp where ename like '%\_%';
找出名字中的最后一个字母是T的?
select ename from emp where ename like'%T';