查询字段
Mysql不区分大小写
select * from emp;//*是通配符 代表任意字段,全部字段
select empno, ename from emp;//指定字段
这俩哪个更好?分场景:
1.直接在命令行里写的sql语句 和 数据量很小的时候: * 比单写字段好
2.代码中写sql语句,传给服务器:单写字段比*好,就算全部字段都要列出来,也是一个一个写出来好
(因为写完语句时,有返回值,返回数据与字段名一一对应,所以字段必须要有)
条件查询
select * from emp where empno > 7800;
select * from emp where empno = 7900;
运算符
select * from emp where empno <> 7900;
select * from emp where empno != 7900;
select * from emp where comm is NULL;
select * from emp where comm is not NULL;
select * from emp where empno between 7800 and 7900;
select * from emp where empno >= 7800 <=7900;
select * from emp where deptno in (10, 30);
select * from emp where deptno not in (10, 30);
like:模糊查询 %通配符 _占位符
select * from emp where ename like "%m%";//名字里带m的
select * from emp where ename like "%n";//最后一个字符是n
select * from emp where ename like "_n%";//第二个字符是n
练习题
练习1:
emp表:
1.查询薪水 sal为5000的员工
2.查询员工编号empno大于7800的员工
3.查询sal为1600到3000的员工编号、姓名、薪水
4.查询工作job不等于manager的员工姓名、工作、部门编号
单引号双引号都行
5.查询出job 为manager或者job 为salesman的员工
6.查询入职日期hiredate再1982年1月1日之后的员工
7.查询没有佣金comm的员工编号、领导编号、薪水、佣金
8.查询姓名ename中包含s 的所有员工
9.查询工作job 以MAN结尾的员工
10.查询ename 中第二个字符为a的所有员工
练习2:
emp表:
1.查询工作job为manager的员工
2.查询薪水sal不等于5000的员工
3.查询sal大于1800,并且部门代码deptno为20或30的员工
4.查询佣金comm不为空的所有员工
5.查询姓名ename 中包含a和b的员工
6.查询出sal为1600或者sal为3000的员工
7.查询出sal不是1600和sal不是3000的员工
8.查询入职日期hiredate在1981-01-01'和'1981-12-01'之间的员工姓名ename
9.查询姓名ename 以s开头所有的员工
10.查询姓名中倒数第二个字符为n的所有员工
练习3:
dept表:
1.查询部门编号deptno为10的部门名称dname
2.查询部门名称dname 中以R开头的部门的名称
3.查询位置loc在NEW YOURK的部门
4.查询部门编号deptno大于等于20的部门名称dname
5.查询不包含字母E的部门名称dname
salgrade表:
6.查询薪资等级grade为1或者3的记录
7.查询薪资等级grade为2的最低薪资losal和最高薪资hisal
8.查询薪资等级中最低 losal或最高薪资hisal大于等于3000的薪资等级grade
第二行和第四行结果相同,因为要验证的是3000和最低工资,最高工资的大小关系,3000比最高工资都低,那么一定比最低工资低。
9.查询薪资等级grade为2或3或5的薪资等级信息
10.查询最高薪资hisal不在2000到4000之间的薪资等级信息