查詢語句:select 語句
突泉網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
三種能力:投影、選擇、連接
投影:在一張二維表中根據(jù)所需要的條件選出所需要的列
選擇:在二維表中根據(jù)所需的條件選擇合適的行
連接:從一張或者多張表中獲取所需要的行,并且把這個行結(jié)合在一起的查詢
SQL語句大小寫不敏感。
select語句是可以計算的
算術(shù)表達(dá)式和運(yùn)算符優(yōu)先級
舉例:select ename,sal 12*sal+100 from emp
計算出年薪+100塊
NULL值是不可用,且未分配的,未知并且不適用的值,可以當(dāng)成是保留值
AS其實可以省略
例如:select ename as name,sal salary from emp;
查詢出的字段會自動換成別名
例子:select ename "Name",sal*12 "Annual Salary" from emp;
級聯(lián)操作是將列或字符串和其他列串聯(lián),由兩條豎線(||)表示
select ename,job,ename || job as "Employees" from emp;
可以看出Employees就將ENAME和JOB進(jìn)行結(jié)合的一個操作
在select句子中適用DISTINCT 關(guān)鍵字消除重復(fù)行
select distinct deptnp from emp;
限制選擇的行:
where關(guān)鍵字
如果where后面查的數(shù)據(jù)是字符串類型或者日期類型的要加''號
#######比較條件
舉幾個例子:
select ename,job,sal,deptno from emp where sal between 5000 and 10000;
這個是包含了5000和10000的
in的表達(dá):
select empno,ename,mgr,deptno from emp where mgr in (7788,7782,7000);
只要mgr有括號里面的值都顯示出來。
通配符:%通配的是多個字符,_通配的是一個字符
IS NULL是查詢某個字段為空的顯示出來
and、or、not
例子:
查詢sal=2000和job的內(nèi)容是包括MAN字符串的,當(dāng)同時滿足兩個條件時候才返回結(jié)果。
and就是兩邊同時為真,or的話是有一邊為真就行,not就是不等于
ASC 升序,默認(rèn)升序
DESC 降序
例子:
將deptno中進(jìn)行升序排列,排列出來后,在將sal進(jìn)行降序排列。
單行函數(shù):就是對單行數(shù)據(jù)進(jìn)行處理的函數(shù),只針對這一條數(shù)據(jù)得出一個結(jié)果
函數(shù)工作的過程
ROUND(45.926,2)是將45.926這個數(shù)字的小數(shù)點后兩位進(jìn)行四舍五入操作得到45.93
TRUNC(45.926,2) 是將45.926這個數(shù)字的小數(shù)點后兩位后面的進(jìn)行丟掉。
返回當(dāng)前系統(tǒng)日期
經(jīng)常是不同類型之間的轉(zhuǎn)換
TO_CHAR就是將日期型數(shù)字型轉(zhuǎn)換成字符型
例子:
數(shù)字型的轉(zhuǎn)換
把字符轉(zhuǎn)換成數(shù)字:
把字符轉(zhuǎn)換成日期:
什么是分組函數(shù)?
另外的名字叫多行函數(shù),針對于多行數(shù)據(jù)進(jìn)行一個匯總處理的一類函數(shù),最后會得到一個匯總的結(jié)果。
例子:
其實就是對一系列數(shù)據(jù)找最大值
基本格式:select group_function(column),... from table [where condition];
首先對一個數(shù)據(jù)進(jìn)行分類匯總把每一組的數(shù)據(jù)單獨的拿出來。就是對每一列數(shù)據(jù)的相同數(shù)據(jù)進(jìn)行一個分組,然后在將分組后的結(jié)果再去執(zhí)行select后面跟的一個分組函數(shù)的操作。
例子:
那下面這樣的怎么操作呢?
其實就是對分組以后的結(jié)果再次進(jìn)行一個限制篩選
where和Having的區(qū)別?
where是針對于整體的一個查詢結(jié)果
Having是針對于分組后的查詢結(jié)果的一個條件限制,它是不能單獨存在的,它只能夠在group by后面
下面是它的表達(dá)式:
顯示部門的最大平均薪水是多少
select max(avg(sal))
是這樣的一個嵌套
當(dāng)我們查的數(shù)據(jù)存在于多個表的時候就需要多表查詢
下面是用到的表
一個是EMP的職員表、一個是DEPT的部分表
表連接的三種方式:
從總類上來看:自連接、等值連接、外連接(又可以分為三類:左連接、右連接、全連接)
自連接:一個表自己與自己建立連接成為自連接或自身連接。
在查詢的時候多表,這兩張表是同一張表,所以在查詢前我們需要對這個表進(jìn)行一個別名的重命名。
舉例:查詢出員工編號、名字及其經(jīng)理名字
MGR對應(yīng)的是經(jīng)理的ID號,這個對應(yīng)的就是另一張經(jīng)理表中的名字
表示比較連接列的值顯示出最終的一個結(jié)果,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。
查詢員工的姓名 工作 部門號 部門名稱
左連接就是返回左邊的匹配行,不考慮右邊的表是否有相應(yīng)的行
(+)的意思就是dept是個匹配表,左邊是一個基礎(chǔ)表,基礎(chǔ)表優(yōu)先,如果右邊這個表找不到對應(yīng)的值去匹配,會自動填空
右連接就是返回右邊的匹配行,不考慮左邊的表是否有相應(yīng)的行,如果沒有會自動填空
左表右表都不做限制,所有的記錄都顯示,不足的地方用null填充
FULL JOIN表示emp和dept做一個全連接
ON表示觸發(fā)條件 。
用來查詢數(shù)據(jù)庫中表的數(shù)據(jù)。關(guān)鍵字: select 、where 等。
注:查詢只是對數(shù)據(jù)的一種顯示,不會對數(shù)據(jù)庫進(jìn)行修改
1.查詢所有數(shù)據(jù) : select * from 表 ; “*” 表示所有列; select id ,name, age, sex, birthday from 表 ; (注:全部字段寫法相對于“*”的寫法查詢效率要高,但寫法比較麻煩)
2.查詢部分列 : select 字段1, 字段2……. from 表 ;
3.別名查詢( 別名作用是方便觀看和處理數(shù)據(jù))查詢時可以給表、列指定別名,關(guān)鍵字: AS
SELECT 字段1 AS 別名1,字段2 AS 別名2……. from 表; 或者 SELECT 字段1 別名1,字段2 別名2……. from 表 ; AS 可以不寫
4.清除重復(fù)值 ( 查詢指定列并且數(shù)據(jù)不出現(xiàn)重復(fù) ): SELECT DISTINCT 字段1,字段2...... FORM 表;
5.查詢結(jié)果進(jìn)行運(yùn)算 ( 注意:參與計算列必須是數(shù)值類型 )
5.1與固定值計算: SELECT 列名1+固定值 FROM 表 ;
5.2列與列計算 : SELECT 列1+ 列2 FROM 表;
6.條件查詢 : SELECT * From 表 WHERE 字段 = 值;
《MySQL是怎樣運(yùn)行的:從根兒上理解 MySQL》是一本MySQL的底層運(yùn)行原理的書。關(guān)于底層運(yùn)行原理4個字怎么理解呢,我的理解是專注于介紹 MySQL 的 innoDB的底層存儲細(xì)節(jié),并以此為基礎(chǔ)延伸到分析MySQL 實際應(yīng)用中的特性。
相比極客時間里面的《MySQL 實戰(zhàn)45講》,我覺得這本書更像電視劇《一代宗師》里面講到的里子而非面子,更聚焦于事情的本質(zhì)而非表象,所以非常推薦大家耐心閱讀。我是3.28號收到的書,在上下班的路上斷斷續(xù)續(xù)完成了閱讀(這就是上下班需要花3個小時的好處),所謂的斷斷續(xù)續(xù)就是每個點都了解了,但是沒有串成線形成面。今天剛好周六就抽了一下午加一晚上把所有的內(nèi)容從頭到位又串聯(lián)了一次,整體下來差不多花了兩周時間才消化完。
為啥對 MySQL突然來了興趣呢,緣于2021年底以來公司內(nèi)部組織了兩場分享,當(dāng)時聽完分享后針對分享的PPT消化了一波,但是總感覺不得勁。雖然理解了分享中部分場景但卻無法理解背后的原理,所以斷斷續(xù)續(xù)在網(wǎng)上搜集些介紹 MySQL 的書籍就發(fā)現(xiàn)了這本書,閱讀后再重新回顧之前的分享,感覺突然開竅了。
梳理了下整個書本的內(nèi)容,按照個人的理解給出閱讀的建議,首先這部分的內(nèi)容其實挺多的,但是建議聚焦于幾條核心的線:innoDB的數(shù)據(jù)存儲,索引的設(shè)計和應(yīng)用,redo/undo 日志以及 mvcc 的原理。
關(guān)于 innoDB 的存儲,這部分建議閱讀章節(jié): 從一條記錄說起—— InnoDB 記錄結(jié)構(gòu)、盛放記錄的大盒子 —— InnoDB 數(shù)據(jù)頁結(jié)構(gòu)、 調(diào)節(jié)磁盤和CPU的矛盾 —— InnoDB 的 Buffer Pool》。這三個章節(jié)按照數(shù)據(jù)存儲由微觀到宏觀的順序進(jìn)行講解:單條記錄的存儲結(jié)構(gòu)、頁維度的存儲結(jié)構(gòu)、Buffer Pool 的存儲結(jié)構(gòu)等。
索引的設(shè)計和應(yīng)用,這部分閱讀建議建立在innoDB的存儲相關(guān)章節(jié)已經(jīng)完成閱讀的基礎(chǔ)上,相關(guān)章節(jié)包括: 快速查詢的秘籍 —— B+ 樹索引、 好東西也得先學(xué)會怎么用 —— B+ 樹索引的使用。這兩個章節(jié)介紹索引的存儲結(jié)構(gòu)以及實際應(yīng)用,跟日常工作比較有強(qiáng)關(guān)聯(lián)性。
redo/undo 日志以及 mvcc 的原理,這部分建議閱讀章節(jié): 說過的話就一定要辦到 —— redo 日志(上)、 說過的話就一定要辦到 —— redo 日志(下)、 后悔了怎么辦 —— undo 日志 (上)、 后悔了怎么辦 —— undo 日志 (下)、 一條記錄的多幅面孔 —— 事務(wù)的隔離級別與MVCC。這幾個章節(jié)主要是為了講清楚 MVCC 的底層實現(xiàn)原理。
最后推薦對 MySQL 有興趣的同學(xué)可以買來翻翻看,收獲肯定是有的。
探索和學(xué)習(xí)MySQL中GIS相關(guān)功能和特性
這里記錄了學(xué)習(xí)和了解MySQL中GIS特性相關(guān)內(nèi)容的過程。
MySQL官方論壇中GIS的舉例
測試數(shù)據(jù)已經(jīng)導(dǎo)入成功,下面開始對GIS相關(guān)函數(shù)和GEOHASH進(jìn)行了解和體驗;
mysql中g(shù)eometry類型的簡單使用
MySQL空間數(shù)據(jù)類型
經(jīng)緯度信息存儲在geometry格式的字段中,該字段必須非空。
MySQL8.0前按照longitude-latitude的順序存儲位置
MySQL8.0前按照longitude-latitude的順序存儲位置
MySQL8.0前按照longitude-latitude的順序存儲位置
插入數(shù)據(jù)時候可使用如下語句:
MySQL存儲geometry信息的方式采用了25bytes,相比WKB的21bytes,多了4bytes的坐標(biāo)系表示,組成部分如下:
WTF字符串格式說明
select ST_GeomFromText(WTF格式字符串);
WKT(Well-known text)是一種文本標(biāo)記語言,用于表示矢量幾何對象、空間參照系統(tǒng)及空間參照系統(tǒng)之間的轉(zhuǎn)換。通過WTF字符串生成geometry的方法:
點: POINT(x y)
線: LINESTRING(x1 y1, x2 y2, x3 y3...)
多邊形: POLYGON((0 0, 10 0, 10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))
多點集: MULTIPOINT(0 0, 20 20, 60 60) 或 MULTIPOINT((0 0),(5 5),(5 0))
多線集: MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
多多邊形集: MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))
例如兩點一線組成的幾何集: GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))
A geometry is syntactically well-formed if it satisfies conditions such as those in this (nonexhaustive) list:
Collections are not empty (except GeometryCollection)
更多內(nèi)容參見
ST_PointFromText('POINT(X Y)');
ST_LineStringFromText('LINESTRING(0 0,1 1,2 2)');
ST_PolygonFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))');
ST_GeomCollFromText();
更多內(nèi)容參見
參見
Point(x,y)
LineString((x1,y1),(x2,y2)...)
Polygon(LineString(),LineString()....)
參見
ST_AsText()
ST_AsBinary()
ST_AsWKT()
參見
ST_Dimension(geom) :返回geom的維度(-1,0,1,2)
ST_Envelope(geom) :返回geom的最小外接矩形(MBR)
ST_GeometryType(geom) :返回geom的類型
ST_IsEmpty(geom) :該函數(shù)并不能真實的判空,當(dāng)geom為任何有效的幾何值時返回0,無效的幾何值返回1;
ST_IsSimple(geom) :當(dāng)geom無任何異常幾何點返回1(如自相交和自切線等),否則返回0
ST_SRID(geom) :返回geom的坐標(biāo)系ID
參見
ST_X(Point) :獲取Point的X值
ST_Y(Point) :獲取Point的Y值
參見
ST_StartPoint(linestrng) : 線的起點
ST_EndPoint(linestring) :返回線的最后一個點
ST_IsClosed(linestring或multilinestring) :線是否閉合(若為線,則判斷起點與終點是否一致;若為線組,則判斷組內(nèi)每個元素是否符合閉合線)
ST_Length(linestring) :返回線的長度,若入?yún)榫€集,則返回集合內(nèi)所有長度的和
ST_NumPoiints(linestring) :返回點的數(shù)量;
ST_PointN(linestring,N) :返回第N個點(從1開始)
參見
具體不在一一列舉,主要有計算多邊形面積、中心點、最小外接圓,最大內(nèi)接圓等函數(shù),列舉幾個可能會用到的:
ST_Area(Poly|mPoly) :返回雙精度的面積或面積的和
'ST_Centroid(Poly|mPoly)':返回數(shù)學(xué)上的中心點
ST_ExteriorRing(Poly) :返回外接圓
參見
ST_Buffer說明
不再列舉,主要有:ST_Buffer(不懂干啥用),ST_ConvexHull(geom)凸包,ST_Dfference(g1,g2)比較差異,ST_Intersecton(g1,g2)交叉點,ST_SymDifference(g1,g2)對稱差分,ST_Union(g1,g2)連接、合并等。
檢查geometry Objects之間的空間關(guān)系的方法。
參見
計算兩個Object之間的空間關(guān)系的函數(shù),有兩個間距離、相交、不相交,包含、相等、相切、重疊、接觸、在內(nèi)等等空間關(guān)系。下面列舉幾個可能會常用的方法:
ST_Contains(g1,g2) :g1是否完全包含g2
ST_Within(g1,g2) :g1是否包含于g2中
ST_Distance(g1,g2) :返回g1和g2之間的距離,已坐標(biāo)單位計算的
ST_Equals(g1,g2) :返回g1和g2是否相等
參見
MBRContains(g1,g2) :g1的mbr是否包含g2的mbr
MBRWithin(g1,g2) :g1的mbr是否在g2的mbr內(nèi)
MBRCoveredBy(g1,g2) :g1的mbr是否被g2的mbr覆蓋
MBRCovers(g1,g2) :g1的mbr是否覆蓋g2的mbr
MBRDisjoint(g1,g2) :g1的mbr,g2的mbr是否不相交
MBRIntersects(g1,g2) :g1mbr,g2mbr是否相交
MBREqual(g1,g2) :g1的mbr,g2的mbr的外接是否相等
MBREquals(g1,g2) :g1的mbr,g2的mbr的外接是否相等
MBROverlaps(g1,g2) :g1mbr、g2mbr
其他函數(shù)請參看原文
GeoHash介紹
GeoHash Wiki百科
MySQL中自帶函數(shù) st_geohash(longtude,latitude,max_length) 或 st_geohash(point, max_length) 即可生成某一點的geohash值。
返回一個geohash字符串中的latitude或longitude
返回一個geohash解析出的point數(shù)據(jù)
官方文檔
通過geometry生成一個GeoJSON Object, select st_asgeojson(geometry,max_length,options);
通過GeoJSON生成GeoMetry對象。
ST_GeomFromGeoJSON(jsonstring, [options [, srid]])
具體使用方法參見官方文檔
官方文檔
MySQL中提供的方便空間運(yùn)算的函數(shù)們
select ST_Distance_Spher(geomPoint1,geomPoint2 [, radius]);
此方法用于計算兩點或多個點之間的地球上的距離(是地球球面距離而不是直線距離),返回單位為米,
select ST_IsValid(ST_GeomFromText('LINESTRING(0 0,1 1)'))
判斷入?yún)⑹欠袷欠系乩砦恢妹枋龅母袷健7祷?(符合)或者0(不符);
例如:
返回0:
select st_isvalid(st_geomfromtext('linestring(0 0, -0.00 0, 0.0 0)')
返回1:
select st_isvalid(st_geomfromtext('linestring(0 0,1 1)')
select st_astext(st_makeenvelope(pt1, pt2));
返回兩點構(gòu)成的包絡(luò)。(此計算是基于笛卡爾坐標(biāo)系而非球面)
例如:
SELECT ST_AsText ( st_makeenvelope ( st_geomfromtext ( 'point(0 0)' ), st_geomfromtext ( 'point(1 1)' ) ) );
返回結(jié)果:
POLYGON((0 0,1 0,1 1,0 1,0 0))
效果說明
JS抽稀算法
select st_simplify(geometry, max_distance);
用道格拉斯-普克算法(抽稀函數(shù))簡化geometry,并返回與原格式相同格式的結(jié)果。
例如,以下點集擬合為直線,步長0.5:
SELECT st_simplify ( st_geomfromtext ( 'LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)' ), 0.5 )
返回結(jié)果:
LINESTRING(0 0, 0 1, 1 1, 2 3, 3 3)
再如,步長1.0:
SELECT st_simplify ( st_geomfromtext ( 'LINESTRING(0 0,0 1,1 1,1 2,2 2,2 3,3 3)' ), 1.0 )
返回結(jié)果:
LINESTRING(0 0, 3 3)
SELECT ST_Validate(geometry);
驗證geometry是符合正確的地理位置信息格式。例如 Point(0 0) 是合格的; Linestring(0 0) 是非法的; Linestring(0 0, 1 1) 是合格的
了解了上述MySQL中關(guān)于集合對象的功能,下面來實踐一下
由上面geohash長度-精度對應(yīng)表可知,前6位表示±610米左右的誤差,這里先查詢前六位范圍之后再用上述方法精確篩選一次即可:
可將上述查詢方法封裝為MySQL函數(shù)方便和簡化程序調(diào)用.
該方法是運(yùn)用了內(nèi)置的幾何關(guān)系運(yùn)算函數(shù) ST_Contains 和 ST_MakeEnvelop 來實現(xiàn)的,0.5對應(yīng)大概500米左右的范圍,具體如下;
鏈接:
提取碼: jagn
網(wǎng)站名稱:mysql怎么做筆記 mysql操作日志記錄
標(biāo)題來源:http://jinyejixie.com/article44/dodhihe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、做網(wǎng)站、小程序開發(fā)、定制開發(fā)、Google、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)