Mysql經常使用查詢

 

IN/NOT IN操做符:查詢知足(不知足)指定範圍內的條件的記錄。php

s_id爲101和102的記錄:html

MYSQL> SELECT s_id, s_name FROM fruits WHERE s_id IN (101,102);

s_id不等於101和102的記錄:mysql

MYSQL> SELECT s_id, s_name FROM fruits WHERE s_id NOT IN (101,102);

BETWEEN AND/NOT BETWEEN AND查詢: 查詢指定範圍內(外)的值(包括兩個端點值),參數:範圍的開始值和結束值。正則表達式

查詢f_price在2~10之間的記錄:sql

MYSQL> SELECT f_name, f_price FROM fruits WHERE f_price BETWEEN 2 AND 10;

LIKE操做符: 模糊查詢,「%」匹配任意長度的字符,「_」匹配任意一個字符。shell

查詢以b開頭的記錄:bash

MYSQL> SELECT f_name FROM fruits WHERE f_name LIKE 'b%';

查詢匹配ball的記錄:markdown

MYSQL> SELECT f_name FROM fruits WHERE f_name LIKE 'bal_';

NULL值查詢: 若是某個字段設置爲NULL(NULL不等於0,也不等於空字符串),則可以使用IS NULL查詢:函數

查詢f_name字段爲NULL的記錄:post

MYSQL> SELECT f_name FROM fruits WHERE f_name IS NULL;

ORDER BY DESC/ASC: 降序/升序排序

MYSQL> SELECT f_name FROM fruits ORDER BY f_name DESC;

GROUP BY: 對數據按照某個字段或多個字段進行分組,和集合函數一塊兒使用,MAX(),MIN(),COUNT(),SUM(),AVG()(以分組後的每一組爲單位使用上述函數)

GROUP BY 字段 HAVING 條件表達式;

根據s_id對記錄進行分組:

MYSQL> SELECT s_id, COUNT(*) AS Total FROM fruits GROUP BY s_id;

GROUP_COUNT: 顯示每一個分組中的字段值

MYSQL> SELECT s_id, GROUP_COUNT(f_name) AS names FROM fruits GROUP BY s_id; # 顯示每一個分組中的全部f_name字段。

HAVING 過濾分組

MYSQL> SELECT s_id, s_name FROM friuts GROUP BY s_id HAVING COUNT(f_name) > 1; # 顯示f_name數量大於1的分組信息。

WITH ROLLUP: 顯示分組後數據的全部記錄

MYSQL> SELECT s_id, COUNT(*) FROM fruits GROUP BY s_id WITH ROLLUP;

多字段分組:

MYSQL> SELECT * FROM fruits GROUP BY s_id, f_name; #首先根據s_id進行分組,再對每一個分組裏根據f_name進行分組。

LIMIT 限制查詢結果:

LIMIT 位置偏移量(從哪一行開始), 行數
 MYSQL> SELECT * FROM fruits LIMIT 4; # 第一行爲0,默認從第一行開始

內鏈接查詢(INNER JOIN):

MYSQL> SELECT t_1.name, s_name FROM fruits, t_1 WHERE fruits.s_id = t_1.s_id; MYSQL> SELECT t_1.name, s_name FROM fruits INNER JOIN t_1 ON fruits.s_id = t_1.s_id;

上述兩個sql語句結果一致。

注:若是一個鏈接查詢中,涉及到的連個表是同一個表,這種查詢成爲自鏈接查詢。

MYSQL> SELECT f1.f_name, f1.s_id FROM fruits AS f1, fruits AS f2 WHERE f1.s_id = f2.s_id;

左外鏈接查詢(LEFT JOIN): 顯示左表中的全部行,若是右表中沒有對應的字段爲NULL

MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 LEFT OUTER JOIN t_2 ON t_1.s_id = t_2.s_id;

右外鏈接(RIGHT JOIN): 顯示右表中的全部行。

MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 RIGHT OUTER JOIN t_2 ON t_1.s_id = t_2.s_id;

符合條件鏈接查詢

MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 INNER JOIN t_2 ON t_1.s_id = t_2.s_id AND t_1.f_name = 'abc' ORDER BY t_1.f_name;

子查詢(ANY,ALL,EXISTS):

ANY:

MYSQL> SELECT * FROM fruits WHERE s_id > ANY(SELECT s_id FROM t2); # 返回大於子查詢結果中最小值的全部記錄。

ALL:

MYSQL> SELECT * FROM fruits WHERE s_id > ALL(SELECT s_id FROM t2); # 返回大於子查詢結果中最大值的全部記錄。

EXISTS:

MYSQL> SELECT * FROM fruits WHERE EXISTS(SELECT s_id FROM t2); # 子查詢是否有記錄。

NOT EXISTS:

MYSQL> SELECT * FROM fruits WHERE NOT EXISTS(SELECT s_id FROM t2); # 若是子查詢沒有返回行則符合條件。

IN/NOT IN:

MYSQL> SELECT * FROM fruits WHERE s_id IN(SELECT s_id FROM t2);

<、<=、=、>=、!=:

MYSQL> SELECT * FROM fruits WHERE s_id = (SELECT s_id FROM t2 WHERE s_id = 1);

合併查詢結果

UNION 不刪除重複行,

UNION ALL刪除重複行

MYSQL> SELECT s_id FROM fruits WHERE f_price < 9 UNION ALL SELECT s_id WHERE s_id IN(10,11);

正則表達式查詢(REGEXP)

MYSQL> SELECT * FROM fruits WHERE f_name REGEXP '^b'; # 查詢f_name以b開頭的記錄。

查詢好友(好友關係表)(右外鏈接(RIGHT JOIN): 顯示右表中的全部行。)

SELECT tb_friend.FROM tb_friend RIGHT OUTER JOIN tb_user ON tb_friend.userid = tb_user.userId WHERE tb_friend.userid='18936958177'

SELECT tb_user.* FROM friend RIGHT OUTER JOIN tb_user ON friend.userid = tb_user.userId WHERE friend.userid='123';

查詢羣(右外鏈接(RIGHT JOIN): 顯示右表中的全部行。)

SELECT tb_group.* FROM tb_group_relation RIGHT OUTER JOIN tb_group ON tb_group_relation.groupid = tb_group.groupid WHERE tb_group_relation.userid='8355';
相關文章
相關標籤/搜索