Oracle查询(select)

每个表中都有一个伪列ROWID,每个结果集中都有一个ROWNUM(根据查询结果集中需要列出的行数)。
有个Customer表,有name, id,price字段

select * from Customer where ROWID=1select * from Customer where ROWNUM=1;
  • 列运算
    select price * 2 as DOUBLE_PRICE;用于字段的别名
    select price *2 as “double_price”;可以别名不大写,需要双引号

  • 连接操作合(||)并输出结果

select first_name || ' ' || last_name (as) "CustomerName" from Customer;
输出Tom Green
  • 空值(NULL):列的值未知
    NVL(列名,列名值):如果列名为NULL,就将列名值给字段
    NVL也可以转换日期
  • 禁止显示重复行(distinct)
select distinct customer_id from purchases;
  • 比较运算:>、<、>=、<=
    <>等价与!=:不等于
    ANY等价于SOME:与一个列表中的任何值进行行比较,有个满足就返回true
    ALL:与一个列表中的所有值进行比较
where customer_id > ANY(2,3,4);//只要大于其中任何一个就为true
where customer_id > ALL(2,3,4);// 都大于才为true
  • 限制查询(likek,not like)
    _(下划线字符):匹配指定位置一个字符
    %:指定位置开始的任意字符
where name (not) like '_A%';//第二个字符为大写A的字符串
where name (not) like '%\%%' ESCAPE '\';
where name (not) like '%\_%' ESCAPE '\';\\使用ESCAPE '\'表示\后面是要进行查询的字符而不是通配符
  • IN操作符
where customer_id (not) in234);//字段值是否再该列表中
  • BETWEEN:用于检索指定区间内的行
    where customer_id (not) between 1 and 3;//1到3行

  • 逻辑操作符
    x and y:都为true,返回true
    x or y:一个为true,返回true
    not x:取反,x为false返回true;x为true,返回false
    优先级:比较大于and,and大于or

  • order by:子句对行进行排序,该子句必须位于from、where子句之后

 from customer order by first_name ASC,last_name DEST;//fist_name升序,last_name降序
 from order by 1;//对第一列进行排序,以此类推
  • 两表select查询
    select tb1.name,tb2.name from tb1,tb2 where tb1.id=tb2.id;
select p.name,p1.name from tb1 p, tb2 p1 where p.id=p1.id order by p.name;//使用表别名
  • 执行语句多与两个表的select查询,连接数=查询中使用表的总数-1
  • 连接条件:等连接,不等连接
  • 连接类型:内连接,外连接,自连接

  • USING关键字简化连接:使用条件必须满足两个条件:查询必须是等连接,等连接中的列必须相同
    -selectp.name, p1.name from tb1 p inner join tb2 p1 USING(id);//id必须是两表中字段名相同

select p.name, p1.name p1.id from tb1 p inner join tb2 p1 USING(id);
select p.name, p1.name from tb1 p inner join tb2 p1 USING(p1.id);
//上面两种都是错的,使用USING子句中引用列时不要使用表名或别名,否则会报错
from tb1 p inner join tb2 p1 USING(name, id);//执行多列内连接
  • 外链接
    `select p.name,p1.name from tb1 p , tb2 p1 where p.id=p1.id (+) order by p.name;
等价与=select p.name, p1.name from tb1 left (outer) join tb2 p1 USING(id) order by name;
select p.name,p1.name from tb1 p,tb2 p1 where p.id (+) = p1.id order by p.name;
//不适用USING
select p.name ,p1.name from tb1  p right (outer) join tb2 p1 on p.id=p1.id;
//等价于
select p.name ,p1.name from tb1 p right (outer) join tb2 p1 USING(id);
### Oracle 数据库 SELECT 查询语句 示例及用法 #### 1. 基础查询Oracle 11g 中,`SELECT` 语句用于从数据库表中提取数据。最简单的 `SELECT` 语句可以从单个表中选择特定列的数据。 ```sql SELECT first_name, last_name FROM employees; ``` 这条语句会返回 `employees` 表中的 `first_name` 和 `last_name` 列的所有记录[^1]。 #### 2. 添加条件筛选 (WHERE 子句) 为了获取更精确的结果,可以在 `SELECT` 语句中加入 `WHERE` 子句来指定条件。 ```sql SELECT employee_id, department_id FROM employees WHERE salary > 5000; ``` 此查询仅返回那些工资大于 5000 的员工的 ID 及其部门 ID。 #### 3. 排序结果 (ORDER BY 子句) 通过使用 `ORDER BY` 子句可以按照某一列或多列对结果进行升序 (`ASC`) 或降序 (`DESC`) 排序,默认情况下是升序排列。 ```sql SELECT product_name, price FROM products ORDER BY price DESC; ``` 这段代码将按价格高低顺序显示商品名称及其售价列表。 #### 4. 使用聚合函数 还可以利用内置的聚合函数如 COUNT(), SUM(), AVG() 等来进行统计分析工作: ```sql SELECT COUNT(*) AS total_employees FROM employees; SELECT MAX(salary), MIN(salary) FROM employees; ``` 这些例子展示了如何计算雇员总数以及最高最低薪资情况[^2]。 #### 5. 进行分组汇总 (GROUP BY 子句) 当需要基于某些字段值的不同组合统计数据时,则需要用到 GROUP BY: ```sql SELECT department_id, AVG(salary) average_salary_per_dept FROM employees GROUP BY department_id; ``` 上述命令根据不同的部门编号分别求取平均薪酬水平。 #### 6. 实际环境下的操作流程 对于 Linux 平台上的 Oracle 客户端而言,在实际执行任何 SQL 操作之前需先完成如下准备工作: - 更改当前登录账户至 oracle 用户; - 启动 sqlplus 工具并作为管理员身份接入数据库实例; - 执行 startup 脚本来开启服务进程; - 输入正确的用户名密码连接目标模式(schema),比如 scott/tiger 组合即可访问测试用途的标准样例合 hrm/hrd 等[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值