sql的部分总结

1.      查询语句中的每个子句(以Oracle为主)

SELECT:是查询语句中最基础的语句,基本每条查询语句中都会有SELECT语句。

from语句:和SELECT语句一样,是查询语句中最基本最常用的语句,但是在某些特殊情况下,在SQLserver、MySQL、postgreSQL等数据库中可以省略from子句,但是Oracle中绝对不能省略from子句,否则会报ora-00923错误:

         Where子句:对需要查询的数据进行条件限定,会对表中的数据进行筛选,选择出最符合条件的记录,where子句后一般返回值都是true、false和unknown三种,只有当结果为true时才会选择行记录:

对数据进行条件限定列I>7,表中的数据会逐条的和7进行比较,当值大于7时,此行记录会被选中并输出。

         Groupby子句:对所有的数据通过某一条件进行分组。如果一条查询语句中使用了group by子句,SELECT子句中只能出现1.常数2.聚合函数3.group by子句中出现的列,否则会报ora-00979错:

         Having子句,对group by子句中分成的组进行条件限制,和group by子句一样,having子句中也只能出现1.常数2.聚合函数3.group by子句中出现的列。

这样就可以对group by子句分好的组进行条件限制了。

         Order by子句:对查询好的数据进行排序,默认为升序排列,也可以通过desc选项对数据进行倒序排列。Order by子句既可以既可以对某一行进行排序,也可以对某几行进行排序,order by子句可以影响所有被查询出的数据。

Order by子句即可以像第一次执行的语句对其中一列进行排序,也可以像第二次执行对几列同时进行排序。需要注意的是,orderby子句可以对通过列号进行排序:

但是这样会增加代码的阅读难度,所以不建议使用列号对数据进行排序。

对于查询语句来说,所有关键字的顺序是不能改变的,

select>>from>>where>>group by>>having>>order by

必须以这样的顺序进行代码编写,虽然我们的代码编写顺序是这样的,但是对于数据库执行代码的时候,却是另外一种顺序:

From>>where>>groupby>>having>>select>>order by

任何查询语句开始执行时,数据库会第一时间通过from子句找到数据所在的表,然后通过where、group by和having子句对所有的数据进行条件限定,然后通过SELECT语句选择需要显示的列,最后通过group by子句进行排序。

2.      查询语句中的函数

1.      字符型函数:

Lower:字符小写转换函数,可以将字符串中的英文字符转换成小写

Upper:字符大写转换函数,可以将字符串中的英文字符转换成大写

Concat:字符串连接函数,可以将两个字符串进行连接(在Oracle中此函数只允许有两个参数)

如果参数大于2会报ora-00909错误

Substr:字符截取函数,可以截取从指定位置往后N位字符

数据库会将空格视为一个字符,所以这里函数的结果是’ello ‘;

Length:字符串长度截取函数;

2.      数字函数

Round:四舍五入函数,参数2是指定四舍五入哪一位,1是小数点后1位,-1是小数点之前1位,不加就是小数点后0位;

                

Trunc:数字截取函数(参数2代表的意义和round函数一致);


Mod:对两个参数进行取余数操作

3.      日期函数:

Months_between:查询两个日期之间相差几个月,返回值是数值类型

由于返回的数值保留多位小数,所以在使用此函数时可以加上round函数,对数值进行四舍五入操作。

Add_months:给一个日期增加月份(增加的是月份,不是天数)

Round:对日期进行四舍五入操作

函数对年进行操作时,是6舍7入,对月份进行操作时,是15舍16入;

4.      转换函数

Cast:将一个数据类型转换成另外一种数据类型

可以看到函数将字符串‘0001’转换成数字类型后返回值是1

Coalesce:返回第一个不是空值的数据:

对数据进行操作时,参数2不是空值,所以返回值是1,参数3和参数4不进行操作。

5.      聚合函数(是一种单行函数,输入多行数据,只返回一行数据)

Sum:求和函数

 Avg:求平均函数

 Max:求最大值

 Min:求最小值

count:计数函数(count(*),count(1)都会计算null值,count具体的某一列时,不计算null值)


对于聚合函数需要注意的是

    1.如果没有group by子句,聚合函数不能和表中其他的列同时使用,会报ora-00937错误:

    2.对于max/min函数,适用于任何数据类型,对于sum/avg函数只使用于数值类型,原因是对于其他数据类型的数据进行求和、求平均操作是没有实际意义的。

3.      查询语句中的谓词:

Like:对数据进行模糊查询(对于Oracle数据库,使用函数时%可以代替多个字符,_可以代表单个字符)

当只需要字符串部分一致时,可以用谓词like实现

 Between..and…:对数据进行范围限制

In:可以对数据进行多数据匹配查询:

可以对数据进行多值匹配查询,in列表中的值可以是任何和条件限定的列中数据类型相同的值;

4.      表的加减法:

1.      表的加法union:可以将两个表中的值全部列出,并且union可以删除两个表中的重复行


使用union时需要注意:

1.      两个被查询的数据的列数必须相同

2.      两个被查询的数据的列的数据类型必须相同

3.      可以用任何查询语句中的子句,但是order by子句只能用一次

如果想将两个表中所有的数据都显示出来可以使用union all;

 

这样就可以把两个表中所有的数据都显示出来了

2.      交集intersect:可以把两张表中相同的数据显示出来,并且会去重;


需要注意的地方和union是相同的。

3.      差集minus:可以查询出第一张表中第二张表上没有的数据(只适用Oracle,其他数据库是except)

这里需要注意的地方除了和union相同之外,还有一点,需要注意是那张表在先,哪张表在后,得出的结果是不一样的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值