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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL整理(三)

發布時間:2024/9/5 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL整理(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  ?一、簡單單表操作

    ? (1)簡單CRUD      

插入查詢結果

insert into table1(id,name,age) select id,name,age from table2 where id=1

更新操作

update 表名 set 字段名=’abc’where?

id=xxx;

避免重復數據查詢-distinct

Select distinct 去重字段名 from 表名

數學運算

select id*10 from表名

字符串拼接

select concat(name,’的工資是:’,salary)

范圍查詢

select name from 表名 where ?id between 5 and 10

去除范圍查詢

select name from 表名 where id not between 5 and 10

為空查詢

select * from 表名 where field is NULL;

不為空查詢

select * from 表名 where field is not NULL;

帶in關鍵字集合查詢

select name from表名 where id in (1,2,3)

帶in關鍵字排除查詢

select name from表名 where id not in (1,2,3)

備注:關于帶in的集合查詢,當集合中存在null值時,如Select name from表名 where id in (1,2,3,null),不會影響查詢結果。

模糊匹配like

select name from 表名 where name like ‘XXX%’

備注:匹配以“xx”開頭的字符以%結尾,以“xx”結尾的字符以%開頭

占位符_

1、? select name from xuanjie where name like ‘_c%’;(第二個字符為c)

2、? select name from xuanjie where name like ‘__c%;(第三個字符為c)

備注:“_”通配符能匹配單個字符,“%”通配符可以匹配任意長度的字符串。Like匹配“%%”則表示查詢所有數據記錄。非匹配關鍵字可用not like 表示。

升序

select * from 表名 order by 字段名 asc;

降序

select * from 表名 order by 字段名 desc;

多字段升序,降序

select * from 表名 order by 字段名1 asc,字段名2 desc;

Limit關鍵字

select * from 表名 where id < 8 order by id desc limit 3

Limit A,B

A從第幾開始,顯示B條

不等于表達式

select age from 表名where not name=’cc’;   


    ??(2)統計函數和分組查詢

       

統計表中記錄的條數count()函數

select count(字段名) from 表名 where id < xxx

統計平均值avg()函數

select avg(字段名) as xxx from 表名

統計計算求和sum()函數

select sum(字段名) as xxx from 表名

統計最大值max()函數

select max(字段名),min(字段名) from 表名

統計最大值min()函數

備注:對于MySQL支持的統計函數,如果所操作的表中沒有任何記錄,則count()函數返回0,其他函數則返回NULL。

簡單分組查詢group by

select * from 表名 group by 字段名

group_concat()函數用以指定顯示每個分組中的指定字段值

select age,group_concat(字段名),count(字段名) from 表名 group by 分組字段名

多個字段分組查詢

group by 字段名1,字段名2

Having字句限定分組查詢

select id as uid,group_concat(name) as uname,count(name),avg(age) from xuanjie group by id,age having age > 20;

備注:在MySQL中,如果想實現對分組進行條件限制,不能通過where來實現,因為該關鍵字主要用來實現條件限制數據記錄。MySQL提供了專門的關鍵字having來實現條件限制分組數據記錄。同時,分組查詢必須為操作表中有重復的數據,否則沒有任何意義。

  二、多表操作原理

    ??MySQL支持通過連接查詢來進行多表的操作,具體操作時,首先將兩個或兩個以上的表按照某個條件進行連接后,再按要求查詢目標數據,連接查詢包括內連接和外連接。但在實際應用中,一般不使用連接查詢,因為笛卡爾乘積的緣故,該操作的效率比較低,所以又出現了同樣適合多表查詢的子查詢。

    ? 以下介紹,均圍繞以下班級和學生信息表來展開

    ??

    ?

     (1)笛卡爾積:沒有連接表關系返回的結果。如select * from class,student,出現如下結果,笛卡爾積的結果集數為前一個表的數據總和 x 后一個表的數據總和,中間只是單純的連接兩個表,并沒有做數據的匹配等操作。

    ?   ??

    (2)連接:所謂連接,其實就是在表關系的笛卡爾積中,按照某個條件生成的一個新的關系,連接可分為內連接和外連接。

    (3)內連接(INNER JOIN):所謂內連接,就是在表關系的笛卡爾積中,保留表關系中匹配的記錄,舍棄不匹配的數據記錄,按照匹配的條件可以分為自然連接,等值連接和不等值連接。

    (4)自然連接(NATURAL JOIN):所謂自然連接,就是表關系的笛卡爾積,根據表關系中相同名稱的字段自動進行數據匹配,然后去掉重復字段。

      ? select * from class natural join student;

    ?

    (5)等值連接:所謂等值連接,就是表關系的笛卡爾積,選擇所匹配字段值相等的數據。如下執行結果,發現與自然連接相比,等值連接會去匹配"="條件,并且在新關系中不會去掉重復字段,如class_id。

    ??

    (6)不等連接:所謂不等連接,就是在表關系的笛卡爾積中,選擇所匹配字段不等于的條件。如下執行結果,會在笛卡爾積中獲取"!="不等于條件中的數據,并且不會去掉重復字段,如class_id。

    ??

    (7)外連接(OUTER JOIN):就是在表關系的笛卡爾積中,不僅會保留部分不匹配的記錄,還會保留部分不匹配的記錄。外連接包括左外連接(LEFT OUTER JOIN),右外連接(RIGHT OUTER JOIN)和全外連接(FULL OUTER JOIN),以下基于此兩張表講解外連接:

    ??

    (8)左外連接(LEFT OUTER JOIN):所謂左外連接,就是表關系的笛卡爾積中除了選擇匹配的數據記錄,還包含左邊表中不匹配的數據記錄,如下:

    ?

    (9)右外連接(RIGHT OUTER JOIN):所謂右外連接,就是表關系的笛卡爾積中除了選擇匹配的數據記錄,還包含右邊表中不匹配的數據記錄,如下:

    ?

    (10)全外連接(FULL OUTER JOIN):所謂全外連接,就是表關系的笛卡爾積中,除了選擇相匹配的記錄,還包含左右兩邊表中不匹配的數據記錄。

  三、子查詢

     為什么使用子查詢:在平常的多表連接查詢中,由于會對表進行笛卡爾積操作,如果多張表的數據記錄大,或字段多,則進行笛卡爾積的時候就會出現死機,對于有經驗的SQL開發者,會首先通過統計函數count(*)統計多表的數據記錄數,然后才決定是否使用多表查詢。

     但如果通過統計函數得到的數據記錄數過大,則不適合使用多表查詢,此時便推薦使用子查詢,所謂子查詢,即在一個主查詢中嵌套了其他的若干查詢,如在select xxx from where xxx中嵌套多select,此時,外層的select被稱為主查詢,內層的則稱為子查詢。

     以下使用該student表作為示例:

    ?

    ?示例1:子查詢為單行多列

    ?

     示例2:子查詢為單行多列

    ?

     示例3:子查詢為多行單列

     當子查詢返回結果是多行單列數據時,通常會包含in,any,all,exists關鍵字。

     (1)in關鍵字

    ??

     (2)any關鍵字

    ? =any:功能與in一樣

    ? >any:比子查詢中返回的最小數據還要大的記錄

    ? <any:比子查詢中返回的最大數據還要小的記錄

    ??

     (3)all關鍵字

    ? >all:比子查詢中返回的最大的記錄數還要大的數據

    ? <all:比子查詢中返回的最小的記錄數還要小的數據

    ??

     (4)exists關鍵字

    ? exists查詢時會對外表進行遍歷逐條查詢,然后將結果傳到子查詢中。

    ??  

    ? 示例4:多行多列子查詢

    ??

?

?

轉載于:https://www.cnblogs.com/jiyukai/p/7531851.html

總結

以上是生活随笔為你收集整理的MySQL整理(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。