首頁 資料庫 mysql教程 Oracle学习笔记之高级查询

Oracle学习笔记之高级查询

Jun 07, 2016 pm 03:10 PM

为列起别名 目的 我们进行查询时 经常查询某一列时使用的是表达式 SELECT enamme,sal*12 FROM emp 这样不好的地方是第二列在查询

为列起别名

目的 我们进行查询时 经常查询某一列时使用的是表达式 SELECT enamme,sal*12 FROM emp

这样不好的地方是第二列在查询后列用使用的就是sal*12.这样的可读性比较差为此我们会为列起别名,来增加可读性

别名本身不区分大小写,若希望区分,则别名需要使用双引号,当别名中含有空格,也应使用双引号

SELECT ename,sal*12 "Annual Salary" FROM emp;

WHERE子句

用于在查询数据的过程中过滤记录的,只有满足WHERE子句中的条件的记录才会被查询出来, 数据库在查询表的时候,每一条记录都要经过一次WHERE的过滤

查看工资小于2000的

SELECT ename,sal FROM emp WHERE sal

查看部门不属于10的员工信息

SELECT ename,sal,job FROM emp WHERE deptno !=10;

查询1980年出生的

SELECT ename,sal,hiredate FROM emp WHERE hiredate>TO_DATE('1980','YYYY');

查询sal大于1000 且工作为clerk

SELECT ename,sal,job FROM emp WHERE sal>1000 AND job='CLERK';

查询工资大于1500的CLERK 或者是不限制工资的所有SALESMAN

SELECT * FROM emp WHERE sal>1500 AND job='CLERK' OR job ='SALESMAN';

提高优先级的意思是 查看工资大于1500的CLERK 和SALESMAN

SELECT * FROM emp WHERE sal>1500 AND (job='CLERK' OR job ='SALESMAN');

查看emp表中ename 第二个字母的是A的名字

SELECT * FROM emp WHERE ename LIKE '_A%';

IN 比较符 可以比较等于列别中的其中之一

SELECT * FROM emp WHERE job IN('MANAGER','CLERK'); ==SELECT * FROM emp WHERE job='MANAGER' OR job='CLERK';

查询不等于MANAGER 和CKERK的所有工作

SELECT * FROM emp WHERE job NOT IN('MANAGER','CLERK');

SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;

SELECT * FROM emp WHERE sal>ANY(3000,2000,4000);

SELECT * FROM emp WHERE sal*12>50000;

SELECT ename,sal FROM emp WHERE UPPER(ename) = upper('rose');

DISTINCT关键字用于去除给定列的重复数据 查看公司都有哪些职位,重复的去除

SELECT DISTINCT job FROM emp;

当我们对多个列进行去重复时,表示这几个列的值的组合没有重复的

SELECT DISTINCT deptno,job FROM emp;

ORDER BY子句,用于对结果集进行排序

ORDER BY子句只能出现在SELECT语句的最后。

ORDER BY 后面可以指定若干字段,排序优先级为从左到右,

ASC 表示升序,默认就是升序,所以可以不写

DESC表示降序

按照部门编号从小刀大进行排序结果集

SELECT * FROM emp ORDER BY deptno

查询emp表里部门为10的工资和姓名 并降序排列

SELECT ename,sal FROM emp WHERE deptno =10 ORDER BY  sal DESC;

在排序一个含有NULL值的字段时,NULL值被认为是无限大,所以在降序排序时,NULL值会出现在最前面

-------------------------------------------------------------------------------------------

聚合函数

MAX和MIN

SELECT MAX(sal) FROM emp;

***聚合函数都是忽略NULL值

SELECT MAX(sal) as "最大",MIN(sal) as "最小" FROM emp;

SELECT AVG(NVL(comm,0) ) as "平均值" FROM emp;

SELECT AVG(sal),SUM(sal) FROM emp;

SELECT COUNT(comm) FROM emp;--统计条数,不统计值

SELECT COUNT(*) FROM emp;--统计整张表有多少条记录

GROUP BY子句 用于将表里的数据进行 分组,分组原则为GROUP BY 后面给定的字段的值相同的记录看做一组

查看每个部门的最大工资 最小工资等:

SELECT MAX(sal),MIN(sal),AVG(sal),SUM(sal),deptno FROM emp GROUP BY deptno;

聚合函数又称组函数

SQL有一个要求

在SELECT子句红若出现了组函数,那么不在组函数中的其他字段,必须出现GROUP BY 子句中,但是反过来则不是必须的

若字段中每条疾苦的值都不重复,那么该字段通常不应该在GROUP BY子句中作为分组的参照。

若指定了GROUP BY子句,那么SELECT子句中不在组函数中的其他字段且不在GROUP BY子句中则不能出现

WHERE 与HAVING的区别

相同点,都是用作过滤,只不过HAVING是用在第二次过滤的,WHERE是用在第一次查询表的时候过滤条件的。

HAVING是在第一次查询后,得到结果的基础上再次进行过滤使用的。

---------------------------------------

查询优先级

from子句,执行顺序,从后往前,从右到左 数据量少的放后面

where子句 执行顺序为自上而下,从右到左,将能过滤掉最大数量记录的条件卸载where子句的最右

group by 执行顺序从左往右分组

select子句,少用*号 尽量取字段名

----------------------------------------------------------------------------

关联查询

N张表联合查询,,至少要有N-1个连接条件,否则会产生笛卡尔积:A表的记录总数*B表的记录总数,无意义的结果集

两张表联合查询,要添加至少一个连接条件。因为查询时很难避免两张表出现相同名字的字段,为了解决这个问题,可以

使用 表名.字段 来确认

若别名比较长,柯表名叫上别名来简化

SELECT e.ename,e.sal,d.dname,e.deptno FROM emp e,dept d WHERE e.deptno = d.pdeptno;

SELECT e.ename,e.sal,d.dname,e.deptno FROM emp e JOIN dept d ON(d.deptno=e.deptno);

SQL89标准时,弊端在于,连接条件与过滤条件都要写在where子句中,可读性相对较差,尤其多表查询加上过滤条件多的时候。

SELECT e.ename,d.DNAME  FROM emp e,dept d WHERE d.DEPTNO=e.DEPTNO AND d.DNAME='SALES';

SQL92建议多表连接用 用SELECT ... FROM JOIN...ON ...WHERE(只写条件)

SELECT e.ename,d.dname FROM emp e JOIN dept d ON e.deptno = e.deptno WHERE d.dname ='SALES'

SQL92标准建议我们在夺标连接时使用内连接形式

这样会发现,连接条件单独定义在ON子句中,而过滤条件卸载WHERE子句中,可读性比较强

SELECT e.ename,d.dname FROM emp e JOIN dept d ON e.deptno=d.deptno WHERE d.dname='SALES';

外连接

自连接

当前表中的数据关联 表中的其他数据。就构成了自连接。通常表被设计成自连接是为了表示同类型数据有存在上下级关系(树状结构的数据通常设计为自连接。)

例如:淘宝网的类别。就被设计为自连接。

设计表的时候以及关联关系时通常有两个字段很重要,他们被称为:主键外键

通常每张表的第一个字段就是主键,主键保存的数据一般与数据无关系,他只是用来标识每条数据的唯一性,所以主键的要求是

存储的值非空且唯一。

外键,用来保存关系表中记录的主键的值,例如

部门表中有一个字段叫做dept,它用来保存dept表中某条记录主键的值那么emp表的dept就是外键

在关联关系中,保存外键的表通常是“一对多”中“多”的一方

本文永久更新链接地址

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24
MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

說明InnoDB重做日誌和撤消日誌的作用。 說明InnoDB重做日誌和撤消日誌的作用。 Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL索引基數如何影響查詢性能? MySQL索引基數如何影響查詢性能? Apr 14, 2025 am 12:18 AM

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

初學者的MySQL:開始數據庫管理 初學者的MySQL:開始數據庫管理 Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括創建數據庫、表格,及使用SQL進行數據的CRUD操作。 1.創建數據庫:CREATEDATABASEmy_first_db;2.創建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入數據:INSERTINTObooks(title,author,published_year)VA

MySQL與其他數據庫:比較選項 MySQL與其他數據庫:比較選項 Apr 15, 2025 am 12:08 AM

MySQL適合Web應用和內容管理系統,因其開源、高性能和易用性而受歡迎。 1)與PostgreSQL相比,MySQL在簡單查詢和高並發讀操作上表現更好。 2)相較Oracle,MySQL因開源和低成本更受中小企業青睞。 3)對比MicrosoftSQLServer,MySQL更適合跨平台應用。 4)與MongoDB不同,MySQL更適用於結構化數據和事務處理。

解釋InnoDB緩衝池及其對性能的重要性。 解釋InnoDB緩衝池及其對性能的重要性。 Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通過緩存數據和索引頁來減少磁盤I/O,提升數據庫性能。其工作原理包括:1.數據讀取:從BufferPool中讀取數據;2.數據寫入:修改數據後寫入BufferPool並定期刷新到磁盤;3.緩存管理:使用LRU算法管理緩存頁;4.預讀機制:提前加載相鄰數據頁。通過調整BufferPool大小和使用多個實例,可以優化數據庫性能。

MySQL:結構化數據和關係數據庫 MySQL:結構化數據和關係數據庫 Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

See all articles