在任何一种数据库管理系统中(包括MySQL),投影对应于SELECT子句,选择对应于WHERE子句,连接对应于JOIN子句,但除没有直接的对应语句,需要根据题目的实际含义书写复杂的SQL,通常都会包含子查询。
查询语句:select 语句三种能力:投影、选择、连接
投影:在一张二维表中根据所需要的条件选出所需要的列
选择:在二维表中根据所需的条件选择合适的行
连接:从一张或者多张表中获取所需要的行,并且把这个行结合在一起的查询
SQL语句大小写不敏感。
select语句是可以计算的
算术表达式和运算符优先级
举例:select ename,sal 12*sal+100 from emp
计算出年薪+100块
NULL值是不可用,且未分配的,未知并且不适用的值,可以当成是保留值
AS其实可以省略
例如:select ename as name,sal salary from emp
查询出的字段会自动换成别名
例子:select ename "Name",sal*12 "Annual Salary" from emp
级联 *** 作是将列或字符串和其他列串联,由两条竖线(||)表示
select ename,job,ename || job as "Employees" from emp
可以看出Employees就将ENAME和JOB进行结合的一个 *** 作
在select句子中适用DISTINCT 关键字消除重复行
select distinct deptnp from emp
限制选择的行:
where关键字
如果where后面查的数据是字符串类型或者日期类型的要加''号
#######比较条件
举几个例子:
select ename,job,sal,deptno from emp where sal between 5000 and 10000
这个是包含了5000和10000的
in的表达:
select empno,ename,mgr,deptno from emp where mgr in (7788,7782,7000)
只要mgr有括号里面的值都显示出来。
通配符:%通配的是多个字符,_通配的是一个字符
IS NULL是查询某个字段为空的显示出来
and、or、not
例子:
查询sal>=2000和job的内容是包括MAN字符串的,当同时满足两个条件时候才返回结果。
and就是两边同时为真,or的话是有一边为真就行,not就是不等于
ASC 升序,默认升序
DESC 降序
例子:
将deptno中进行升序排列,排列出来后,在将sal进行降序排列。
单行函数:就是对单行数据进行处理的函数,只针对这一条数据得出一个结果
函数工作的过程
ROUND(45.926,2)是将45.926这个数字的小数点后两位进行四舍五入 *** 作得到45.93
TRUNC(45.926,2) 是将45.926这个数字的小数点后两位后面的进行丢掉。
返回当前系统日期
经常是不同类型之间的转换
TO_CHAR就是将日期型数字型转换成字符型
例子:
数字型的转换
把字符转换成数字:
把字符转换成日期:
什么是分组函数?
另外的名字叫多行函数,针对于多行数据进行一个汇总处理的一类函数,最后会得到一个汇总的结果。
例子:
其实就是对一系列数据找最大值
基本格式:select group_function(column),... from table [where condition]
首先对一个数据进行分类汇总把每一组的数据单独的拿出来。就是对每一列数据的相同数据进行一个分组,然后在将分组后的结果再去执行select后面跟的一个分组函数的 *** 作。
例子:
那下面这样的怎么 *** 作呢?
其实就是对分组以后的结果再次进行一个限制筛选
where和Having的区别?
where是针对于整体的一个查询结果
Having是针对于分组后的查询结果的一个条件限制,它是不能单独存在的,它只能够在group by后面
下面是它的表达式:
显示部门的最大平均薪水是多少
select max(avg(sal))
是这样的一个嵌套
当我们查的数据存在于多个表的时候就需要多表查询
下面是用到的表
一个是EMP的职员表、一个是DEPT的部分表
表连接的三种方式:
从总类上来看:自连接、等值连接、外连接(又可以分为三类:左连接、右连接、全连接)
自连接:一个表自己与自己建立连接成为自连接或自身连接。
在查询的时候多表,这两张表是同一张表,所以在查询前我们需要对这个表进行一个别名的重命名。
举例:查询出员工编号、名字及其经理名字
MGR对应的是经理的ID号,这个对应的就是另一张经理表中的名字
表示比较连接列的值显示出最终的一个结果,其查询结果中列出被连接表中的所有列,包括其中的重复列。
查询员工的姓名 工作 部门号 部门名称
左连接就是返回左边的匹配行,不考虑右边的表是否有相应的行
(+)的意思就是dept是个匹配表,左边是一个基础表,基础表优先,如果右边这个表找不到对应的值去匹配,会自动填空
右连接就是返回右边的匹配行,不考虑左边的表是否有相应的行,如果没有会自动填空
左表右表都不做限制,所有的记录都显示,不足的地方用null填充
FULL JOIN表示emp和dept做一个全连接
ON表示触发条件 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)