SQL(结构化查询语言)一种对关系数据库中的数据进行定义和操作的句法,为大多数序号12数据库名oraclesql server my sqlaccess excelexcel能查询的常见数据3库45示例(查询出data工作表中:中文名,职业,城市三个字段的SELECT 中文名,职业,城市 from [data$] 条件查询 Where解释:在条件满足的情况下,从数据库表中挑选出字段1,字段2…的记录select * from [data$] where 类型=\"笔记本\"序号关键字注释1and与2or或3not非4null空select * from [data$] where 销售日期>#2013-1-6# IN 操作符允许我们在 WHERE 子句中规定多个值。逻辑运算符IN运算符写法:select 字段 from [表名$] where 字段 in(值1,值2,….)注释:如果在in的条件中不是数值类型,一定要加引号\" '' 2.实例应用(列出品牌为“联想”和“惠普”的记录?)BETWEEN 操作符select * from [data$] where 品牌 in (\"联想\BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期写法:select 字段 from [表名$] where 字段 BETWEEN 条件A AND 条件B1. LIKE 操作符用于在 WHERE 子句中搜索列中的指定模写法:select 字段 from [表名$] where 字段 LIKE 条件2.模糊匹配必定会用到通配符:通配符%_[ ]条件始于非始于止于非止于包含不包含备注相当于*,任意多个字符相当于?,任意单个字符类似于正则中的字符组表达式like \"李%\"not like \"李%\"like \"%梅\"not like \"%梅\"like \"%春%\"not like \"%春%\"示例select * from [data$select * from [data$select * from [data$select * from [data$select * from [data$select * from [data$3.关于%通配符LIKE 操作符4.关于\"_\"通配符示例表达式like \"__\"select * from [data$] where 姓名 likelike \"李__\"select * from [data$] where 姓名 like5.关于\"[...]\"字符组范围字母表达式[A-Z]示例select * from [data$select * from [data$数字[0-9]select * from [data$汉字[一-龢]select * from [data$非字符组范围[!...]1. \"&\"连字符就是将不同单元格的内容连接起来。但有2.查询出1月份和尚头的记录连字符(&)select * from [data$] where 月份&品名=\"1月份和尚select * from [data$] where 月份=\"1月份\" and 品名3.查询出1月份4月份和尚头的记录?select * from [data$] where 月份&品名 like \"[14]月份和尚嵌套查询(子查询)select * from [data$] where (月份=\"1月份\" or 月份实际上就是select语句中再放select语句实例 :利用子查询做筛选select * from [data$] where 姓名 like (select * ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。写法:select 字段 from [表名$] order by 字段 [ASC;DESC]select * from [data$] order by 总分 asc分组就是一种归类,如果学过excel,那么分组就相当于exce注释:分组要实现与合并计算一样的功能,要用到SQL中的聚 ORDER BY 语句写法:select 字段 from [表名$] group by 字段分组(group by)注释:如果只是分组,没有条件,并不需要where,这一点很查询出不重复职业select 职业 from [data$] group by 职业select distinct 职业 from [data$]别名:意思是可以给原来的字段,新字段,数据源表取别名 UNION (合并)作用:取别名的意义在于能简化公式,更好的表达语句重新给新字段命名select *,北京+上海+成都 as 总量 from [data$] where (北京+上海+成都)>30select * from (select *,北京+上海+成都 as 总量 from [data$]) where 总量>30UNION 操作符用于合并两个或多个 SELECT 语句的结注释1:UNION 内部的 SELECT 语句必须拥有相同数量同时,每条 SELECT 语句中的列的顺序必须相同。写法: select 字段 from [表名$] union select 字段 from 合并多表记录select * from ['1月$'] union all select * from ['2月$'] 合并多表不重复记录select * from ['1月$'] union select * from ['2月$'] un union all 与union区别union all连接多表的所有记录; union 查询不重复记录,1.左外连接2.右外连接select t1.姓名,t1.工资,t2.奖金 from [工资$] t1 left outer join [奖金$] t2 on t1.姓名=t2select t2.姓名,t1.工资,t2.奖金 from [工资$] t1 right outer join [奖金$] t2 on t1.姓名=
select t2.姓名,t1.工资,t2.奖金 from [工资$] t1 right outer join [奖金$] t2 on t1.姓名=工资,t2.奖金 from [工资$] t1 left outer join [奖金$] t2 on t1.姓名=t2.姓名3.全外连接1.两表INNER JOIN连接select t1.姓名,t1.总分 as 期中总分,t2.总分 as 期末总分select t1.姓名,t1.总分 as 期中总分,t2.总分 as 期末总分select t1.姓名,t1.总分 as 期中,t2.总分 as 期末,期中+期实质上就是常见的汇总函数,如求和,最大,最小等等序号1聚合函数:2345函数名SUMAVGMAXMINCOUNT作用求和平均最大最小计数select 单位,sum(产量) as 总产量 from [demo1$] gro1.SWITCH函数是类似工作表函数IF。进行条件判断。然后返SWITCH表达式:switch (表达式1,结果值1…...表达式14,结果select *,switch (成绩>=90,\"优\1.IIF函数与工作表函数IF一样IIFIIF最多只能嵌套14层IIF(条件,true,false)select 姓名,语文,iif(语文>90,1,0) as 红花数 from [成绩1.INT 是一个取整函数select *,int(数量/[个/箱]) as 箱数,(数量/[个/箱]- int(数mod运算符是求余数。写法:被除数 mod 除数select *,int(数量/[个/箱]) as 箱数,数量 mod [个/箱] as从左提取函数(按字符)从右提取函数(按字符)select 员工编号,left(姓名,1) as 姓氏 from [员工表$]是根据第1参数的结果,在后面的对应位置给出结果CHOOSE(表达式,值1,值2,值3….值28)如果表达式的结果有小数,则取整。select *,choose(分数/10,\"差\从指定位置开始提取字符(按字符)语法结构:mid(字符串,提取起始位置,提取长度)select *, mid(\"差差差差差中中良优优\字符长度提取(按字符数)INSTR([查找起始位置],查找区域,查找关键字)select 地址,left(地址,instr(地址,\"市\")) as 市名 from [dREPLACE函数是一个查找替换函数,类似于工作表的查REPLACE(查找区域,查找内容,替换内容)select sum(replace(工作时间,\"小时\select 姓名,len(姓名)-len(replace(姓名,\"、\去除两头的空格,字符串有空格则会保留select *,trim(right(replace(编码,\"-\ String(number,string) 返回string首字符重复numbeselect string(6,\"好\")INTMODLEFTRIGHTCHOOSEMIDLENINSTR REPLACE TRIM函数String函数String函数2.替换部分内容select *,string(instr(管理层待遇,\"-\")-1,\"×\")&mid(管理格式结果备注general date1996/11/28 12:29:32long date1996年11月28日medium date96-11-28short date1996/11/28long time12:29:32medium time12:29 下午short time12:29aaa周四aaaa星期四d28提取天数dd28提取天数,以两位数表示dddThuddddThursdayddddd1996/11/28dddddd1996年11月28日w5一周的第几天,默认周日为第1天,如果周一为第1天则格ww48返回一年中的第几周m11提取月数mm11提取月数,以两位数表示mmmNovmmmmNovembery333一年中的第几天yy96年份中的后两位yyyy1996q4返回季度h12hh12n29nn29s32ss32ttttt12:29:32返回完整的时间am/pmpm判断上午还是下午,a/m ,AM/PM同理0数字占位符#数字占位符@文字占位符!强制显示\\强制显示>转为大写<转为小写序号123函数yearmonthday说明提取年提取月提取日条件分组 Having:TRANSFORM4now()现在日期时间5date()现在日期6dateadd起始日期之前之后的日期7datediff两个日期间的日期日期单位说明参数说明yyyy年q季度m月y某年的某一天d某月的某一天w某星期的某一天ww周h时n分s秒但如果我们想对汇总的结果再一进行条件筛选应该怎么那么我们可以用一个叫做having的子句,having子句与不过它是针对group by汇总后的进行的条件筛选2.根据demo1表的数据源筛选出各农作物总产量大于100select 农作物,sum(产量) as 总产量 from [demo1$]3.根据demo2表中的成绩统计出每个人的平均成绩大于8select 学号,姓名,format(avg(成绩),\"0.0\") as 平均4.根据demo3筛选出demo4中要记录,条件为:考试成绩select t1.* from [demo4$] t1 ,(select 学号 from count(成绩)>1) t2 where t1.学号=t2.学号解题思路:1.首选用where筛选出不及格的记录2.再统计筛选出两次及以上不及格的学号3.再根据第二步的结果,在demo4表中查询出相对应的结可以实现像透视表一样的显示结果TRANSFORM 聚合函数(汇总方式) SELECT 行标签 from 表名 group by 行字段 PIVOT 列标签
大多数关系数据库管理系统所支持的工业标准字段的记录)字段1,字段2…的记录1-6# or 单价>6000ere 字段 in(值1,值2,….)一定要加引号\" '' (\"联想\的数据范围。这些值可以是数值、文本或者日期。指定模式。BETWEEN 条件A AND 条件Bdata$] where 姓名 like \"李%\"data$] where 姓名 not like \"李%\"data$] where 姓名 like \"%梅\"data$] where 姓名 not like \"%梅\"data$] where 姓名 like \"%春%\"data$] where not 姓名 like \"%春%\" like \"__\" like \"李__\"data$] where 英文名 like \"[a-cw-z]%\"data$] where 出生年月 like \"198[0-2]%\"data$] where 姓名 like \"[张李陈王]%\"data$] where 身份证号 like \"%[!13579]\" and 英文名 like \"[a-c]%\"。但有时却能体现出它的另外的价值。份和尚头\"d 品名=\"和尚头\"份和尚头\"r 月份=\"4月份\") and 品名=\"和尚头\"ct * from [基础讲解$j5:j6])。DESC]excel中的合并计算,分类汇总中的聚合函数[后续课程会讲到]一点很多初学容易出错!字段
源表取一个另外的名字。达语句。data$] where (北京+上海+成都)>30as 总量 from [data$]) where 总量>30句的结果集。同数量的列。列也必须拥有相似的数据类型。。
段 from [表名$]2月$'] union all select * from ['3月$']$'] union select * from ['3月$']记录,并排序left outer join [奖金$] t2 on t1.姓名=t2.姓名right outer join [奖金$] t2 on t1.姓名=t2.姓名 right outer join [奖金$] t2 on t1.姓名=t2.姓名 union select t1.姓名,t1.oin [奖金$] t2 on t1.姓名=t2.姓名末总分 from [期中$] t1 inner join [期末$] t2 on t1.姓名=t2.姓名末总分 from [期中$] t1, [期末$] t2 where t1.姓名=t2.姓名中+期末 as 总分 from [期中$] t1 inner join [期末$] t2 on t1.姓名=t2.姓名小等等。$] group by 单位然后返回一个值对应的值。,结果值14)最多只能写14个条件成绩>=60,\"中\ [成绩表$]nt(数量/[个/箱]))*[个/箱] as 个数 from [data1$]箱] as 余下个数 from [data2$]表$]果
\"中\1) as 等级 from [demo2$]字)
m [demo1$]表的查找替换 时数 from [demo1$]+1 as 人数 from [demo2$]尺码 from [demo2$]mber次数的字符串。d(管理层待遇,instr(管理层待遇,\"-\"),50) as 去姓名 from [demo$]位数表示几天,默认周日为第1天,如果周一为第1天则格式为:format(日期,\"w\中的第几周,以两位数表示还是下午,a/m ,AM/PM同理后的日期该怎么办呢?子句与where条件语句基本类似于10000的各农作物总产量。mo1$] group by 农作物 having sum(产量)>10000大于80的结果 平均成绩 from [demo2$] group by 学号,姓名 having avg(成绩)>80试成绩两次不及格的。from (select * from[demo3$] where 成绩<60) group by 学号 having学号
应的结果行标签 from 表名 group by 行字段 PIVOT 列标签