Mysql——查询

创建表

mysql> CREATE TABLE fruits
    -> (
    -> f_id char(10) NOT NULL,
    -> s_id INT NOT NULL,
    -> f_name char(255) NOT NULL,
    -> f_price decimal(8,2) NOT NULL,
    -> PRIMARY KEY(f_id)
    -> );
Query OK, 0 rows affected (0.02 sec)

插入数据

mysql> INSERT INTO fruits VALUES('a1',101,'apple',5.2);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO fruits VALUES('b1',101,'blackerry',10.2);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO fruits VALUES('bs1',102,'orange',11.2);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO fruits VALUES('bs2',105,'melon',8.2);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO fruits VALUES('t1',102,'banana',10.3);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO fruits VALUES('t2',102,'grape',5.3);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO fruits VALUES('o2',103,'cocounut',9.2);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO fruits VALUES('c0',101,'cherry',3.2);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO fruits VALUES('l2',104,'lemon',6.4);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO fruits VALUES('b2',104,'berry',7.6);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO fruits VALUES('m1',106,'mango',15.7);
Query OK, 1 row affected (0.00 sec)

where 条件判断符

操作符 说明
= 相等
<>或者!= 不相等
> 大于
>= 大于等于
< 小于
<= 小于等于
BETWEEN 位于两个数值之间

查询价格小于10.2的水果

mysql> SELECT f_name,f_price FROM fruits WHERE f_price < 10.2;
+----------+---------+
| f_name   | f_price |
+----------+---------+
| apple    |    5.20 |
| berry    |    7.60 |
| melon    |    8.20 |
| cherry   |    3.20 |
| lemon    |    6.40 |
| cocounut |    9.20 |
| grape    |    5.30 |
+----------+---------+
7 rows in set (0.00 sec)

IN查询

查询指定范围内的条件记录,将所有的查询条件用括号括起来。每个条件之间用逗号隔开,只需要满足其中一个条件的值就算做匹配项

mysql> SELECT f_name,s_id FROM fruits WHERE s_id IN (101,102) ORDER BY f_name;
+-----------+------+
| f_name    | s_id |
+-----------+------+
| apple     |  101 |
| banana    |  102 |
| blackerry |  101 |
| cherry    |  101 |
| grape     |  102 |
| orange    |  102 |
+-----------+------+
6 rows in set (0.00 sec)

BETWEEN AND 范围查询

BETWEEN 匹配的范围包括开始值和结束值

mysql> SELECT f_name,f_price FROM fruits WHERE f_price BETWEEN 3.20 AND 10.2 ORDER BY f_price DESC;
+-----------+---------+
| f_name    | f_price |
+-----------+---------+
| blackerry |   10.20 |
| cocounut  |    9.20 |
| melon     |    8.20 |
| berry     |    7.60 |
| lemon     |    6.40 |
| grape     |    5.30 |
| apple     |    5.20 |
| cherry    |    3.20 |
+-----------+---------+
8 rows in set (0.00 sec)

带LIKE的字符串匹配查询

LIKE查询一起使用的通配符有‘%'和‘',其中(下划线)只能一次值匹配一个字符 %(百分号)可以匹配任意多字符。

mysql> SELECT f_name FROM fruits WHERE f_name LIKE 'b%';
+-----------+
| f_name    |
+-----------+
| blackerry |
| berry     |
| banana    |
+-----------+
3 rows in set (0.00 sec)

DISTINCT 查询

DISTINCT 关键字查询可以去除重复的记录值

mysql> SELECT DISTINCT s_id FROM fruits;
+------+
| s_id |
+------+
|  101 |
|  104 |
|  102 |
|  105 |
|  106 |
|  103 |
+------+
6 rows in set (0.00 sec)

GROUP BY 分组

mysql> SELECT s_id,COUNT(*) FROM fruits GROUP BY s_id;
+------+----------+
| s_id | COUNT(*) |
+------+----------+
|  101 |        3 |
|  102 |        3 |
|  103 |        1 |
|  104 |        2 |
|  105 |        1 |
|  106 |        1 |
+------+----------+
6 rows in set (0.00 sec)

GROUP_CONCAT()函数可以将分组的中各个字段的值显示出来

mysql> SELECT s_id,GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id;
+------+------------------------+
| s_id | Names                  |
+------+------------------------+
|  101 | apple,blackerry,cherry |
|  102 | orange,banana,grape    |
|  103 | cocounut               |
|  104 | berry,lemon            |
|  105 | melon                  |
|  106 | mango                  |
+------+------------------------+
6 rows in set (0.00 sec)

分组过滤

GROUP BY 可以好HAVING 一起限定显示记录所需满足的条件,只有满足条件的分组才被显示。

mysql> SELECT s_id,GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id HAVING COUNT(f_name) > 1;
+------+------------------------+
| s_id | Names                  |
+------+------------------------+
|  101 | apple,blackerry,cherry |
|  102 | orange,banana,grape    |
|  104 | berry,lemon            |
+------+------------------------+
3 rows in set (0.00 sec)

LIMIT 限制查询结果数量

LIMIT [位置偏移量] 行数, 位置偏移量是可选参数,默认是0,从第一条数据开始。

SELECT *FROM fruits LIMIT 4;
+------+------+-----------+---------+
| f_id | s_id | f_name    | f_price |
+------+------+-----------+---------+
| a1   |  101 | apple     |    5.20 |
| b1   |  101 | blackerry |   10.20 |
| b2   |  104 | berry     |    7.60 |
| bs1  |  102 | orange    |   11.20 |
+------+------+-----------+---------+
4 rows in set (0.00 sec)

连接查询

数据准备

mysql> CREATE TABLE supplies(
    -> s_id int NOT NULL AUTO_INCREMENT,
    -> s_name char(50) NOT NULL,
    -> s_city char(50) NULL,
    -> s_zip char(50) NULL,
    -> s_call char(50) NOT NULL,
    -> PRIMARY KEY (s_id)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO suppliesr VALUES(101,'FastFruit Inc','Tianjin','30000','48075');
ERROR 1146 (42S02): Table 'test_db.suppliesr' doesn't exist
mysql> INSERT INTO supplies VALUES(101,'FastFruit Inc','Tianjin','30000','48075');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO supplies VALUES(102,'LT Supplies','Chongqing','40000','44333');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO supplies VALUES(103,'ACME','Shanghai','20000','90046');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO supplies VALUES(104,'FNK Inc','Zhongshan','528437','11111');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO supplies VALUES(105,'Good SET','Taiyuan','030000','22222');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO supplies VALUES(106,'Just Eat Ours','Beijing','010','45678');
Query OK, 1 row affected (0.00 sec)

两表联合查询

mysql> SELECT supplies.s_id,s_name,f_name,f_price FROM fruits,supplies WHERE fruits.s_id = supplies.s_id;
+------+---------------+-----------+---------+
| s_id | s_name        | f_name    | f_price |
+------+---------------+-----------+---------+
|  101 | FastFruit Inc | apple     |    5.20 |
|  101 | FastFruit Inc | blackerry |   10.20 |
|  104 | FNK Inc       | berry     |    7.60 |
|  102 | LT Supplies   | orange    |   11.20 |
|  105 | Good SET      | melon     |    8.20 |
|  101 | FastFruit Inc | cherry    |    3.20 |
|  104 | FNK Inc       | lemon     |    6.40 |
|  106 | Just Eat Ours | mango     |   15.70 |
|  103 | ACME          | cocounut  |    9.20 |
|  102 | LT Supplies   | banana    |   10.30 |
|  102 | LT Supplies   | grape     |    5.30 |
+------+---------------+-----------+---------+
11 rows in set (0.00 sec)

内连接(INNER JOIN) 使用比较运算符进行表间某些列数据

mysql> SELECT supplies.s_id,s_name,f_name,f_price FROM fruits INNER JOIN  supplies ON  fruits.s_id = supplies.s_id;
+------+---------------+-----------+---------+
| s_id | s_name        | f_name    | f_price |
+------+---------------+-----------+---------+
|  101 | FastFruit Inc | apple     |    5.20 |
|  101 | FastFruit Inc | blackerry |   10.20 |
|  104 | FNK Inc       | berry     |    7.60 |
|  102 | LT Supplies   | orange    |   11.20 |
|  105 | Good SET      | melon     |    8.20 |
|  101 | FastFruit Inc | cherry    |    3.20 |
|  104 | FNK Inc       | lemon     |    6.40 |
|  106 | Just Eat Ours | mango     |   15.70 |
|  103 | ACME          | cocounut  |    9.20 |
|  102 | LT Supplies   | banana    |   10.30 |
|  102 | LT Supplies   | grape     |    5.30 |
+------+---------------+-----------+---------+
11 rows in set (0.00 sec)

子查询

数据准备

mysql> CREATE TABLE tb11( num1 INT);
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE tb12( num2 INT);
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO tb11 VALUES(1),(5),(13),(27);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> INSERT INTO tb12 VALUES(6),(14),(11),(20);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

ANY 、SOME

ANY 、SOME关键字表示满足内层子查询的任何一个比较条件,就返回一个结果作为外层查询的条件。只有大于表tb12字段num2任意的值就符合条件。

mysql> SELECT num1 FROM tb11 WHERE num1 > ANY (SELECT num2 FROM tb12);
+------+
| num1 |
+------+
|   13 |
|   27 |
+------+
2 rows in set (0.00 sec)
mysql> SELECT num1 FROM tb11 WHERE num1 > SOME (SELECT num2 FROM tb12);
+------+
| num1 |
+------+
|   13 |
|   27 |
+------+
2 rows in set (0.00 sec)

ALL

ALL 关键字需要满足所有内层查询的条件

mysql> SELECT num1 FROM tb11 WHERE num1 > ALL (SELECT num2 FROM tb12);
+------+
| num1 |
+------+
|   27 |
+------+
1 row in set (0.00 sec)

EXISTS

EXISTS 关键字后面的参数是一个任意的子查询,系统对子查询进行运算判断是否返回行,主要至少返回一行,那么EXIST的结果为true,如果子查询没有返回任何行,那么EXISTS 返回的结果是false。此时外层语句不做任何查询。

mysql> SELECT *FROM fruits WHERE EXISTS (SELECT s_name FROM supplies WHERE s_id = 106 );
+------+------+-----------+---------+
| f_id | s_id | f_name    | f_price |
+------+------+-----------+---------+
| a1   |  101 | apple     |    5.20 |
| b1   |  101 | blackerry |   10.20 |
| b2   |  104 | berry     |    7.60 |
| bs1  |  102 | orange    |   11.20 |
| bs2  |  105 | melon     |    8.20 |
| c0   |  101 | cherry    |    3.20 |
| l2   |  104 | lemon     |    6.40 |
| m1   |  106 | mango     |   15.70 |
| o2   |  103 | cocounut  |    9.20 |
| t1   |  102 | banana    |   10.30 |
| t2   |  102 | grape     |    5.30 |
+------+------+-----------+---------+
11 rows in set (0.00 sec)

比较运算符的子查询

mysql> SELECT s_id,f_name FROM fruits WHERE s_id = (SELECT s_id FROM supplies WHERE s_city = 'Tianjin');
+------+-----------+
| s_id | f_name    |
+------+-----------+
|  101 | apple     |
|  101 | blackerry |
|  101 | cherry    |
+------+-----------+
3 rows in set (0.00 sec)

合并查询

UINION 不使用关键字ALL,返回的结果会去重,所有的返回结果都是唯一的。

mysql> SELECT s_id,f_name,f_price FROM fruits WHERE f_price < 9.0 UNION ALL SELECT s_id,f_name,f_price FROM fruits WHERE s_id IN (101,103);
+------+-----------+---------+
| s_id | f_name    | f_price |
+------+-----------+---------+
|  101 | apple     |    5.20 |
|  104 | berry     |    7.60 |
|  105 | melon     |    8.20 |
|  101 | cherry    |    3.20 |
|  104 | lemon     |    6.40 |
|  102 | grape     |    5.30 |
|  101 | apple     |    5.20 |
|  101 | blackerry |   10.20 |
|  101 | cherry    |    3.20 |
|  103 | cocounut  |    9.20 |
+------+-----------+---------+
10 rows in set (0.00 sec)

mysql> SELECT s_id,f_name,f_price FROM fruits WHERE f_price < 9.0 UNION  SELECT s_id,f_name,f_price FROM fruits WHERE s_id IN (101,103);
+------+-----------+---------+
| s_id | f_name    | f_price |
+------+-----------+---------+
|  101 | apple     |    5.20 |
|  104 | berry     |    7.60 |
|  105 | melon     |    8.20 |
|  101 | cherry    |    3.20 |
|  104 | lemon     |    6.40 |
|  102 | grape     |    5.30 |
|  101 | blackerry |   10.20 |
|  103 | cocounut  |    9.20 |
+------+-----------+---------+
8 rows in set (0.00 sec)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354