主頁 >  其他 > MySQL資料庫高級查詢陳述句 ——————進階查詢

MySQL資料庫高級查詢陳述句 ——————進階查詢

2020-10-18 07:23:21 其他

MySQL進階查詢

按關鍵字排序

使用ORDERBY陳述句來實作排序
排序可針對一個或多個欄位
ASC:升序,默認排序方式
DESC:降序
ORDER BY的語法結構
SELECT column1,column2,…FROM table_name ORDER BY column1,column2,…ASC|DESC

實驗舉例

mysql> use school;
mysql> create table info ( id int(4) not null primary key, name varchar(10) not null, score decimal (5,2),haddy int(4) not null);
mysql> insert into info (name,scrore,habby) values ('zhaoliu',70,2);  //插入資料省略部分內容
mysql> select count(addr) from info;             //添加地址選項
mysql> select * from info;
+----+----------+--------+-------+------+
| id | name     | scrore | habby | addr |
+----+----------+--------+-------+------+
|  1 | zhangsan |  88.00 |     1 | NULL |
|  2 | lisi     |  90.00 |     1 |      |
|  3 | wangwu   |  95.00 |     2 | nj   |
|  4 | zhaoliu  |  70.00 |     2 | NULL |
|  5 | tianqi   |  98.00 |     2 | nj   |
|  6 | wangba   |  80.00 |     1 | NULL |
|  7 | zhujiu   |  89.00 |     1 | nj   |
|  8 | tangsi   |  86.00 |     1 | NULL |
+----+----------+--------+-------+------+
8 rows in set (0.00 sec)
mysql> alter table info change habby hoddy int(11);        //更改選項讓habby變成hoddy
mysql> alter table info change scrore score int(11);
mysql> select * from info order by score;          //查詢的時候按成績進行查詢默認升序
+----+----------+-------+-------+------+
| id | name     | score | hoddy | addr |
+----+----------+-------+-------+------+
|  4 | zhaoliu  | 70.00 |     2 | NULL |
|  6 | wangba   | 80.00 |     1 | NULL |
|  8 | tangsi   | 86.00 |     1 | NULL |
|  1 | zhangsan | 88.00 |     1 | NULL |
|  7 | zhujiu   | 89.00 |     1 | nj   |
|  2 | lisi     | 90.00 |     1 |      |
|  3 | wangwu   | 95.00 |     2 | nj   |
|  5 | tianqi   | 98.00 |     2 | nj   |
+----+----------+-------+-------+------+
8 rows in set (0.00 sec)
mysql> select * from info order by score;          //查詢的時候按成績進行降序查詢
mysql> select id,hoddy from info where 1=1 order by hoddy desc,id desc;    //指定多欄位進行查詢優先查考先寫的欄位
+----+-------+
| id | hoddy |
+----+-------+
|  5 |     2 |
|  4 |     2 |
|  3 |     2 |
|  8 |     1 |
|  7 |     1 |
|  6 |     1 |
|  2 |     1 |
|  1 |     1 |
+----+-------+
8 rows in set (0.00 sec)
mysql> select id,hoddy from info where 1=1 order by score;
+----+-------+
| id | hoddy |
+----+-------+
|  4 |     2 |
|  6 |     1 |
|  8 |     1 |
|  1 |     1 |
|  7 |     1 |
|  2 |     1 |
|  3 |     2 |
|  5 |     2 |
+----+-------+
8 rows in set (0.01 sec)

對結果進行分組

使用GROUP BY陳述句來實作分組
通常結合聚合函式一起使用
可以按一個或多個欄位對結果進行分組
GROUP BY的語法結構
select count(選項),選項 from 表名 where 條件 group by 選項

實驗

mysql> select count(name),hoddy from info group by hoddy;     //按興趣進行分組 并統計每個組的個數
+-------------+-------+
| count(name) | hoddy |
+-------------+-------+
|           5 |     1 |
|           3 |     2 |
+-------------+-------+
2 rows in set (0.00 sec)
mysql> update info set hoddy=3 where name='zhangsan';        //將張三的興趣改成3

限制結果條件

只回傳select查詢結果的第一行或者前幾行
使用limit陳述句限制條目
limit語法結構
select * from 表名 limit 選項 【注意若limit后面是 3,5表示的是從第四行開始向后的五行 即從索引位置開始的向下的幾行】

mysql> select * from info limit 3;
+----+----------+-------+-------+------+
| id | name     | score | hoddy | addr |
+----+----------+-------+-------+------+
|  1 | zhangsan | 88.00 |     3 | NULL |
|  2 | lisi     | 90.00 |     1 |      |
|  3 | wangwu   | 95.00 |     2 | nj   |
+----+----------+-------+-------+------+
3 rows in set (0.00 sec)
mysql> select * from info limit 2,5;
+----+---------+-------+-------+------+
| id | name    | score | hoddy | addr |
+----+---------+-------+-------+------+
|  3 | wangwu  | 95.00 |     2 | nj   |
|  4 | zhaoliu | 70.00 |     2 | NULL |
|  5 | tianqi  | 98.00 |     2 | nj   |
|  6 | wangba  | 80.00 |     1 | NULL |
|  7 | zhujiu  | 89.00 |     1 | nj   |
+----+---------+-------+-------+------+
5 rows in set (0.00 sec)

設定別名

使用的是as陳述句并且關鍵字as可以省略
可以針對表和欄位設定別名
語法結構
select 選項 as 別名 from 表名;

mysql> select name as 姓名 from info;
+----------+
| 姓名     |
+----------+
| zhangsan |
| lisi     |
| wangwu   |
| zhaoliu  |
| tianqi   |
| wangba   |
| zhujiu   |
| tangsi   |
+----------+
8 rows in set (0.00 sec)
mysql> select a.name 姓名,a.score as 成績 from info as a;
+----------+--------+
| 姓名     | 成績   |
+----------+--------+
| zhangsan |  88.00 |
| lisi     |  90.00 |
| wangwu   |  95.00 |
| zhaoliu  |  70.00 |
| tianqi   |  98.00 |
| wangba   |  80.00 |
| zhujiu   |  89.00 |
| tangsi   |  86.00 |
+----------+--------+
8 rows in set (0.00 sec)

as也可以做連接陳述句
用法
create table 要連接的表名 as select * from 表名

mysql> create table lapp as select * from info where score >= 90;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from lapp;
+----+--------+-------+-------+------+
| id | name   | score | hoddy | addr |
+----+--------+-------+-------+------+
|  2 | lisi   | 90.00 |     1 |      |
|  3 | wangwu | 95.00 |     2 | nj   |
|  5 | tianqi | 98.00 |     2 | nj   |
+----+--------+-------+-------+------+
3 rows in set (0.00 sec)
mysql> desc lapp;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(4)       | NO   |     | 0       |       |
| name  | varchar(10)  | NO   |     | NULL    |       |
| score | decimal(5,2) | YES  |     | NULL    |       |
| hoddy | int(11)      | YES  |     | NULL    |       |
| addr  | varchar(50)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

注意的是新表的資料型別一樣 但是約束條件沒有了 如主鍵和和擴展屬性沒有了

通配符

用于替換字串中的部分字符
關鍵字like經常和as 一起使用 并協同where完成查詢(常用于模糊查詢)
通配符
%表示0個1個或多個
_(下劃線)表示單個字符
語法結構
select * from 表名 where 選項 like 條件

mysql> select * from info where name like 'z%';
+----+----------+-------+-------+------+
| id | name     | score | hoddy | addr |
+----+----------+-------+-------+------+
|  1 | zhangsan | 88.00 |     3 | NULL |
|  4 | zhaoliu  | 70.00 |     2 | NULL |
|  7 | zhujiu   | 89.00 |     1 | nj   |
+----+----------+-------+-------+------+
3 rows in set (0.00 sec)
mysql> select * from info where name like 'l_s_';
+----+------+-------+-------+------+
| id | name | score | hoddy | addr |
+----+------+-------+-------+------+
|  2 | lisi | 90.00 |     1 |      |
+----+------+-------+-------+------+
1 row in set (0.01 sec)

子查詢陳述句

也稱內查詢或嵌套查詢 多層查詢一般從內往外讀
子查詢先于主查詢被執行其結果做外層查詢的條件
IN陳述句是用來 判斷某個值是否在給定的結果集中

mysql> create table tmp (id int(4));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into tmp values (1),(3),(5),(7);
mysql> select * from info where id in(select id from tmp);
+----+----------+-------+-------+------+
| id | name     | score | hoddy | addr |
+----+----------+-------+-------+------+
|  1 | zhangsan | 88.00 |     3 | NULL |
|  3 | wangwu   | 95.00 |     2 | nj   |
|  5 | tianqi   | 98.00 |     2 | nj   |
|  7 | zhujiu   | 89.00 |     1 | nj   |
+----+----------+-------+-------+------+
4 rows in set (0.01 sec)

視圖:

資料庫中的虛擬表這張表中不包含任何資料,只是做了資料映射
關鍵字 view

mysql> show table status;
mysql> create view v_score as select * from info where score >=90;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from v_score;
+----+--------+-------+-------+------+
| id | name   | score | hoddy | addr |
+----+--------+-------+-------+------+
|  2 | lisi   | 90.00 |     1 |      |
|  3 | wangwu | 95.00 |     2 | nj   |
|  5 | tianqi | 98.00 |     2 | nj   |
+----+--------+-------+-------+------+
3 rows in set (0.00 sec)

常用子查詢的用法

mysql> select count(*) as number from info where exists (select id from info where name='lisi');
+--------+
| number |
+--------+
|      8 |
+--------+
1 row in set (0.00 sec)

mysql> select count(*) as number from info where exists (select id from info where name='lisigg');  ##判斷結果必須要符合外層才能執行
+--------+
| number |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)
mysql> mysql> update info set score=score-7 where id in(select a.id from(select id from info where hoddy >= 3) a);

NULL值

表示缺失的值
與數字0或者空白(spaces)是不同的
使用IS NULL或IS NOT NULL進行判斷
NULL值和空值的區別
空值長度為0,不占空間;NULL值的長度為NULL,占用空間
IS NULL無法判斷空值
空值使用“="或者“<>"來處理
OUNTO計算時,NULL會忽略,空值會加入計算

mysql> update info set addr='' where name='lisi';
mysql> SELECT * FROM info;
+----+----------+-------+-------+------+
| id | name     | score | hoddy | addr |
+----+----------+-------+-------+------+
|  1 | zhangsan | 81.00 |     3 | NULL |
|  2 | lisi     | 90.00 |     1 |      |
|  3 | wangwu   | 95.00 |     2 | nj   |
|  4 | zhaoliu  | 70.00 |     2 | NULL |
|  5 | tianqi   | 98.00 |     2 | nj   |
|  6 | wangba   | 80.00 |     1 | NULL |
|  7 | zhujiu   | 89.00 |     1 | nj   |
|  8 | tangsi   | 86.00 |     1 | NULL |
+----+----------+-------+-------+------+
8 rows in set (0.00 sec)
mysql> select * from info where addr is not null;
+----+--------+-------+-------+------+
| id | name   | score | hoddy | addr |
+----+--------+-------+-------+------+
|  2 | lisi   | 90.00 |     1 |      |
|  3 | wangwu | 95.00 |     2 | nj   |
|  5 | tianqi | 98.00 |     2 | nj   |
|  7 | zhujiu | 89.00 |     1 | nj   |
+----+--------+-------+-------+------+
4 rows in set (0.00 sec)
mysql> select * from info where addr is null;
+----+----------+-------+-------+------+
| id | name     | score | hoddy | addr |
+----+----------+-------+-------+------+
|  1 | zhangsan | 81.00 |     3 | NULL |
|  4 | zhaoliu  | 70.00 |     2 | NULL |
|  6 | wangba   | 80.00 |     1 | NULL |
|  8 | tangsi   | 86.00 |     1 | NULL |
+----+----------+-------+-------+------+
4 rows in set (0.00 sec)
mysql> select count(addr) from info;              ##統計地址為not null的數量
+-------------+
| count(addr) |
+-------------+
|           4 |
+-------------+
1 row in set (0.00 sec)
mysql> update info set addr='' where name='wangba';       ##將王八的地址變成空值
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select count(addr) from info;                   ##說明了沒有東西會被加入到統計
+-------------+
| count(addr) |
+-------------+
|           5 |
+-------------+
1 row in set (0.00 sec)

正則運算式

根據指定的匹配模式匹配記錄中符合要求的特殊字符
使用REGEXP關鍵字指定匹配模式
常用匹配模式
p1lp2 匹配p1或p2
^ 匹配開始字符
[…] 匹配字符集中的任意一個字符
$ 匹配結束字符
. 匹配任意單個字符
[^…] 匹配不在中括號內的任何字符 就是不包含

  • 匹配任意個前面的字符
    {n} 匹配前面的字串n次
    + 匹配前面字符至少1次
    {n,m} 匹配前面的字串至少n次,至多m次
mysql> select * from info where name regexp '[^xy]';
+----+----------+-------+-------+------+
| id | name     | score | hoddy | addr |
+----+----------+-------+-------+------+
|  1 | zhangsan | 81.00 |     3 | NULL |
|  2 | lisi     | 90.00 |     1 |      |
|  3 | wangwu   | 95.00 |     2 | nj   |
|  4 | zhaoliu  | 70.00 |     2 | NULL |
|  5 | tianqi   | 98.00 |     2 | nj   |
|  6 | wangba   | 80.00 |     1 |      |
|  7 | zhujiu   | 89.00 |     1 | nj   |
|  8 | tangsi   | 86.00 |     1 | NULL |
+----+----------+-------+-------+------+
8 rows in set (0.00 sec)
mysql> select id,name,score from info where name regexp '^z';
+----+----------+-------+
| id | name     | score |
+----+----------+-------+
|  1 | zhangsan | 81.00 |
|  4 | zhaoliu  | 70.00 |
|  7 | zhujiu   | 89.00 |
+----+----------+-------+
mysql> select * from info where name regexp 'li';
+----+---------+-------+-------+------+
| id | name    | score | hoddy | addr |
+----+---------+-------+-------+------+
|  2 | lisi    | 90.00 |     1 |      |
|  4 | zhaoliu | 70.00 |     2 | NULL |
+----+---------+-------+-------+------+
2 rows in set (0.00 sec)

運算子

mysql的運算子用于對記錄中的欄位值進行運算 MySQL的運算共有四種,分別是:算術運算子,比較運算子,邏輯運算子和位運算子

算術運算子

在這里插入圖片描述

mysql> select 1+2 as jia,2-1 as jian,2*3 cheng,4/2 as chu, 7%2 as 取余;
+-----+------+-------+--------+--------+
| jia | jian | cheng | chu    | 取余   |
+-----+------+-------+--------+--------+
|   3 |    1 |     6 | 2.0000 |      1 |
+-----+------+-------+--------+--------+
1 row in set (0.01 sec)
mysql> create table mas as select 2+1,2-1,7/2,7%2;
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

比較運算子

比較運算子是查詢資料記錄時經常使用的一類運算子,通過使用比較運算子可以判斷出―表
中有哪些記錄是符合條件的,如果比較的結果為真則回傳1,如果為假則回傳O,比較的結
果如果不確定則回傳NULL,其中字串在進行比較的時候默認是不區分大小寫的,如果要
區分大小寫可以通過binary 關鍵字來實作,常用的比較運算子如表5-3所示,
在這里插入圖片描述
大于(>)運算子用來判斷左側的運算元是否大于右側的運算元,若大于回傳 1,否則回傳 0,同樣不能用于判斷 NULL,
小于(<)運算子用來判斷左側的運算元是否小于右側的運算元,若小于回傳 1,否則回傳 0,同樣不能用于判斷 NULL,
大于等于(>=)判斷左側的運算元是否大于等于右側的運算元,若大于等于回傳 1,否則回傳 0,不能用于判斷 NULL,
小于等于(<=)判斷左側的運算元是否小于等于右側的運算元,若小于等于回傳 1,否則回傳 0,不能用于判斷 NULL,

mysql> select 5>4,'a'>'b',2>=3,(2+3)>=(1+2),4.4<3,1<2,'x'<='y',5<=5.5,'u'>=NULL;
+-----+---------+------+--------------+-------+-----+----------+--------+-----------+
| 5>4 | 'a'>'b' | 2>=3 | (2+3)>=(1+2) | 4.4<3 | 1<2 | 'x'<='y' | 5<=5.5 | 'u'>=NULL |
+-----+---------+------+--------------+-------+-----+----------+--------+-----------+
|   1 |       0 |    0 |            1 |     0 |   1 |        1 |      1 |      NULL |
+-----+---------+------+--------------+-------+-----+----------+--------+-----------+
1 row in set (0.00 sec)

IS NULL 判斷一個值是否為 NULL,如果為 NULL 回傳 1,否則回傳 0,
IS NOT NULL 判斷一個值是否不為 NULL,如果不為 NULL 回傳 1,否則回傳 0,例如,關于數字、字符和 NULL 值的運用,

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 |
+-----------+-----------------+--------------+
1 row in set (0.00 sec)

IS NULL 和 IS NOT NULL 一個判斷為空,另一個判斷不為空,只是有無 NOT 這個關鍵字的區別,同時回傳值不同,

BETWEEN AND
BETWEEN AND 比較運算通常用于判斷一個值是否落在某兩個值之間,例如,判斷某數字是否在另外兩個數字之間,
也可以判斷某英文字母是否在另外兩個字母之間,具體操作 如下所示,

mysql> select 4 BETWEEN 2 AND 6,5 BETWEEN 6 AND 8,'c' BETWEEN 'a' AND 'f';
+-------------------+-------------------+-------------------------+
| 4 BETWEEN 2 AND 6 | 5 BETWEEN 6 AND 8 | 'c' BETWEEN 'a' AND 'f' |
+-------------------+-------------------+-------------------------+
|                 1 |                 0 |                       1 |
+-------------------+-------------------+-------------------------+
1 row in set (0.00 sec)

LEAST、GREATEST
LEAST:當有兩個或者多個引數時,回傳其中的最小值,如果其中一個值為 NULL,則回傳結果就為 NULL,
GREATEST:當有兩個或者多個引數時,回傳其中的最大值,如果其中一個值為 NULL, 則回傳結果就為 NULL,

mysql> SELECT least(1,2,3),least('a','b','c'),greatest(1,2,3),greatest('a','b','c');
+--------------+--------------------+-----------------+-----------------------+
| least(1,2,3) | least('a','b','c') | greatest(1,2,3) | greatest('a','b','c') |
+--------------+--------------------+-----------------+-----------------------+
|            1 | a                  |               3 | c                     |
+--------------+--------------------+-----------------+-----------------------+
1 row in set (0.00 sec)

從以上結果可以看出,LEAST 比較的引數為數字時,回傳的是其中最小的值;當比較的引數為字串時,
回傳字母表中順序最靠前的字符,GREATEST 比較的引數為數字時, 回傳的是其中最大的值;
當比較的引數為字串時,回傳字母表中順序最靠后的字符,

IN、NOT IN
IN 判斷一個值是否在對應的串列中,如果是回傳 1,否則回傳 0,
NOT IN 判斷一個值是否不在對應的串列中,如果不是回傳 1,否則回傳 0,
例如,判斷某數字是否在一組數字中,也可判斷某字符是否在一組字符中,具體操作如 下所示,

mysql> SELECT 2 in (1,2,3,4,5),'c' not in ('a','b','c');
+------------------+--------------------------+
| 2 in (1,2,3,4,5) | 'c' not in ('a','b','c') |
+------------------+--------------------------+
|                1 |                        0 |
+------------------+--------------------------+
1 row in set (0.00 sec)

從以上結果可以看出,IN 和 NOT IN 的回傳值正好相反,

邏輯運算子

邏輯運算子又被稱為布爾運算子,通常用來判斷運算式的真偽,如果為真回傳 1,否則回傳 0,
真和假也可以用 TRUE 和 FALSE 表示,MySQL 中支持使用的邏輯運算子有四種,
運算子 描述
NOT 或 ! 邏輯非
AND 或 && 邏輯與
OR 或 || 邏輯或
XOR 邏輯異或
(1)邏輯非
邏輯運算子中最簡單的運算子就是邏輯非,邏輯非使用 NOT 或!表示,邏輯非將跟在它后面的邏輯測驗取反,
把真變為假,把假變為真,如果 NOT 后面的運算元為 0 時,所得值為 1;如果運算元為非 0 時,所得值為 0;
如果運算元為 NULL 時,所得值為 NULL,
(2)邏輯與
邏輯與通常用于判斷兩個值或多個值的有效性,如果所有值都是真回傳 1,否則回傳 0
邏輯與使用 AND 或者&&表示,例如,對非 0 值、0 值和 NULL 值分別作邏輯與運算,

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

(3)邏輯或
邏輯或表示包含的運算元,任意一個為非零值并且不是 NULL 值時,回傳 1,否則回傳0,
邏輯或通常使用 OR 或者||來表示,例如,對非 0 值、0 值和 NULL 值分別作邏輯或運算

mysql> select 2 or 3, 2 or 0;
+--------+--------+
| 2 or 3 | 2 or 0 |
+--------+--------+
|      1 |      1 |
+--------+--------+
1 row in set (0.00 sec)
mysql> select 2 or 3,2 or 0;
+--------+--------+
| 2 or 3 | 2 or 0 |
+--------+--------+
|      1 |      1 |
+--------+--------+
1 row in set (0.01 sec)
mysql> select 2 or 3,'a' || 0;
+--------+----------+
| 2 or 3 | 'a' || 0 |
+--------+----------+
|      1 | a0       |
+--------+----------+
1 row in set (0.06 sec)
mysql> select null or 1;
+-----------+
| null or 1 |
+-----------+
|         1 |
+-----------+
1 row in set (0.00 sec)
mysql> select null or 0;
+-----------+
| null or 0 |
+-----------+
|      NULL |
+-----------+
1 row in set (0.00 sec)

自由理解 :::: 對于與運算和或運算 計算機都是先進行前面的第一運算式 若是前面的運算式成立就不會再進行后面的運算了例如 1 & null 那么結果必定是1 因為前面的運算式1回傳值正確的下面的null就不在進行 在例如null or 1 就認為null 是不成立的結果變是1 在例如0 or null 因為0是空值就執行了null 結果也就是null
另外發現0和null做與運算的時候結果是0理解就是在與運算的時候0是老大 而或運算時1是老大 (null是像常客人一樣 在主人就肯定是主人大咯)
(4)邏輯異或
兩個非 NULL 值的運算元,如果兩者都是 0 或者都是非 0,則回傳 0;如果一個為 0, 另一個為非 0,則回傳結果為 1;
當任意一個值為 NULL 時,回傳值為 NULL,例如,對非0 值、0 值和 NULL 值分別作邏輯異或運算

簡單的鏈接異或 運算的時候僅僅是和或一個不同的就是 1 XOR 1 結果是0
簡單的記憶表:
在這里插入圖片描述

位運算子

位運算子實際上是對二進制數進行計算的運算子,MySQL 內位運算會先將運算元變成二進制格式,然后進行位運算,最后在將計算結果從二進制變回到十進制格式,方便用戶查看,MySQL 支持 6 種位運算子
運算子 描述
在這里插入圖片描述

mysql> select 10 & 15,10 | 15,10 ^ 15,5&~1,15 << 2,15>>2,10<<2,1<<2;
+---------+---------+---------+------+---------+-------+-------+------+
| 10 & 15 | 10 | 15 | 10 ^ 15 | 5&~1 | 15 << 2 | 15>>2 | 10<<2 | 1<<2 |
+---------+---------+---------+------+---------+-------+-------+------+
|      10 |      15 |       5 |    4 |      60 |     3 |    40 |    4 |
+---------+---------+---------+------+---------+-------+-------+------+
1 row in set (0.00 sec)

mysql邏輯運算的優先級

在默認情況下是從左往右依次執行 優先級數值越小越優先 如下圖!優先級最高:=優先級是最低,
在這里插入圖片描述

mysql連接查詢

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

1、內連接
MySQL 中的內連接就是兩張或多張表中同時符合某種條件的資料記錄的組合,通常在FROM 子句中使用關鍵字 INNER JOIN 來連接多張表,
并使用 ON 子句設定連接條件,內連接的語法格式如下,
SELECT 選項(s) FROM 表1 INNER JOIN 表2 ON 表1.column_name = 表2.column_name;

mysql> select info.id,info.name from info inner join lapp on info.id=lapp.id;
+----+--------+
| id | name   |
+----+--------+
|  2 | lisi   |
|  3 | wangwu |
|  5 | tianqi |
+----+--------+
3 rows in set (0.00 sec)

2、左連接 和內連接就inner 和left這個區別
MySQL 除了內連接,還可以使用外連接,區別于 MySQL 外連接是將表分為基礎表和參考表,再依據基礎表回傳滿足條件或不滿足條件的記錄,外連接按照連接時表的順序來分, 有左連接和右連接之分,
左連接也可以被稱為左外連接,在 FROM 子句中使用 LEFT JOIN 或者 LEFT OUTER JOIN 關鍵字來表示,左連接以左側表為基礎表,接收左表的所有行,
并用這些行與右側參考表中的記錄進行匹配,也就是說匹配左表中的所有行以及右表中符合條件的行,

mysql> create table Hob (id int(5) not null primary key auto_increment,hob_name varchar(10) not null);
Query OK, 0 rows affected (0.06 sec)
mysql> insert into Hob (hob_name) values ('云計算'),('大資料'),('人工智能');
mysql> select info.id,info.name,Hob.hob_name from info left join Hob on info.hoddy=Hob.id;
+----+----------+--------------+
| id | name     | hob_name     |
+----+----------+--------------+
|  2 | lisi     | 云計算       |
|  6 | wangba   | 云計算       |
|  7 | zhujiu   | 云計算       |
|  8 | tangsi   | 云計算       |
|  3 | wangwu   | 大資料       |
|  4 | zhaoliu  | 大資料       |
|  5 | tianqi   | 大資料       |
|  1 | zhangsan | 人工智能     |
+----+----------+--------------+
8 rows in set (0.01 sec)

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

mysql> select info.id,info.name,Hob.hob_name from Hob right join info on info.hoddy=Hob.id;
+----+----------+--------------+
| id | name     | hob_name     |
+----+----------+--------------+
|  2 | lisi     | 云計算       |
|  6 | wangba   | 云計算       |
|  7 | zhujiu   | 云計算       |
|  8 | tangsi   | 云計算       |
|  3 | wangwu   | 大資料       |
|  4 | zhaoliu  | 大資料       |
|  5 | tianqi   | 大資料       |
|  1 | zhangsan | 人工智能     |
+----+----------+--------------+
8 rows in set (0.00 sec)

參考理解:無論左右還是內連接 都是一個是主表如info 另一個是從表如Hob這一點一定要理解;

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/177593.html

標籤:其他

上一篇:Mybatis關聯映射和逆向工程

下一篇:SQL相關指令整理

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more