资源预览内容
第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
第9页 / 共34页
第10页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Day01SQL(structure query language)DB databaseDDL(data definition language)数据定义语言:create table/alter talbe/drop talbecolumn,data type,widthconstraintDML(Data manipulation language)数据操作语言:insert,update,delete(增,删,改)rowTCL(transaction(事务) control language)事务控制语言:事务核心语句:commit提交、rollback回滚DCL(grant授权 revoke收回权限)DQL(data query language)数据查询语言:selectR(关系型)DBMS数据库产商 数据库名版本oracle oracle10g oracle10.2.0IBM db2MS SQL serverSYBASE SEMYSQLORACLESID 数据库对应的实例的名字(即一个具体数据库的名称)创建数据库其实是创建了:数据文件,日志文件,操作文件。 SGA进程 instance与应用程序1.空值(NULL)在输入数据时,该字段没有指定值,并且没有空值不等于0空值不等于空格算术表达式中包含空值导致结果为空在算术表达式中包含空值需要用空值转换函数coalesce处理2.空值转换函数coalesce函数(通用)数据类型可以是数值number、字符character、日期date数据类型必须匹配NVL(p1,p2)函数(orale专用)nvl(p1,p2)if p1 is null thenreturn p2;elsereturn p1;end if;3.拼接运算符用于连接多个字段的值拼接在一起,特殊符号放在单引号里3.文字字符串用 单引号表示4.distinct关键字,去掉重复值从distinct开始到from中所有字段的联合中有重复的去重(注意,是联合起来的重复)distinct后跟多跟distinct应用到select后面所有列,所有列联合起来唯一如果select后面跟distinct关键字,一定是直接跟在select后面,前面没有任何内容。5.where的作用用where子句对表里的记录进行过滤1.)where子句跟在FROM子句之后2.)where子句后跟条件表达式列名、表达式(比如:salary12)、常 量比较运算符文字值3.)where子句后不能跟别名总结:1)where子句执行在前,select执行在后,别名不能放在where子句2)select salary*12 ann_sal from s_emp where salary*121200select salary*12 ann_sal from s_emp where salary1000(能提搞查询效率)salary可建立索引,索引的目的,提高查询效率3)where子句能不用表达式尽量不用表达式;4)where子句中的列为字符类型字符串必面用单引号括起来字符串是大小写敏感6.比较和逻辑运算符1)逻辑比较运算符 2)SQL比较运算符between and :表示一个范围,是闭区间orin表示一个集合,是离散值,含义为等于其中任意一个值,等价于 :anyin(X,Y,Z):表示符合X,Y,Z的 。等价于 dept = any(X,Y,Z),表示等于任意一个7.LIKE运筧符在字符串比较中,可用like和通配符进行查找通配符种类:与表示0或多个字符表示任意单个字符8.is null运算符is null是判断是否为空测试NULL值需要用IS NULL运算符NULL不能用等于()和不等于()跟任何值比较,包括它自身。所以 ,不能使用或来测试一列是否有空值9.is not null运算符表示不为空10.运算符的否定形式逻辑比较运算符!SQL比较运算符NOT BETWEEN ANDNOT IN ALL(并且关系,注意别让NULL在NOT IN里出现) IN(或者关系) NOT LIKENOT IS NULL11.ORDER BY子句用ORDER BY 子句查询出来的结果集进行排序ASC:升序,默认DESC:降序ORDER BY是SELECT语句中的最后一个子句ORDER BY执行于SELECT语句之后ORDER BY 之后可以跟字段名,别名,字段顺号,表达式(尽量不用)NULL值在排序中的显显升序显示在最后除序显示在前面(NULL值表示无穷大)按多列进行排序ORDER BY 后面的列可以不出现在SELECT后面Day02一、SQL函数的两种类型单行函数 字符类型(character)数值(number)日期(date)转换多行函数(组函数)1.单行函数where 后跟条件表达式,还可以跟单行函数表达式或函数的写法导致索引用不了大小写转换函数LOWER()转小写UPPER()转大写一般用于 insert语句中,便于以后操作(查询)方便,没有大小写限制参数为列名或常量,调常量,用from dual(系统表,只有一条记录)INITCAP()首字线大写concat()拼接 select concat(He,llo, World) Hello from dual;求子串:substr(string,1,3)参数:字符串,起始位,截取个数求长度:length(string)参数:字符串select substr(first_name,length(first_name)-1,2) from s_emp ;左对齐:lpad(string,返回长度,不够就补符号),位数不够的,左边补指定字符select deptno,lpad(deptno,5,) from dept;右对齐rpad()select deptno,rpad(deptno,5,!) from dept;数值函数四舍五入round(数,精度) 如round(45.723,2) 得45.72 round(45.723,1) 得50 round(45.723,1)得46截取trunc(数,起始截取点)如round(45.723,2) 得45.72round(45.723,1)得45-1表示保留到十位数,0保留到个位数,1保留一位小数,依此类推select round(44.723,-1) from dual;40select round(44.723) from dual;45select round(44.323) from dual;44select round(44.323,1) from dual;44.3select round(44.373,1) from dual;44.4系统自动调用的函数(隐式调用,oracle的自动转换函数一般都趋向于字符串转数值)to_number(数字字符),返回数值(注意一定要是数字字符)select to_number(12)*10 from dual;得120select * from test where c1 = 10;select * from test where to_number(c1) = 10;这语句会导致索引用不了,所以表达式一定要做到数据类型匹配。to_number()select to_number(!$,xx) from dual;(xx代表两位十六进制)得171to_char(数值,格式)函数9:代表数字位select to_char(salary,$9) from s_emp;0:当定义宽度大于实际值宽度时,0会被强制显示在前面,以补齐位数select to_char(salary,000,000,00.000) from s_emp;select to_char(salary,909,099,999.990) from s_emp;select to_char(235,900,00.00) from s_emp;:代表美元的货币符号select to_char(salary,$99,999.99) from s_emp;L:本地货币符号select to_char(salary,L99,999.99) from s_emp;(跟环境变量有关)设置中文B HHELLNLSLANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBKexport NLS_LANG设置英文 NLS_LANG=AMERICAN_AMERICA.US7ASCIIexport NLS_LANG直接在SQL环境下alter session set nls_language=simplified chinese;alter session set nls_languageAMERICAN_AMERICA.US7ASCII;C SHELLsetenv NLSLANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBKsetenv NLS_LANG=AMERICAN_AMERICA.US7ASCII.如查显示位数不足(定义宽度小于实际长度),用代替二、多表查询交叉连接,内连接,外连接内连接原理(重要知识点,查看另一文件sql_notes.txt)1.交叉连接corss:实际上是两个表中的记录的笛卡尔积(即两张表组合)列出每个员工在哪个部门select e.first_name,e.dept_id,d.id,d.name from s_emp e cross join s_dept d;(300条记录,s_emp(25)*s_dept(12)=300)问题:每个员工都在好多部门解决方案,用: 表1 join 表2 on 两个表关联字段匹配表达式 select e.first_name,e.dept_id,d.id,d.name from s_emp e join s_dept d on e.dept_id=d.id;另一例题select d.id,d.name,r.name from s_dept d inner join s_region r on d.region_id=r.id;2.内连接等值连接(join):两张表有描述共同属性的列。常见形式为你表的主键和子表的外键相等。非等值连接(join):可以用between and 这样的非等值运算符将两张表中的列写成一个表达式,所谓表之间的关系,实际指表中的行(记录)之间的关系,该关系通过将表中的列写成表达式来体现。自连接(self
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号