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相同之外,还有一点,需要注意是那张表在先,哪张表在后,得出的结果是不一样的。