1 / 119

基本的 SQL 语句

基本的 SQL 语句. 目标. 列出 SELECT 语句的功能 执行基本的 select 语句 区分 SQL 语句和 SQL*PLUS 命令. select 语句的功能. Projection 投影. Selection 选择. Table 1. Table 1. Join 联结. Table 2. Table 1. 基本 select 语句. select 确定处理哪些列 from 确定处理哪些表 DISTINCT 禁止重复 column|expression 选定的列或者表达式 alias 别名.

zaria
Télécharger la présentation

基本的 SQL 语句

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 基本的SQL语句

  2. 目标 • 列出SELECT语句的功能 • 执行基本的select语句 • 区分SQL语句和SQL*PLUS命令

  3. select语句的功能 Projection 投影 Selection 选择 Table 1 Table 1 Join 联结 Table 2 Table 1

  4. 基本select语句 • select确定处理哪些列 • from 确定处理哪些表 • DISTINCT 禁止重复 • column|expression选定的列或者表达式 • alias 别名 SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

  5. 编写SQL语句 • 不区分大小写 • 可以是一行也可以是多行 • 关键字不能缩写或在中间另起一行 • 子句通常放在单独的行中 • 缩进是为了增强可读性

  6. 算数表达式 • 可以使用运算符创建数字或者日期的表达式 • 可以在除from子句之外的所有子句中使用 • Operator • Description + Add 加 - Subtract 减 * Multiply 乘 / Divide 除

  7. 使用算数运算符 SELECT EMPNO, SAL, SAL + 300 FROM EMP; 计算产生的SAL+300 并不是 EMP表中的新列,它只是用于显示而已,默认情况下,输出显示的新列名来自于生成该列的计算公式

  8. 运算符的优先顺序 • 乘和除的运算优先级高于加减 • 优先级相同的运算是从左到右运算 • 可以用括号来强制优先级 SELECT EMPNO, SAL, 12*SAL+100 FROM EMP; SELECT EMPNO, SAL, 12*(SAL+100) FROM EMP;

  9. 关于空值 • 如果行的某一列没有数据值,就认为该值为空。 • 空值是指不可用、未分配、未知或不适用的值。"空”不同于零或空格。零是一个数,而空格是一个字符。 • 所有数据类型的列都可以包含空值。但是某些约束(NOT NULL和PRIMARY KEY)不允许在列中使用空值。 • 如果算术表达式中的任一列值为空,则结果也为空。例如,如要以零作为除数执行除法运算,则会出现错误。但是,如果以空值作为除数执行除法运算,则结果为空值或未知。

  10. 定义列别名 • 重命名列标题 • 有助于计算 • 紧跟在列名的后面在列名和别名之间可以有可选的关键字AS • 如果它包含空格或特殊字符或者区分大小写,则需要使用双引号

  11. 使用列别名 SELECT ENAME AS 姓名, JOB 职位 FROM EMP;

  12. 连接运算符 • 将列或字符串连接到其它列 • 由两条竖线(||)表示 • 创建一个合成列,它是字符表达式 • 字符文字值必须包含在单引号中。 • 在结果输出中,每个返回的行都会将每个字符串显示一次。 SELECT ENAME||EMPNO AS "Employees" FROM EMP; SELECT ENAME ||' is a '||EMPNO AS "Employee Details" FROM EMP;

  13. 重复行 • 查询默认显示所有的行,包括:重复行。 SELECT DEPTNO FROM emp; SELECT DISTINCT DEPTNO FROM emp;

  14. 显示表的结构 • SQLPLUS 命令 DESCRIBE emp

  15. 限制和排序数据 • 对查询检索的行进行限制 • 对查询检索的行进行排序

  16. 限制选定的行 • 使用WHERE子句可以限制返回的行。 • WHERE子句在FROM子句的后面。 SELECT *|{[DISTINCT] column|expression [alias],...} FROM table;

  17. 字符串和日期 • 字符串和日期值包含在单引号中。 • 字符值是区分大小写的,而日期值是区分格式的。 • 默认日期格式为DD-MON-RR。 SELECT EMPNO, ENAME, JOB, DEPTNO FROM emp WHERE DEPTNO = 90 ; SELECT EMPNO, ENAME, JOB, DEPTNO FROM emp WHERE ENAME = ‘KING’ ;

  18. 比较条件 • Operator • Meaning = Equal to > Greater than >= Greater than or equal to < Less than <= Less than or equal to <> Not equal to BETWEEN...AND... Between two values (inclusive) IN(set) Match any of a list of values LIKE Match a character pattern IS NULL Is a null value

  19. 示例 select empno, ename, job, sal, deptno from emp where sal < 2000; select empno, ename, job, sal, deptno from emp where sal between 1000 and 2000; select empno, ename, job, sal, deptno from emp where deptno in (20,30); select empno, ename, job, sal, deptno from emp where ename like 'K%'; %代表零或许多字符。 _代表一个字符。 select empno, ename, job, comm, deptno from emp where comm is NULL;

  20. 逻辑条件 • Operator • Meaning AND Returns TRUE if both component conditions are true OR Returns TRUE if either component condition is true NOT Returns TRUE if the condition is false select empno, ename, job, sal, deptno from emp where sal < 3000 and ename like 'J%'; select empno, ename, job, sal, deptno from emp where sal < 3000 and ename not like 'J%';

  21. 逻辑条件 select empno, ename, job, sal, deptno from emp where sal < 3000 or ename like ‘K%'; select empno, ename, job, sal, deptno from emp where sal < 3000 and ename not in ('WARD','KING');

  22. 运算符优先级 • 1 算术运算符 • 2 连接运算符 • 3 比较条件 • 4 IS [NOT] NULL、 LIKE、 [NOT] IN • 5 [NOT] BETWEEN • 6 NOT逻辑条件 • 7 AND逻辑条件 • 8 OR逻辑条件

  23. 示例 select empno, ename, job, sal, deptno from emp where ename = 'KING' or deptno = 20 and sal < 2000;

  24. ORDER BY 子句 • 使用ORDER BY子句可以对行进行排序 • ASC:升序,这是默认设置 • DESC:降序 • ORDER BY子句在SELECT语句的最后。 • 可以ORDER BY 别名 select empno, ename, sal from emp order by sal; select empno, ename, sal, deptno from emp where deptno=30 order by sal; select empno, ename, sal*12 year, deptno from emp order by year;

  25. 按照多个列进行排序 select empno, ename, sal, deptno from emp order by sal,deptno; select empno, ename, sal, deptno from emp order by deptno,sal; ORDER BY列表的顺序就是所排列的顺序。 即使列不在SELECT列表中,仍可以按该列进行排序。

  26. 练习 • 创建一个查询,显示薪金超过3000的员工的名字和薪金。将SQL语句保存到名为labl. sql的文本文件中并运行查询。 • 创建一个查洵,显示员工编号为7782的员工的名字和部门编号。 • 列出薪金在1000到3000之间并且在部门20或部门30中的员工的姓名和薪金。分别将列标记为"Employee"和"Monthly Salary“ • 显示在1981年聘用的每位员工的姓名和聘用日期。 • 显示员工姓名中有“A”和“E”的所有员工的姓名。

  27. 函数 • 描述可在SQL中使用的各类函数 • 在SELECT语句中使用字符、数字和日期函数 • 描述转换函数的用途 函数可使基本查询块的功能更强大,并可用于处理数据值这里主要介绍字符、数字和日期函数,以及将数据从一种类型转换为其它类型(例如将字符数据转换为数字数据)的函数。

  28. SQL函数 函数是SQL的一项强大功能,可以用于执行以下任务: •进行数据计算 •修改单个数据项 •处理成组行的输出 •指定日期和数字的显示格式 •转换列数据类型 SQL函数有时会使用参数,并且总是返回一个值。 注:本课讲述的大多数函数都是Oracle SQL专用的。

  29. 函数种类 有两种不问类型的函数: • 单行函数 • 多行函数

  30. 单行函数 这些函数只处理单个行,并且为每行返回一个结果。单行函数有几种不同的类型。 •常规函数 •字符函数 •数字函数 •日期函数 •转换函数

  31. 多行函数 • 这些函数可以处理成组的行,从而为每组行返回一个结果。这些函数被称为分组函数。它们会在后面的课程中介绍。

  32. 字符函数 • LOWER (column / expression) 将字母字符值转换为小写 • UPPER (column / expression) 将字母字符值转换为大写 • INITCAP (column / expression) 将字母字符值转换为每个词的首字母为大写,其它所有 字母为小写 • CONCAT(column1 / expression1 , column2 / expression2) 将第一个字符值与第二个字符值相连 • SUBSTR(column / expression, m [,n]) 返回字符值中的指定字符,这些字符从字符值的第m 个字符开始,长度为n个字符(如果m为负数,则 将从字符值的末尾开始算起。如果省略n,则将返回一直到字符串末尾的所有字符。 • LENGTH(column / expression) 返回表达式屮的字符数

  33. 日期函数 所有日期的默认显示和输入格式为DD-MON-RR。 有效Oracle日期介于公元前4712年1月1日至公元9999年12月31日之间。 SYSDATE 函数 SYSDATE是一个日期函数,它会返回数据库服务器的当前日期和时间。您可以和使用任何其它列名一样使用SYSDATE„例如,可以通过从表中选择SYSDATE来显示当前日期。通常是从名为DUAL的空表中选SYSDATE。 select sysdate from dual;

  34. 与日期有关的运算 • 对日期进行加减运算,以获得新的日期值。 • 将两个日期相减,以得出它们之间的天数。 • 将小时数除以24,以将小时添加到日期中。

  35. 日期函数

  36. 日期函数 • Function • Result MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') 19.6774194 ADD_MONTHS (‘31-JAN-96',1) ‘29-FEB-96' NEXT_DAY ('01-SEP-95','FRIDAY') '08-SEP-95' LAST_DAY ('01-FEB-95') '28-FEB-95'

  37. 日期函数

  38. 转换函数 TO_NUMBER TO_DATE NUMBER CHARACTER DATE TO_CHAR TO_CHAR

  39. 使用TO_CHAR 格式样式具有以下特性: •必须包含在单引号中,并且是区分大小写的 •可以包含任何有效日期格式元素 •具有一个fm元素,可以删除填充的空白或取消前导零 •与日期值之间通过逗号分隔 select ename, to_char(hiredate,'YYYY-MM-FMDD') from emp; TO_CHAR(date, 'format_model')

  40. 日期格式样式

  41. 时间格式

  42. 函数的嵌套 • 单行函数可以嵌套任意层。 • 嵌套的函数从最深层开始,直到最外层。 F3(F2(F1(col,arg1),arg2),arg3) Step 1 = Result 1 Step 2 = Result 2 Step 3 = Result 3

  43. 常规函数 这些函数可以使用任何数据类型,并且适合使用空值。 • NVL (exprl, expr2) • NVL2 (exprl, expr2, expr3) • NULLIF (exprl, expr2) • COALESCE (exprl, expr2, …, exprn)

  44. 显示多个表中的数据 • 编写SELECT语句,以便使用等值联结或非等值联结来访问多个表中的数据 • 使用外联结查看通常不满足联结条件的数据 • 使用自联结将表联结到自身

  45. 笛卡尔积的形成 • 当出现以下情况时,将形成笛卡尔乘积: -联结条件被省略 -联结条件无效 -第一个表中的所有行与第二个表中的所有行相联结 • 为了避免出现笛卡尔乘积,请务必在WHERE子句中使用有效的联结条件。 • select empno, ename, dname from emp,dept;

  46. 将两个表联结起来 • 在WHERE子句中编写联结条件。 • 如果在多个表中出现了相同的列名,则在列名的前面加上表名作为前缀。 SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;

  47. 什么是等值联结 • 若要确定员工的部门名称,您需要将EMP表中DEPTNO的值与DEPT表中DEPTNO值进行比较。EMP和DEPT表之间的关系就是等值联结,即这两个表的DEPTNO列的值必须相等。 • 注:等值联结也称为简单联结或内联结。

  48. 联结两个以上的表 • 若要将n个表联结在一起,您最少需要n-1个联结条件。例如,要联结三个表,则最少需要两个联结。 • 如 把 EMP,DEPT,LOCATIONS表连接

  49. 例如

  50. 使用AND运算符附加搜索条件 • 除了联结外,可能还需要对WHERE子句添加一些条件,从而考虑对联结中一个或多个表中的行加以限制。例如,要显示员工KING的部门编号和部门名称,在WHERE子句中还需要一个附加的条件。 • select empno, ename, dname from emp,dept where emp.deptno=dept.deptnoand emp.ename=‘KING’;

More Related