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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Mysql入门实战中

發布時間:2025/7/14 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql入门实战中 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面一章主要解說了mysql的入門學習。包括數據庫,表的管理,以及對數據的增刪改,本章主要介紹mysql最重要的語句select的使用方法。將select的大部分使用方法進行分別解說。

全部代碼下載(csdn):鏈接

Github鏈接:鏈接

1.select語句簡介:

select語句從語義上就能夠知道主要是用來進行查詢的

  • 數據表都已經創建起來了。我們已經插入了很多的數據。我們能夠用自己喜歡的方式對數據表里面的信息進行檢索和顯示了。

    比方說顯示我們建立的表student全部的數據:

  • select * from student;

    顯演示樣例如以下:

  • select語法格式:
  • 1. 簡單語法:select [字段] from 表名 where 條件推斷2. 復雜的語法:SELECT select_list --描寫敘述結果集的列 INTO new_table_name --指定使用結果集來創建新表 FROM table_list --包括從中檢索到結果集數據的表的列表[返回結果集的對象]。 [ WHERE search_conditions ] --WHERE 子句是一個篩選,它定義了源表中的行要滿足 SELECT 語句的要求所必須達到的條件 [ GROUP BY group_by_list ] --依據 group_by_list 列中的值將結果集分成組 [ HAVING search_conditions ] --結果集的附加篩選 [ ORDER BY order_list [ ASC | DESC ] ] --結果集的附加篩選

    2.簡單查詢:

    2.1查詢指定字段

    第一部分介紹的 select * from student;中的*號是通配符,意思查詢的全部列,平時我們常常要查詢的可能僅僅是名字或者分數,這是就能夠指定字段進行查找

  • 語法格式:
  • SELECT 字段名 FROM 表名;

  • 演演示樣例如以下:選擇指定字段為sname。mark的兩列
  • select sname,mark from student;
  • 能夠使用as關鍵字為字段定義別名:
  • 如:

    -- 查詢指定的列 并指定別名as--select sname,sid as id from student;

    顯演示樣例如以下:

  • 查詢時能夠加入常量列,比方某個學生都屬于2014級自己主動化班:
  • -- 添加一個班級列。內容為:自己主動化班 字段名稱為2014級 --select sid,sname,'自己主動化班' as '2014級' from student;

    2.2限制查詢行數:也叫分頁查詢;

    當我們數據庫非常大時為了顯示或處理方便能夠使用分頁查詢:

    • 1.語法格式
    select * from student limit [index],[count];行數不足,返回行數為實際值或者:select * from student limit [count] OFFSET [index];

    index數為開始位置的前一行,count數為要檢索的行數。

    • 2. 演演示樣例如以下:選出student的從第二行開始的3行
    -- 限制查詢行數 --select sid,sname from student limit 1,3;
    • 3. 還能夠選擇倒敘或者升序:desc降序。asc升序
    -- 查詢排序 Desc降序排序 --select * from student order by sid Desc limit 1,3;
    • 4. 注意

    在給出order by子句時,應該保證他位于 from子句之后。

    假設使用limit,他必須位于order by子句之后,使用子句的次序不正確將產生錯誤消息

    3.復雜查詢:

    3.1查詢之過濾:

    數據庫表一般包括大量的數據,非常少須要檢索表中全部行。一般會依據特定操作或報告的須要提取表數據的子集。

    • 1.語法格式

    select * from student where 條件;

    如:查詢sid=2的學生:

    -- 檢查單個值--select * from student where sid=002;select * from student where sid<>002;
    • 2.支持的子句操作符

    • 3.范圍過濾

    為了檢查某個范圍的值,可使用between操作符:

    語法:select from***where***between***and***

    如:sid在002到004之間

    演示:select * from student where sid between 002 and 004;

    • 4.空值檢查

    在創建表時,表設計人員能夠指定當中的列能否夠不包括值。在一個列不包括值時,被稱作包括空值null:

    語法: select ***from***where***is***null

    如:

    演示:select * from student where sgender is null;

    • 5.條件邏輯過濾

    為了進行更強的過濾控制,MySQL同意給出多個where子句。這些子句能夠兩種方式使用:以and子句的方式或or子句的方式使用:

    語法:select * from student where 條件1 and(or) 條件2;

    如:選擇sid==001和002并且mark大于1

    演示:select * from student where (sid=001 or sid=002) and mark>1;

    注意:and和or的組合帶來了一個問題——計算次序:and操作符的優先級高于or.所以上面演示的時候將or語句用括號包圍了

    • 6.In操作符

    in操作符用來指定范圍,范圍中的每一個條件都能夠進行匹配。in取合法值的由逗號分隔的清單,全部括在圓括號里

    語法:select ***from***where in (清單)

    如:選擇出sid在(001,002,003)中

    演示:select * from student where sid in (001,002,003);

    為什么要使用IN操作符?其長處例如以下

    在使用長的合法選項清單時,In操作符的語法更加清楚并且更直觀 ? 在使用IN時計算的次序更easy管理 ,IN操作符一般比OR操作符清單運行更快

    IN的最大長處是能夠包括其它select語句,似的能夠更動態的建立where子句

    • 7.not操作符

    WHERE子句中的NOT操作符有且僅僅有一個功能,那就是否定它之后的不論什么條件。

    如否定剛剛的in條件:

    select * from student where sid not in (001,002,003);

    • 8.使用通配符

    用來匹配值的一部分的特殊字符,

    為在搜索句子中使用通配符,必須使用like操作符。like指示mysQL后跟的搜索模式利用通配符匹配而不是直接相等匹配進行比較。

    在搜索串中,%表示不論什么字符出現隨意次數

    下劃線的用途與%一樣。但下劃線僅僅匹配單個字符而不是多個字符

    演演示樣例如以下:

    -- 用通配符進行過濾 like % _-- -- 選出名字中含有eac的詞-- select * from student where sname like '%eac%';-- 選出第一個字符隨意,后面字符為eace的詞-- select * from student where sname like '_eace';
    • 9.用正則表達式

    正則表達式的作用是匹配文本。將一個模式(正則表達式)與一個文本串進行比較。

    關鍵字為regexp;正則表達式搜索與like比較類似;此去僅僅做簡單演示;

    -- 正則表達式,不同于like,使用的操作符是regexp。匹配的也是含有-- -- 基本字符匹配-- select sname from student where sname regexp 'ong';-- 此去假設用like不會返回結果。由于不加通配符時,like時全然匹配; -- 正則書寫部分基本與其它正則語言一致--select sname from student where sname regexp '[peac,ron]';select * from student where sid regexp '[[:digit:]]';

    3.2查詢之計算字段:

    查詢能夠對一些字段進行算術運算,包括加減乘除;

  • concat()函數來拼接兩個列。
  • -- 拼接-- select concat(sname,'(',sid,')') as sname from student;
  • +,-,×,/用來計算字段:
  • -- 運行算法計算-- select sid,sname,sid*mark as imark from student;

    3.3使用函數:

    對獲得的數據進行處理比方對獲得的字符串處理,對日期處理,對數值處理;

    • 1.支持的函數

    • 2.簡單演示
    -- 文本處理函數-- select sname,upper(sname) from student;-- 日期和時間處理函數-- student-- select c_id,order_num from orders where date(order_date)='2015-11-4';-- 數值處理函數-- select sid,sname from student where mod(sid,2)=0;

    3.4匯總數據(合計函數):

    • 1.avg max, min, sum合計函數

    Sum函數返回滿足where條件的行的和

    AVG函數返回滿足where條件的一列的平均值

    Max/min函數返回滿足where條件的一列的最大/最小值

    演示:

    select avg(sid) as avg,min(sid) as min,max(sid) as max,sum(sid) as sumfrom student;-- 聚集不同的值 --distinct不相等的值select avg(distinct mark) from student;
    • 2.count函數

    Count(列名)返回某一列。行的總數

    演示:

    select count(*) from student;select count(sage) from student;

    3.5數據分組:

    在SQL的語法里。GROUP BY和HAVING子句用來對數據進行匯總。

    GROUP BY子句指明了依照哪幾個字段來分組,而將記錄分組后。用HAVING子句過濾這些記錄。

    • 1.語法
    #以column1 為一組計算 column2 的平均值SELECT column1, column2. column3.. FROM table group by column1使用having 子句過濾:SELECT column1, column2. column3..FROM table group by column1 having ...

    注意:Having和where均可實現過濾,但在having能夠使用合計函數,having通常跟在group by后,它作用于組。

    • 2. 簡單演示:
    -- 數據分組 group by--select mark,count(*) as num from student group by mark;-- 過濾分組having num>2-- select mark,count(*)as num from student where sid>1 group by mark having num>2;-- 注意having有where的功能,但where不能夠替代having,where用于過濾結果,having用于過濾分組結果--

    3.6子句順序:

    – select子句順序–

    – select–from–where–group by–having–order by–limit–

    4.多表查詢:

    多表查詢規則:1)確定查詢哪些表 2)確定哪些哪些字段 3)表與表之間連接條件 (規律:連接條件數量是表數量-1)

    4.1子查詢:

    子查詢能夠理解為 套查詢.子查詢是一個Select語句.

    • 1.分為三種方式

    • 表達式的值與子查詢返回的單一值做比較
      表達式 comparision ANY|ALL|SOME
    • 檢查表達式的值是否匹配子查詢返回的一組值的某個值
      [NOT]IN(子查詢)
    • 做為計算字段使用子查詢
    • 2.演演示樣例如以下

    ##使用子查詢###1. 使用表達式的值與子查詢返回的單一值做比較--主查詢返回單位價格比不論什么一個折扣大于等于25%的產品的單位價格要高的全部產品 Select * FROM Products Where UnitPrice 〉ANY (Select UnitPrice FROM[Order Details] Where Discount〉0.25) ###2. 檢查表達式的值是否匹配子查詢返回的一組值的某個值 -- 1檢查detil的全部goods編號-- 2檢查具有前一步驟列出的編號的全部goods商品 select * from goods where goods_id in (select goods from detil);###3.做為計算字段使用子查詢 -- 1從goods檢索商品列表 -- 2對于檢索的每一個商品id,統計其出如今detil的次數: select *,(select count(*) from detil where detil.goods=goods_id) as id_count from goods; #必須寫全表名,防止混淆

    4.2內連接查詢:

    通過連接運算符能夠實現多個表查詢。連接是關系數據庫模型的主要特點,連接操作給用戶帶來非常大的靈活性,他們能夠在不論什么時候添加新的數據類型。為不同實體創建新的表,爾后通過連接進行查詢。
    - 1.定義

    內連接(inner join或者join。也能夠使用逗號)僅僅返回兩個表中連接字段相等的行;

    ##內連接連接二表的樣例:select * from1 inner join2 on1.字段號=表2.字段號或:select * from1 。表2 where1.字段號=表2.字段號##內連接連接三表的樣例: select * from (表1 inner join2 on1.字段號=表2.字段號) inner join3 on1.字段號=表3.字段號 ##內連接四表的樣例: select * from ((表1 inner join2 on1.字段號=表2.字段號)inner join3 on1.字段號=表3.字段號)inner join4 on1.字段號=表4.字段號
    • 2.演演示樣例如以下
    -- 使用內連接 -- 1 列出goods_name,goods_price客戶夠買的數量 ,使用逗號寫select detil.customer_id as id,goods.goods_name as g_name,goods.gooods_price as price,detil.count as count,(goods.gooods_price * detil.count) as expensivefrom goods,detilwhere goods_id=detil.goods order by id;#這樣的通過測量相等的為內部聯接。 -- 2.使用內部方式寫 select detil.customer_id as id,goods.goods_name as g_name,goods.gooods_price as price,detil.count as count,(goods.gooods_price * detil.count) as expensivefrom goods inner join detilon goods_id=detil.goods order by id;---- 自聯接。與多表內連接一樣-- 1.先找出有問題的餅干4相應的商品id-- 2.通過商品id找到相應id生產的全部商品; select p1.goods_name,p1.goods_maker from goods as p1,goods as p2where p1.goods_id=p2.goods_id and p2.goods_name='餅干4';

    4.3外接查詢:

    MySQL中的外連接。分為左外連接和右連接,即除了返回符合連接條件的結果之外。還要返回左表(左連接)或者右表(右連接)中不符合連接條件的結果,相相應的使用NULL相應。

    • 1.左右連接:

    左連接(left join)返回左表中全部記錄和右表中連接字段相等的記錄

    右連接(right join)返回右表中全部記錄和左表中連接字段相等的記錄

    假設兩個表中字段并不全然一一相應。想要那些沒有相應的字段也顯示出來就能夠使用左連接和右連接查詢,一個是包括左邊全部,一個是包括右邊。

    ##左連接兩表的樣例: select * from1 left join2 on 表.字段號=表2.字段號; ##左連接三表查詢的樣例: select * from (表1 left join2 on1.字段號=表2.字段號) left join3 on2.字段號=表3.字段號##右連接兩表的樣例: select * from1 right join2 on 表.字段號=表2.字段號;##右連接三表查詢的樣例:select * from (表1 right join2 on1.字段號=表2.字段號)right join3 on2.字段號=表3.字段號
    • 2.演演示樣例如以下
    -- 外部連接: 將沒有關聯的數據頁查詢出來。left查詢出左邊表(goods)全部的,right將右邊表的全部查詢。 select detil.customer_id as id,goods.goods_name as g_name,goods.gooods_price as price,detil.count as count,(goods.gooods_price * detil.count) as expensivefrom goods left outer join detilon goods_id=detil.goods order by id;

    4.4組合(聯合)查詢:

    • 1.定義

    把兩次或多次的查詢結果合并起來,要求查詢的列數一致,推薦查詢的相應的列類型一致,能夠查詢多張表。多次查詢語句時假設列名不一樣,則取第一次的列名!

    假設不同的語句中取出的行的每一個列的值都一樣,那么結果將自己主動會去反復,假設不想去反復則要加all來聲明,即union all。

    簡單理解:union 跟where的多個or條件一樣;

    語法:

    ##同一張表:select 字段1,字段2 from table1 where 條件 union select 字段1,字段2 from table1 where 條件##不同的表:要求字段1,2和字段3,4類型一致select 字段1。字段2 from table1 where 條件 union select 字段3,字段4 from table2 where 條件
    • 2.演演示樣例如以下
    ##組合查詢 select goods_id,goods_name from goods where goods_id>2unionselect goods_id,goods_name from goods where goods_name in ('餅干1','餅干3')order by goods_id;

    4.5 笛卡爾積(交叉連接)查詢:

    • 1.定義

    笛卡爾積返回的結果為被連接的兩個數據表的乘積:

    假設如今有兩張表A和B:例如以下

    A表:

    B表:

    則查詢的笛卡爾積例如以下:select * from A,B;

    • 2.語法
    ##在MySQL中能夠為CROSS JOIN或者省略CROSS即JOIN。或者使用',' 如: SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2
    • 3.演示如上

    好的本章介紹到這里
    來自一條小鯊魚wpeace(rlovep.com)

    總結

    以上是生活随笔為你收集整理的Mysql入门实战中的全部內容,希望文章能夠幫你解決所遇到的問題。

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