第一天20160726

--关系数据库

--开始-->运行-->sqlplus

用户名:system
密码:dhee

--Oracle执行脚本文件:@脚本路径

--在关系数据库中查询表使用:SELECT语句

--基本的SELECT语句

SELECT 列名[,列名,……]|*
FROM 表名;

/*
1.Oracle数据库中FROM子句不能省略。
2.SQL语句不区分大小写。
3.SQL语句可以写成一行或多行。
4.通常情况下,SQL语句使用分号表示结束。
5.只能直接使用半角的标点。
6.不建议在SELECT语句中使用*,查询效率低。
*/

--查询employees表中所有员工的last_name
SELECT LAST_NAME
FROM EMPLOYEES;

--查询employees表中所有员工的last_name,salary
SELECT LAST_NAME,SALARY
FROM EMPLOYEES;

--查询departments表中所有部门的信息
SELECT *
FROM DEPARTMENTS;

--列别名
--查询employees表中所有员工的last_name,salary,年薪
/*
1.列名 列别名
2.列名 AS 列别名
3.当列别名区分大小写,或别名为关键字,或别名中包含了特殊字符时,需要将列别名放在一对双引号中。
*/

SELECT LAST_NAME AS "USER NAME",SALARY,SALARY*12 AS 年薪
FROM EMPLOYEES;

--关系数据中单引号表示字符串。

--连接符:||
SELECT LAST_NAME||'.'||FIRST_NAME AS NAME
FROM EMPLOYEES;

--DISTINCT关键字:屏蔽查询结果中重复的数据。
SELECT DISTINCT JOB_ID
FROM EMPLOYEES;

SELECT DISTINCT JOB_ID,SALARY
FROM EMPLOYEES;

--通常情况下,一个SELECT语句中只能出现一个DISTINCT关键字。
--通常情况下,DISTINCT只能出现在SELECT与第一个列之间。

--过滤与排序
--过滤:WHERE子句
SELECT
FROM
[WHERE 条件];

--查询条件为数字类型
--查询employees表中在50号部门工作的员工,显示last_name,salary,department_id
SELECT LAST_NAME,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=50;

--查询条件为字符串类型:查询的值必须放在一对单引号中,并且英文查询时区分大小写
--查询employees表中last_name为fay的员工的employee_id,last_name,hire_date
SELECT EMPLOYEE_ID,LAST_NAME,HIRE_DATE
FROM EMPLOYEES
WHERE LAST_NAME='Fay';

--查询条件为日期类型:查询的值必须放在一对单引号中,并且值必须为Oracle默认的日期格式:DD-MON-RR
--查询employees表中1994-6-7入职员工的last_name,hire_date,salary
SELECT LAST_NAME,HIRE_DATE,SALARY
FROM EMPLOYEES
WHERE HIRE_DATE='7-6月-94';

--比较运算符:>,>=,<,<=,=,(!=,<>)
--查询employees表中salary大于10000的员工,显示last_name,salary
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY>10000;

--查询employees表中在97年以后(不包含97年)入职的员工的last_name,hire_date
SELECT LAST_NAME,HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE>'31-12月-97';

--特殊的比较运算符
--BETWEEN..AND..:查询在指定范围内的数据(包含边界值)。
--查询employees表中salary在6000到12000之间的员工的last_name,salary
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 6000 AND 12000;

--查询employees表中97-98年入职员工的last_name,hire_date
SELECT LAST_NAME,HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE BETWEEN '1-1月-97' AND '31-12月-98';

--IN(值列表):查询与值列表中某个值相等的数据。只能判断是否相等
--查询employees表中在20号或50号部门工作员工的last_name,department_id
SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (20,50);

--查询employees表中job_id为it_prog与sa_rep的员工的last_name,job_id,salary
SELECT LAST_NAME,JOB_ID,SALARY
FROM EMPLOYEES
WHERE JOB_ID IN('IT_PROG','SA_REP');

--LIKE:模糊查询
/*
%:任意长度的任意字符。
_:一个长度的任意字符。
*/
--查询employees表中last_name中包含a员工的last_name
SELECT LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE '%a%';

--查询employees表中last_name中倒数第二个字符为n人员工的last_name
SELECT LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE '%n_';

--查询employees表中job_id内包含A_的员工的last_name,job_id
SELECT LAST_NAME,JOB_ID
FROM EMPLOYEES
WHERE JOB_ID LIKE '%A/_%' ESCAPE '/';

--IS NULL/IS NOT NULL:判断列中的内容是否为NULL
--关系数据库需要提供一个与类型无关,表示未知或不确定的值。

--查询employees表中哪些员工没有部门,显示员工的last_name,salary
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE DEPARTMENT_ID IS NULL;

--逻辑运算符:AND,OR,NOT
--查询employees表中salary在6000到12000之间的员工的last_name,salary
SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 6000 AND 12000;

SELECT LAST_NAME,SALARY
FROM EMPLOYEES
WHERE SALARY>=6000 AND SALARY<=12000;

--查询employees表中在20号或50号部门工作员工的last_name,department_id
SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (20,50);

SELECT LAST_NAME,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=20 OR DEPARTMENT_ID=50;

--查询employees表中工资在5000-12000之间,并且在20或50部门工作员工的last_name,salary,department_id
SELECT LAST_NAME,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE SALARY BETWEEN 5000 AND 12000 AND DEPARTMENT_ID IN (20,50);

--AND的优先级大于OR
SELECT LAST_NAME,SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE (SALARY>=5000 AND SALARY<=12000) AND (DEPARTMENT_ID=20 OR DEPARTMENT_ID=50);

posted on 2016-07-27 20:58  网络哈气高手  阅读(191)  评论(0编辑  收藏  举报