首页 > 数据库 >oracle第一课

oracle第一课

时间:2023-05-06 17:35:14浏览次数:54  
标签:12 employees email 第一课 SQL oracle ID select

一、sql初步了解

1 **SQL****语句分为以下三种类型

  • DML: Data Manipulation Language 数据操纵语言
  • DDL: Data Definition Language 数据定义语言
  • DCL: Data Control Language 数据控制语言

1.1 DML用于查询与修改数据记录

包括如下SQL语句:

  • INSERT:添加数据到数据库中
  • UPDATE:修改数据库中的数据
  • DELETE:删除数据库中的数据
  • SELECT:选择(查询)数据

SELECT是SQL语言的基础,最为重要。

1.2 DDL用于定义数据库的结构

比如创建、修改或删除数据库对象,包括如下SQL语句:

  • CREATE TABLE:创建数据库表
  • ALTER TABLE:更改表结构、添加、删除、修改列长度
  • DROP TABLE:删除表
  • CREATE INDEX:在表上建立索引
  • DROP INDEX:删除索引

1.3 DCL用来控制数据库的访问

包括如下SQL语句:

  • GRANT:授予访问权限
  • REVOKE:撤销访问权限
  • COMMIT:提交事务处理
  • ROLLBACK:事务处理回退
  • SAVEPOINT:设置保存点
  • LOCK:对数据库的特定部分进行锁定

二、基本sql-select语句

学习目标

  • 列举SQL SELECT 语句的功能
  • 执行简单的选择语句
  • SQL语言和SQL*Plus命令的不同

1.1 基本select语句

select *|{【DISTINCT] column|expression [alias],...}

from table;

•SELECT 标识 选择哪些列。

•FROM 标识从哪个表中选择。

1.2 选择全部列

查看表结构
desc employees;

选择全部列
select * from departments;

1.3 选择特定的列

SQL> select department_id,location_id
  2  from departments;

DEPARTMENT_ID LOCATION_ID
------------- -----------
           10        1700
           20        1800
           30        1700
           40        2400
           
SQL> select employee_id,last_name,email
  2  from employees;

EMPLOYEE_ID LAST_NAME                 EMAIL
----------- ------------------------- -------------------------
        100 King                      SKING
        101 Kochhar                   NKOCHHAR
        102 De Haan                   LDEHAAN
        103 Hunold                    AHUNOLD
        104 Ernst                     BERNST
        105 Austin                    DAUSTIN
        106 Pataballa                 VPATABAL
        107 Lorentz                   DLORENTZ

注意:

  • sql语言大小写不敏感
  • sql可以写在一行或多行
  • 关键字不能被缩写也不能分行
  • 各子句一般要分行写
  • 所用缩进提高语句的可读性

2算术运算符

操作符 描述
+
-
*
/
数学运算
select 8*9 from dual;

查看表结构,标识为number可做运算
desc employees;
SQL> desc employees;
Name           Type         Nullable Default Comments 
-------------- ------------ -------- ------- -------- 
EMPLOYEE_ID    NUMBER(6)                              
FIRST_NAME     VARCHAR2(20) Y                         
LAST_NAME      VARCHAR2(25)                           
EMAIL          VARCHAR2(25)                           
PHONE_NUMBER   VARCHAR2(20) Y                         
HIRE_DATE      DATE                                   
JOB_ID         VARCHAR2(10)                           
SALARY         NUMBER(8,2)  Y                         
COMMISSION_PCT NUMBER(2,2)  Y                         
MANAGER_ID     NUMBER(6)    Y                         
DEPARTMENT_ID  NUMBER(4)    Y  

查询工资,一年,加1000
select last_name,salary,12*salary + 1000
from employees;
LAST_NAME                     SALARY 12*SALARY+1000
------------------------- ---------- --------------
King                        24000.00         289000
Kochhar                     17000.00         205000
De Haan                     17000.00         205000
Hunold                       9000.00         109000
Ernst                        6000.00          73000
Austin                       4800.00          58600
Pataballa                    4800.00          58600
Lorentz                      4200.00          51400
Greenberg                   12000.00         145000
Faviet                       9000.00         109000

3操作符优先级

•乘除的优先级高于加减。

•同一优先级运算符从左向右执行。

括号内的运算先执行。

SELECT last_name, salary, 12*salary+100
FROM   employees;
LAST_NAME                     SALARY 12*SALARY+100
------------------------- ---------- -------------
Walsh                        3100.00         37300
Feeney                       3000.00         36100
OConnell                     2600.00         31300
Grant                        2600.00         31300
Whalen                       4400.00         52900
Hartstein                   13000.00        156100

--使用括号
SELECT last_name, salary, 12*(salary+100)
FROM   employees;
LAST_NAME                     SALARY 12*(SALARY+100)
------------------------- ---------- ---------------
Walsh                        3100.00           38400
Feeney                       3000.00           37200
OConnell                     2600.00           32400
Grant                        2600.00           32400
Whalen                       4400.00           54000
Hartstein                   13000.00          157200

select last_name,salary,12*salary + 1000,12*(salary + 1000)
from employees;
LAST_NAME           SALARY 12*SALARY+1000 12*(SALARY+1000)
------------------------- ---------- -------------- ---------
Walsh              3100.00          38200            49200
Feeney             3000.00          37000            48000
OConnell           2600.00          32200            43200


--空值不同于零,凡是空置参与运算的值为空(null)
select employee_id,last_name,commission_pct,salary*(1+commission_pct)
from employees

4列的别名

  • 重命名一个列。
  • 便于计算。
  • 紧跟列名,也可以在列名和别名之间加入关键字‘AS’,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写
--起别名
select employee_id id,last_name name,12*salary annual_sal
from employees

     ID NAME                      ANNUAL_SAL
------- ------------------------- ----------
    196 Walsh                          37200
    197 Feeney                         36000
    198 OConnell                       31200
    199 Grant                          31200
    200 Whalen                         52800
    201 Hartstein                     156000
    202 Fay                            72000
    
--大小写别名
select employee_id as "id",last_name "Name",12*salary annual_sal
from employees
    
         id Name                      ANNUAL_SAL
------- ------------------------- ----------
    196 Walsh                          37200
    197 Feeney                         36000
    198 OConnell                       31200
    199 Grant                          31200
    200 Whalen                         52800

5 连接符

  • 把列与列,列于字符连接在一起。
  • 用 ’||‘ 表示
  • 可以用来‘合成’列
--连接符
select last_name || '`s email is '||job_id as details
from employees
-----------------------------------------------
Walsh`s email is SH_CLERK
Feeney`s email is SH_CLERK
OConnell`s email is SH_CLERK
Grant`s email is SH_CLERK
Whalen`s email is AD_ASST
Hartstein`s email is MK_MAN
Fay`s email is MK_REP
Mavris`s email is HR_REP
Baer`s email is PR_REP
Higgins`s email is AC_MGR
Gietz`s email is AC_ACCOUNT

6.字符串

  • 字符串可以是select列表中的一个字符,数字,日期

  • 日期和字符只能在单引号中出现

  • 每当返回一行时,字符串被输出一次

    --字符串
    select last_name||'`s hire_date is '|| hire_date as "details"
    from employees
    
    details
    -------------------------------------------------------
    Walsh`s hire_date is 24-4月 -98
    Feeney`s hire_date is 23-5月 -98
    OConnell`s hire_date is 21-6月 -99
    Grant`s hire_date is 13-1月 -00
    Whalen`s hire_date is 17-9月 -87
    Hartstein`s hire_date is 17-2月 -96
    Fay`s hire_date is 17-8月 -97
    

7.重复行

--默认情况下,查询会返回全部行,包括重复行
select department_id
from employees

DEPARTMENT_ID
-------------
           50
           50
           50
           50
           10
           
           
--去重,在 SELECT 子句中使用关键字 ‘DISTINCT’ 删除重复行。
select distinct department_id
from employees

DEPARTMENT_ID
-------------
          100
           30

           90
           20
           70
          110
           50
           80
           40
           60
           10

12 rows selected

三、SQL 语句与 SQL*Plus 命令

SQL
一种语言
ANSI 标准
关键字不能缩写
使用语句控制数据库中的表的定义信息和表中的数据
SQL*Plus
一种环境
Oracle 的特性之一
关键字可以缩写
命令不能改变数据库中的数据的值
集中运行

SQL:Structural query language

使用SQL*Plus可以:

  • •描述表结构。
  • •编辑 SQL 语句。
  • •执行 SQL语句。
  • •将 SQL 保存在文件中并将SQL语句执行结果保存在文件中。
  • •在保存的文件中执行语句。
  • •将文本文件装入 SQL*Plus编辑窗口。

四、使用 DESCRIBE 命令,表示表结构

SQL> DESC EMPLOYEES;
Name           Type         Nullable Default Comments 
-------------- ------------ -------- ------- -------- 
EMPLOYEE_ID    NUMBER(6)                              
FIRST_NAME     VARCHAR2(20) Y                         
LAST_NAME      VARCHAR2(25)                           
EMAIL          VARCHAR2(25)                           
PHONE_NUMBER   VARCHAR2(20) Y                         
HIRE_DATE      DATE                                   
JOB_ID         VARCHAR2(10)                           
SALARY         NUMBER(8,2)  Y                         
COMMISSION_PCT NUMBER(2,2)  Y                         
MANAGER_ID     NUMBER(6)    Y                         
DEPARTMENT_ID  NUMBER(4)    Y 

标签:12,employees,email,第一课,SQL,oracle,ID,select
From: https://www.cnblogs.com/youth402/p/17378088.html

相关文章

  • oracle大数据量优化
    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。2.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:selectidfromtwherenumisnull可以在num上设置默认值0,......
  • Oracle分区详解
    关键字:Oracle分区详解概要说明:对分区后的表进行操作和原来一样(无需任何改动)并且可以根据分区进行查询(非必须),如:select*frombpmpartition(part_b)wherepid<=18;其中part_b是bpm表中的一个分区名称。该文章通过以下五方面来整理关于分区表的概念......
  • Oracle中存储过程编译卡死
    --查看锁死的存储过程的SESSION_IDSELECT*FROMDBA_DDL_LOCKSWHERENAME=UPPER('存储过程名')--获取selectt.sid,t.serial#fromv$sessiontwheret.sidin(SELECTdistinctSESSION_IDFROMDBA_DDL_LOCKSWHERENAME=UPPER('存储过程名'))--杀掉进程--分......
  • Oracle到国产数据库DM的迁移案例
    Oracle到国产数据库DM的迁移案例 阿依纳伐 发表于2020/12/2510:37:49  3.5k+  0  0 【摘要】对于达梦数据库,我在19年之前还没有听过,第一次听到达梦,金仓数据的时候还是我们打算开始做鲲鹏专家服务的技术研讨会上,数据库专家在说国产数据库的提到达梦和金仓,感觉完......
  • oracle中int类型和number类型区别
    oracle中int类型和number类型区别 INT类型是NUMBER类型的子类型。下面简要说明:(1)NUMBER(P,S)该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数。假设定义SAL列为NUMBER(6,2)则整数最大位数为4位(6-2=4),而小数最大位数为2位。(2)INT类型当定......
  • Oracle 对象依赖性与对象失效
    一、起源开发A在从库查询视图遇到报错:执行的SQL为:select*fromV_TEST_JOIN具体错误信息为:java.sql.SQLSyntaxErrorException:ORA-04045:在重新编译/重新验证V_TEST_JOIN时出错ORA-16000:数据库或可插入数据库是以只读访问方式打开的二、报错原因及处理方法1.报错原......
  • oracle中的自动增长列的插入实现
    我们知道,在oracle中自动增长类型是依靠sequence类实现的,但是我们在插入一条数据时不能像sqlServer或者mySql中那么方便必须使用sequence.nextval来取得输入的值,能不能做到和Sqlserver一样吗,比如有表:createtableEMP(EMPIDNUMBER(4)notnull,EMPNAMEVARCHAR2(4000),EMPPAS......
  • oracle比较大小函数greatest与least
    目录oracle比较大小函数greatest与least1、greatest函数取最大值2、least函数取最小值oracle比较大小函数greatest与least比较出最大或者最小值的函数,null为最大或最小的值。语法:select函数名(value_1,value_2,...,value_n)fromdual;1、greatest函数取最大值select......
  • Oracle 给用户赋予dblink权限,创建dblink
    1.判断用户是否具备创建databaselink的权限  一:查看当前登录用户(如果查询有返回行,则表示具备创建权限,否则,需要创建权限)1select*fromuser_sys_privswhereprivilegelikeupper('%LINK%');二:查询某个用户test(如果查询有返回行,则表示具备创建权......
  • oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”
    Oracle删除用户的提示无法删除当前已连接用户两种解决方法如下:1、先锁定用户、然后查询进程号,最后删除对应的进程、在删除对应的用户SQLalteruserXXXaccountlock;SQLSELECT*FROMV$SESSIONWHEREUSERNAME='LGDB';Oracle删除用户的提示无法删除当前已连接用户两种解决......