sql语法
select * 列名1,列名2... from 表名 【连接查询 内连接/左链接 on条件】 where 条件 子查询/in/exists/between...and... group by分组列1,分组列2... having 字句 可以对分组结果进行筛选 order by 拍序列1,拍序列2...
写sql语句的步骤
1、先确定从哪个表查询数据,是要从一个表查询还是从多个表查询,如果是多个表必须使用连接查询
2、确定是否需要分组查询
3、写where条件
4、写需要返回的列
连接查询
连接查询分内连接和外连接,外连接又分左外连接,右外连接,全连接
内连接 返回所有满足连接条件的记录
select * from 表1 inner join 表2 on 表1.外键=表2.主键
--查询所有有部门的员工的信息 select * from emp e inner join dept d on e.deptno=d.deptno;
左外连接返回左表的所有数据+右表匹配到的数据,如果左表匹配不到右表的数据,显示为null
--查询所有员工信息,如果员工有部门信息,显示出来,否则不显示 select * from emp e left join dept d on e.deptno=d.deptno;
右外连接同左外连接
全连接返回左表的所有数据+右表的所有数据 如果匹配不到对方的数据,都显示为null
--查询所有员工和部门信息,如果匹配不到显示为空 select * from emp e full join dept d on e.deptno=d.deptno;
in用在连接条件中,表示某个字段的值在in提供的列表之中
select * from 表 where 列名 in(值1,值2...)
in后还可以是一个子查询,子查询一般会返回多个结果
in和等号的区别,in后面可以跟多个值,=后面只能有一个值
beteween...and...
一般也用在条件中,between开始值 and结束值,开始值和结束值一般是数字,也可以是其他类型(字符串,日期)
字符串比较和字符串长度无关,会从第一个字符开始向后比较,如果相同再比较下一个
--举例:查询基本工资在1500到2000之间的员工的信息 select * from emp where sal between 1500 and 2000; --查询 1981年到1998年之间雇佣的员工的信息 --把字符串转换为日期之后再比较 select * from emp e where e.hiredate between to_date('1981-01-01','yyyy-mm-dd') and to_date('1998-12-31','yyyy-mm-dd'); --把日期转换为字符串之后再比较 select * from emp e where to_char(e.hiredate,'yyyy-mm-dd') between '1981-01-01' and '1998-12-31';
group by
分组查询
select 结果列 from 表 where 条件 group by 列1,列2...
列只能是两种形式:要么是分组的列;如果要返回其他列,需要对其他列使用聚合函数
--举例:统计各部门不同职位的人有多少个 select deptno,job,count(empno) from emp group by deptno,job select dname,job,count(empno) from emp e inner join dept d on e.deptno=d.deptno group by e.deptno,dname,job;
having字句可以对分组查询的结果进行过滤
--举例:统计各部门不同职位的人有多少个,只显示部门人数大于2的信息 select dname,job,count(empno) c from emp e inner join dept d on e.deptno=d.deptno group by e.deptno,dname,job having count(empno) >2;
order by
order by 排序,可以对多列排序order by 列1 升序/降序 ,列2 升序/降序 默认是升序asc
--例子:查询员工信息 按基本工资从大小排列 --先按员工基本工资倒序,再按奖金倒select * from emp order by sal desc,comm desc;
来源:https://www.cnblogs.com/shu06/p/10859515.html
标签: