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

歡迎訪問 生活随笔!

生活随笔

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

数据库

数据库高级查询

發布時間:2024/2/28 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库高级查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 數據庫高級查詢
  • 按關鍵字排序
  • 對結果進行分組
  • 對字段進行數字統計
  • 限制結果條目
  • 設置別名
  • 通配符
  • 子查詢
  • EXIST關鍵字查詢
  • 數據庫null的用法
  • 正則表達式查詢表中信息
  • “*”匹配前面字符的任意多次
  • 算數運算符
  • 大于、大于等于、小于、小于等于運算符
  • **IS NULL、IS NOT NULL**
  • **LEAST、GREATEST運用**
  • **IN、NOT IN**
  • **LIKE、NOT LIKE**
  • 邏輯運算符
  • 邏輯非
  • 邏輯與
  • 邏輯或
  • 邏輯異或
  • 位運算符
  • 連接查詢

數據庫高級查詢

對 MySQL 數據庫的查詢,除了基本的查詢外,有時候需要對查詢的結果集進行處理。例如只取 10 條數據、對查詢結果進行排序或分組等等,這些內容就是接下來要講解的知識。

按關鍵字排序

order by 升序order by 字段 desc 降序

使用 SELECT 語句可以將需要的數據從 MySQL 數據庫中查詢出來,如果對查詢的結果進行排序

select name,score from make where score>=70 order by score; 升序 +--------+-------+ | name | score | +--------+-------+ | wangwu | 77.00 | | zhang | 84.10 | | lisi | 84.10 | | limei | 90.00 | +--------+-------+

并以 level 降序排列和 id 降序排列

select name,score from make where score>=70 order by score desc; 降序 +--------+-------+ | name | score | +--------+-------+ | limei | 90.00 | | zhang | 84.10 | | lisi | 84.10 | | wangwu | 77.00 | +--------+-------+

對結果進行分組

group by 字段 可以按一個或多個字段對結果進行分組處理。 GROUP BY 通常都是結合聚合函數一起使用的,常用的聚合函數包括 select count(name),score from make where score >=70 group by score; +-------------+-------+ | count(name) | score | +-------------+-------+ | 2 | 77.00 | | 2 | 84.10 | | 1 | 90.00 | +-------------+-------+ ps分數77的人數有2個

對字段進行數字統計

avg平均成績 count(字段) 計數 sum(字段)求和 max (字段)最大值 min(字段) 最小值 mysql> select avg(score)from make; +------------+ | avg(score) | +------------+ | 78.700000 | +------------+ 1 row in set (0.00 sec)

限制結果條目

在使用 MySQL SELECT 語句進行查詢時,結果集返回的是所有匹配的記錄。有時候僅需要返回第一行或者前幾行,這時候就需要用到 LIMIT 子句。

SELECT column1, column2, ... FROM table_name LIMIT [offset,] number mysql> select * from make limit 3; 查看3行 +----+--------+-------+----------+ | id | name | score | address | +----+--------+-------+----------+ | 1 | zhang | 84.10 | shanghai | | 2 | lisi | 84.10 | shanghai | | 3 | wangwu | 77.00 | biejing | +----+--------+-------+----------+ 3 rows in set (0.00 sec)查看345行 mysql> select * from make limit 2,3; +----+---------+-------+---------+ | id | name | score | address | +----+---------+-------+---------+ | 3 | wangwu| 77.00 | biejing | | 4 | zhaoliu | 60.00 | nanjing | | 5 | limei | 90.00 | wuxi | +----+---------+-------+---------+ 3 rows in set (0.00 sec)

結合升序降序使用

IMIT 子句的使用也可以結合 ORDER BY:先進行排序,然后再 LIMIT 限制固定的記錄。也就是說 LIMIT 是放在最后的,將處理好的結果集按要求選出幾行來

查看前三名 mysql> select * from make order by score desc limit 3; +----+---------+-------+----------+ | id | name | score | address | +----+---------+-------+----------+ | 5 | limei | 90.00 | wuxi | | 7 | tanshan | 87.00 | anhui | | 1 | zhang | 84.10 | shanghai | +----+---------+-------+----------+ 查看后三名 mysql> select * from make order by score limit 3; +----+---------+-------+---------+ | id | name | score | address | +----+---------+-------+---------+ | 4 | zhaoliu | 60.00 | nanjing | | 6 | heiba | 77.00 | wuhu | | 3 | wangwu | 77.00 | biejing | +----+---------+-------+---------+

設置別名

在 MySQL 查詢時,當表的名字比較長或者表內某些字段比較長時,為了方便書寫或者多次使用相同的表,可以給字段列或表設置別名。

SELECT 字段名 AS 別名 FROM 表名; 設置別名 mysql> select count(*) from make; +----------+ | count(*) | +----------+ | 7 | +----------+

在使用 AS 后,可以用 alias_name 代替 table_name,其中 AS 語句是可選的。

mysql> select count(*) as 數量 from make; +--------+ | 數量 | +--------+ | 7 | +--------+

通配符

%表示零個多個
_ 表示單個字符

舉例子:

mysql> select name,score from make where name like 'z%'; +---------+-------+ | name | score | +---------+-------+ | zhang | 84.10 | | zhaoliu | 60.00 | +---------+-------+ 2 rows in set (0.00 sec)mysql> select name,score from make where name like 'z______'; +---------+-------+ | name | score | +---------+-------+ | zhaoliu | 60.00 | +---------+-------+ 1 row in set (0.00 sec)mysql> select name,score from make where name like 'z_ao%'; +---------+-------+ | name | score | +---------+-------+ | zhaoliu | 60.00 | +---------+-------+ 1 row in set (0.00 sec)

子查詢

1:子查詢也被稱作內查詢或者嵌套查詢,是指在一個查詢語句里面還嵌套著另一個查詢語 句。

2:子查詢語句是先于主查詢語句被執行的。

3:子查詢不僅可以在 SELECT 語句中使用,在 INERT、UPDATE、DELETE 中也同樣適用。

4:在嵌套的時候,子查詢內部還可以再次嵌套新的子查詢,也就是說可以多層嵌套。

格式

<表達式> [NOT] IN <子查詢> 查看云計算興趣的人select name,hobby from make where hobby in (select id from info where name='云計算'); +---------+-------+ | name | hobby | +---------+-------+ | zhang | 1 | | lisi | 1 | | limei | 1 | | tanshan | 1 | +---------+-------+ 4 rows in set (0.00 sec) 方法二:

除了以上所列舉的 IN 操作符,在 IN 前面還可以添加 NOT,其作用與 IN 相反,表示否定(即不在子查詢的結果集里面)。例如,執行以下操作即可查詢用戶等級不小于 45 級的用戶。

mysql> insert into tmp select * from make where id not in (select id from info where address='shanghai');

子查詢上也可以使用比較運算符(=、<、>、>=、<=)

mysql> select name,hobby from make where hobby=(select id from info where name='云計算'); +---------+-------+ | name | hobby | +---------+-------+ | zhang | 1 | | lisi | 1 | | limei | 1 | | tanshan | 1 | +---------+-------+ 4 rows in set (0.00 sec)

EXIST關鍵字查詢

EXIST 這個關鍵字在子查詢時,主要用于判斷子查詢的結果集是否為空。如果不為空, 則返回 TRUE;反之,則返回 FALSE。

EXISTS 子查詢 if 判斷語句 》》后面如何成功前面執行mysql> select name,score from make where exists (select id from info where name='大數據'); +---------+-------+ | name | score | +---------+-------+ | zhang | 84.10 | | lisi | 84.10 | | wangwu | 82.00 | | zhaoliu | 65.00 | | limei | 90.00 | | heiba | 82.00 | | tanshan | 87.00 | +---------+-------+

數據庫null的用法

NULL值和空值的區別

1count不對null進行計算

mysql> insert into nun (id) values (2); Query OK, 1 row affected (0.03 sec)mysql> select * from nun; +----+------+ | id | name | +----+------+ | 2 | NULL | +----+------+ 1 row in set (0.00 sec)mysql> select count(name) from nun; +-------------+ | count(name) | +-------------+ | 0 | +-------------+ 1 row in set (0.00 sec)

count()計算會對空值計算

mysql> insert into nun (id,name) values (3,''); Query OK, 1 row affected (0.00 sec)mysql> select * from nun; +----+------+ | id | name | +----+------+ | 2 | NULL | | 3 | | +----+------+ 2 rows in set (0.00 sec)mysql> select count(name) from nun; +-------------+ | count(name) | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec)

過濾篩選null的值

null表示0或者空白沒有儲存空間,空值是存在有儲存空間

mysql> select * from nun where name is not null; +----+------+ | id | name | +----+------+ | 1 | tom | | 3 | | +----+------+ 2 rows in set (0.00 sec)mysql> select * from nun where name is null; +----+------+ | id | name | +----+------+ | 2 | NULL | +----+------+ 1 row in set (0.00 sec)

正則表達式查詢表中信息

^匹配開始字符 p1/p2匹配p1或p2 [...]匹配字符集中的任意一個S $匹配結束字符 [^...]匹配不在中括號內的任何 .匹配任意單個字符 *匹配任意個前面的字符 {n}匹配前面的字符串n次 +匹配前面字符至少1次 {n,m}匹配前面的字符串至少r至多m次

1. 以特定字符串開頭的記錄

mysql> select * from info where name regexp'^wa'; +----+--------+-------+----------+ | id | name | score | address | +----+--------+-------+----------+ | 3 | wangwu | 70.00 | shanghai | +----+--------+-------+----------+ 1 row in set (0.00 sec)

1. 以特定字符串結尾的記錄

mysql> select * from make where name regexp 'n$'; +----+----------+-------+----------+-------+ | ip | name | score | adderss | hobby | +----+----------+-------+----------+-------+ | 1 | zhangsan | 65.00 | shanghai | 2 | +----+----------+-------+----------+-------+ 1 row in set (0.00 sec)

包含指定字符串的記錄

找出包含 ‘an’的連續字符 mysql> select * from make where name regexp 'an'; +----+----------+-------+----------+-------+ | ip | name | score | adderss | hobby | +----+----------+-------+----------+-------+ | 1 | zhangsan | 65.00 | shanghai | 2 | | 3 | wangwu | 75.00 | nanjing | 2 | +----+----------+-------+----------+-------+

模糊查詢

mysql> select * from make where name regexp 'z..'; +----+----------+-------+----------+-------+ | ip | name | score | adderss | hobby | +----+----------+-------+----------+-------+ | 1 | zhangsan | 65.00 | shanghai | 2 | | 4 | zhaoliu | 90.00 | biejing | 1 | +----+----------+-------+----------+-------+ 2 rows in set (0.00 sec)

匹配包含或者關系的記錄

player 表中查詢包含字符串 zh 或者 ni 的 name 字段并打印對應的 name

和 level 記錄,具體操作如下所示

mysql> select * from make where name regexp 'zh|ni'; +----+----------+-------+----------+-------+ | ip | name | score | adderss | hobby | +----+----------+-------+----------+-------+ | 1 | zhangsan | 65.00 | shanghai | 2 | | 4 | zhaoliu | 90.00 | biejing | 1 | | 5 | nilei | 75.00 | hangzou | 2 | +----+----------+-------+----------+-------+ 3 rows in set (0.00 sec)

“*”匹配前面字符的任意多次

在 player 表中查詢包含三個或者更多個連續的 o 的 name 字段并打印對應的 id、name 和 level 記錄,具體操作如下所示。

mysql> select * from make where name regexp 'oo*'; +----+---------+-------+---------+-------+ | ip | name | score | adderss | hobby | +----+---------+-------+---------+-------+ | 4 | zhaoliu | 90.00 | biejing | 1 | | 7 | oooo | 66.00 | bj | 3 | | 8 | ooooo | 66.00 | bj | 3 | +----+---------+-------+---------+-------+ 3 rows in set (0.00 sec)mysql> select * from make where name regexp 'o*' 或mysql> select * from make where name regexp '.*';(O*he.*都可以輸出全表) +----+----------+-------+----------+-------+ | ip | name | score | adderss | hobby | +----+----------+-------+----------+-------+ | 1 | zhangsan | 65.00 | shanghai | 2 | | 2 | lisi | 80.00 | shanghai | 1 | | 3 | wangwu | 75.00 | nanjing | 2 | | 4 | zhaoliu | 90.00 | biejing | 1 | | 5 | nilei | 75.00 | hangzou | 2 | | 6 | malik | 80.00 | hangzou | 1 | | 7 | oooo | 66.00 | bj | 3 | | 8 | ooooo | 66.00 | bj | 3 | +----+----------+-------+----------+-------+ 8 rows in set (0.00 sec)
  • “+”匹配前面字符至少一次
  • mysql> select * from make where name regexp 'oooo+'; +----+-------+-------+---------+-------+ | ip | name | score | adderss | hobby | +----+-------+-------+---------+-------+ | 7 | oooo | 66.00 | bj | 3 | | 8 | ooooo | 66.00 | bj | 3 | +----+-------+-------+---------+-------+
  • 匹配指定字符集中的任意一個
  • 查詢d,e,f開頭的name字段

    查詢d,e,f開頭的name字段 mysql> select * from make where name regexp '^[w-z]'; +----+----------+-------+----------+-------+ | ip | name | score | adderss | hobby | +----+----------+-------+----------+-------+ | 1 | zhangsan | 65.00 | shanghai | 2 | | 3 | wangwu | 75.00 | nanjing | 2 | | 4 | zhaoliu | 90.00 | biejing | 1 | +----+----------+-------+----------+-------+

    算數運算符

    運算符描述
    +加法
    -減法
    *乘法
    /除法
    %取余數

    舉例:

    mysql> select 1+2,5*2,5-4,7%2,7/2; +-----+-----+-----+------+--------+ | 1+2 | 5*2 | 5-4 | 7%2 | 7/2 | +-----+-----+-----+------+--------+ | 3 | 10 | 1 | 1 | 3.5000 | +-----+-----+-----+------+--------+ 1 row in set (0.00 sec)
  • 比較運算符
  • 運算符描述運算符描述
    =等于IS NOT NULL判斷一個值是否不為 NULL
    >大于BETWEEN AND兩者之間
    <小于IN在集合中
    >=大于等于LIKE通配符匹配
    <=小于等于GREATEST兩個或多個參數時返回最大值
    !=或<>不等于LEAST兩個或多個參數時返回最小值
    IS NULL判斷一個值是否為 NULLREGEXP正則表達式

    舉例:

    mysql> mysql> 2=4,2='2','e'='e',(2+2)=(3+1),'a'=NULL; +-----+-------+---------+-------------+----------+ | 2=4 | 2='2' | 'e'='e' | (2+2)=(3+1) | 'a'=NULL | +-----+-------+---------+-------------+----------+ | 0 | 1 | 1 | 1 | NULL | +-----+-------+---------+-------------+----------+ 1 row in set (0.00 sec)

    大于、大于等于、小于、小于等于運算符

    ? 大于(>)運算符用來判斷左側的操作數是否大于右側的操作數,若大于返回 1,否則返回 0,同樣不能用于判斷 NULL

    ? 小于(<)運算符用來判斷左側的操作數是否小于右側的操作數,若小于返回 1,否則返回 0,同樣不能用于判斷 NULL

    ? 大于等于(>=)判斷左側的操作數是否大于等于右側的操作數,若大于等于返回 1,否則返回 0,不能用于判斷 NULL

    ? 小于等于(<=)判斷左側的操作數是否小于等于右側的操作數,若小于等于返回 1,否則返回 0,不能用于判斷 NULL

    mysql> select 'benat'!='kfc',12<>13,NULL<>NULL; +----------------+--------+------------+ | 'benat'!='kfc' | 12<>13 | NULL<>NULL | +----------------+--------+------------+ | 1 | 1 | NULL | +----------------+--------+------------+ 1 row in set (0.00 sec)

    IS NULL、IS NOT NULL

    IS NULL 判斷一個值是否為 NULL,如果為 NULL 返回 1,否則返回 0。

    IS NOT NULL 判斷一個值是否不為 NULL,如果不為 NULL 返回 1,否則返回 0。

    mysql> select 2 is NULL,'f' is not NULL,NULL is NULL; +-----------+-----------------+--------------+ | 2 is NULL | 'f' is not NULL | NULL is NULL | +-----------+-----------------+--------------+ | 0 | 1 | 1 | +-----------+-----------------+--------------+

    BETWEEN AND

    BETWEEN AND 比較運算通常用于判斷一個值是否落在某兩個值之間

    mysql> select 4 between 3 and 7,9 between 5 and 12,'f' between 'a' and 'z'; 4在3到7之間 9在5到12之間 f在a到z之間 +-------------------+--------------------+-------------------------+ | 4 between 3 and 7 | 9 between 5 and 12 | 'f' between 'a' and 'z' | +-------------------+--------------------+-------------------------+ | 1 | 1 | 1 | +-------------------+--------------------+-------------------------+ 1 row in set (0.00 sec)

    LEAST、GREATEST運用

    ? LEAST:當有兩個或者多個參數時,返回其中的最小值。如果其中一個值為 NULL,則返回結果就為 NULL。

    ? GREATEST:當有兩個或者多個參數時,返回其中的最大值。如果其中一個值為 NULL, 則返回結果就為 NULL。

    具體操作如下

    返回最小值 erver version for the right syntax to use near 'select0 least(10,20,30),least('a','b','c')' at line 1 mysql> select least(10,20,30),least('a','b','c'); +-----------------+--------------------+ | least(10,20,30) | least('a','b','c') | +-----------------+--------------------+ | 10 | a | +-----------------+--------------------+ 1 row in set (0.00 sec 返回最大值 mysql> select greatest(10,20,30),greatest('a','b','c'); +--------------------+-----------------------+ | greatest(10,20,30) | greatest('a','b','c') | +--------------------+-----------------------+ | 30 | c | +--------------------+-----------------------+ 1 row in set (0.00 sec)

    IN、NOT IN

    ? IN 判斷一個值是否在對應的列表中,如果是返回 1,否則返回 0。

    ? NOT IN 判斷一個值是否不在對應的列表中,如果不是返回 1,否則返回 0。

    具體操作如下

    mysql> select 2 in (2,3,4,5),'c'not in ('d','e','f'); +----------------+-------------------------+ | 2 in (2,3,4,5) | 'c'not in ('d','e','f') | +----------------+-------------------------+ | 1 | 1 | +----------------+-------------------------+ 1 row in set (0.00 sec)

    LIKE、NOT LIKE

    LIKE 用來匹配字符串,如果匹配成功則返回 1,反之返回 0。LIKE 支持兩種通配符:’%’ 用于匹配任意數目的字符,而’_’只能匹配一個字符。NOT LIKE 正好跟 LIKE 相反,如果沒有匹配成功則返回 1,反之返回 0。

    mysql> select 'bdqn' like 'bdq_','kgc' like '%c','tom' not like '%j'; +--------------------+-----------------+---------------------+ | 'bdqn' like 'bdq_' | 'kgc' like '%c' | 'tom' not like '%j' | +--------------------+-----------------+---------------------+ | 1 | 1 | 1 | +--------------------+-----------------+---------------------+ 1 row in set (0.00 sec

    邏輯運算符

    邏輯運算符又被稱為布爾運算符,通常用來判斷表達式的真假,如果為真返回 1,否則返回 0,真和假也可以用 TRUE 和 FALSE 表示。MySQL 中支持使用的邏輯運算符有四種, 具體如表 5-4 所示

    運算符描述
    NOT 或 !邏輯非
    AND 或 &&邏輯與
    OR 或 ||邏輯或
    XOR邏輯異或

    邏輯非

    邏輯運算符中最簡單的運算符就是邏輯非,邏輯非使用 NOT 或!表示。邏輯非將跟在它后面的邏輯測試取反,把真變為假,把假變為真。如果 NOT 后面的操作數為 0 時,所得值為 1;如果操作數為非 0 時,所得值為 0;如果操作數為 NULL 時,所得值為 NULL。例如,對非 0 值和 0 值分別作邏輯非運算,具體操作如下所示。

    mysql> select !3,not 2,!0; +----+-------+----+ | !3 | not 2 | !0 | +----+-------+----+ | 0 | 0 | 1 | +----+-------+----+ 1 row in set (0.00 sec)

    邏輯與

    邏輯與通常用于判斷兩個值或多個值的有效性,如果所有值都是真返回 1,否則返回 0。邏輯與使用 AND 或者&&表示。例如,對非 0 值、0 值和 NULL 值分別作邏輯與運算,具體操作如下所示。

    邏輯 and mysql> select 2 and 3,0 and 1,0 and NULL,1 and NULL; +---------+---------+------------+------------+ | 2 and 3 | 0 and 1 | 0 and NULL | 1 and NULL | +---------+---------+------------+------------+ | 1 | 0 | 0 | NULL | +---------+---------+------------+------------+ 1 row in set (0.00 sec)

    邏輯或

    邏輯或表示包含的操作數,任意一個為非零值并且不是 NULL 值時,返回 1,否則返回0。邏輯或通常使用 OR 或者||來表示。例如,對非 0 值、0 值和 NULL 值分別作邏輯或運算, 具體操作如下所示。

    邏輯或 OR mysql> select 2 OR 3,0 OR 1,0 OR NULL,1 OR NULL; +--------+--------+-----------+-----------+ | 2 OR 3 | 0 OR 1 | 0 OR NULL | 1 OR NULL | +--------+--------+-----------+-----------+ | 1 | 1 | NULL | 1 | +--------+--------+-----------+-----------+

    邏輯異或

    兩個非 NULL 值的操作數,如果兩者都是 0 或者都是非 0,則返回 0;如果一個為 0, 另一個為非 0,則返回結果為 1;當任意一個值為 NULL 時,返回值為 NULL。例如,對非0 值、0 值和 NULL 值分別作邏輯異或運算,具體操作如下所示。

    mysql> select 2 XOR 3,0 XOR 1,0 XOR NULL,1 XOR NULL; +---------+---------+------------+------------+ | 2 XOR 3 | 0 XOR 1 | 0 XOR NULL | 1 XOR NULL | +---------+---------+------------+------------+ | 0 | 1 | NULL | NULL | +---------+---------+------------+------------+ 1 row in set (0.00 sec)

    位運算符

    位運算符實際上是對二進制數進行計算的運算符。MySQL 內位運算會先將操作數變成二進制格式,然后進行位運算,最后在將計算結果從二進制變回到十進制格式,方便用戶查看

    ? 按位與運算(&),是對應的二進制位都是 1 的,它們的運算結果為 1,否則為 0,所以 10 & 15 的結果為 10。

    ? 按位或運算(|),是對應的二進制位有一個或兩個為 1 的,運算結果為 1,否則為 0, 所以 10 | 15 的結果為 15。

    ? 按位異或運算(^),是對應的二進制位不相同時,運算結果 1,否則為 0,所以 10 ^ 15

    的結果為 5。

    ? 按位取反(~),是對應的二進制數逐位反轉,即 1 取反后變為 0, 0 取反后變為 1。數字 1 的二進制是 0001,取反后變為 1110, 數字 5 的二進制是 0101,將 1110 和 0101

    且 0&&0=0 1&&0=0 0&&1=0 1&&1=1 或 0||0=0 1||0=1 0||1=1 1||1=1異或 0^0=0 1^0=1 0^1=1 1^1=0與運算 1010 10 1111 15 1010 10

    位運算符 ~取反 ^按位取反

    mysql> select 10&15; +-------+ | 10&15 | +-------+ | 10 | +-------+ mysql> select 5&~1; +------+ | 5&~1 | +------+ | 4 | +------+

    右移>>位運算 向右移動位數,多余的位數直接刪除

    mysql> select 15>>2; +-------+ | 15>>2 | +-------+ | 3 | +-------+ 1 row in set (0.00 sec)

    位運算 << 左移位運算 空缺處補0

    mysql> select 10<<3; +-------+ | 10<<3 | +-------+ | 80 | +-------+ 1 row in set (0.00 sec)

    連接查詢

    MySQL 的連接查詢,通常都是將來自兩個或多個表的行結合起來,基于這些表之間的共同字段,進行數據的拼接。首先,要確定一個主表作為結果集,然后將其他表的行有選擇 性的連接到選定的主表結果集上。使用較多的連接查詢包括:內連接、左連接和右連接。

    內連接

    mysql> select i.name,h.name from make i inner join info h on i.hobby=h.id; +----------+--------------+ | name | name | +----------+--------------+ | zhangsan | 大數據 | | lisi | 云計算 | | wangwu | 大數據 | | zhaoliu | 云計算 | | nilei | 大數據 | | malik | 云計算 | | oooo | 人工智能 | | ooooo | 人工智能 | +----------+--------------+ 8 rows in set (0.00 sec)

    左連接

    MySQL 除了內連接,還可以使用外連接。區別于 MySQL 外連接是將表分為基礎表和參考表,再依據基礎表返回滿足條件或不滿足條件的記錄。外連接按照連接時表的順序來分, 有左連接和右連接之分。

    左表連接 left mysql> select i.name,h.name from make i left join info h on i.hobby=h.id; +----------+--------------+ | name | name | +----------+--------------+ | lisi | 云計算 | | zhaoliu | 云計算 | | malik | 云計算 | | zhangsan | 大數據 | | wangwu | 大數據 | | nilei | 大數據 | | oooo | 人工智能 | | ooooo | 人工智能 | | aaa | NULL | | bbb | NULL | +----------+--------------+ 10 rows in set (0.00 sec)

    右表連接 right

    右連接也被稱為右外連接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 關鍵字來表示。右連接跟左連接正好相反,它是以右表為基礎表,用于接收右表中的所有行,并用這些記錄與左表中的行進行匹配。

    mysql> select i.name,h.name from make i right join info h on i.hobby=h.id; +----------+--------------+ | name | name | +----------+--------------+ | zhangsan | 大數據 | | lisi | 云計算 | | wangwu | 大數據 | | zhaoliu | 云計算 | | nilei | 大數據 | | malik | 云計算 | | oooo | 人工智能 | | ooooo | 人工智能 | | NULL | 區塊鏈 | +----------+--------------+ 9 rows in set (0.00 sec) 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

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

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