日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.子查询知识体系,单行子查询,多行子查询

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.子查询知识体系,单行子查询,多行子查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1查詢工資比scott高的員工信息

A 第一步:查詢出scott這個員工的工資

select sal from emp

where ename = 'SCOTT';

B 第二步:查詢出工資比scott高的員工信息???????????

select * fromemp

where sal >3000;

總結:

子查詢的本質:多個select語句的嵌套

2:子查詢的知識體系搭建

A 合理的書寫風格

B 子查詢外面()不要忘記

C 子查詢和主查詢可以查詢的是同一張表,也可以不是同一張表

?????只要子查詢返回的結果,主查詢可以用即可。

D 在什么地方可以防止子查詢

select a,b,c???????????????????? ---OK,只能存放單行子查詢,不能使多行子查詢

from tab1 ?????????????????---OK 可以有子查詢

where col in(em1,em2)?????? ---可以有子查詢

??????? col between a1 and a2

??????? col > 222

??????? col > ()

group by …???????????????? ---不可以有子查詢

having ….????????????????? ---可以有子查詢

order by …???????????????? ---不可以有子查詢

E 子查詢的分類

1.單行操作符對應單行子查詢,多行操作符對應多行子查詢。

2.按照子查詢返回的條目數,分為:單行子查詢和多行子查詢

3.單行子查詢只能使用單行比較操作符(=? >? ?>=? <? <=? <>

4.多行子查詢只能使用多行比較操作符(int any all

3 單行子查詢

Eg:查詢員工信息和141號工種一樣的,薪水比143號員工工資高的員工

SQL> conn hr/123456

已連接。

SQL> select last_name,job_id,salary

? 2? FROM employees

? 3? WHERE job_id =

? 4??????????????? (SELECT job_id

? 5???????????????? FROM employees

? 6???????????????? WHERE employee_id = 141);

???????????????

?

Eg:查詢工資最低的員工信息

select last_name,job_id,salary

FROM employees

WHERE salary =

????????????? (SELECT MIN(salary)

?????????????? FROM employees);

?

Eg:求各個部門編號和部門的最低工資(這個最低工資要比50號部門的最低工資要高)

思路分析:看子查詢 group by having條件檢索 看檢索對象

//子查詢:求50號部門的最低工資

à檢索 各部門的最低工資? 50號部門的最低工資 大的部門號和部門最小工資

SELECT department_id,MIN(salary)

FROM employees

GROUP By department_id

HAVING MIN(salary) >

?????????????????? (SELECT MIN(salary)

??????????????????? FROM employees

??????????????????? WHERE department_id = 50);

4? 查詢部門名稱是SALES的員工信息(2中方式)

方法1:子查詢

SELECT *

FROM emp

WHERE DEPTNO = (SELECT deptno

??????????????? FROM dept

??????????????? WHERE dname = 'SALES');

方法2:多表查詢

SELECT e.*

FROM emp e,dept d

WHERE e.deptno = d.deptno and d.dname = 'SALES';

注意:第二種(多表查詢的執行速度比子查詢的執行速度快,因為多表查詢是一次將數據讀到內存中進行讀取,消耗內存而加快速度)

????? 第一種(子查詢要進行兩次連接數據庫的操作,連接數據庫的操作是一個耗時操作,減低了速度)。

5 select后面要查詢的列中可以是單行子查詢,不可以是多行子查詢

錯誤案例:

select ename,empno,(select deptno from emp) AA from emp;

正確案例:

select ename,empno,(select deptno from emp where EMPNO = 7369) AA from emp;

6 查詢員工的姓名和薪水

select *

from (select ename,sal

???? from emp);

7 多行子查詢

多行子查詢只能使用多行比較操作符(in any all

????--eg 查詢部門名稱是*(不是)SALES ACCOUNTING 的員工信息? 2種方法

???????? ?--eg 查詢薪水 30號部門 任意一個員工薪高的員工信息

???????? ?-eg 查詢薪水 30號部門 所有員工 高的員工信息

查詢部門名稱是*(不是)SALES ACCOUNTING 的員工信息? 2種方法

select *

from emp

where deptno in

????????????? (select deptno

?????????????? from dept

?????????????? where dname = 'SALES' or dname = 'ACCOUNTING');

?

操作符

含義

IN

等于列表中的任何一個

ANY

和子查詢返回的任意一個值比較

ALL

和子查詢返回的所有值比較

ANY

SELECT employee_id,last_name,job_id,salary

?FROM employees

?WHERE salary < ANY

????????????????? (SELECT salary

?????????????????? FROM employees

?????????????????? WHERE job_id = 'IT_PROG')

?AND job_id <> 'IT_PROC';

ALL

SELECT employee_id,last_name,job_id,salary

FROM employees

WHERE salary < ALL

???????????????? (SELECT salary

????????????????? FROM employees

????????????????? WHERE job_id = 'IT_PROG')

AND job_id <> 'IT_PROC'

?

Eg: 30號部門 任意一個員工薪高的員工信息? 大于集合中的最小值 any

select *

from emp

where sal > all(select sal

??????????????? from emp

??????????????? where deptno = 30);

等價于:

select *

from emp

where sal > (select max(sal)

??????????? from emp

??????????? where deptno = 30);

?

查詢是經理的員工信息

分析:

SELECT *

FROM emp

WHERE empno in(經理的集合);

實際:

select *

from emp

where empno in

???????????? (

????????????? select mgr from emp

???????????? );

select *

from emp

where empno not in

(

select mgr

from emp

where mgr is not null

);

?

總結

以上是生活随笔為你收集整理的1.子查询知识体系,单行子查询,多行子查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。