mysql笛卡爾積 去重_MySQL入門(函數、條件、連接)

MySQL入門(四)

distinct:去重

mysql>:

create table t1(

id int,

x int,

y int

);

mysql>: insert into t1 values(1, 1, 1), (2, 1, 2), (3, 2, 2), (4, 2, 2);

mysql>: select distinct * from t1; # 全部數據

mysql>: select distinct x, y from t1; # 結果 1,1 1,2 2,2

mysql>: select distinct y from t1; # 結果 1 2

# 總結:distinct對參與查詢的所有字段,整體去重(所查的全部字段的值都相同,才認為是重復數據)

準備數據

CREATE TABLE `emp` (

`id` int(0) NOT NULL AUTO_INCREMENT,

`name` varchar(10) NOT NULL,

`gender` enum('男','女','未知') NULL DEFAULT '未知',

`age` int(0) NULL DEFAULT 0,

`salary` float NULL DEFAULT 0,

`area` varchar(20) NULL DEFAULT '中國',

`port` varchar(20) DEFAULT '未知',

`dep` varchar(20),

PRIMARY KEY (`id`)

);

INSERT INTO `emp` VALUES

(1, 'yangsir', '男', 42, 10.5, '上海', '浦東', '教職部'),

(2, 'engo', '男', 38, 9.4, '山東', '濟南', '教學部'),

(3, 'jerry', '女', 30, 3.0, '江蘇', '張家港', '教學部'),

(4, 'tank', '女', 28, 2.4, '廣州', '廣東', '教學部'),

(5, 'jiboy', '男', 28, 2.4, '江蘇', '蘇州', '教學部'),

(6, 'zero', '男', 18, 8.8, '中國', '黃浦', '咨詢部'),

(7, 'owen', '男', 18, 8.8, '安徽', '宣城', '教學部'),

(8, 'jason', '男', 28, 9.8, '安徽', '巢湖', '教學部'),

(9, 'ying', '女', 36, 1.2, '安徽', '蕪湖', '咨詢部'),

(10, 'kevin', '男', 36, 5.8, '山東', '濟南', '教學部'),

(11, 'monkey', '女', 28, 1.2, '山東', '青島', '教職部'),

(12, 'san', '男', 30, 9.0, '上海', '浦東', '咨詢部'),

(13, 'san1', '男', 30, 6.0, '上海', '浦東', '咨詢部'),

(14, 'san2', '男', 30, 6.0, '上海', '浦西', '教學部'),

(15, 'ruakei', '女', 67, 2.501, '上海', '陸家嘴', '教學部');

常用函數

"""

拼接:concat() | concat_ws()

大小寫:upper() | lower()

浮點型操作:ceil() | floor() | round()

整型:可以直接運算

"""

mysql>: select name,area,port from emp;

mysql>: select name as 姓名, concat(area,'-',port) 地址 from emp; # 上海-浦東

mysql>: select name as 姓名, concat_ws('-',area,port,dep) 信息 from emp; # 上海-浦東-教職部

mysql>: select upper(name) 姓名大寫,lower(name) 姓名小寫 from emp;

mysql>: select id,salary,ceil(salary)上薪資,floor(salary)下薪資,round(salary)入薪資 from emp;

mysql>: select name 姓名, age 舊年齡, age+1 新年齡 from emp;

條件:where

# 多條件協調操作導入:where 奇數 [group by 部門 having 平均薪資] order by [平均]薪資 limit 1

mysql>: select * from emp where id<5 limit 1; # 正常

mysql>: select * from emp limit 1 where id<5; # 異常,條件亂序

# 判斷規則

"""

比較符合:> | < | >= | <= | = | !=

區間符合:between 開始 and 結束 | in(自定義容器)

邏輯符合:and | or | not

相似符合:like _|%

正則符合:regexp 正則語法

"""

mysql>: select * from emp where salary>5;

mysql>: select * from emp where id%2=0;

mysql>: select * from emp where salary between 6 and 9;

mysql>: select * from emp where id in(1, 3, 7, 20);

# _o 某o | __o 某某o | _o% 某o* (*是0~n個任意字符) | %o% *o*

mysql>: select * from emp where name like '%o%';

mysql>: select * from emp where name like '_o%';

mysql>: select * from emp where name like '___o%';

# sql只支持部分正則語法

mysql>: select * from emp where name regexp '.*\d'; # 不支持\d代表數字,認為\d就是普通字符串

mysql>: select * from emp where name regexp '.*[0-9]'; # 支持[]語法

分組與篩選:group by | having

where與having

# 表象:在沒有分組的情況下,where與having結果相同

# 重點:having可以對 聚合結果 進行篩選

mysql>: select * from emp where salary > 5;

mysql>: select * from emp having salary > 5;

mysql>: select * from emp where id in (5, 10, 15, 20);

mysql>: select * from emp having id in (5, 10, 15, 20);

聚合函數

"""

max():最大值

min():最小值

avg():平均值

sum():和

count():記數

group_concat():組內字段拼接,用來查看組內其他字段

"""

分組查詢 group by

# 修改my.ini配置重啟mysql服務

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 在sql_mode沒有 ONLY_FULL_GROUP_BY 限制下,可以執行,但結果沒有意義

# 有 ONLY_FULL_GROUP_BY 限制,報錯

mysql>: select * from emp group by dep;

# 分組后,表中數據考慮范圍就不是 單條記錄,因為每個分組都包含了多條記錄,參照分組字段,對每個分組中的 多條記錄 統一處理

# eg: 按部門分組,每個部門都有哪些人、最高的薪資、最低的薪資、平均薪資、組里一共有多少人

# 將多條數據統一處理,這種方式就叫 聚合

# 每個部門都有哪些人、最高的薪資、最低的薪資、平均薪資 都稱之為 聚合結果 - 聚合函數操作的結果

# 注:參與分組的字段,也歸于 聚合結果

mysql>:

select

dep 部門,

group_concat(name) 成員,

max(salary) 最高薪資,

min(salary) 最低薪資,

avg(salary) 平均薪資,

sum(salary) 總薪資,

count(gender) 人數

from emp group by dep;

mysql>: select

dep 部門,

max(age) 最高年齡

from emp group by dep;

# 總結:分組后,查詢條件只能為 分組字段 和 聚合函數操作的聚合結果

分組后的having

mysql>:

select

dep 部門,

group_concat(name) 成員,

max(salary) 最高薪資,

min(salary) 最低薪資,

avg(salary) 平均薪資,

sum(salary) 總薪資,

count(gender) 人數

from emp group by dep;

# 最低薪資小于2

mysql>:

select

dep 部門,

group_concat(name) 成員,

max(salary) 最高薪資,

min(salary) 最低薪資,

avg(salary) 平均薪資,

sum(salary) 總薪資,

count(gender) 人數

from emp group by dep having min(salary)<2;

# having可以對 聚合結果 再進行篩選,where不可以

排序

# order by 主排序字段 [asc|desc], 次排序字段1 [asc|desc], ...次排序字段n [asc|desc]

限制 limit

# 語法:limit 條數 | limit 偏移量,條數

mysql>: select name, salary from emp where salary<8 order by salary desc limit 1;

mysql>: select * from emp limit 5,3; # 先偏移5條滿足條件的記錄,再查詢3條

連表查詢

笛卡爾積

# 笛卡爾積: 集合 X{a, b} * Y{o, p, q} => Z{{a, o}, {a, p}, {a, q}, {b, o}, {b, p}, {b, q}}

mysql>: select * from emp, dep;

# 總結:是兩張表 記錄的所有排列組合,數據沒有利用價值

內連接:inner join on

# 關鍵字:inner join on

# 語法:from A表 inner join B表 on A表.關聯字段=B表.關聯字段

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp inner join dep on emp.dep_id = dep.id

order by emp.id;

# 總結:只保留兩個表有關聯的數據

左連接:left join on

# 關鍵字:left join on

# 語法:from 左表 left join 右表 on 左表.關聯字段=右表.關聯字段

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp left join dep on emp.dep_id = dep.id

order by emp.id;

# 總結:保留左表的全部數據,右表有對應數據直接連表顯示,沒有對應關系空填充

右連接:right join on

# 關鍵字:right join on

# 語法:from A表 right join B表 on A表.關聯字段=B表關聯字段

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp right join dep on emp.dep_id = dep.id

order by emp.id;

# 總結:保留右表的全部數據,左表有對應數據直接連表顯示,沒有對應關系空填充

左右可以相互轉化

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp right join dep on emp.dep_id = dep.id

order by emp.id;

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from dep left join emp on emp.dep_id = dep.id

order by emp.id;

# 總結:更換一下左右表的位置,相對應更換左右連接關鍵字,結果相同

全連接:union(并集)

mysql>:

select

emp.id,emp.name,salary,dep.name,work

from emp left join dep on emp.dep_id = dep.id

union

select

emp.id,emp.name,salary,dep.name,work

from emp right join dep on emp.dep_id = dep.id

order by id;

# 總結:左表右表數據都被保留,彼此有對應關系正常顯示,彼此沒有對應關系均空填充對方

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540064.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540064.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540064.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nmon安裝為什么重啟mysql_Nmon的安裝及使用

一、下載Nmon根據CPU的類型選擇下載相應的版本&#xff1a;二、初始化工具[rootmululu ~]# cd /opt[rootmululu opt]# mkdir nmon[rootmululu opt]# cd nmon[rootmululu nmon]#wget http://sourceforge.net/projects/nmon/files/download/nmon_x86_12a.zip[rootmululu nmon]# u…

mysql join 循環_關于mysql聯表的內嵌循環操作nested loop join中on和where執行順序問題...

mysql的理論依據沒找到&#xff0c;個人理解是先執行where的過濾條件&#xff0c;先關聯再過濾明顯做的是無用功。oracle中倒是能在執行計劃中看到&#xff0c;先執行的是過濾條件(下面代碼中最后一行)。explain plan for SELECT * FROM tmp_t2 t2 LEFT JOIN tmp_t1 t1 ON t2.i…

python非法語句是_python 如何優雅的處理大量異常語句?

bs4的鏈式調用很贊&#xff0c;所以我把soup包裝了一下class MY_SOUP():包裝類def __init__(self,soup):self.soup soupif soup:if soup.string:self.string soup.string.strip()else:self.string Noneelse:self.string Nonedef find(self, *args, **kw):ret self.soup.fi…

Iptables詳解+實例

2019獨角獸企業重金招聘Python工程師標準>>> Iptabels是與Linux內核集成的包過濾防火墻系統&#xff0c;幾乎所有的linux發行版本都會包含Iptables的功能。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器&#xff0c; 則Iptables有利于…

django ipython shell_通過django的shell_plus編寫ipython腳本

Im writing a shell script which runs a command through ipython with the -c option like this:我正在編寫一個shell腳本&#xff0c;它通過ipython運行一個命令&#xff0c;使用-c選項&#xff0c;如下所示:ipython -c "from blah import myfunct; myfunct()"but…

阿里云服務器安裝onlyoffice_阿里云服務器安裝 JDK 8

歡迎關注“科技毒瘤君”&#xff01;上一期給大家分享了如何申請阿里云的免費云服務器&#xff0c;還沒有看過的小伙伴可以先前往了解 >>阿里云免費服務器<<這一次將會為大家分享如何在服務器上配置 Java環境&#xff0c;這里演示使用的系統為Ubuntu 18.04 64位&am…

js發送請求

1.Chrome控制臺中 net::ERR_CONNECTION_REFUSED js頻繁發送請求&#xff0c;有可能連接被拒絕&#xff0c;可用setTimeout&#xff0c;過幾秒發送&#xff0c;給個緩沖時間 var overlayAnalystService L.supermap.spatialAnalystService(serviceUrl); setTimeout(function () …

據說有99%的人都會做錯的面試題

這道題主要考察了面試者對浮點數存儲格式的理解。另外&#xff0c;請不要討論該題本身是否有意義之類的話題。本題只為了測試面試者相關的知識是否掌握&#xff0c;題目本身并沒有實際的意義。 下面有6個浮點類型變量&#xff0c;其中前三個是float類型的&#xff0c;后三個是d…

php使用mysql5和8的區別_mysql8.0和mysql5.7的區別是什么?

區別&#xff1a;mysql8.0的索引可以被隱藏和顯示&#xff0c;當一個索引隱藏時&#xff0c;他不會被查詢優化器所使用&#xff1b;2、mysql8.0新增了“SET PERSIST”命令&#xff1b;3、從mysql8.0開始&#xff0c;數據庫的缺省編碼將改為utf8mb4&#xff0c;包含了所有emoji字…

mysql pt check sum_percona工具pt-table-checksum

利用pt-table-checksum進行數據庫同步檢查rpm方式#wget percona.com/get/percona-toolkit.rpm源碼方式#wget http://www.percona.com/downloads/percona-toolkit/2.2.1/percona-toolkit-2.2.8.tar.gz#yum install perl perl-CPAN perl-DBD-MySQL perl-Time-HiRes解壓&#xff0…

如何通過BBED找回刪除數據

項目案例&#xff1a;客戶刪除delete了重要數據&#xff0c;無備份&#xff0c;客戶聯系我&#xff0c;要求恢復相應數據。本次通過實驗方式重現客戶現場。備份高于一切&#xff0c;首先備份&#xff0c;再操作 創建表格&#xff1a; create table king(age number,name varcha…

mysql 重置密碼語音_數字語音信號處理學習筆記語音信號的同態處理(2)

5.4 復倒譜和倒譜 定義 設信號x(n)的z變換為X(z) z[x(n)]&#xff0c;其對數為&#xff1a; (1) 那么 的逆z變換可寫成&#xff1a; (2) 取 (1)式則有 (3) 于是式子(2)則可以寫成 (4) 則式子(4)即為信號x(n)的復倒譜 的定義。因為 一般為復數&#xff0c;故稱 為復倒譜。如果對…

NFS 八步神曲

Server:第一步yum install - y nfs*第二步vi /etc/exports第三步/var/testdirs *(rw,all_squash,anonuid99,anongid99,sync)第四步service nfs start第五步chkconfig --level 35 nfs on Client第一步mount 192.168.1.X:/var/www/testdirs /var/www/testdirs第二步vi /et…

mysql權限日志_mysql權限管理、日志管理及常用工具

mysqlbinlog用法如下&#xff1a;mysqbinlog mysql.err 查詢錯誤日志當然可以通過添加參數來查看指定內容,如&#xff1a;mysqlbinlog mysql-bin.000001 -d test 只顯示對test數據庫的二進制日志mysqlbinlog mysql-bin.000001 -o 3 -r result-file 首先忽略前三個操作&…

Juicer.js模板引擎問題

由于jsp中的EL表達式語法和jquery.tmpl十分類似&#xff0c;&#xff0c;所以單純的使用${name}&#xff0c;數據是渲染不上tmpl的. SO.. 要加上轉義: ${${}amount} 或者 \${amount} 轉載于:https://www.cnblogs.com/fighxp/p/7890288.html

python把回車作為輸入_python將回車作為輸入內容的實例

當input輸入內容的時候,許多情況下輸入回車鍵另起一行輸入,但是這時候Pycharm就執行程序,然后結束,導致無法繼續輸入內容。 原因:Python默認遇到回車的時候,輸入結束。所以我們需要更改這個提示符,在遇到其他字符的時候,輸入才結束。 比如有一個任務: 請輸入文件名:憫…

ubuntu下修改時區和時間

applications-Accessories-Time & Date-點下鎖-輸入密碼-把時區改成上海&#xff08;這個要點圖中國與朝鮮之間的彎處才行&#xff0c;寫不生效&#xff09;-Set the time 選Manually-改下時間、日期-直接關閉即可(重啟后依然生效) 注&#xff1a;從電腦上邊的時間處-Time …

python提供了9個基本的數值運算操作符_Python學習筆記(三)Python基本數字類型及其簡單操作(1)...

一、數字類型表示數字或數值的數據類型稱為數字類型,Python語言提供3種數字類型&#xff1a;整數、浮點數和復數&#xff0c;分別對應數學中的整數、實數和復數&#xff0c;下面就一起來了解一下他們吧&#xff01;1.整數類型整數類型與數學中整數的概念一致&#xff0c;整數類…

hdu 5139 數據的離線處理

所謂的數據離線處理&#xff0c;就是將所有的輸入數據全部讀入后&#xff0c;在進行統一的操作&#xff0c;這樣當然有好處&#xff0c;比如讓你算好多數的階層&#xff0c;但是輸入的每個數是沒有順序的&#xff0c;其實跟可以線性的解決&#xff0c;但是由于沒有順序的輸入&a…