SQL语句
l 内容
1. scott下的四张表
2. 简单的查询语句
3. 限定查询语句
4. 单行查询语句
l Scott下面的四张表
1.emp(雇员)表
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ---------- ------------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10 7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20 7839 KING PRESIDENT 1981-11-17 00:00:00 5000 10 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20 7900 JAMES CLERK 7698 1981-12-03 00:00:00 950 30 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10 |
2.dept(部门表)
DEPTNO DNAME LOC ------- -------------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON |
(3).salgrade(工资等级)表
GRADE LOSAL HISAL ----- ---------- ---------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 |
(4)bonus(奖金)表 bonus默认是没有内容的
名称 是否为空? 类型 ----------------------------------------------------- -------- ------------ ENAME VARCHAR2(10) JOB VARCHAR2(9) SAL NUMBER COMM NUMBER |
l SQL简介
对于各个数据库而言,重点是掌握SQL语句,因为数据库均是以SQL语句为操作标准的 而每个数据库的不同就在于其提供的函数不一样
SQL(Structured Query Language,结构化标准查询语言).SQL通常用于与数据库的通讯 (ANSI)称SQL是关系数据库管理系统的标准语言
l SQL的分类
1.DML (Date Malipulation Language,数据操作语言) -----用于检索或修改数据
2.DDL(Date Definition Language,数据定义语言)-----用于定义数据的结构 例如创建,修改,删除数据库对象
3.DCL(Date Control Language,数据控制语言) ----- 用于定义数据库用户的权限
(一)、简单的查询语句
SELECT *|具体的列 别名 FROM 表名
1.普通的查询
SELECT ename,empno,job FROM emp;
2.为查询的列 或 表 其别名
SELECT ename 姓名,empno 编号,job 工作 FROM emp 雇员表;
可以为查询的列指定别名,也可以为表指定一个别名
3.使用distinct 消除重复显示的列
SELECT DISTINCT job FROM emp; 因为job有重复的列,在字段前面加 distinct可以取消重复的列
如果要同时查询多列,必须保证每列都有重复字段才能取消
SELECT DISTINCT ename ,job FROM emp; 因为ename没有重复,因此任然会显示从父的字段
4.查询结果显示格式的处理
要求查询出雇员的编号,姓名,工作 但是显示个好似必须为
编号:7369,姓名:SMITH,工作:CLERK
SELECT ‘编号:’||empno||’,姓名:’||ename||’,工作:’||job FROM emp;
编号:7369= 编号,姓名:SMITH 姓名 ,工作:CLERK
编号:7499= 编号,姓名:ALLEN 姓名 ,工作:SALESMAN
编号:7521= 编号,姓名:WARD 姓名 ,工作:SALESMAN
编号:7566= 编号,姓名:JONES 姓名 ,工作:MANAGER
编号:7654= 编号,姓名:MARTIN 姓名 ,工作:SALESMAN
编号:7698= 编号,姓名:BLAKE 姓名 ,工作:MANAGER
编号:7782= 编号,姓名:CLARK 姓名 ,工作:MANAGER
编号:7788= 编号,姓名:SCOTT 姓名 ,工作:ANALYST
编号:7839= 编号,姓名:KING 姓名 ,工作:PRESIDENT
编号:7844= 编号,姓名:TURNER 姓名 ,工作:SALESMAN
编号:7876= 编号,姓名:ADAMS 姓名 ,工作:CLERK
编号:7900= 编号,姓名:JAMES 姓名 ,工作:CLERK
编号:7902= 编号,姓名:FORD 姓名 ,工作:ANALYST
编号:7934= 编号,姓名:MILLER 姓名 ,工作:CLERK
要想实现此种功能,则可以使用oracle中提供的字符串连接 || 如果要加入一些显示信息的会 使用 单引号
‘’ 括起来
5. 在查询中可以使用四则运算功能 例如:求出每个雇员的年薪 income
SELECT ename,sal*12 income FROM emp;
注:一般为字段取别名时 要回避中文
Oracle支持 + - * % 的四则运算,所有语句遵循四则运算的先后顺序
(二) 限定查询(where 子句)
SELECT {DISTINCT} *|具体的列名 别名 FROM 表名 WHERE 条件(s); 条件可以是多个
1. 逻辑判断条件查询 > , < , >= , <= , = , != , <>
例:查询出工资大于1500的所有雇员的信息
SELECT * FROM emp WHERE sal>1500;
在SQL中要想使用不等于 可以使用 != 或 <>
例:查询编号不是7369的雇员信息
SELECT * FROM emp WHERE empno!=7369;
SELECT 8 FROM emp WHERE empno<>7369;
2. 是否为空条件查询 为空:IS NULL . 不为空:IS NOT NULL;
例:查询出没有奖金的雇员
SELECT * FROM emp WHERE comm. IS NULL;
3.多条件查询 使用AND连接条件表示且的关系 使用OR表示或的关系
例:查询出基本工资大于1500 同时可以领取奖金的雇员
SELECT * FROM emp WHERE sal>1500 AND comm IS NOT NULL;
例:查询出工资大于1500 或者可以领取奖金的雇员信息
SELECT * FROM emp WHERE sal>1500 OR comm IS NOT NULL;
4.指定范围的过滤查询语句: BETWEEN ….. AND ….. 支持数字和日期的查询
例:查询出基本工资大于1500 小于3000的雇员信息
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;
注:between and 语句表示的是一个闭合的区间 [1500,3000]相当于 sal >=1500 AND sal<=3000
例:查询出在1981年被雇佣的全部雇员的信息
SELECT * FROM emp WHERE hiredate BETWEEN ‘1981-1-1’ AND ‘1981-12-31’;
日期实际上也是以数字的形式表现出来的
注意日期要加单引号 ‘’
5.将多个条件语句作为整体 再对此整体进行操作
例:查询出基本工资不大于1500 同时不可以领取奖金的雇员信息
SELECT * FROM emp WHERE NOT(sal>1500 AND comm. IS NOT NULL);
可以将条件 (大于1500 且 可以领取工资)整体取反
上面可以看出 通过括号表示一组条件
6.Oracle对大小写是敏感的 查询时必须以适当的大小写形式进行条件的编写
例:查询出雇员姓名是SMITH的雇员信息
SELECT * FROM emp WHERE ename=’SMITH’; 如果此时SMITH写成小写 那么将会出现错误
注:字符串 要加单引号 ‘’ 数字不需要加
7.使用 IN 操作符在指定内容中查找 字段 IN (值1,值2,值3…….),
.使用 IN 操作符不在指定内容中查找 字段 NOT IN (值1,值2,值3…….),
IN支持数字和字符串的查询操作
例:查询出编号是 7369,7499,7521的雇员信息
SELECT * FROM emp WHERE empno IN (7369,7499,7521);
例:查询出编号不是7369,7499,7521的雇员信息
SELECT * FROM emp WHERE empno NOT IN (7369,7499,7521);
例:查询出除了 SMITH 和 KING的所有雇员信息
SELECT * FROM emp WHERE ename NOT IN (‘SMITH’,’KING’);
注:如果在指定的查询范围中指定了额外的查询内容 并不会影响程序的运行
例:SELECT * FROM emp WHERE ename IN (‘SMITH’,’KING’,’@###$#’);
注:IN 操作符一般用来给定了查询的具体条件时使用
8.使用LIKE 模糊查询 LIKE支持 数字 字符串 还可以方便地进行日期的查找
使用LIKE 注意通配符
LIKE中有以下两种通配符
(1). _ 匹配一个长度的内容
(2). % 匹配任意长度的内容
例:查询出所有雇员姓名中第二个字符是M的雇员信息
SELECT * FROM emp WHERE ename LIKE ‘_M%’;
例:查询出雇员姓名中包含字母M的雇员信息
SELECT * FROM emo WHERE ename LIKE ‘%M%’;
注:如果使用LIKE是没有指定查询的关键字 则会查询全部
例:SELECT * FROM emp WHERE ename LIKE ‘%%’;
此句将所有的记录均查出来了
LIKE可以方便地进行日期的查找
例:查询出所有在1981年被雇佣的员工信息
SELECT * FROM emp WHERE hiredate LIKE ‘%1981%’;
SELECT * FROM emp WHERE hiredate BETWEEN ‘1981-1-1’ AND ‘1981-12-31’;between and (注意日期要加’ ’)