读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令
查詢數據
完整的查詢指令:
select? select選項 字段列表 ?from 數據源 where 條件 group by 分組 having 條件 order by 排序 limit 限制
select選項
系統該如何對待查詢得到的結果:
1、all 默認的,表示保存所有的記錄;
2、distinct:去重,去除重復的記錄,只保留一條(所有的字段都相同)
字段列表
有的時候需要從多張表獲取數據,在獲取數據的時候,可能存在不同表中有同名的字段,需要將同名的字段命名成不同名的; alias別名
基本語法: 字段名 [as] 別名;
from數據源
from是為前面的查詢提供數據,數據源只要是一個符合二維表結構的數據即可。
單表數據
from 表名
多表數據
從多張表獲取數據:
基本語法:from 表1,表2…;
結果:表的記錄數相乘,字段數拼接
本質:從第一張表取出一條記錄,去拼湊第二張表的所有記錄,保留所有結果。得到的結果在數學上有一個專業的說法:笛卡爾積,這個結果除了給數據庫造成壓力,沒有其他意義,應該盡量避免笛卡爾積。
動態數據
from后面跟的數據不是一個實體表,而是一個從表中查詢出來得到的二維結果表。
基本語法:select? from (select 字段列表 from 表) ?[as] 別名;
where子句
where子句用來從數據表獲取數據的時候,然后進行條件篩選。
數據獲取原理:針對表去對應的磁盤除獲取所有的記錄(一條條),where的作用就是在拿到一條結果就開始進行判斷,判斷是否符合條件;如果符合就保存下來,如果不符合直接舍棄(不放到內存中)
where是通過運算符進行結果比較來判斷數據
group by子句
group by 表示分組的含義:根據指定的字段,將數據進行分組:分組的目標是為了統計。
分組統計
基本語法:group by 字段名;
錯誤:提示1055錯誤。only_full_group_by問題
先查看,然后修改。(暫時修改)
執行:
select version(), @@sql_mode;
再執行:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
group by是為了分組進行數據統計的,如果只是想看數據顯示,那么group by沒什么意義:group by將數據按照指定的字段分組之后,只會保留每組的第一條記錄。
利用一些統計函數(聚合函數):
count():統計每組中的數量,如果統計的目標是字段,那么不統計空NULL字段,如果為*代表統計記錄。
avg():求平均值
sum():求和
max():求最大值
min():求在最小值
group_concat():為了將分組中指定的字段進行合并(字符串拼接)
多分組
將數據按照某個字段進行分組之后,對已經分組的數據進行再次分組
基本語法:group by 字段1,字段2;//先按照字段1進行排序,之后將結果再按照字段2進行排序,以此類推
分組排序
Mysql中,分組默認有排序的功能:按照分組字段進行排序,默認是升序
基本語法:group by 字段 [asc|desc],字段[asc|desc];//默認是asc升序 desc降序
回溯統計
當分組進行多分組之后,往上統計的過程中,需要進行層層上報,將這種層層上報統計的過程稱之為回溯統計,每一次分組向上統計的過程都會產生一次新的統計數據,而且當前數據對應的分組字段為NULL
基本語法:group by 字段 [asc|desc] with rollup;
有多少層就會回溯多少個。
having子句
having本質和where一樣,是用來進行數據條件篩選
having是在group by子句之后,可以針對分組數據進行篩選,但是where不行
where不能使用聚合函數:聚合函數是在用在group by分組的時候,where這個時候已經運行完畢。
having在group by分組之后,可以使用聚合函數或者字段別名(where是從表中取出數據,數據在表中只有字段名沒有別名這一概念,別名是在數據進入到內存之后才有的)
強調:having是在group by 之后,groupby 是在where之后;where的 時候表示將數據從磁盤拿到內存,where之后的所有操作都是內存操作。
order by 子句
order by排序,根據校對規則對數據進行排序
基本語法:order by 字段[asc|desc];// asc 升序 默認 desc降序
order by和group by一樣,也可以進行多字段排序:先按照第一個字段進行排序,再按照第二個字段進行排序,以此類推。
基本語法:order by 字段1 規則,字段2 規則…;//規則即 desc 和asc ,asc可以不寫
limit子句
limit限制子句,主要是用來限制記錄數來獲取。
記錄數限制
純粹的限制獲取的數量:從第一條到指定的數量。
基本語法:limit 數量;
limit通常在查詢的時候如果限定為一條記錄的時候,使用的比較多,有時候獲取多條記錄并不能解決業務問題,但是會增加服務器壓力
分頁
利用limit來限制獲取指定區間的數據。
基本語法: limit offset ,length;//offset P偏移量,從哪開始,length 就是具體獲取多少條記錄
Mysql中記錄的數量從0開始。
limit 0,2; ?//獲取前兩條記錄
注意:limit后面的length表示最多獲取對應數量,但是如果數量不夠,系統不會強求
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux用户权限简介,Linux用户及
- 下一篇: qt中解析json字符串的时候出现错误m