between
按照工资进行排序
select *from emp order by sal;默认是按照升序排序
select *from emp order by deptno,sal
聚合函数
select lower(ename) from emp; --最终返回的是14,lower()是单行函数
select max(sal) from emp; --返回1行,max()是多行函数
having对分组之后的信息进行过滤
having和where的区别
相同的
都是对数据过滤,只保留有效的数据
不同
where是对原始数据的过滤having只对分组之后的记录过滤
where必须的写在having的前面,顺序不可颠倒否则运行出错
having子句用来对分组之后的数据进行过滤,因此使用having时通常都会先使用group by
连接查询
select ... from A,B的用法
产生的结果:
行数是A和B的乘积
列数是A和B之和
把A表的每一条记录和B表的每一条记录组合在一起形成的是个笛卡尔积
mysql索引
mysql入门
- 字符要用双引号引起,实际上2000与2005,2008都允许单引号引起,但是oracle不允许。为了将来可以方便的移植代码,就定为字符统一由双引号引起。
- Select salary*12 as “年薪” from emp;
As是指定列名,因为salary*12 是计算出来的结果,所以这个结果没有列名,as可以省略。
- distinct 不允许重复的
例如:select distinct deptno from emp;
空值(null)被当做一个对象处理,对于两个输出项,则将两个合并为一个整体来判断是否相同
- SQL中用双横杠表示注释
- 讲课时要引导学生得出结论,由你来决定结果是否正确
- 做生意和谈业务就是要让客户跟着你走,理直气壮
- 谈生意的时候,不要听推销员则么说,最好是你问他答,这样他就不敢唬你了,或者你不说话,一直让他说。
- SQL中最重要的是执行顺序(这个地方在编程,在数据库,在shell处处都会存在,在编程中尤为重要,注意归类和总结)
- Select * from emp
Where sal=5000
--顺序:1.where sal=5000
2.selcet * from emp
- between 的用法
select * from emp
where sal between 1500 and 3000
- in 的用法
select * from emp
where sal in (1500,3000) -- 仅输出sal为1500和3000的行,in相当于一个数组
select * from emp
where sal not in(1500,3000)-- not in的用法
13.数据库中不等于有两种表示: != <> 推荐使用第二种 , 或取反为并 ,并取反为或
14.top 用法
Select top 2 *from emp
Select top 5 percent * from emp
Percent 是百分比
SQL server是用top来作分页的
Oracle是用rownum分页
什么时候用到分页?
当你的结果有很多(例如一万行),你就需要分页,来规定每页仅显示10个结果,比如百度和谷歌都是规定了每页可以显示多少个结果
虽然数据库都大同小异,但是由于各自使用的语言的不同,用一种语言无法完全实现代码的全移植。
可以使用中间软件写成代码,在选择要转换成何种数据库实体,生成与之匹配的代码。
完全跨平台是不可能的,但要尽量写的跨平台些。
15.Order by sal desc -- desc 降序
Order by 的用法
例: seclet top 4 *④
From emp①
Where sal between 1500 and 3000 ②
Order by sal desc ③
执行顺序是:①②③④
16.select * from emp
Where comm != null ①
<> null ② --这三个结果都是error
= null ③
总结:null不能参与<>,!=,=运算
要想用null,可以用Is,not is
Where comm is null
另外,零与null不一样, null是没有值,零一个值
零与null的区别:
Null 不参与<>,!=,=运算
Null不是一个值
任何值都可以是null,但如何值不能使零
17.select empno,ename,sal*12+comm “年薪” from emp
由于comm是奖金,有null的时候会导致sal*12+comm的结果为null,因为null不是一个值无法参与运算
那怎么解决这个问题呢?
将sal*12+comm换成sal*12+isnull(comm,0)
isnull(comm,0)意思是:如果comm是null,返回值为0
18.select * from emp order by deptno,sal
--order by 先排deptno,deptno相同了,再按sal排,并非把deptno,sal做为一个整体排序
升序 asc
降序 desc
对其中一个字段指定的排序标准不会影响到其他字段的排序,如果不指定排序标准默认为升序,推荐给每个字段指定排序标准。
19.模糊查询:搜索引擎会用到
Select *
From emp
Where ename like ‘%a%’;--注意应该用带引号引起,单引号音乐能够字符串,双引号用于对象的名字,这个地方经测试双引号结果为error
通配符:
% 任意多个字符
_ 下划线 1个字符
[a-f] a到f的任意单字符
[a,f] a或f中的一个字符 例子: ‘_[a,f]’
[~a-f] 不是a到f中的任意一个字符的其他字符
\ 转义字符,使得%不会因为是sql server保留字符而被当做任意字符来用。用法:’%\%%’ escape’\’这个的意思是查找内容中有%的名字,escape意思是逃脱,就是说明什么是转义字符