混淆查询,学习Oracle的一部分收获

  1. 找盛名中包含 “厂”的富有供应商的名
    select * from provider where pro_name like ‘%厂%’
    贰.次之个字为华
    select * from provider where pro_name like ‘_华%’
  1. 找盛名中富含 “厂”的装有供应商的名
    select * from provider where pro_name like ‘%厂%’
    二.次之个字为华
    select * from provider where pro_name like ‘_华%’

前言:

在看尚硅谷的Oracle录像时,计算的片段投机之前不熟的,大概完全不了然的知识点,只适用于本身,本身有自然的SQL基础,所以某些本人相比较熟谙的知识点不会列出来。

SQL语句分为以下二种档期的顺序:

通配符

  %:代表任何字符

  _:任何单个字符

  [a-z]:范围内的单个字符、相称不区分轻重缓急写

 [^0-9]:不在范围内

通配符

  %:代表任何字符

  _:任何单个字符

  [a-z]:范围内的单个字符、相配不区分轻重缓急写

 [^0-9]:不在范围内

Oracle中SQL使用本事:

  • ### 使用 || 作为连接符,举例:

    SELECT last_name||job_id AS “Employees”
    FROM employees;

  • ### 给列加别称时,能够用双引号 ”” 括起来,能够让外号保持小写,大概中间存在空格等;

  • ### 输出单引号 ‘ ,双引号 ”

    SQL> select ””,'”‘ from dual;
    ”” ‘”‘


    ‘ “

  • ### 暗许的日期格式是 DD-MON月-卡宴Odyssey

    SQL> select last_name,hire_date from employees where hire_date = ’17-3月-1999′;
    LAST_NAME HIRE_DATE


    Jones 1999/3/17

  • ### BETWEEN…AND…条件包涵边界

    SQL> select last_name, salary from employees where salary between 6500 and 7000;
    LAST_NAME SALARY


    Mavris 6500.00
    Popp 6900.00
    Vollman 6500.00
    Tuvault 7000.00
    Sewall 7000.00
    Lee 6800.00
    Grant 7000.00
    7 rows selected

  • ### like 做模糊查询时, % 表示0个或两个字符,_ 表示多少个字符,能够用 escape 标记符选择到%或_字符

    select last_name from employees
    –选取名字中存在a的
    –where last_name like ‘%a%’
    –选拔名字中第3个字符是a的
    –where last_name like ‘_a%’
    –选取名字中有混淆查询,学习Oracle的一部分收获。_的,此处的 \ 可替换为任何字符
    where lastname like ‘%\%’ escape ‘\’

  • ### 选取在一九九1年雇佣的职员和工人的全名和雇佣时间

    –不可行
    select last_name,hire_date from employees where hire_date like ‘%1994%’;

    –可行
    select last_name,hire_date from employees where hire_date like ‘%94%’;
    select last_name,hire_date from employees where to_char(hire_date,’yyyy’)=’1994′;

  • DML:Data Manipulation Language 数据垄断语言
    1. INSERT
    2. UPDATE
    3. DELETE
    4. SELECT
  • DDL:Data Definition Language 数据定义语言
    1. CREATE TABLE
    2. ALTER TABLE
    3. DROP TABLE
    4. CREATE INDEX
    5. DROP INDEX
  • DCL:Data Control Language 数据调整语言
    1. GRANT 授予访问权限
    2. REMOVE 打消访问权限
    3. COMMIT 提交事务管理
    4. ROLLBACK 事务管理回退
    5. SAVEPOINT 设置保存点
    6. LOCK 对数据库的特定部分进行锁定

本意

select * from employee where id like ‘d%%’ escape ‘d’
select * from employee where id like ‘d_%’ escape ‘d’

本意

select * from employee where id like ‘d%%’ escape ‘d’
select * from employee where id like ‘d_%’ escape ‘d’

PL/SQL Developer使用本领:

  • ### 在Command Window中,借使写SQL无法实践,也不想继续写下去时,使用 SHIFT+ESC 终止,类似于命令行中的Ctrl+C;

  • ### F8 是施行SQL语句的急迅键;

  • ### desc + 表名,能够查看表结构;

  • ### ed 命令展现Text editor,感到写长段的SQL时,恐怕会有用,然后选拔 / 命令施行;

一、基本的SQL-SELECT语句

别名 

997755.com澳门葡京 ,壹一向在字段名前边写  select last_name name,employee_id id from
empolyees;

贰在字段名后加as  select last_name as name,employee_id as id from
empolyees;

叁加双引号(当外号由三个单词构成且中间以空格隔离时必用)  select
last_name “my name”,employee_id as id from empolyees;      

 

连接符

1把列与列,列与字符连接在联合

②用 || 表示

三方可用来’合成’列

select last_name||’`s job_id is ‘||job_id as details from
employees

 

重复行(去重)distinct

select distinct department_id from employees;

瞩目:null值也单独为1行

留意:字符和日期必须用单引号括起来(SQL中只有在上头提到的别称时会用到双引号,别的情状都用单引号),SQL语言大小写不灵活,但”括起来的字符串严酷差别轻重缓急写

 

2、过滤和排序

过滤 where

— AND OR NOT 逻辑且/逻辑或/逻辑否

— [NOT] BETWEEN AND 表示区间内的值,包涵边界 等价于 >= and <=

— [NOT] IN 代表离散的值,where department_id in(70,80,90) 等价于
where department_id=70 or department_id=80 or department_id=90

— [NOT] LIKE 模糊查询 

   百分号%表示0…n个字符;

   下划线_表示单个字符;

   转义字符 ESCAPE,where last_name like  ‘%\_%’ escape ‘\’
(转义字符能够是其它字符 如 \ # $ 等)

— IS [NOT] NULL 空值

— 运算优先级

    算术运算符>连接符>比较符>IS
NULL,LIKE,IN>BETWEEN>NOT>AND>O卡宴

    括号能够退换优先级

 

排序

ORDER BY … DESC(逆序)/ASC(顺序,默认)

select last_name,department_id,salary*12 annual_sal
from employees

–order by 能够不放在where子句

–where department_id > 80

–多级排序

–依字段小名排序
order by annul_sal,last_name desc

 

三、单行函数

字符

①大小写调控函数:因为被单引号括出来的故事情节是严峻区分轻重缓急写,而有时候查询不在乎大小写,那时候此类函数派上用场

   LOWE宝马X3(‘SQL Course’) → sql course    全体大写

   UPPEQashqai(‘SQL Course’) → SQL COU奥迪Q三SE 全部大写

   INITCAP(‘SQL Course’) → Sql Course  单词首字母大写

二 字符调控函数:

   CONCAT(‘Hello’,’World’) → HelloWorld 连接字符串

   SUBST智跑(‘HelloWorld’,壹,5) → Hello      
从第二个下角标地点上马截取长度为5的子字符串–Java中下标从0开头,-壹表示无效数据;SQL中下标从一起来,0代表无效数据

   LENGTH(‘HelloWorld’) → 十                字符串长度

   INSTEOdyssey(‘HelloWorld’,’W’) → 陆             字符在字符串中的地方

   LPAD(salary,10,’*’) → *****二五千    
字符串左对齐,用13个位去存,不足在左端用*补齐

   RPAD(salary,10,’*’) → 24000*****    
字符串右对齐,用十二个位去存,不足在右端用*补齐

   TLANDIM(‘H’ FROM ‘HelloHWorldH’) → elloHWorld
去除原字符串中前后与钦点字符同样的字符

   REPLACE(‘abcdb’,’b’,’m’) → amcdm     
将字符串中有所与钦定字符相同的字符替换为另一个字符

 

数值

   ROUND() 4舍5入

      –ROUND(435.45,1) ROUND(435.45) ROUND(435.45,-1)
                         435.5                 
435                       440

   TRUNC() 截断

      –ROUND(435.45,1) ROUND(435.45) ROUND(435.45,-1)
                         435.4                 
435                       430

   MOD() 求余

      –MOD(1600,15)

                         10

 

日期:Oracle中的日期型数据实际上含有七个值(日期和岁月)

   在日期上丰裕或减去一个数字结果仍为日期

   三个日子相减再次回到日期之间相差的命局

   MONTHS_BETWEEN 八个日子相差的月数

   ADD_MONTHS         向内定日期中增进若干月数

   NEXT_DAY              钦定日期的下1个星期几对应的日子

   LAST_DAY              前段日子的结尾一天

   ROUND                   日期肆舍伍入

   TRUNC                    日期截断

 

数据类型转变

① 隐式 DATE ←→ VARCHAR2 ←→ NUMBER

源数据类型 目标数据类型
VARCHAR2/CHAR NUMBER
VARCHAR2/CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2

–注意区分,JAVA中+号在字符串运算中代表字符串连接,SQL中字符串连接用的是
||,+号则意味着数学加法运算

select ‘1二’ + 贰 from dual; –此处’1贰’隐性转换为NUMBE奥迪Q三类型的1二

14

 

② 显式

997755.com澳门葡京 1

TO_CHAR

   select employee_id,to_char(hire_date,’yyyy”年”mm”月”dd”日”‘)
–此处在出口日期格式中穿插的字符要用””括起来
   from employees
   where to_char(hire_date,’yyyy/mm/dd’) = ‘1994/06/07’  —
to_date(‘1994/06/07′,’yyyy/mm/dd’)

TO_DATE

TO_NUMBER

   select to_char(123456七.89,’99九,99九,99九.99′) from dual; —
一,234,5陆七.8九      不足不用补零

   select to_char(1234567.8玖,’000,000,99玖.9九’) from dual; —
00壹,23四,5陆7.8玖   不足位数补零

   select to_char(12345陆七.8玖,’$999,99九,99九.9玖’) from dual; —
$一,23四,5陆7.8玖   日元符号

   select to_char(1234567.8玖,’L99玖,99九,99九.99′) from dual; —
¥1,23肆,56七.8玖  本地货币符号

   select to_number(‘¥一,23四,5陆柒.8玖’,’L99九,99九,99九.9玖’) from dual; —
12345陆柒.8玖 格式要对应上

 

通用

这一个函数适用于其余数据类型,同时也适用于空值

NVL(expr1,expr2) 等价于 expr1!=null?expr1:expr2

–commission_pct 奖金率字段的值有希望为null,是null则用 0 代替

select employee_id,last_name,salary*12*(1+nvl(commission_pct,0))
annual_sal,commission_pct from employees;

–由于department_id是NUMBE奥德赛类型,而’未有机关’是严酷的字符类型,直接调用NVL函数报“无效数字”错误,需实行处理

select last_name,nvl(to_char(department_id),’未有机关’) from
employees;

NVL2(expr1,expr2,expr3) 等价于 expr1!=null?expr2:expr3

select last_name,nvl2(commission_pct,commission_pct + 0.015,0.01)
from employees;

NULLIF(expr1,expr2) 等价于 expr1==expr2?null:expr1

select first_name,length(first_name) “expr1”,
       last_name,length(last_name) “expr2”,
       nullif(length(first_name),length(last_name)) result
from employees

COALESCE(expr1,expr2,…,exprn)
就算第伍个表达式为null,则赶回下3个表明式,依次迭代

 

原则表明式(IF-THEN-ELSE逻辑)

① CASE表达式

CASE expr1 WHEN comparison_expr1 THEN return_expr1
  [WHEN comparison_expr2 THEN return_expr2    WHEN comparison_exprn THEN return_exprn
   ELSE else_expr]

END

–查询部门号为十,20,30的职员和工人音讯,若单位号为10,则打字与印刷
–其职业的一.一倍,20号部门,一.贰倍,30号部门,壹.3倍
select employee_id,last_name,department_id,
       case department_id when 10 then salary*1.1
                                    when 20 then salary*1.2
                                    else salary*1.3
                                    end REVISED_SALARY
from employees
where department_id in(10,20,30)

997755.com澳门葡京 2

 

② DECODE函数

select employee_id,last_name,department_id,
       decode(department_id,10,salary*1.1,
                                        20,salary*1.2,
                                        salary*1.3) REVISED_SALARY
from employees
where department_id in(10,20,30)

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website