Oracle11gDatabaseSQL语言基础.ppt
《Oracle11gDatabaseSQL语言基础.ppt》由会员分享,可在线阅读,更多相关《Oracle11gDatabaseSQL语言基础.ppt(172页珍藏版)》请在三一办公上搜索。
1、Oracle11g Database SQL语言基础,2011.8ByKevinlin.林少杰,SQL语言简介,SQL语言(Structured Query Language)是访问关系型数据库的标准语言。SQL语言可以分为五种类型:查询(QUERY)-SELECT数据处理(DML)-INSERT,UPDATE,DELETE数据定义(DDL)-CREATE,ALTER,DROP,RENAME,TRUNCATE事务控制(TC)-COMMIT,ROLLBACK,SAVEPOINT数据控制(DCL)GRANT,REVOKE,SQL语句可以被嵌入其他语句编写的程序里进行运行,比如C+程序,也可以使用J
2、DBC将SQL语句 写到Java程序里。SQL语句也可以使用一些工具运行,与数据库交互,比如Oracle SQL*Plus,Oracle SQL Developer以及其他第三方工具。,查询数据,使用SELECT查询数据,表1,表2,查询表中的若干行数据,查询表中的若干列,联合不同表中的数据,基本SELECT语句,SELECT 子句指定要查询的数据列。FROM 子句指定对象表。,SELECT*|DISTINCT column|expression alias,.FROM table;,查询所有列,SELECT*FROM departments;,查询指定列,SELECT department_
3、id,location_idFROM departments;,SELECT语句编写,大小写不敏感。可以写成一行或多行。关键字不能缩写或跨行。语句中的子句(clause)通常分行输入。缩进增加可读性。在一般的工具中,SQL语句一般以分号“;”结尾。,SELECT语句中的四则运算,SELECT last_name,salary,12*(salary+100)FROM employees;,Null值,Null值表示相应的值未知、不可用、未被分配。Null值不同于数字0或空格。所有与Null值相关的四则运行,结果为Null。,定义列别名(Column Alias),重命名列名在有四则运算的情况下,
4、可以使列名更具有意义列别名在定义时,紧跟列名,以空格或“as”分隔当列别名的大小写敏感,或者含有空格、特殊字符,需要使用双引号。,SELECT last_name Name,salary*12 Annual SalaryFROM employees;,连接符操作,将列、字符串连接在一起,作为一个新列。连接符为两个竖线:“|”最终形成的列为字符表达式。,SELECTlast_name|job_id AS EmployeesFROM employees;,原义字符串(Literal Character Strings),原义字符指字符、数字,或者日期。日期和字符需要使用单引号封装。每行数据显示一次
5、。,SELECT last_name|is a|job_id AS Employee DetailsFROM employees;,Quote(q)操作,可以选择分隔符。可选择任意方便的分隔符,单字节或多字节,或者下列符号:,(),。增加可读性与实用性。,SELECT department_name|Department|qs Manager Id:|manager_id AS Department and Manager FROM departments;,消除重复行,SELECT DISTINCT department_idFROM employees;,SELECT DISTINCT d
6、epartment_id,job_idFROM employees;,可以在多个列之前使用DISTINCT修饰词,影响指定的所有列,其结果是这些列组合后的不同值。,DESCRIBE命令,DESCRIBE employees,限制返回结果,使用WHERE子句限制返回结果:WHERE 子句在 FROM子句之后。,SELECT*|DISTINCT column|expression alias,.FROM tableWHERE condition(s);,SELECT employee_id,last_name,job_id,department_idFROM employeesWHERE depa
7、rtment_id=90;,比较运算符(Comparison Operators),不等于,两个值之间(包括限值),BETWEEN.AND.,符合列表内的值,IN(set),符合字符样式,LIKE,是null值,IS NULL,小于,小于或等于,=,大于或等于,=,大于,等于,=,意义,运算符,使用比较运算符,SELECT last_name,salaryFROM employeesWHERE salary=3000;,使用比较运算符,SELECT last_name,salaryFROM employeesWHERE salary BETWEEN 2500 AND 3500;,使用BETWE
8、EN 操作显示符合范围的值:,下限,上限,使用比较运算符,SELECT employee_id,last_name,salary,manager_idFROM employeesWHERE manager_id IN(100,101,201);,使用IN 操作符 显示符合列表内值的数据:,使用比较运算符,LIKE 操作符筛先符合查找字符串的数据行。查找条件可以包括字符或数字:“%”表示数字0或者多个字符。“_”表示一个字符。,SELECTfirst_nameFROM employeesWHEREfirst_name LIKE S%;,使用比较运算符,可以同时使用(%,_)匹配符:使用 ESCA
9、PE“”标识符查找值中含有“%”和“_”字符的数据。,SELECT last_nameFROM employeesWHERE last_name LIKE _o%;,SELECT last_nameFROM employeesWHERE last_name LIKE%SA_%ESCAPE;,使用比较运算符,SELECT last_name,manager_idFROM employeesWHERE manager_id IS NULL;,使用IS NULL 操作检验是否有Null值,逻辑运算符,如果条件为假,则返回TRUE,NOT,如果前后两个条件有一个为真,则返回TRUE,OR,如果前后两个
10、条件都为真,则返回TRUE,AND,Meaning,Operator,使用逻辑运算符,SELECT employee_id,last_name,job_id,salaryFROM employeesWHERE salary=10000AND job_id LIKE%MAN%;,AND 需要前后两个条件为TRUE:,使用逻辑运算符,OR 需要前后两个条件有一个为TRUE:,SELECT employee_id,last_name,job_id,salaryFROM employeesWHERE salary=10000OR job_id LIKE%MAN%;,使用逻辑运算符,NOT 操作符可以与
11、IN,BETWEEN,LIKE,and NULL配合使用:,.WHERE job_id NOT IN(AC_ACCOUNT,AD_VP).WHERE salary NOT BETWEEN 10000 AND 15000.WHERE last_name NOT LIKE%A%.WHERE commission_pct IS NOT NULL,运算符的优先级规则,可以使用括号改变默认的优先级别,Not equal to,6,NOT,7,AND,8,OR,9,IS NOT NULL,LIKE,NOT IN,4,NOT BETWEEN,5,比较运算符,3,连接运算符,2,四则运算,1,运算符,优先级,
12、排序ORDER BY,排序使用ORDER BY 子句:ASC:升序(默认行为)DESC:倒序如果不使用ORDER BY,相同的两次查询返回的结果顺序可以不一样。使用NULL FIRST和NULL LAST指定NULL值在排序中的位置。ORDER BY 子句中的每个列都可以单独指定排序顺序。,排序ORDER BY,默认的排序为升序:数字是最小的值在前(1 to 999).日期的值最早的在前(01-JAN-11在 01-JAN-12之前)字符按字母表顺序(“A”最前,“Z”最后).Null 值在升序时显示在最后面,在降序时显示在最前面可以使用一个不在SELECT列表中的列来排序,替换变量Subst
13、itution Variables,替换变量临时保存数据,使用“&”和“&”符号替换变量可用于:WHERE 条件子句ORDER BY 子句列表达式表名整个SELECT语句,SELECT employee_id,last_name,job_id,SQL函数SQL functions,函数,输入,参数 1,参数2,参数n,函数进行运算,输出,结果,SQL函数的两种类型,单行函数,多行函数,每行返回一个结果,多行返回一个结果,函数,单行函数Single-Row Functions,用于处理数据对象接收参数,然后输出一个结果每返回一行数据就要进行运算每行返回一个结果可以修改数据类型可以被嵌套参数可以是
14、一个列或一个表达式,function_name(arg1,arg2,.),转换函数,字符函数,数字函数,日期函数,一般函数,字符函数Character Functions,字符函数,LOWERUPPERINITCAP,CONCATSUBSTRLENGTHINSTRLPAD|RPADTRIMREPLACE,大小写转换函数,字符处理函数,大小写转换函数Case-Conversion,sql course,LOWER(SQL Course),Sql Course,INITCAP(SQL Course),SQL COURSE,UPPER(SQL Course),结果,函数,字符处理函数,BLACK a
15、nd BLUE,REPLACE(JACK and JUE,J,BL),10,LENGTH(HelloWorld),6,INSTR(HelloWorld,W),*24000,LPAD(salary,10,*),24000*,RPAD(salary,10,*),HelloWorld,CONCAT(Hello,World),elloWorld,TRIM(H FROM HelloWorld),Hello,SUBSTR(HelloWorld,1,5),结果,函数,数字函数,100,MOD(1600,300),45.93,ROUND(45.926,2),45.92,TRUNC(45.926,2),结果,函
16、数,日期函数,08-SEP-95,NEXT_DAY(01-SEP-95,FRIDAY),28-FEB-95,LAST_DAY(01-FEB-95),19.6774194,MONTHS_BETWEEN(01-SEP-95,11-JAN-94),29-FEB-96,ADD_MONTHS(31-JAN-96,1),Result,Function,01-JUL-03,TRUNC(SYSDATE,MONTH),01-JAN-03,TRUNC(SYSDATE,YEAR),01-AUG-03,ROUND(SYSDATE,MONTH),01-JAN-04,ROUND(SYSDATE,YEAR),转换函数,隐式
17、转换,显式转换,数据类型转换,数据类型的隐式转换,NUMBER,VARCHAR2 or CHAR,DATE,VARCHAR2 or CHAR,To,From,VARCHAR2 or CHAR,NUMBER,VARCHAR2 or CHAR,DATE,To,From,where hire_date 01-JAN-90,where name_varchar 2345,不建议使用隐式转换,可能导致SQL的性能下降,数据类型的显式转换,数字类型,字符类型,TO_CHAR(),TO_NUMBER(),日期类型,TO_CHAR(),TO_DATE(),日期转换为字符,SELECT last_name,TO
18、_CHAR(hire_date,fmDD Month YYYY)AS HIREDATEFROM employees;,数字转换为字符,SELECT TO_CHAR(salary,$99,999.00)SALARYFROM employeesWHERE last_name=Ernst;,字符转换为日期、数字,SQL select TO_number(6,000.00,99,999.00)from dual;TO_NUMBER(6,000.00,99,999.00)-6000,SQL select TO_date(20110818,YYYYMMDD)from dual;TO_DATE(201-18
19、-AUG-11,函数嵌套,单行函数可以嵌套到任意层。函数的运算顺序是从内到外。,F3(F2(F1(col,arg1),arg2),arg3),Step 1=Result 1,Step 2=Result 2,Step 3=Result 3,一般函数,下面的函数与NULL值的使用有关:,条件表达式Conditional Expressions,IF-THEN-ELSE的逻辑判断有两种方法:CASEDECODE,CASE expr WHEN comparison_expr1 THEN return_expr1 WHEN comparison_expr2 THEN return_expr2 WHEN
20、comparison_exprn THEN return_exprn ELSE else_exprEND,DECODE(col|expression,search1,result1,search2,result2,.,default),组函数,对各组的数据行进行运算,每组返回一个值,EMPLOYEES,Maximum salary in EMPLOYEES table,组函数类型,对各组的数据行进行运算,每组返回一个值,AVGCOUNTMAXMINSTDDEV(平均差)SUMVARIANCE(方差),组函数,数据分组 GROUP BY,表EMPLOYEES,在EMPLOYEES 表中,计算每个
21、部门的平均工资,SELECT column,group_function(column)FROM tableWHERE conditionGROUP BY group_by_expressionORDER BY column;,多个列的GROUP BY,SELECT department_id dept_id,job_id,SUM(salary)FROM employeesGROUP BY department_id,job_id ORDER BY department_id;,组函数的使用,在SELECT子句中没有使用组函数的数据列,必须在GROUP BY 子句中列出:,SELECT dep
22、artment_id,COUNT(last_name)FROM employees;,SELECT department_id,job_id,COUNT(last_name)FROM employeesGROUP BY department_id;,组函数的使用,不能在WHERE 子句中限制组,需要使用HAVING。不能在WHERE 子句中使用组函数。,错误:SELECT department_id,AVG(salary)FROM employeesWHERE AVG(salary)8000GROUP BY department_id;,正确:SELECT department_id,AVG(
23、salary)FROM employeesGROUP BY department_idHAVING AVG(salary)8000;,组函数的嵌套,SELECT MAX(AVG(salary)FROM employeesGROUP BY department_id;,多个表的数据查询,SQL:1999标准中的JOIN语法,使用join从多个表中查询数据:table1.column 表示表table1中的列名NATURAL JOIN 用于对两个表中相同的列进行joinJOIN table2 USING column_name 基于指定的列进行对等joinJOIN table2 ON table1
24、.column_name=table2.column_name 基于on条件指定的列进行对等joinLEFT/RIGHT/FULL OUTER 用于外连接CROSS JOIN 进行笛卡尔乘积,SELECTtable1.column,table2.columnFROMtable1NATURAL JOIN table2|JOIN table2 USING(column_name)|JOIN table2 ON(table1.column_name=table2.column_name)|LEFT|RIGHT|FULL OUTER JOIN table2 ON(table1.column_name=
25、table2.column_name)|CROSS JOIN table2;,NATURAL JOIN,NATURAL JOIN 基于两个表中所有相同的列返回两个表中相同的列的值相同的数据行如果两个表中,名字相同的列的数据类型定义不同,那么会返回错误,使用USING进行join,如果两个表中的列名相同,但数据类型不同,那么可以使用using进行对等join.使用USING只能指定的一个名字相同的列,使用ON进行join,使用ON 可以指定任意的条件或相关的列进行join.使用ON 可以增加语句的易读性。,SELECT e.employee_id,e.last_name,e.department
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle11gDatabaseSQL 语言 基础
链接地址:https://www.31ppt.com/p-5442012.html