SQL简单入门第一篇
简介:
• DQL:• 数据查询语言(凡是带有select关键字的都是查询语句)• DML:• 数据操作语言(凡是对表当中的数据进行增删改的都是DML)如:insert 增 delete删 update改• DDL:• 数据定义语言:凡是带有create,drop,alter的都是DDL,它主要操作的是表的结构。不是表中的数据• TCL:• 事务控制语言:包括:事务提交:commit;事务回滚:rollback;• DCL:
SQL简单入门第一篇
关于SQL语句的分类
- 数据查询语言(凡是带有select关键字的都是查询语句)
- 数据操作语言(凡是对表当中的数据进行增删改的都是DML)如:insert 增 delete删 update改
- 数据定义语言:凡是带有create,drop,alter的都是DDL,它主要操作的是表的结构。不是表中的数据
- 事务控制语言:包括:事务提交:commit;事务回滚:rollback;
- 数据控制语言:例如:授权grant,撤销权限revoke……
查询所有字段
- 第一种方式:可以把每一个字段都写上select a,b,c,d,e,f... form 字段名;
- 第二种方式:可以使用*select * form dept;
但是这种方式的缺点:1.效率低2.可读性差在实际的开发中不建议,你如果想自己玩玩没问题
起别名
- 使用as关键字
select deptno,dname as deptname from dept;
- 使用as关键字起别名
- 注意:只是将显示的查询结果列名显示为deptname,原表名还是叫:dname;select语句永远只是进行查询
- 那么as关键字可以省略嘛?当然是可以的
select deptno,dname(这里有空格) deptname from dept;
- 那么如果中间出现空格的话是否还会继续执行呢?会报错就像这样select deptno,dname dept(这里打了空格)name from dept;
- 那么怎么解决呢?+单引号/双引号
select deptno, deptno,dname 'dept name' from dept;
select deptno,deptnp,dname "dept name" from dept;
但是需要注意的是:在所有的数据库当中,字符串统一使用单引号,这是标准,双引号在Oracle数据库中用不了。
条件查询
- select
字段1,字段2,字段3.....
- from
表名
- where
条件;
都有哪些条件
- = 等于查询薪资等于800等员工姓名和编号
select empno,ename from emp where sal =800;
- <>或!= 不等于查询薪资不等于800的员工姓名和编号
select empno,ename from emp where sal !=800;
select empbo,ename from emp where sal <>800;
- < 小于 >大于
查询薪资小于800的员工姓名和编号
select empno,ename from emp where sal<800;
查询薪资小于800的员工姓名和编号
select empno,ename from emp where sal>800;
- <= 小于等于 >=大于等于
查询薪资小于等于3000的员工姓名和编号
select empno,ename,sal from emp where sal <=3000;
查询薪资小于等于3000的员工姓名和编号
select empno,ename,sal from emp where sal >=3000;
- between...and... 介于两个值之间
查询薪资在3000-3500之间的员工姓名和编号
select empnp,ename,sal from emp where sal between 3000 and 3500;
注意:使用between and的时候必须左小又大
- is null 为null
查询哪些人补助为null
select empno,ename,sal,comm from emp where comm is null;
注意:在数据库中null不能使用等号进行衡量。需要使用is null因为数据库中的null代表什么也没有,它不是一个值
- and 并且
查询工作岗位是MANACER并且工资大于2500的员工信息
select empno,ename,job,sal from emp where job = "MANACER" and sal > 2500;
- or 或者
查询工作岗位是MANAGER和SALESMAN的员工
select empno,ename,job from emp where job='MANAGER' or job='SALESMAN';
- in(‘值1’,‘值2’,...)相当于多个or
查询工作岗位是MANAGER和SALESMAN的员工
selecet empno,ename,job from emp where job in('MANAGER','SALESMAN');
注意:in不是像between and那样是一个区间,而是确确的值
- not 表示不在这几个值当中的数据
找出员工薪资不是800,5000,3000
select ename,sal from emp where job not in(800,5000,3000);
注意:not主要用在in和is中如:isnull,is not null,in not in;
- like 模糊查询 %匹配多个字符_匹配一个字符
找出名字以W结尾的
select ename from emp where ename like '%W';
找出名字以Y开始的
select ename from emp where ename like 'Y%';
找出第二个字母是A的
select ename from emp where ename like '_A';
找出第三个字母是R的
select ename from emp where ename like '__R%';
找出名字中含有_的 使用\转义字符
select ename from emp where ename like '%\ _%'
排序
- select
字段名1....
- from
表名
- order by
字段名1...;
- 查询所有员工薪资
select ename,sal from order by sal;
升序降序
- desc降序,asc升序
查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列
select ename,sal from emp order by sal asc,ename asc;
- 了解一下:根据字段的位置也可以排序
select ename,sal from emp order by 2;-- 表示第二列,但是不太建议这样用,因为如果新添加一列那么就没有用了。健壮性差
- 综合题:找出工资再2000-5000之间的员工信息,要求按照薪资降序排列
select ename,sal from emp where sal between 2000 and 5000 order by sal desc;
- 执行顺序:from>where>select>order by