SQL基础语句.docx
《SQL基础语句.docx》由会员分享,可在线阅读,更多相关《SQL基础语句.docx(34页珍藏版)》请在冰点文库上搜索。
1、SQL基础语句第1章、简单查询语句一、基本查询语句1
SQL基础语句.docx 《SQL基础语句.docx》由会员分享,可在线阅读,更多相关《SQL基础语句.docx(34页珍藏版)》请在冰点文库上搜索。 1、SQL基础语句第1章、简单查询语句一、基本查询语句1、基本的语法格式:【select(SQL关键字)distinct(滤除重复记录) * /列名称 别名 from table;】2、书写SQL语句遵循的基本原则:不区分大小写,除非特别指定;可以写成一行或多行;关键字不能简写或分割于多行;子句通常单独行书写,便于编辑和提高可读性;使用Tab和缩进提高程序可读性;关键字最好使用大写,其他使用小写;在SQL*Plus中,SQL语句是在SQL prompt状态下输入,并且每行都有编号。是SQL的缓冲区,任何时候在缓冲区中只会存放当前一条语句。3、| | 表示列与列、列与算术表达式、列与常量之间的合成。 2、第2章、限定查询和排序语句1、限定数据行的查询语法格式:【select distinct */ 列名称 别名 from table where(限定条件)列名/表达式/常量/比较运算符;】(其中比较运算符包括:=:等于、:大于、=:大于等于、:小于、=:小于等于、.!=.=:不等于。(要查询的列)between(下限)and(上限):两个值之间包括边界范围比较。 (要查询的列)in (集合,用逗号隔开):和多个值中任意一个匹配,相当于多个or并列在一起。 (要查询的列)like+通配符和查询的内容:模糊查询、is null:是否是空值)1.1、where子句中,字符串和日期数值必须用单引号引起 3、来,数值型常量则不需要,字符型数据区分大小写,默认的日期形式是:DD-MON-YY。1.2、like(模糊查询):把握不准查询确切的值,通过字形匹配来查询。可以使用通配符:%:表示0或更多任意的字符;:代表一个字符。可以同时使用。当查询的内容包括%或时,可以使用escape,即“/”转义符。1.3、逻辑运算符:andTrueFlaseNullTrueTFNFlaseFFFNullNFNortrueFalseNullTrueTFTFlaseTFNnullTNN Not::如果条件为假则返回真值。在where子句中。通过使用and和or在where中使用多个条件。1.4运算符优先规则:算数运算符连 4、接符比较运算符notandor。2、order by 子句:查询结果按照某种顺序排列显示。 order by 子句语法格式:【select distinct */ 列名称 别名 from tablewhere(限定条件)列名/表达式/常量/比较运算符Order by (要查询的列) asc(生序排列)/desc(降序排序);】注意:order by子句必须放在select语句的最后,并且可以指定一个参与排序的表达式或别名。可使用别名进行排序。Select语句中只能有一个order by 子句。2.1、默认的排序方式是升序,不同类型数据的升序排列原则: 数值型数据按照从小到大的顺序排列的; 日期 5、型数据按照时间从早到晚的顺序排列的; 字符型数据按照字母顺序排列的; 空值在升序排列方式下排在最后,降序排列排在最前。SQL运行过程:from首先运行,where其次运行,select再运行,order by 最后运行。对查询结果进行排序。第3章、单行函数查询1、单行函数的特点: 对查询返回的每一行都起作用。 可以返回一个数据值或相对于原类型不同类型的数据值。 可以有一个或多个参数,参数可以是一列或一个表达式。 每行返回一个结果。 可以用于select、where、order by子句,并且可以相互嵌套。 只对一行进行操作。2、单行查询语法格式:【function_name(函数名称) col 6、umn(列名)/ expression(字符串或计算表达式) arg1(参数),arg2】3、字符函数:接受字符输入并且返回字符或数值。 大小写转换函数:lower(需转换的内容):将字符串转换成小写。Upper(需转换的内容):将字符串转换成大写。initcap(需转换的内容):将每个单词的第一个字母转换成大写,其余字母转换成小写。字符处理函数:concat:将字符串连接在一起。substr:提取字符串的某一特定部分;参数:(字符串,截取起始点负数:从右往前数,然后从前往后截取,截取个数省略表示截取到最后)。 length:获得字符串的个数。instr:在字符串中查找某个字串的位置;参数(字 7、符串,要查找的字符,从那个位置开始查找默认值为1,负数:一直从右往左数,第几次出现的位置)。lpad:以右对齐的方式填充字符型数据;参数:(字符串,填充长度,填充内容)。rpad:以左对齐的方式填充字符型数据(参数同上)。trim:去掉字符串头部或尾部,如果被去除的字符串和被处理的字符串是原义字符串则必须使用单引号引起来;参数:(去掉的字符串 from 被去掉的字符串)。replase:替换;参数(字符串,被替换字符,替换的字符)。4、数值函数:接受数值输入并返回数值。包括:round:四舍五入;参数:(数字,四舍五入后的小数点后位数默认值为0,负数为从小数点往左边数)。trunc:截取;参数 8、:(数字,截取后小数点后面的位数同上,但无四舍五入功能)。mod:求余,多用于判断奇数偶数;参数:(被除数,除数)。5、日期函数:对日期型进行操作,所有的日期函数都返回一个日期型数据,除了months_between函数,返回一个数值。Oracel9i默认的显示和输入形式是DD-MON-RR。Oracel有效的日期范围是公元前4712年1月1日到公元9999年12月31日。日期的运算如下表:操作结果描述日期+数字日期在某日期的基础上加上一定的天数日期数字日期在某日期的基础上减去一定的天数日期日期天数一个日期减去另一个日期(相差天数)日期+数字/24日期在某日期的基础上加上小时 Sysdate: 9、当前系统时间。 day:对星期的计算。YY与RR的比较:转换的时间系统当前时间YYRR0-4950-990-4950-990-49本世纪本世纪本世纪上个世纪50-99本世纪本世纪下个世纪本世纪5.1常用日期函数:日期函数参数含义months_between(date1,date2)date1、date2为两个日期两个日期相差的月份数量结果可正可负add_months(date,n)date为一个日期n为月数向指定日期加上若干月数n是整数。负数为累减next_day(date,char)char:星期几或字符串date之后一周内的星期几或字符串last_day(date)date:某日期求dat 10、e所在月的最后一天round(date,fmt)fmt:指定的格式,如monthyear等,默认为DD将date按照fmt的格式进行四舍五入,若不指定fmt则四舍五入为最近的天trunc(date,fmt)fmt:指定的格式,如monthyear等,默认为DD将date按照fmt的格式进行截取,若不指定fmt则截取为最近的天6、转换函数:从一种数据类型转换为另一种数据类型。6.1数据类型的显示转换:6.2数据类型转换函数包括如下:转换函数参数含义to_char(date/number,format,nlsparams)format:日期格式参数(如下)。未指定的默认的格式为DD-MON-RR。 11、将date或number数据按照fmt形式转换成字符串to_number(string,format,nlsparams)format:数字格式参数(如下)。nlsprams:指定小数点或千位分隔符或货币符。将String按照限定格式转换成number类型的数值to_date(string,format,nlsparams)format:日期格式参数(如下)。nlsprams:指定返回日期所使用的语言。将String按照限定格式转换成date类型的数值6.3日期、数字格式参数如下:日期格式参数含义数字格式参数含义yyyy完整的年份表示9表示一位数字year年份的英文表示0显示前导零,即占位mm 12、2位数字表示月份$显示美元符号month月份的英文表示L显示本地货币号dy3个英文字符缩写表示星期几显示小数点day星期几完整的英文表示,显示千位符dd几号的数字表示S为数据加前导或后继+、号B小数点后数据用0显示6.4使用日期模式时注意的问题: 必须用单引号引起来,对大小写敏感。 可以包含任意的有效的日期元素。 可以用fm消除前导空格或前导0。 使用,与日期型数据分隔开。7、通用函数:nvl函数与decode函数如下:通用函数语法格式参数含义nvl函数nvl(expr1 , expr2)expr1expr2数据类型要一致expr1:包含空值的源或表达式expr2:将null转换后的目标值将n 13、ull转换成一个实际的值decode函数decode(col/expr,search1,result1,search2,result2,default)col/expr:列名或表达式search1searchi:比较条件result1resulti:返回值col/expr与searchi相比较,结果相同则返回resulti;若没有相匹配的结果则返回默认值default8、单行函数的嵌套:嵌套的函数是从里层向最外层的顺序依次计算的。第四章、多表查询1、连接:从多个表中获取数据时,需要使用连接条件。通过使用相对应列的公共值进行连接,需在where子句中写出连接条件。1.1连接语法格式如下:【 se 14、lect table1column, table2columnfrom table1,table2 where table1column1=table2column2 】注:table1column:指明查询的数据来源的表名和列名;table1column1:连接条件。连接条件的情况包括:等值连接(内部连接或简单连接),非等值连接,外部连接,和集合运算符。1.2在编写访问多表的SQL语句时,需注意的问题: 用到表连接时,需要在列名之前标示出表名,以提高数据库的访问效率。 多个表中存在相同的列名时,列名之前必须用表名标示。 n个表相连时,至少需要n-1个链接条件。1.3连接中使用表的别名需注意的 15、事项:表的别名=30个字符,但原越短越好;若在from语句中定义了表的别名,在整个select语句中必须使用别名;表的别名要具有一定的意义;表的别名只在当前select语句中有效。2、笛卡尔积:当连接条件无效或完全被省略以及第一个表中的所有行和第二个表中的所有行都发生连接时,所有行的组合都出现,这种结果称为笛卡尔积。是一种交叉连接,当需要产生大量的数据行模拟海量的数据时才会用到。3、等值连接(内部链接):在where子句中用“and”加入其它条件进行连接。例:select empempno,empename,empdeptno,deptdeptno,deptloc from emp,dept 16、where emp.deptno=dept.deptno and emp.deptno=10; 查询在10号部门工作的雇员的编号、姓名、部门编号和部门位置。4、非等值连接:不用“=”的连接为非等值连接。例如:5、外部连接:在SQL: 1999中,内连接只返回满足连接条件的数据。 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接。 两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为全外联接。 外部连接的运算符是(+),语法格式如下:右外 select table1.column,table2 17、.column 左外 select table1.column,table2.column from table1,table2 或 from table1,table2连接 where table1.column (+)=table2.column; 连接 where table1.column =table2.column(+);(+)在哪边,哪边就用空白填充,即值为null。在连接时,允许出现不匹配的记录。 使用外部连接注意的事项:(+)必须放在连接条件表达式的一侧,即缺少相关连接信息的表一侧,返回该表中那些在另一个表中没有得到匹配的记录;外部连接条件中不能使用in运算符,也不能用or运 18、算符与其他条件相连。6、自身连接:一般在人事系统当中使用自连接,因为再高级的领导,在财务人员来看,他们也是员工。7、SQL:1999语法连接:使用连接从多个表中查询数据。1999语法连接的语法格式如下:【 select table1.column, table2.column table1.column:从哪个表哪个列中查询数据from table1 table1:表名cross join table2 或 cross join(交叉连接):返回两个表的笛卡尔积(连个表的交叉连接) 可单独使用natural join table2 或 natural join(自然连接):用相同名称的列连接两 19、个表,可单独使用join table2 using (column_name) 或 指定实现等值连接的列名join table2 on (table1.column_name = table2.column_name) 或 在on子句中指定实left或rinht或full outer join table2 现等值连接的条件 on (table1.column_name = table2.column_name);】 left或right或full outer外部链接的方式8、自然连接:natural join实现具有列名和数据类型相匹配的两个表之间的自动连接。可以写成等值连接方式;若要使用其 20、他连接方式可以通过where子句实现。注意事项: 自然连接子句基于两个表存在相同名称的列; 返回两个表相匹配列中具有相同值的记录; 如果相同名称的列的数据类型不同,则会产生错误。9、using子句连接:使用时注意的问题:在natural join 子句创建等值连接时,如果有多个名字相同,数据类型不同的列,那么可以使用 using 子句指定等值连接中需要用到的列。 使用 using 可以在有多个列满足条件时进行选择相匹配的一列进行查询。 不要给选中的列使用表名和别名作为前缀。 自然连接不能和on和using子句同时使用,因为自然连接特别定义了连接表所用的搜索条件两表中具有相同字段名的所有字段必须 21、匹配。10、 用on创建连接:自然连接中是以具有相同名字的列为连接条件的。可以使用 on 子句指定任意的或特殊的列作为连接条件进行查询。 这个连接条件是与其它条件分开的。 on 子句使语句具有更高的易读性。第5章、组函数和分组统计1、组函数:组函数作用于一行数据的集合,并对一行数据集合返回一个值。要写在select子句后面。1.1、组函数的语法格式如下:【 select column, 组函数参数(column 列名), .from tablewhere condition where条件group by column 分组子句drder by column; 】 按照某种顺序排列 放在最后1 22、.2、常用组函数参数如下:组函数参数变量参数说明含 义说 明count(* / distinct / all expr)*:包括重复行和空值行;expr:非空行;根据where子句的条件查询行的总数。表中行的总数*含空值,expr不含Avg (distinct / all n)列的平均值均忽略空值max (distinct / all sxpr)列的最大值min (distinct / all sxpr)列的最小值stddev (distinct / all x)列的标准差sum (distinct / all n)列的总和variance (distinct / all x)列的统计方差注: 23、avg、sum、variance、stddev函数只能用于数值型的列;min、max可用于任何类型数据。1.3、组函数使用原则:使用distinct排除重复值,all包括所有值,默认情况下,为all,所以不用专门指出all。 参数的数据类型类型可以是:char、varchar2(字符串)、number、date。 除了count(*),所有组函数均忽略空值,可以使用nvl函数将空值转换成一个实际值。 当使用order by子句时,结果集合按升序排列,要改变排列方式则在order by子句中使用desc关键字。2、group by子句:可以使用group by 子句将表中的数据分成若干组;在se 24、lect 列表中所有未包含在组函数中的列都应该包含在 group by 子句中;包含在 group by 子句中的列不必包含在select 列表中。必须放在where子句后面。group by 子句使用原则:在select子句中使用组函数,就不能同时查询出个体信息,除非在group by 子句中包含了所指定的列;如果未能包含列组成的列表,将得到一个错误提示; 使用where子句时可以在分组前将某些记录排除;group by 子句必须包含指定的列;group by 子句中不能使用列的别名。3、使用函数组的非法查询:所用包含于select 列表中,而未包含于组函数中的列或表达式都必须包含于 gro 25、up by 子句中;不能在 where 子句中使用组函数;可以在having 子句中使用组函数。错误:1)、此处不允许使用分组行数。解决办法:使用having子句纠正。2)、非单组分组函数。解决办法:增加group by子句纠正。4、having 子句:使用 having 过滤分组:行已经被分组。使用了组函数。满足having 子句中条件的分组将被显示。在组函数结果基础上对记录加以限制,则必须在使用group by 的同时使用having子句。当使用having子句时,Oracle服务器执行过程:对记录分组;在分组基础上应用组函数;与having子句匹配的组结果输出。having子句可放在gr 26、oup by 子句前或后,但逻辑上放在后比较合适。第6章、子查询1、子查询:是嵌套在select语句中的另一个select语句Mssql基本语句,当需要从一个表中查询信息,而查询的条件又是来自该表本身的内部数据时用到。可以嵌于where、having和from子句中。子查询 (内查询) 在主查询之前执行,并且只执行一次。 子查询的结果被主查询(外查询)使用 。可以在select语句的form子句中使用子查询,就像使用视图一样。1.1、其语法格式如下:【 select select_list from table where expr operator ( select select_list from tabl 27、e ) 】 其中:select_list:列名;expr operator:运算符,包括(,=,=,=,=,=。 单行子查询中可以使用组函数; having子句中可以使用单行子查询,首先执行子查询,向主查询中的HAVING 子句返回结果。 使用单行子查询的复合查询容易出现的问题:子查询的结果多于一行;结果没有返回的行。2 多行子查询:内部select语句返回多行结果的查询(单列)。使用多行运算符:in,any,all。 any运算符(同义运算符some)将和子查询的结果逐个比较:any表示大于最小数;=any等效于in。 all运算符和子查询返回的每一个结果进行比较:all表示大于最大数;al 28、l表示小于最小数。 not运算符可与in、any、all运算符联合使用。 多列子查询:内部select语句返回多个列结果的查询。单行和多行子查询只有一个列在select语句的where或having子句中进行比较,若同时进行多列比较,则必须使用逻辑运算符编写一个复合where子句,多列子查询可以将where子句中的多个条件合并成一个。多列子查询分为:成对比较多列子查询:主查询的每一行中的列都要与子查询返回列表中相对应的列进行比较,只有各个列完全匹配时才显示主查询中的该数据行。非成对比较多列子查询。1.4、子查询中的空值:无论什么时候只要空值有可能成为子查询结果集合中的一部分,就不能使用not 29、in运算符,not in运算符等效于all。1.5、在什么时候遇到什么问题应该使用子查询。 Sql语句在逻辑上被分为多步。 主查询的查询条件依赖于子查询的执行结果。 在查询是基于未知的值时应使用子查询。 除非特别需要,一般我们建议大家使用连接的方式,尽量避免使用子查询。第7章、使用替代变量在SQL语句中使用&来识别每一个变量而不需要定义变量的值。课本94页。第8章、数据操作1、DML 可以在下列条件下执行: 向表中插入数据; 修改现存数据;删除现存数据。2、事务是由完成若干项工作的DML语句组成的逻辑单位。3、基本的插入语句语法格式如下:【insert into table (column , column.) table:被插表名;column:列名;values (value , value.); 】 values:要插入的数 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |