SQL基本数据库简介,select、where、运算符、order by语句使用实例

-- 注意:记得经常ctrl+s保存
/*
   主要任务:
  一、Oracle简介
  二、基本查询语句 

  服务器地址:win+r     \\192.168.1.101
  Oracle环境:
  桌面:PLSQL Developer 14 (64 bit)软件
  新建=>SQL窗口=> ctrl+s

*/
SELECT * FROM employees;


/*
   二、数据库简介
       
      DB:数据库,存储数据
      DBMS:数据库管理系统,负责管理数据库中的数据。orace属于数据库管理系统
        RDBMS:关系型数据库管理系统(Oracle,Mysql,SqlServer....)
        NoSQL:非关系型数据库管理系统(Redis)
        
      常见的关系型数据库:
        oracle:
              - 功能最强大的数据库
              - 收费,闭源(源代码不开放)  个人免费
              - 政治因素也能影响!俄乌大战:制裁Oracle
              
        mysql: 
              - 功能齐全,处理能力没有Oracle那么强
              - 免费,开源
              - 中小型企业,使用比例越来越高了!
        
        共同点:1)关系型数据库,语法接近
                2)同属于一家公司(甲骨文Oracle),Java也属于甲骨文公司
                               google:安卓->Java
   
*/

/*
     三、基本查询语句
         准备:默认电脑已经安装了数据库,直接查询就可以了
                employees: 员工表,记录很多员工相关的字段的信息
                       employee_id:员工编号,唯一值
                       first_name:姓
                       last_name:名
                       email:邮箱
                       phone_number:电话
                       hire_date:入职日期
                       job_id  :工作岗位
                       salary  :工资
                       commission_pct:奖金系数 
                       manager_id :上级领导ID
                       department_id:属于哪一个部门
                       
               departments:部门记录表
                       department_id  :部门的编号,也是唯一值
                       department_name:部门的名称
                       manager_id     :部门的领导
                       location_id    :部门的地址
*/

-- 建议:学SQL 一定记住语法和关键字。然后在灵活运用
SELECT * FROM employees;
SELECT * FROM departments;


/*
       四、基本SELECT语句
       
       4.1 语法
           SELECT    *|{[DISTINCT] column|expression [alias],...}
           FROM    table;

           
           SELECT:查询指定的列(字段)信息
           FROM:从那张表查询
           DISTINCT:去重
           
           column:表示要查询的具体字段
           expression:表示可以进行相关的运算,固定值
           alias:别名
           
           *:表示所有的字段
           |:语法中,表示或者意思
           {}:语法中,整个部门
           []:语法中,表示可以省略

       
         
*/
SELECT * FROM employees t;
SELECT t.*,last_name FROM employees t;
SELECT last_name,salary,salary+10000,1+2,'天珑' address FROM employees;


-- 1.查询所有的列
SELECT * FROM employees;

-- 2.查询指定的列
--      1)多个列之间使用 逗号隔开(所有的符号,要在英文状态下)
--      2)最后一个列,不需要使用逗号
-- 需求:查询所有员工的编号,姓名,岗位,工资信息
SELECT
   employee_id,last_name,job_id,salary
FROM employees;

-- 3.注意事项
--    1)SQL语句不区分大小写,但是一般:关键字建议大写; 自己取名(表名,列名):小写
--    2)QL 可以写在一行或者多行,每条SQL语句之间使用分号隔开
--    3)关键字不能被缩写也不能分行
--    4)使用缩进提高语句的可读性,字句可以分行写!


-- 4.表达式 expression
--    1)查询的列支持表达式
--    2)可以对指定列 进行算术运算(+ - * /)
--    3)使用()指定运算符的优先顺序 
---   4)运算符执行顺序:先乘除、后加减,如果同级从左到右执行,()改变优先级
SELECT
   employee_id,last_name,job_id,salary,salary+1000*2,(salary+1000)*2
FROM employees;


-- 5.字段 取别名  
--    1)关键字AS,但是AS可以省略
--    2)别名中使用 双引号 "",双引号字母保持原来的大小写,支持存在空格

SELECT
   employee_id 员工编号,last_name 员工姓名,job_id 岗位,salary 工资,
   salary+1000*2 "new_salary" ,(salary+1000)*2 new_salary2
FROM employees;


-- 6.连接符号|| 将多个字段 变成一个字段
SELECT
   employee_id,last_name||first_name username,job_id,salary
FROM employees;


-- 7.字符串
-- 1)字符串可以是 SELECT 列表中的一个字符,数字,日期。
-- 2)日期和字符只能在单引号中出现。
-- 3)每当返回一行时,字符串被输出一次。
SELECT
   employee_id,last_name||'-'||first_name username,job_id,salary,
   112233,44,55,66,'abc','-'
FROM employees;


-- 8.查询员工所有的岗位信息
--   1)默认不写关键字是ALL:显示所有记录
--   2)DISTINCT:去除重复记录
--   3)只有当记录中所有的列都相等,才会看成一个重复值

SELECT DISTINCT employee_id, job_id
FROM employees;


--------------------------------过滤数据------------------------------
-- 1)使用WHERE 子句,将不满足条件的行过滤掉
-- 2)WHERE 子句紧随 FROM 子句,如果不使用 WHERE表示查询整个表中所有的记录
-- 3)语法:SELECT    *|{[DISTINCT] column|expression [alias],...}
--         FROM    table
--         [WHERE    condition(s)];


-- 过滤指定行的数据
-- 例如:查询工资大于等于15000的员工信息

SELECT 
   employee_id,last_name,job_id,salary
FROM employees
WHERE salary >=15000;


-- 1.WHERE条件中使用字符串
-- 需求:查询所有last_name等于 king的员工

-- 注意:
--  1)字符和日期必须放在单引号里面
--  2)单引号里面如果是字符,那么区分大小写
--  3)单引号里面如果是日期,那么必须按照指定格式来访问(DD-MON月-YY    17-6月-03 )

/*
    真实的日期格式:
                     默认的格式: DD-MON月-YY    17-6月-03 
                     帮我们展示的格式:2003/6/17 
                    
                     使用的时候:需要默认的格式    17-6月-03 
                      
                     中文环境的月份:6月           17-6月-03 
                     英文环境下月份:英文月份缩写   
                     
                      

*/

SELECT 
   employee_id,last_name,job_id,salary
FROM employees
WHERE LAST_NAME = 'King';


SELECT * 
FROM  employees
WHERE hire_date= '17-6月-2003';


--- 比较运算符
/*
    = :等于
    > :大于
    >=    :大于等于
    <   :小于
    <=    :小于等于
    <>  :不等于
    !=  :不等于
*/
-- 例如:查询工资大于等于15000的员工信息

SELECT 
   employee_id,last_name,job_id,salary
FROM employees
WHERE salary <> 17000;


-----逻辑运算符-----------
-- and :并且,多个同时满足
-- or  :或者,主要有一个满足即可
-- not : 相反


-- 例如:查询工资大于等于10000,小于等于15000之间的员工信息

SELECT 
   employee_id,last_name,job_id,salary
FROM employees
WHERE salary>=10000 AND salary<=15000;

SELECT 
   employee_id,last_name,job_id,salary
FROM employees
WHERE salary>=10000 AND salary<=15000;

SELECT 
   employee_id,last_name,job_id,salary
FROM employees
WHERE NOT salary>=10000;


-- 优先级:
/*
   1 算术运算符 + - * /
  2 连接符      ||
  3 比较符      > >= < <=
  4 IS [NOT] NULL, LIKE, [NOT] IN
  5 [NOT] BETWEEN
  6 NOT 
  7 AND
  8 OR
  
  and会有限执行。
  注意:推荐使用()主动的区分执行顺序  
*/

--29:请查询职位是 “SA_REP” 或“ST_CLERK”,且月薪不是 $2500、$3500、$7000 的员

SELECT * 
FROM employees 
WHERE (job_id = 'SA_REP'  OR job_id = 'ST_CLERK') AND salary not in(2500,3500,7000);

--3.其他比较运算符
-- BETWEEN ...AND...  :表示两者之间,注意:1)包括前后的值  2)小的写前面
-- IN(set)            :在指定set里面的所有值
-- LIKE               :模糊查询
-- IS NULL            :为空,不能直接使用 = 


-- 例如:查询工资大于等于10000,小于等于15000之间的员工信息
SELECT 
   employee_id,last_name,job_id,salary
FROM employees
WHERE salary>=10000 AND salary<=17000;

SELECT 
   employee_id,last_name,job_id,salary
FROM employees
WHERE salary between 10000 AND 17000;

-- IN(set)  在指定set里面的所有值
-- 请查询职位是 “SA_REP” 或“ST_CLERK”

SELECT * 
FROM employees
WHERE job_id = 'SA_REP' OR job_id = 'ST_CLERK';

-- 结果一样
SELECT * 
FROM employees
WHERE job_id IN ('SA_REP','ST_CLERK');


-- IS NULL | IS NOT NULL  不能使用  =null语法
-- 注意:空字符 '' 和 0 都不是NULL
-- 需求:查询所有没有奖金的员工
SELECT * 
FROM employees
WHERE commission_pct IS NULL;

SELECT * 
FROM employees
WHERE commission_pct IS NOT NULL;


---  LIKE:模糊查询,需要搭配  % _
-- %: 表示任意个字符
-- _: 表示单个字符

-- 1)查询姓名 K 开头的所有员工信息

SELECT * 
FROM employees
WHERE last_name LIKE 'K%';

-- K开头,并且长度是4
SELECT * 
FROM employees
WHERE last_name LIKE 'K___';

-- 查询包含m的数据
SELECT * 
FROM employees
WHERE last_name LIKE '%m%';


-- 查询姓名 第二个字母 是a的所有员工信息
SELECT * 
FROM employees
WHERE last_name LIKE '_a%';

-- 转义符:将关键字转为普通符号
-- 关键字: escape 
-- % 和 _ 表示是一个关键字
-- 有些场景中我们就需要把他当成一个普通字符 

-- 需要用到转义符:

-- 需求:查询last_name中包含 _ 的所有员工的信息

SELECT * 
FROM employees
WHERE last_name LIKE '%\_%' ESCAPE '\'; 


-- 第三个字母是_ 下划线的信息
SELECT * 
FROM employees
WHERE last_name LIKE '__\_%' ESCAPE '\'; 

-----------------------------------排序:ORDER BY -------------------------
/*
     1.简介
       表示根据指定的规则,对结果进行排序
       默认ASC表示升序,DESC:降序
       
     2.语法
        SELECT     *|{[DISTINCT] column|expression [alias],...}
        FROM       table
        [WHERE     condition(s)]
        [ORDER BY  {column, expr, alias} [ASC|DESC]];

*/


-- 1.根据薪资进行排序(降序)
SELECT * 
FROM employees
ORDER BY salary DESC;

-- 2.可以给多个字段排序
-- 优先满足靠前的排序规则,如果相同 排序后面的字段
-- 需求:首先根据部门升序排序,根据薪资降序排序

SELECT * 
FROM employees
ORDER BY department_id ASC,salary DESC;


-- 按照别名排序
SELECT employee_id,last_name,salary,salary*12 nn
FROM employees
ORDER BY nn DESC;


-- 查询部门部门编号为 40,50,60的员工信息,并且根据salaay进行降序排序
-- 有WHERE的SQL语句一定把WHERE 放到 FROM后面
SELECT * 
FROM employees
WHERE department_id IN(40,50,60)
ORDER BY salary DESC;

--1:查询雇员表中所有信息
select * from employees;
--2:查询雇员编号, 姓名, 工作, 工资
select employee_id,first_name,last_name,job_id,salary
from employees;
--3:查询雇员编号, 姓名, 工作, 工资, 列标题需显示中文
select employee_id "雇员编号",last_name "姓名",job_id "工作",salary "工资"
from employees;
--4:消除重复列, 查询雇员工作种类
select distinct job_id from employees;
--5:查询所有雇员编号, 姓名, 工作
select employee_id,last_name,job_id
from employees;
--6:查询雇员编号, 姓名, 工作, 年薪
select employee_id,last_name,job_id,salary
from employees;
--7:查询工资大于 1500 的雇员所有信息
select * 
from employees
where salary>1500;
--8:查询可以得到奖金的雇员所有信息
select *
from employees
where salary>0 and salary is not null;
--9:查询工资大于 1500 或可以得到奖金的雇员
select *
from employees
where salary>0 and salary is not null;
--10:查询工资大于 1500 并且可以领取奖金的雇员
select *
from employees
where salary>1500 and commission_pct>0 and commission_pct is not null;
--11:查询工资不大于 1500 或者不可以领取奖金的雇员
select *
from employees
where salary<=1500 or commission_pct is null;
--12:查询工资在 1500 到 3000 的所有雇员信息
select *
from employees
where salary between 1500 and 3000;
--13:查询在 2003 年雇用的员工信息
select *
from employees
where hire_date between '1_1月_2002' and '31_12月_2002';
--14:查询雇员姓名中第二个字母为 “o” 的雇员信息
select *
from employees
where last_name like '_o%';
--15:查询雇员工资中带 8 这个数字的
select *
from employees
where salary like '%8%';
--16:查询编号是 100,110,120,130 的雇员信息
select *
from employees
where employee_id in (100,110,120,130);
--17:查询雇员编号不是 100,110,120,130 的所有雇员信息
select *
from employees
where employee_id not in (100,110,120,130);
--18:查询雇员编号为 130 的雇员信息
select *
from employees
where employee_id=130;
--19:查询雇员编号不为 130 的雇员信息
select *
from employees
where employee_id !=130;
--20:查询雇员信息, 按工资由低到高排序 
select *
from employees
order by salary asc;
--21:查询雇员信息, 按工资由高到低排序
select *
from employees
order by salary desc;
--22:HR 需要得到一个月薪资 $12000 以上的员工名 (last_name)和薪水报告, 请完成查询
select last_name,salary
from employees
where salary>12000;
--23:HR 需要识别高收入和低收入员工群体不在5000到12000之间的
select *
from employees 
where salary not in (5000,12000);
--24:请查询没有领导的员工名和职位
select last_name,job_id
from employees
where manager_id is null;
--25:请查询有奖金的员工名和月薪、奖金,并按奖金系数排降序
select last_name,salary,commission_pct*salary "奖金"
from employees
order by commission_pct desc;
--26:请查询月薪大于 1000 的员工名和月薪
select last_name,salary
from employees
where salary >1000;
--27:请查询第三个字母是 a 的员工名
select last_name
from employees
where last_name like '__a%';
--28:请查询员工名包含 a 或 e 的员工名
select last_name
from employees
where last_name like '%a%'or last_name like '%e%';
--29:请查询职位是 “SA_REP” 或“ST_CLERK”,且月薪不是 $2500、$3500、$7000 的员工信息
select *
from employees
where job_id in('SA_REP','ST_CLERK')and salary not in (2500,3500,7000);
--30:请查询奖金系数是 20% 的员工名、薪水和奖金系数
select last_name,salary,commission_pct
from employees
where commission_pct=0.2;
--31:查询部门 30 中的所有员工信息_
select *
from employees e
where e.department_id=30;
--32:列出所有办事员 (CLERK) 的姓名, 编号和部门编号
select last_name,employee_id,department_id
from employees
where job_id ='ST_CLERK';
--33:找出部门 110 中所有经理 (MGR) 和部门 50 中所有办事员 (CLERK) 的详细资料
select *
from employees e 
where (e.department_id=110 and e.job_id like '%MGR') or (e.department_id=50 and e.job_id like '%CLERK');
--34:找出部门 110 中所有经理 (MGR), 部门 50 中的所有办事员 (CLERK), 既不是经理又不是办事员但薪金大于或等于 8000 的所有员工的详细资料
select *
from employees e
where (e.department_id=110 and e.job_id like '%MGR') or (e.department_id=50 and e.job_id like '%CLERK')
or((e.job_id not like '%MGR' and e.job_id not like '%CLERK') or salary >= 8000);
--35:找出收取佣金的员工的不同工作
select distinct job_id
from employees
where commission_pct > 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值