Sql语法总结(老杜狂粉)

Sql语法

数据库表

这里提供了三张表 emp表,dept表,salgrade表在这里插入图片描述

select 查询语法之单表查询

简单查询

1、查询一个字段:
select 字段名 from 表名。

select dname from dept;

结果:
在这里插入图片描述
细节点:SQL语句不区分大小写

2、查询两个字段或多个??
select 字段名1,字段名2,… from 表名;

3、起别名

  • 给查询的列起别名(用as关键字,可省略以空格代替)
select deptno,dname as deptname from dept;
省略as:
select deptno,dname deptname from dept;

结果:在这里插入图片描述

条件查询之 where

1、语法格式

	select
		字段1,字段2,字段3....
	from 
		表名
	where
		条件;

2、都有哪些条件??
2.1 = 等于

  • 查询薪资等于1600的员工姓名和编号?(数字类型)
select empno,ename from emp where sal = 1600
  • 查询SMITH的编号和薪资?(字符串类型,用单引号)
select empno,sal from emp where ename = 'SMITH';

2.2 <>或!= 不等于
查询薪资不等于800的员工姓名和编号?

select empno,ename from emp where sal != 800;
select empno,ename from emp where sal <> 800;

2.3 < 小于
查询薪资小于2000的员工姓名和编号?

select empno,ename,sal from emp where sal < 2000

2.4 <= 小于等于
查询薪资小于等于3000的员工姓名和编号?

select empno,ename,sal from emp where sal <= 3000;

2.5> 大于
查询薪资大于3000的员工姓名和编号?

select empno,ename,sal from emp where sal >= 3000;

2.6 between … and …. 两个值之间, 等同于 >= and <=
查询薪资在2450和3000之间的员工信息?包括2450和3000

第一种方式:>= and <= (and是并且的意思。)
			select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;
			
第二种方式:between … and …
			select empno,ename,sal from emp where sal between 2450 and 3000;			

2.7 is null 为 null(is not null 不为空)
查询哪些员工的津贴/补助为null?

select empno,ename,sal,comm from emp where comm is null;

注意:这里查询是否为空不能用 = 来判断,因为数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量。

2.8 and 并且
查询工作岗位是MANAGER并且工资大于2500的员工信息

select empno,ename,job,sal from emp where job = 'MANAGER' and sal > 2500;

2.9 or 或者
查询工作岗位是MANAGER或SALESMAN 的员工?

select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';

2.10 in 包含
查询工作岗位是MANAGER或SALESMAN 的员工?

select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');

2.11 like 模糊查询
支持%或下划线匹配

  • %匹配任意多个字符
  • 下划线:任意一个字符。
找出名字含有“k”的?
select ename from emp where ename like '%k%'
找出名字以T结尾的?
select ename from emp where ename like '%T';
找出名字以K开始的?
select ename from emp where ename like 'K%';
找出第二个字每是A的?
select ename from emp where ename like '_A%';
找出第三个字母是R的?
select ename from emp where ename like '__R%';

条件查询之order by排序

语法格式:

  • 升序
    select 字段名1,字段名2 from 表名 order by 要排序的字段 asc;(默认是升序,asc可省略)
  • 降序
    select 字段名1,字段名2 from 表名 order by 要排序的字段 desc;(desc不可省略)

分组查询

先介绍分组函数
count(字段) 对字段计数
sum(字段) 对字段求和
avg(字段) 对字段求平均值
max(字段) 取字段中的最大值
min 最小值 取字段中的最小值
分组查询语法格式

select
		...
from
		...
group by	
		...

例如:找出每个工作岗位的对应所有员工的工资和?
实现思路:按照工作岗位分组,然后对工资求和。

select job,sum(sal) from emp group by job;

结果:在这里插入图片描述

使用having可以对分完组之后的数据进一步过滤

having不能单独使用,having不能代替where,having必须和group by联合使用。
例子:找出每个部门最高薪资,要求显示最高薪资大于3000的?

  • 第一步:找出每个部门最高薪资
select deptno,max(sal) from emp group by deptno;

结果:
在这里插入图片描述
第二步:要求显示最高薪资大于3000

select deptno,max(sal)  from emp group by deptno having max(sal) > 3000;

对以上查询关键字总结

select 
	...
from
	...
where
	...
group by
	...
having
	...
order by
	...
以上关键字只能按照这个语法顺序来,不能颠倒。

以上语句执行顺序(超级重要)
1. from
2. where
3. group by
4. having
5. select
6. order by

  • 先执行from指定要操作的表,并且读取到了表中的所有数据,数据1。
  • 再执行where在上面的数据1的基础上进行条件筛选,数据2.
  • 执行group by对数据2进行分组
  • 分组之后再执行having对数据进一步筛选,数据3
  • 之后再执行select,根据你在select指定的字段,在数据3中取出相应的数据,数据4。
  • 最后在执行 order by把数据4进行排序,得到最终数据

select查询之多表查询

连接查询

1、从表1和表2联合起来查询数据,结果包含表1的一些数据同时包含表2的一些数据,,或多张表联合起来查询数据,被称为连接查询

2、根据表连接的方式分类:

	内连接:
		等值连接
		非等值连接
		自连接
		
	外连接:
		左外连接(左连接)
		右外连接(右连接)

3、笛卡尔现象
当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,这种现象被称为:笛卡尔积现象。

4、内连接之等值连接
内连接就是:A表和B表连接,AB两张表没有主次关系。平等的。查询的结果是只有符合条件的才显示。

  • SQL92语法:select e.ename,d.dname from emp e, dept d **where** e.deptno = d.deptno;
    结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。

  • SQL99语法:select e.ename,d.dname from emp e **join** dept d **on** e.deptno = d.deptno;
    优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where
    SQL99语法:
    select … from a join b on a和b的连接条件 where 筛选条件

5、外连接

  • 左外连接:select 字段 from 表1 left join 表2 on 条件
  • 右外连接:select 字段 from 表1 right join 表2 on 条件

左外连接举例:
表1为学生表student

在这里插入图片描述
表二为课程表subject
在这里插入图片描述

执行:

select s.name,sb.course from student s LEFT join subject sb on s.Sid=sb.id

结果:在这里插入图片描述
从结果看出,左外连接查询是把 join左边的表student中的数据全部查询出来,尽管有些不符合条件,而右边的表course中编号为12的游泳课没有查到,这意味着右边的表的数据不是全部被查询出来。

至此总结:
左连接,左表数据全查询
右连接,右表数据全查询
分辨左右就看join

6、三张表,四张表怎么连接?
语法:

select  ...
		from
			a
		join
			b
		on
			a和b的连接条件
		join
			c
		on
			a和c的连接条件
		right join
			d
		on
			a和d的连接条件				

子查询

什么是子查询?
select语句中嵌套select语句,被嵌套的select语句称为子查询。

子查询都可以出现在哪里呢?

select
	..(select).
from
	..(select).
where
	..(select).

例子:找出比最低工资高的员工姓名和工资?

错误实例:

select ename,sal from emp where sal > min(sal);//错误

where子句中不能直接使用分组函数。
实现思路:

  • 第一步:查询最低工资是多少

      select min(sal) from emp;
      查询结果:800
    
  • 第二步:找出>800的

      select ename,sal from emp where sal > 800;
    
  • 第三步:合并(这就是子查询)

      select ename,sal from emp where sal > (select min(sal) from emp);
    
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值