数据库高级查询
文章目錄
- 數(shù)據(jù)庫高級查詢
- 按關(guān)鍵字排序
- 對結(jié)果進(jìn)行分組
- 對字段進(jìn)行數(shù)字統(tǒng)計(jì)
- 限制結(jié)果條目
- 設(shè)置別名
- 通配符
- 子查詢
- EXIST關(guān)鍵字查詢
- 數(shù)據(jù)庫null的用法
- 正則表達(dá)式查詢表中信息
- “*”匹配前面字符的任意多次
- 算數(shù)運(yùn)算符
- 大于、大于等于、小于、小于等于運(yùn)算符
- **IS NULL、IS NOT NULL**
- **LEAST、GREATEST運(yùn)用**
- **IN、NOT IN**
- **LIKE、NOT LIKE**
- 邏輯運(yùn)算符
- 邏輯非
- 邏輯與
- 邏輯或
- 邏輯異或
- 位運(yùn)算符
- 連接查詢
數(shù)據(jù)庫高級查詢
對 MySQL 數(shù)據(jù)庫的查詢,除了基本的查詢外,有時(shí)候需要對查詢的結(jié)果集進(jìn)行處理。例如只取 10 條數(shù)據(jù)、對查詢結(jié)果進(jìn)行排序或分組等等,這些內(nèi)容就是接下來要講解的知識。
按關(guān)鍵字排序
order by 升序order by 字段 desc 降序使用 SELECT 語句可以將需要的數(shù)據(jù)從 MySQL 數(shù)據(jù)庫中查詢出來,如果對查詢的結(jié)果進(jìn)行排序
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 | +--------+-------+對結(jié)果進(jìn)行分組
group by 字段 可以按一個(gè)或多個(gè)字段對結(jié)果進(jìn)行分組處理。 GROUP BY 通常都是結(jié)合聚合函數(shù)一起使用的,常用的聚合函數(shù)包括 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分?jǐn)?shù)77的人數(shù)有2個(gè)對字段進(jìn)行數(shù)字統(tǒng)計(jì)
avg平均成績 count(字段) 計(jì)數(shù) sum(字段)求和 max (字段)最大值 min(字段) 最小值 mysql> select avg(score)from make; +------------+ | avg(score) | +------------+ | 78.700000 | +------------+ 1 row in set (0.00 sec)限制結(jié)果條目
在使用 MySQL SELECT 語句進(jìn)行查詢時(shí),結(jié)果集返回的是所有匹配的記錄。有時(shí)候僅需要返回第一行或者前幾行,這時(shí)候就需要用到 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)結(jié)合升序降序使用
IMIT 子句的使用也可以結(jié)合 ORDER BY:先進(jìn)行排序,然后再 LIMIT 限制固定的記錄。也就是說 LIMIT 是放在最后的,將處理好的結(jié)果集按要求選出幾行來
查看前三名 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 | +----+---------+-------+---------+設(shè)置別名
在 MySQL 查詢時(shí),當(dāng)表的名字比較長或者表內(nèi)某些字段比較長時(shí),為了方便書寫或者多次使用相同的表,可以給字段列或表設(shè)置別名。
SELECT 字段名 AS 別名 FROM 表名; 設(shè)置別名 mysql> select count(*) from make; +----------+ | count(*) | +----------+ | 7 | +----------+在使用 AS 后,可以用 alias_name 代替 table_name,其中 AS 語句是可選的。
mysql> select count(*) as 數(shù)量 from make; +--------+ | 數(shù)量 | +--------+ | 7 | +--------+通配符
%表示零個(gè)多個(gè)
_ 表示單個(gè)字符
舉例子:
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:子查詢也被稱作內(nèi)查詢或者嵌套查詢,是指在一個(gè)查詢語句里面還嵌套著另一個(gè)查詢語 句。
2:子查詢語句是先于主查詢語句被執(zhí)行的。
3:子查詢不僅可以在 SELECT 語句中使用,在 INERT、UPDATE、DELETE 中也同樣適用。
4:在嵌套的時(shí)候,子查詢內(nèi)部還可以再次嵌套新的子查詢,也就是說可以多層嵌套。
格式
<表達(dá)式> [NOT] IN <子查詢> 查看云計(jì)算興趣的人select name,hobby from make where hobby in (select id from info where name='云計(jì)算'); +---------+-------+ | name | hobby | +---------+-------+ | zhang | 1 | | lisi | 1 | | limei | 1 | | tanshan | 1 | +---------+-------+ 4 rows in set (0.00 sec) 方法二:除了以上所列舉的 IN 操作符,在 IN 前面還可以添加 NOT,其作用與 IN 相反,表示否定(即不在子查詢的結(jié)果集里面)。例如,執(zhí)行以下操作即可查詢用戶等級不小于 45 級的用戶。
mysql> insert into tmp select * from make where id not in (select id from info where address='shanghai');子查詢上也可以使用比較運(yùn)算符(=、<、>、>=、<=)
mysql> select name,hobby from make where hobby=(select id from info where name='云計(jì)算'); +---------+-------+ | name | hobby | +---------+-------+ | zhang | 1 | | lisi | 1 | | limei | 1 | | tanshan | 1 | +---------+-------+ 4 rows in set (0.00 sec)EXIST關(guān)鍵字查詢
EXIST 這個(gè)關(guān)鍵字在子查詢時(shí),主要用于判斷子查詢的結(jié)果集是否為空。如果不為空, 則返回 TRUE;反之,則返回 FALSE。
EXISTS 子查詢 if 判斷語句 》》后面如何成功前面執(zhí)行mysql> select name,score from make where exists (select id from info where name='大數(shù)據(jù)'); +---------+-------+ | name | score | +---------+-------+ | zhang | 84.10 | | lisi | 84.10 | | wangwu | 82.00 | | zhaoliu | 65.00 | | limei | 90.00 | | heiba | 82.00 | | tanshan | 87.00 | +---------+-------+數(shù)據(jù)庫null的用法
NULL值和空值的區(qū)別
1count不對null進(jìn)行計(jì)算
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()計(jì)算會(huì)對空值計(jì)算
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或者空白沒有儲(chǔ)存空間,空值是存在有儲(chǔ)存空間
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)正則表達(dá)式查詢表中信息
^匹配開始字符 p1/p2匹配p1或p2 [...]匹配字符集中的任意一個(gè)S $匹配結(jié)束字符 [^...]匹配不在中括號內(nèi)的任何 .匹配任意單個(gè)字符 *匹配任意個(gè)前面的字符 {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. 以特定字符串結(jié)尾的記錄
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)包含指定字符串的記錄
找出包含 ‘a(chǎn)n’的連續(xù)字符 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)匹配包含或者關(guān)系的記錄
player 表中查詢包含字符串 zh 或者 ni 的 name 字段并打印對應(yīng)的 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 表中查詢包含三個(gè)或者更多個(gè)連續(xù)的 o 的 name 字段并打印對應(yīng)的 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)查詢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 | +----+----------+-------+----------+-------+算數(shù)運(yùn)算符
| + | 加法 |
| - | 減法 |
| * | 乘法 |
| / | 除法 |
| % | 取余數(shù) |
舉例:
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 | 判斷一個(gè)值是否不為 NULL |
| > | 大于 | BETWEEN AND | 兩者之間 |
| < | 小于 | IN | 在集合中 |
| >= | 大于等于 | LIKE | 通配符匹配 |
| <= | 小于等于 | GREATEST | 兩個(gè)或多個(gè)參數(shù)時(shí)返回最大值 |
| !=或<> | 不等于 | LEAST | 兩個(gè)或多個(gè)參數(shù)時(shí)返回最小值 |
| IS NULL | 判斷一個(gè)值是否為 NULL | REGEXP | 正則表達(dá)式 |
舉例:
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)大于、大于等于、小于、小于等于運(yùn)算符
? 大于(>)運(yùn)算符用來判斷左側(cè)的操作數(shù)是否大于右側(cè)的操作數(shù),若大于返回 1,否則返回 0,同樣不能用于判斷 NULL
? 小于(<)運(yùn)算符用來判斷左側(cè)的操作數(shù)是否小于右側(cè)的操作數(shù),若小于返回 1,否則返回 0,同樣不能用于判斷 NULL
? 大于等于(>=)判斷左側(cè)的操作數(shù)是否大于等于右側(cè)的操作數(shù),若大于等于返回 1,否則返回 0,不能用于判斷 NULL
? 小于等于(<=)判斷左側(cè)的操作數(shù)是否小于等于右側(cè)的操作數(shù),若小于等于返回 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 判斷一個(gè)值是否為 NULL,如果為 NULL 返回 1,否則返回 0。
IS NOT NULL 判斷一個(gè)值是否不為 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 比較運(yùn)算通常用于判斷一個(gè)值是否落在某兩個(gè)值之間
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運(yùn)用
? LEAST:當(dāng)有兩個(gè)或者多個(gè)參數(shù)時(shí),返回其中的最小值。如果其中一個(gè)值為 NULL,則返回結(jié)果就為 NULL。
? GREATEST:當(dāng)有兩個(gè)或者多個(gè)參數(shù)時(shí),返回其中的最大值。如果其中一個(gè)值為 NULL, 則返回結(jié)果就為 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 判斷一個(gè)值是否在對應(yīng)的列表中,如果是返回 1,否則返回 0。
? NOT IN 判斷一個(gè)值是否不在對應(yīng)的列表中,如果不是返回 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 支持兩種通配符:’%’ 用于匹配任意數(shù)目的字符,而’_’只能匹配一個(gè)字符。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邏輯運(yùn)算符
邏輯運(yùn)算符又被稱為布爾運(yùn)算符,通常用來判斷表達(dá)式的真假,如果為真返回 1,否則返回 0,真和假也可以用 TRUE 和 FALSE 表示。MySQL 中支持使用的邏輯運(yùn)算符有四種, 具體如表 5-4 所示
| NOT 或 ! | 邏輯非 |
| AND 或 && | 邏輯與 |
| OR 或 || | 邏輯或 |
| XOR | 邏輯異或 |
邏輯非
邏輯運(yùn)算符中最簡單的運(yùn)算符就是邏輯非,邏輯非使用 NOT 或!表示。邏輯非將跟在它后面的邏輯測試取反,把真變?yōu)榧?#xff0c;把假變?yōu)檎妗H绻?NOT 后面的操作數(shù)為 0 時(shí),所得值為 1;如果操作數(shù)為非 0 時(shí),所得值為 0;如果操作數(shù)為 NULL 時(shí),所得值為 NULL。例如,對非 0 值和 0 值分別作邏輯非運(yùn)算,具體操作如下所示。
mysql> select !3,not 2,!0; +----+-------+----+ | !3 | not 2 | !0 | +----+-------+----+ | 0 | 0 | 1 | +----+-------+----+ 1 row in set (0.00 sec)邏輯與
邏輯與通常用于判斷兩個(gè)值或多個(gè)值的有效性,如果所有值都是真返回 1,否則返回 0。邏輯與使用 AND 或者&&表示。例如,對非 0 值、0 值和 NULL 值分別作邏輯與運(yùn)算,具體操作如下所示。
邏輯 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)邏輯或
邏輯或表示包含的操作數(shù),任意一個(gè)為非零值并且不是 NULL 值時(shí),返回 1,否則返回0。邏輯或通常使用 OR 或者||來表示。例如,對非 0 值、0 值和 NULL 值分別作邏輯或運(yùn)算, 具體操作如下所示。
邏輯或 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 | +--------+--------+-----------+-----------+邏輯異或
兩個(gè)非 NULL 值的操作數(shù),如果兩者都是 0 或者都是非 0,則返回 0;如果一個(gè)為 0, 另一個(gè)為非 0,則返回結(jié)果為 1;當(dāng)任意一個(gè)值為 NULL 時(shí),返回值為 NULL。例如,對非0 值、0 值和 NULL 值分別作邏輯異或運(yùn)算,具體操作如下所示。
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)位運(yùn)算符
位運(yùn)算符實(shí)際上是對二進(jìn)制數(shù)進(jìn)行計(jì)算的運(yùn)算符。MySQL 內(nèi)位運(yùn)算會(huì)先將操作數(shù)變成二進(jìn)制格式,然后進(jìn)行位運(yùn)算,最后在將計(jì)算結(jié)果從二進(jìn)制變回到十進(jìn)制格式,方便用戶查看
? 按位與運(yùn)算(&),是對應(yīng)的二進(jìn)制位都是 1 的,它們的運(yùn)算結(jié)果為 1,否則為 0,所以 10 & 15 的結(jié)果為 10。
? 按位或運(yùn)算(|),是對應(yīng)的二進(jìn)制位有一個(gè)或兩個(gè)為 1 的,運(yùn)算結(jié)果為 1,否則為 0, 所以 10 | 15 的結(jié)果為 15。
? 按位異或運(yùn)算(^),是對應(yīng)的二進(jìn)制位不相同時(shí),運(yùn)算結(jié)果 1,否則為 0,所以 10 ^ 15
的結(jié)果為 5。
? 按位取反(~),是對應(yīng)的二進(jìn)制數(shù)逐位反轉(zhuǎn),即 1 取反后變?yōu)?0, 0 取反后變?yōu)?1。數(shù)字 1 的二進(jìn)制是 0001,取反后變?yōu)?1110, 數(shù)字 5 的二進(jìn)制是 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與運(yùn)算 1010 10 1111 15 1010 10位運(yùn)算符 ~取反 ^按位取反
mysql> select 10&15; +-------+ | 10&15 | +-------+ | 10 | +-------+ mysql> select 5&~1; +------+ | 5&~1 | +------+ | 4 | +------+右移>>位運(yùn)算 向右移動(dòng)位數(shù),多余的位數(shù)直接刪除
mysql> select 15>>2; +-------+ | 15>>2 | +-------+ | 3 | +-------+ 1 row in set (0.00 sec)位運(yùn)算 << 左移位運(yùn)算 空缺處補(bǔ)0
mysql> select 10<<3; +-------+ | 10<<3 | +-------+ | 80 | +-------+ 1 row in set (0.00 sec)連接查詢
MySQL 的連接查詢,通常都是將來自兩個(gè)或多個(gè)表的行結(jié)合起來,基于這些表之間的共同字段,進(jìn)行數(shù)據(jù)的拼接。首先,要確定一個(gè)主表作為結(jié)果集,然后將其他表的行有選擇 性的連接到選定的主表結(jié)果集上。使用較多的連接查詢包括:內(nèi)連接、左連接和右連接。
內(nèi)連接
mysql> select i.name,h.name from make i inner join info h on i.hobby=h.id; +----------+--------------+ | name | name | +----------+--------------+ | zhangsan | 大數(shù)據(jù) | | lisi | 云計(jì)算 | | wangwu | 大數(shù)據(jù) | | zhaoliu | 云計(jì)算 | | nilei | 大數(shù)據(jù) | | malik | 云計(jì)算 | | oooo | 人工智能 | | ooooo | 人工智能 | +----------+--------------+ 8 rows in set (0.00 sec)左連接
MySQL 除了內(nèi)連接,還可以使用外連接。區(qū)別于 MySQL 外連接是將表分為基礎(chǔ)表和參考表,再依據(jù)基礎(chǔ)表返回滿足條件或不滿足條件的記錄。外連接按照連接時(shí)表的順序來分, 有左連接和右連接之分。
左表連接 left mysql> select i.name,h.name from make i left join info h on i.hobby=h.id; +----------+--------------+ | name | name | +----------+--------------+ | lisi | 云計(jì)算 | | zhaoliu | 云計(jì)算 | | malik | 云計(jì)算 | | zhangsan | 大數(shù)據(jù) | | wangwu | 大數(shù)據(jù) | | nilei | 大數(shù)據(jù) | | oooo | 人工智能 | | ooooo | 人工智能 | | aaa | NULL | | bbb | NULL | +----------+--------------+ 10 rows in set (0.00 sec)右表連接 right
右連接也被稱為右外連接,在 FROM 子句中使用 RIGHT JOIN 或者 RIGHT OUTER JOIN 關(guān)鍵字來表示。右連接跟左連接正好相反,它是以右表為基礎(chǔ)表,用于接收右表中的所有行,并用這些記錄與左表中的行進(jìn)行匹配。
mysql> select i.name,h.name from make i right join info h on i.hobby=h.id; +----------+--------------+ | name | name | +----------+--------------+ | zhangsan | 大數(shù)據(jù) | | lisi | 云計(jì)算 | | wangwu | 大數(shù)據(jù) | | zhaoliu | 云計(jì)算 | | nilei | 大數(shù)據(jù) | | malik | 云計(jì)算 | | oooo | 人工智能 | | ooooo | 人工智能 | | NULL | 區(qū)塊鏈 | +----------+--------------+ 9 rows in set (0.00 sec) 超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
- 上一篇: 内存VS显存:你了解吗?
- 下一篇: Mysql数据库函数(数字,字符串,日期