可以看成前面和后面的双层for循环
exists后面如果的语句,每次执行如果返回ue,前面的语句就会执行,如果每次执行返回false,前面的语句就不执行。就这么简单
例子1:
外面第一次循环当a.aid=1的时候里面可以能够有数据,所以前面打印1
外面第二次循环当a.aid=2的时候能够有数据,所以前面打印2
外面第三次循环当a.aid=3的时候没有数据,所以不打印例子2:
外面第一次循环,当a.aid=1的时候有数据,所以打印1
外面第二次循环.当a.aid=2就不成立.不打印...例子3:
外面第一次循环,里面也循环成立打印
外面第二次循环,里面也循环成立打印
外面第三次循环,里面也循环成立打印CASEWHEN用法
第一种格式:简单Case函数:
格式说明 case列名 when条件值1en选择项1 when条件值2en选项2....... else默认值endeg: select
case job_level
when'1'en'1111'
when '2'en'1111'
when '3'en'1111'
else'eee'end
fromdbo.emloyee第二种格式:Case搜索函数
格式说明 case when列名=条件值1en选择项1 when列名=条件值2en选项2....... else默认值endeg: udateemloyee
sete_wage=
case
whenjob_level='1'ene_wage*1.97
whenjob_level='2'ene_wage*1.07
whenjob_level='3'ene_wage*1.06
elsee_wage*1.05
end提示:通常我们在写CaseWhen的语句的时候,会容易忘记end这个结束,一定要记得哟!
比较:两种格式,可以实现相同的功能。
简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
Grouby
英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
注意:聚合函数是—sum()、count()、avg()等都是“聚合函数”
我们先查询所有性别
selectlocation_namefromtestlocation_name
Chain
Chain
UK
US
selectlocation_namefromtestgroubylocation_namelocation_name
Chain
UK
US
selectlocation_name,count(location_name)fromtestgroubylocation_namelocation_name
count(location_name)
Chain
2
UK
1
US
1
需要注意having和whe的用法区别:
1.having只能用在grouby之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
2.whe肯定在grouby之前。
3.whe后的条件表达式里不允许使用聚合函数,而having可以。
补充:having用法
同样使用本文中的学生表格,如果想查询平均分高于80分的学生记录可以这样写:
SELECTid,COUNT(course)asnumcourse,AVG(sco)asavgscoFROMstudentGROUPBYidHAVINGAVG(sco)>=80;补充:常用函数
函数名作用AVG()返回某字段的平均值COUNT()返回某字段的行数MAX()返回某字段的最大值MIN()返回某字段的最小值SUM()返回字段的和CONCAT字符串连接SELECTCONCAT('my','s',ql');(s1,s2...)返回:mysqlINSERT字符串替换SELECTINSERT('这是SQLServer数据库',3,10,'MySQL');(s,os,len,news)返回:这是MySQL数据库LOWER将字符串转为小写SELECTLOWER(MySQL);(s)返回:mysqlUPPER将字符串转为大写SELECTUPPER(MySQL);(s)返回:MYSQLSUBSTRING字符串截取SELECTSUBSTRING('JavaMySQLOracle',5,5);(s,num,len)返回:MySQL