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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高级数据查询

發(fā)布時間:2024/4/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高级数据查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Mysql 數(shù)據(jù)庫的高級查詢

一般查詢功能的擴展

(一)使用limit限制結(jié)果集
  • LIMIT 子句可以被用于強制 SELECT 語句返回指定的記錄數(shù)。LIMIT 接受一個或兩個數(shù)字參數(shù)。參數(shù)必須是一個整數(shù)常量。如果給定兩個參數(shù),第一個參數(shù)指定第一個返回記錄行的偏移量,第二個參數(shù)指定返回記錄行的最大數(shù)目。初始記錄行的偏移量是 0(而不是 1): 為了與 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
  • 語法
  • select * from table limit

    m,n其中m是指記錄開始的index,從0開始,表示第一條記錄
    n是指從第m+1條開始,取n條。

    select * from tablename limit 2,4

    即取出第3條至第6條,4條記錄

    (二)使用case函數(shù)

    1.目的:達(dá)到分情況顯示不同類型的數(shù)據(jù)的目的。case函數(shù)是一種多分支的表達(dá)式,計算條件列表并返回多個可能的結(jié)果表達(dá)式中的一個。

    2.讀取方式:

    計算表達(dá)式從上到下的順序?qū)γ恳粋€when子句的簡單表達(dá)式進行計算。當(dāng)一個條件被滿足后,其他條件自動被忽略。選擇方式與c語言中的if語句類似

    3.類型

    (1)簡單case函數(shù):when后面是簡單表達(dá)式

    select fname, (case fnamewhen 'tom' then '好孩子'when 'jack' then '壞孩子'else '普通孩子'end) as isgoodchildfrom T_person

    (2)搜索case函數(shù):when后面是布爾表達(dá)式

    select 商品ID ,case when 單價>=18.6000 then '高檔' when 單價<18.6000 then '低檔' ELSE '無' end '檔次' from `售貨單明細(xì)`
    (三)將數(shù)據(jù)結(jié)果保存到新表中

    1.當(dāng)使用select語句查詢語句時,產(chǎn)生的結(jié)果是保存在內(nèi)存中的。如果需要保存在一個表中,直接在select語句中使用into語句。

    2.新表的類型

    永久表:物理創(chuàng)建的表,儲存在磁盤上

    graph LR 查詢結(jié)果-->永久表

    臨時表:生存期是有限的,根據(jù)其范圍可分為局部臨時表(#temp表)和全局臨時表(##temp表)。臨時表的生存期與創(chuàng)建臨時表的用戶的連接生存期有關(guān)。比如局部臨時表的生存期與創(chuàng)建此局部臨時表的用戶的連接生存期相同,它只能是在當(dāng)前連接中使用。

    graph LR 查詢結(jié)果-->臨時表

    查詢結(jié)果的并、交、差運算

    (一)注意點

    1.select的列的個數(shù)必須是相同的,而且對應(yīng)列的語義是相同的。

    2.各查詢語句中每個列的數(shù)據(jù)類型必須與其他查詢中對應(yīng)的數(shù)據(jù)類型是隱形兼容的(類似c語言中數(shù)據(jù)類型的隱式轉(zhuǎn)換一樣)

    3.合并后的結(jié)果采用第一個select語句的列標(biāo)題

    4.如果使用order by 排序應(yīng)該寫在最后一個查詢語句之后。排序的依據(jù)列是第一個查詢語句出現(xiàn)的列名。

    (二)關(guān)鍵字及意義

    關(guān)鍵字后面加all表示在結(jié)果集中包含所有查詢語句產(chǎn)生的全部記錄,包含重復(fù)的記錄。如果沒有指定all,則系統(tǒng)默認(rèn)是刪除合并后結(jié)果集中重復(fù)記錄。

    并:union

    將兩個或多個查詢語句的結(jié)果集合并成一個結(jié)果集

    交:intersect

    返回兩個結(jié)果集中各個列的值均相同的記錄,并將這些記錄構(gòu)成交運算的結(jié)果。

    差:except

    返回第一個集合中有但是第二個集合中沒有的數(shù)據(jù)。

    select address from table_customer union/intersect/except select address from table_saleperson

    相關(guān)子查詢

    1.基于集合的測試(in/not in)

    先執(zhí)行子查詢,在子查詢的結(jié)果基礎(chǔ)上再進行外層查詢

    2.進行比較測試(= > < <= >=)

    通過比較符將一個表達(dá)式與子查詢返回的單值進行比較。返回為邏輯真值和邏輯假值

    3.存在性查詢(exist/not exist)

    先執(zhí)行外層的操作,再執(zhí)行內(nèi)層的操作。由外層查詢的值決定內(nèi)層查詢的結(jié)果,內(nèi)層查詢的次數(shù)由外層查詢的結(jié)果數(shù)決定。只產(chǎn)生邏輯真值和邏輯假值

    其他一些查詢功能

    (一)開窗函數(shù)(用于分區(qū)或者分組計算的函數(shù))

    結(jié)合over子句對組內(nèi)的數(shù)據(jù)進行編號,并進行求和,計算平均值等統(tǒng)計。sum,avg,row_number等都可以稱為開窗函數(shù)。開窗函數(shù)必須放在Over之前

    1.與聚合函數(shù)結(jié)合使用

    select cno,sum(credit) over (pratition by semester) as total

    2.與排名函數(shù)結(jié)合使用

    (1)四個排名函數(shù)的用法

    rank():并不一定返回連續(xù)整數(shù)。比如兩個人的成績相同,那么返回的名次時并列的

    dense_rank():返回的是一個連續(xù)的整數(shù)值。比如兩個人的成績相同,那么返回的名次一個高一個低。

    ntile():將有序分區(qū)中的行劃分到指定數(shù)目的組中,每個組有一個編號,編號從1開始。對于每一行,Ntile()函數(shù)將返回此行所屬的組的編號。

    row_number():返回結(jié)果集中每個分區(qū)內(nèi)行的序列號,每個分區(qū)的第一行從一開始。

    (二)公用表達(dá)式(CTE)

    1.將查詢語句產(chǎn)生的結(jié)果集指定一個臨時命名的名字,這些命名的結(jié)果集就稱為公用表達(dá)式,它可以被多次引用。可以包括對自身的引用,叫做遞歸公用表達(dá)式。

    2.例子

    with buyCount(CardId,Count) as (select * from table_saleBillgroup by cardId)select cardId ,counts from buyCountorder by counts

    轉(zhuǎn)載于:https://www.cnblogs.com/mengxiaoliaolianziguliang/p/8612897.html

    總結(jié)

    以上是生活随笔為你收集整理的高级数据查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。