一、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、写需要返回的列

三、连接查询

连接查询分两类,交叉连接和普通连接查询

1、交叉连接

交叉连接可以用逗号分隔多个表,也可以用关键字cross join ,交叉连接返回两个表数据的笛卡尔集。

2、连接查询

连接查询分内连接和外连接,外连接有分为左外连接,右外连接,全连接

最常用的是内连接和左外连接

内连接返回所有满足连接条件的记录

select * from 表1 [inner] join  表2 on 表1. 外键=表2.主键

 --查询所有有部门的员工的信息
select * from emp e inner join dept d on e.deptno=d.deptno;

左外连接返回左表的所有数据+右表匹配到的数据,如果左表匹配不到右表的数据,显示为空

 --查询所有员工信息,如果员工有部门信息,显示出来,否则不显示
select * from emp e left join dept d on e.deptno=d.deptno;

右外连接同左外连接

全连接返回左表的所有数据+ 右表的所有数据,如果匹配不到对方的数据,则显示为空

 --查询所有员工和部门信息,如果匹配不到显示为空
select * from emp e full join dept d on e.deptno=d.deptno;

三、in

iin用在连接条件中,表示某个字段的值在in提供的列表之中。

 select * from 表 where 列名 in (值1,值2...);

in后还可以是一个子查询,子查询一般会返回多个结果。

 举例:查询部门编号在10,20,30之中的用户的信息
select * from emp where deptno in (10,20,30);

in 和=的区别,in后面可以跟多个值,=后面只能有一个值

 举例:查询部门名称为BOSTON或者CHICAGO的员工的信息
select e.* from emp e inner join dept d on e.deptno=d.deptno where d.loc ='BOSTON' or d.loc='CHICAGO'
使用in:
select * from emp where deptno in (select deptno from dept where loc in ('BOSTON','CHICAGO'));

四、between ... 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

group by 分组查询

select 结果列  from 表 where 条件 group  by  列1,列2...

注意:结果列只能是两种形式:

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;

最新文章

  1. Centos6.6下安装MySQL5.6
  2. Connection Management and Security
  3. 为benchmarksql的PostgreSQL java驱动进行升级
  4. POJ 3074 Sudoku (DLX)
  5. HTML DOM select() 方法
  6. Altium Designer6打印PCB转印纸设置方法
  7. 使用UISegementControl实现简易汤姆猫程序
  8. MySQL在大数据Limit使用
  9. 如何将IPhone应用软件发布到App Store的
  10. [DP之树形DP]
  11. c++---天梯赛---N个数求和
  12. DB 查询分析器 6.03 如何灵活、快捷地操作国产达梦数据库
  13. 2018-4-5-cadence skill
  14. 简单实现 C# 与 Javascript的兼容
  15. linux实时时钟相关函数
  16. IDEA中使用中jetty启动java项目(非springboot)
  17. Confluence 6 增加和减少你许可证的用户数
  18. unity打aar包工具
  19. Java内存分配机制
  20. hdu 6199 gems gems gems dp

热门文章

  1. 吴裕雄--天生自然 R语言开发学习:主成分分析和因子分析(续一)
  2. 我是青年你是良品-魅蓝NOTE 2
  3. 机器学习入门-逻辑(Logistic)回归(1)
  4. JavaScript值类型和引用类型有哪些
  5. JVM、JRE和JDK三者间的区别和联系
  6. java基础知识点补充---二维数组
  7. 什么是x86什么是x64 它们有什么区别
  8. Magisk了解以及简单的模块制作
  9. Mysql报错:Authentication .....Reading from the stream has failed
  10. 前端如何真正晋级成全栈:腾讯 Serverless 前端落地与实践