mysql多表查詢、連接查詢、合並結果集、視圖、常見函數


多表查詢

概念:多張表或一張表多次使用成為多表查詢

需求:查詢最高薪資對應的員工信息

//1、先查出最高的薪資是多少
select max(salary) from t_emp;
//2、以最高薪資為條件查出對應的員工信息
select * from t_emp where salary=(select max(salary) from t_emp);

如果是使用的= != > < >= <=等等,那么要求是后面只能跟單個結果

如果子查詢的結果是多個值,那就使用in/not in

需求:查詢薪資在5K~7K之間的員工的信息

//1、先查詢到薪資在5K到7K之間的員工的編號
select eno from t_emp where salary between 5000 and 7000;
//2、根據編號查詢員工的信息
select * from t_emp where eno in(select eno from t_emp where salary between 5000 and 7000);
連接查詢

左連接:以左邊表為主,查詢出左邊表中符合條件的全部數據以及右邊表中符合條件的數據,缺少的數據以null代替

語法:select ... from 表 left join 表 on 條件;

需求:查詢部門對應的員工信息

select d.*,e.* from t_dept d,t_emp e where d.deptno=e.deptno;
select d.*,e.* from t_dept d left join t_emp e on d.deptno=e.deptno;

右連接:以右邊表為主,查詢出右邊表中的全部數據及左邊表中符合條件的數據,不足的以null代替

語法:select ... from 表 right join 表 on 條件;

需求:查詢員工信息及對應的部門信息

select d.*,e.* from t_dept d right join t_emp e on e.deptno=d.deptno;

合並結果集

注意:合並的結果集要求被合並的字段是相同的類型及數據

union:合並多張表的數據,會去重復

union all :合並多張表的數據,不去重復

 

視圖

概念:就是一張虛擬的表

語法:create view 視圖名 as select語句;

需求示例:甲乙雙方合作,甲方需要乙方團隊的人員部分信息,那么該信息是只有部分且只能查看

需求:將員工1,6,9的基本信息(不包括部門及薪資信息)給到甲方

create view v_emp1 as select ename,sex,phone,address from t_emp where eno in(1,6,9);

 

視圖和原表中的數據如果是一對一可推導的情況下是可以互通的

帶有函數的名稱是不能作為字段名直接使用的

如果視圖中的數據是無法推導原表中數據的變化的,那就不能進行修改(增刪改)的動作

問題:到底能否根據視圖中的數據修改原表中的數據呢?

回答:視圖中修改的數據可以推導出原表中數據的變化那就可以修改,如果推導不出來那就不能改

問題:什么樣的情況下回導致通過視圖無法推導原表中的數據呢?

回答:當視圖中的數據用到了group by 、函數、distinct等等

優點:安全(可以設置權限和字段)、方便

常見函數

字符串函數:concat(arg0,arg1,...) 字符串拼接,可拼接無限個字符

例如:select concat('hello','world'); 結果是:helloworld

目的:將不同的字符以指定的形式拼接到一塊展示出來

日期函數:

now() 獲取當前的系統時間

unix_timestamp() 獲取當前的系統時間對應的毫秒值

聚合函數和函數的區別

    聚合函數用戶表中對數據的操作,函數代表某一個特定的功能,對已有的數據根據功能進行操作

(聚合函數是直接操作數據的,函數是操作獲取的數據的)

通常情況不建議在數據庫中使用函數,會影響數據庫性能,所以大多數對數據的處理都是由開發語言來處理的

鍵(key)值(value)對

姓名 張三 年齡 17 性別 男 用戶名 admin 密碼 root

字段稱之為key,具體的數據稱之為值

 

工具的使用

navicat  百度

練習題

https://www.cnblogs.com/Diyo/p/11424844.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM