博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql之select查询
阅读量:4963 次
发布时间:2019-06-12

本文共 41600 字,大约阅读时间需要 138 分钟。

单表查询


 

语法:

# SELECT  [DISTINCT(去重)]  字段1,字段2... FROM 表名#     WHERE 条件#     GROUP BY field  分组#     HAVING 筛选#     ORDER BY field  排序#     LIMIT 限制条数

查询常见用法:

# 创建测试表# table lol+----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+| id | name         | sex    | age  | date_time  | county          | count_comment                                             | price |+----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+|  1 | 盖伦         | 男     |   25 | 2017-08-09 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  3150 ||  2 | 赵信         | 男     |   28 | 2017-10-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  3150 ||  3 | VN           | 女     |   18 | 2017-10-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  6300 ||  4 | 嘉文四世     | 男     |   25 | 2017-08-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  4800 ||  5 | 菲兹         | 无性   |  500 | 2017-03-10 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  4800 ||  6 | 金克斯       | 女     |   18 | 2012-12-12 | 祖安            | 祖安是一片庞大的地下城区                                  |  6300 ||  7 | 布里茨       | 无性   |   99 | 2013-03-10 | 祖安            | 祖安是一片庞大的地下城区                                  |  3150 ||  8 | 沃里克       | 男     |   25 | 2013-11-11 | 祖安            | 祖安是一片庞大的地下城区                                  |  4180 ||  9 | 迦娜         | 女     |   18 | 2016-04-08 | 祖安            | 祖安是一片庞大的地下城区                                  |  6300 || 10 | 艾克         | 男     |   35 | 2014-04-04 | 祖安            | 祖安是一片庞大的地下城区                                  |  6300 || 11 | 凯特琳       | 女     |   18 | 2014-10-09 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  4180 || 12 | 伊泽瑞尔     | 男     |   21 | 2011-11-11 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  3150 || 13 | 杰斯         | 男     |   33 | 2011-07-01 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  1000 || 14 | 蔚           | 女     |   18 | 2011-11-11 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  4180 || 15 | 奥丽安娜     | 无性   |   15 | 2018-01-04 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  1500 || 16 | 伊芙琳       | 女     |   18 | 2015-11-09 | 暗影岛          | 暗影岛的这片土地曾经是环境优美的岛屿                      |  6300 || 17 | 蕾奥娜       | 女     |   15 | 2014-10-09 | 巨神峰          | 巨神峰符文大陆的世界之巅                                  |  4800 || 18 | 黛安娜       | 女     |   15 | 2014-08-19 | 巨神峰          | 巨神峰符文大陆的世界之巅                                  |  4800 || 19 | 潘森         | 男     |   25 | 2017-04-10 | 巨神峰          | 巨神峰符文大陆的世界之巅                                  |  3100 || 20 | 阿慈尔       | 男     | 1000 | 2017-03-10 | 恕瑞玛          | 恕瑞玛帝国曾经是一个繁荣昌盛的文明                        |  6300 || 21 | 阿木木       | 无性   |  400 | 2017-12-01 | 恕瑞玛          | 恕瑞玛帝国曾经是一个繁荣昌盛的文明                        |  3100 || 22 | 艾瑞利亚     | 女     |   25 | 2014-01-01 | 艾欧尼亚        | NULL                                                      |  3000 || 23 | 易           | 男     |   45 | 2017-10-11 | 艾欧尼亚        | NULL                                                      |  1500 |+----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+# 创建表 lolcreate table lol(    id int primary key auto_increment,    name char(6) not null,    sex enum('男', '女', '无性'),    age int,    date_time date,    county char(10),    count_comment char(25),    price int not null);# 插入数据 insert into lol(name, sex, age, date_time, county, count_comment, price) values    ('盖伦', '男', 25, '2017-08-09', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 3150),    ('赵信', '男', 28, '2017-10-11', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 3150),    ('VN', '女', 18, '2017-10-11', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 6300),    ('嘉文四世', '男', 25, '2017-08-11', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 4800),    ('菲兹', '无性', 500, '2017-03-10', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 4800),    ('金克斯', '女', 18, '2012-12-12', '祖安', '祖安是一片庞大的地下城区', 6300),    ('布里茨', '无性', 99, '2013-03-10', '祖安', '祖安是一片庞大的地下城区', 3150),    ('沃里克', '男', 25, '2013-11-11', '祖安', '祖安是一片庞大的地下城区', 4180),    ('迦娜', '女', 18, '2016-04-08', '祖安', '祖安是一片庞大的地下城区', 6300),    ('艾克', '男', 35, '2014-04-04', '祖安', '祖安是一片庞大的地下城区', 6300),    ('凯特琳', '女', 18, '2014-10-09', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 4180),    ('伊泽瑞尔', '男', 21, '2011-11-11', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 3150),    ('杰斯', '男', 33, '2011-07-01', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 1000),    ('蔚', '女', 18, '2011-11-11', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 4180),    ('奥丽安娜', '无性', 15, '2018-01-04', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 1500),    ('伊芙琳', '女', 18, '2015-11-09', '暗影岛', '暗影岛的这片土地曾经是环境优美的岛屿', 6300),    ('蕾奥娜', '女', 15, '2014-10-09', '巨神峰', '巨神峰符文大陆的世界之巅', 4800),    ('黛安娜', '女', 15, '2014-08-19', '巨神峰', '巨神峰符文大陆的世界之巅', 4800),    ('潘森', '男', 25, '2017-04-10', '巨神峰', '巨神峰符文大陆的世界之巅', 3100),    ('阿慈尔', '男', 1000, '2017-03-10', '恕瑞玛', '恕瑞玛帝国曾经是一个繁荣昌盛的文明', 6300),    ('阿木木', '无性', 400, '2017-12-01', '恕瑞玛', '恕瑞玛帝国曾经是一个繁荣昌盛的文明', 3100);    insert into lol(name, sex, age, date_time, county,price) values    ('艾瑞利亚', '女', 25, '2014-01-01', '艾欧尼亚', 3000),    ('易', '男', 45, '2017-10-11', '艾欧尼亚', 1500);
准备工作
mysql> create table lol(    ->     id int primary key auto_increment,    ->     name char(6) not null,    ->     sex enum('男', '女', '无性'),    ->     age int,    ->     date_time date,    ->     county char(10),    ->     count_comment char(25),    ->     price int not null    -> );Query OK, 0 rows affected (0.03 sec)mysql> insert into lol(name, sex, age, date_time, county, count_comment, price) values    ->     ('盖伦', '男', 25, '2017-08-09', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 3150),    ->     ('赵信', '男', 28, '2017-10-11', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 3150),    ->     ('VN', '女', 18, '2017-10-11', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 6300),    ->     ('嘉文四世', '男', 25, '2017-08-11', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 4800),    ->     ('菲兹', '无性', 500, '2017-03-10', '德玛西亚', '德玛西亚是一个实力雄厚、奉公守法的国家', 4800),    ->     ('金克斯', '女', 18, '2012-12-12', '祖安', '祖安是一片庞大的地下城区', 6300),    ->     ('布里茨', '无性', 99, '2013-03-10', '祖安', '祖安是一片庞大的地下城区', 3150),    ->     ('沃里克', '男', 25, '2013-11-11', '祖安', '祖安是一片庞大的地下城区', 4180),    ->     ('迦娜', '女', 18, '2016-04-08', '祖安', '祖安是一片庞大的地下城区', 6300),    ->     ('艾克', '男', 35, '2014-04-04', '祖安', '祖安是一片庞大的地下城区', 6300),    ->     ('凯特琳', '女', 18, '2014-10-09', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 4180),    ->     ('伊泽瑞尔', '男', 21, '2011-11-11', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 3150),    ->     ('杰斯', '男', 33, '2011-07-01', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 1000),    ->     ('蔚', '女', 18, '2011-11-11', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 4180),    ->     ('奥丽安娜', '无性', 15, '2018-01-04', '皮尔特沃夫', '皮尔特沃夫是一座繁荣进步的城市', 1500),    ->     ('伊芙琳', '女', 18, '2015-11-09', '暗影岛', '暗影岛的这片土地曾经是环境优美的岛屿', 6300),    ->     ('蕾奥娜', '女', 15, '2014-10-09', '巨神峰', '巨神峰符文大陆的世界之巅', 4800),    ->     ('黛安娜', '女', 15, '2014-08-19', '巨神峰', '巨神峰符文大陆的世界之巅', 4800),    ->     ('潘森', '男', 25, '2017-04-10', '巨神峰', '巨神峰符文大陆的世界之巅', 3100),    ->     ('阿慈尔', '男', 1000, '2017-03-10', '恕瑞玛', '恕瑞玛帝国曾经是一个繁荣昌盛的文明', 6300),    ->     ('阿木木', '无性', 400, '2017-12-01', '恕瑞玛', '恕瑞玛帝国曾经是一个繁荣昌盛的文明', 3100);Query OK, 21 rows affected (0.02 sec)Records: 21  Duplicates: 0  Warnings: 0mysql> insert into lol(name, sex, age, date_time, county,price) values    ->     ('艾瑞利亚', '女', 25, '2014-01-01', '艾欧尼亚', 3000),    ->     ('易', '男', 45, '2017-10-11', '艾欧尼亚', 1500);Query OK, 2 rows affected (0.00 sec)Records: 2  Duplicates: 0  Warnings: 0mysql> select * from lol;+----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+| id | name         | sex    | age  | date_time  | county          | count_comment                                             | price |+----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+|  1 | 盖伦         | 男     |   25 | 2017-08-09 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  3150 ||  2 | 赵信         | 男     |   28 | 2017-10-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  3150 ||  3 | VN           | 女     |   18 | 2017-10-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  6300 ||  4 | 嘉文四世     | 男     |   25 | 2017-08-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  4800 ||  5 | 菲兹         | 无性   |  500 | 2017-03-10 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  4800 ||  6 | 金克斯       | 女     |   18 | 2012-12-12 | 祖安            | 祖安是一片庞大的地下城区                                  |  6300 ||  7 | 布里茨       | 无性   |   99 | 2013-03-10 | 祖安            | 祖安是一片庞大的地下城区                                  |  3150 ||  8 | 沃里克       | 男     |   25 | 2013-11-11 | 祖安            | 祖安是一片庞大的地下城区                                  |  4180 ||  9 | 迦娜         | 女     |   18 | 2016-04-08 | 祖安            | 祖安是一片庞大的地下城区                                  |  6300 || 10 | 艾克         | 男     |   35 | 2014-04-04 | 祖安            | 祖安是一片庞大的地下城区                                  |  6300 || 11 | 凯特琳       | 女     |   18 | 2014-10-09 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  4180 || 12 | 伊泽瑞尔     | 男     |   21 | 2011-11-11 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  3150 || 13 | 杰斯         | 男     |   33 | 2011-07-01 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  1000 || 14 | 蔚           | 女     |   18 | 2011-11-11 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  4180 || 15 | 奥丽安娜     | 无性   |   15 | 2018-01-04 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                            |  1500 || 16 | 伊芙琳       | 女     |   18 | 2015-11-09 | 暗影岛          | 暗影岛的这片土地曾经是环境优美的岛屿                      |  6300 || 17 | 蕾奥娜       | 女     |   15 | 2014-10-09 | 巨神峰          | 巨神峰符文大陆的世界之巅                                  |  4800 || 18 | 黛安娜       | 女     |   15 | 2014-08-19 | 巨神峰          | 巨神峰符文大陆的世界之巅                                  |  4800 || 19 | 潘森         | 男     |   25 | 2017-04-10 | 巨神峰          | 巨神峰符文大陆的世界之巅                                  |  3100 || 20 | 阿慈尔       | 男     | 1000 | 2017-03-10 | 恕瑞玛          | 恕瑞玛帝国曾经是一个繁荣昌盛的文明                        |  6300 || 21 | 阿木木       | 无性   |  400 | 2017-12-01 | 恕瑞玛          | 恕瑞玛帝国曾经是一个繁荣昌盛的文明                        |  3100 || 22 | 艾瑞利亚     | 女     |   25 | 2014-01-01 | 艾欧尼亚        | NULL                                                      |  3000 || 23 | 易           | 男     |   45 | 2017-10-11 | 艾欧尼亚        | NULL                                                      |  1500 |+----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+23 rows in set (0.00 sec)
步骤
# 简单查询 mysql> select id,name,sex from lol;   # 字段显示+----+--------------+--------+| id | name         | sex    |+----+--------------+--------+|  1 | 盖伦         | 男     ||  2 | 赵信         | 男     ||  3 | VN           | 女     ||  4 | 嘉文四世     | 男     ||  5 | 菲兹         | 无性   ||  6 | 金克斯       | 女     ||  7 | 布里茨       | 无性   ||  8 | 沃里克       | 男     ||  9 | 迦娜         | 女     || 10 | 艾克         | 男     || 11 | 凯特琳       | 女     || 12 | 伊泽瑞尔     | 男     || 13 | 杰斯         | 男     || 14 | 蔚           | 女     || 15 | 奥丽安娜     | 无性   || 16 | 伊芙琳       | 女     || 17 | 蕾奥娜       | 女     || 18 | 黛安娜       | 女     || 19 | 潘森         | 男     || 20 | 阿慈尔       | 男     || 21 | 阿木木       | 无性   || 22 | 艾瑞利亚     | 女     || 23 | 易           | 男     |+----+--------------+--------+23 rows in set (0.00 sec)mysql> select * from lol;   # 2. * 所有字段都显示+----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+| id | name         | sex    | age  | date_time  | county          | count_comment                                             | price |+----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+|  1 | 盖伦         | 男     |   25 | 2017-08-09 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  3150 ||  2 | 赵信         | 男     |   28 | 2017-10-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  3150 ||  3 | VN           | 女     |   18 | 2017-10-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  6300 ||  4 | 嘉文四世     | 男     |   25 | 2017-08-11 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  4800 ||  5 | 菲兹         | 无性   |  500 | 2017-03-10 | 德玛西亚        | 德玛西亚是一个实力雄厚、奉公守法的国家                    |  4800 ||  6 | 金克斯       | 女     |   18 | 2012-12-12 | 祖安            | 祖安是一片庞大的地下。。。# disinct 去重mysql> select distinct county from lol; +-----------------+| county          |+-----------------+| 德玛西亚        || 祖安            || 皮尔特沃夫      || 暗影岛          || 巨神峰          || 恕瑞玛          || 艾欧尼亚        |+-----------------+7 rows in set (0.00 sec)# 四则运算用法 * / + -mysql> select name, price*2 from lol; +--------------+---------+| name         | price*2 |+--------------+---------+| 盖伦         |    6300 || 赵信         |    6300 || VN           |   12600 || 嘉文四世     |    9600 || 菲兹         |    9600 || 金克斯       |   12600 || 布里茨       |    6300 || 沃里克       |    8360 || 迦娜         |   12600 || 艾克         |   12600 || 凯特琳       |    8360 || 伊泽瑞尔     |    6300 || 杰斯         |    2000 || 蔚           |    8360 || 奥丽安娜     |    3000 |#定义显示格式CONCAT() 函数用于连接字符串CONCAT_WS() 第一个参数为分隔符mysql> select concat('名字:', name,'     ','国家: ',county) from lol;+---------------------------------------------------+| concat('名字:', name,'     ','国家: ',county)     |+---------------------------------------------------+| 名字:盖伦     国家: 德玛西亚                      || 名字:赵信     国家: 德玛西亚                      || 名字:VN     国家: 德玛西亚                        || 名字:嘉文四世     国家: 德玛西亚                  || 名字:菲兹     国家: 德玛西亚                      || 名字:金克斯     国家: 祖安                        || 名字:布里茨     国家: 祖安                        || 名字:沃里克     国家: 祖安                        || 名字:迦娜     国家: 祖安                          || 名字:艾克     国家: 祖安                          || 名字:凯特琳     国家: 皮尔特沃夫                  || 名字:伊泽瑞尔     国家: 皮尔特沃夫                || 名字:杰斯     国家: 皮尔特沃夫                    || 名字:蔚     国家: 皮尔特沃夫                      || 名字:奥丽安娜     国家: 皮尔特沃夫                || 名字:伊芙琳     国家: 暗影岛                      || 名字:蕾奥娜     国家: 巨神峰                      || 名字:黛安娜     国家: 巨神峰                      || 名字:潘森     国家: 巨神峰                        || 名字:阿慈尔     国家: 恕瑞玛                      || 名字:阿木木     国家: 恕瑞玛                      || 名字:艾瑞利亚     国家: 艾欧尼亚                  || 名字:易     国家: 艾欧尼亚                        |+---------------------------------------------------+23 rows in set (0.00 sec)mysql> select concat_ws(':', name,county) from lol;+------------------------------+| concat_ws(':', name,county)  |+------------------------------+| 盖伦:德玛西亚                || 赵信:德玛西亚                || VN:德玛西亚                  || 嘉文四世:德玛西亚            || 菲兹:德玛西亚                || 金克斯:祖安                  || 布里茨:祖安                  || 沃里克:祖安                  || 迦娜:祖安                    || 艾克:祖安                    || 凯特琳:皮尔特沃夫            || 伊泽瑞尔:皮尔特沃夫          || 杰斯:皮尔特沃夫              || 蔚:皮尔特沃夫                || 奥丽安娜:皮尔特沃夫          || 伊芙琳:暗影岛                || 蕾奥娜:巨神峰                || 黛安娜:巨神峰                || 潘森:巨神峰                  || 阿慈尔:恕瑞玛                || 阿木木:恕瑞玛                || 艾瑞利亚:艾欧尼亚            || 易:艾欧尼亚                  |+------------------------------+23 rows in set (0.00 sec)# 别名 asmysql> select name 名字, county 国家 from lol;+--------------+-----------------+| 名字 | 国家 |+--------------+-----------------+| 盖伦 | 德玛西亚 || 赵信 | 德玛西亚 || VN | 德玛西亚 || 嘉文四世 | 德玛西亚 || 菲兹 | 德玛西亚 || 金克斯 | 祖安 || 布里茨 | 祖安 || 沃里克 | 祖安 || 迦娜 | 祖安 || 艾克 | 祖安 || 凯特琳 | 皮尔特沃夫 || 伊泽瑞尔 | 皮尔特沃夫 || 杰斯 | 皮尔特沃夫 || 蔚 | 皮尔特沃夫 || 奥丽安娜 | 皮尔特沃夫 || 伊芙琳 | 暗影岛 || 蕾奥娜 | 巨神峰 || 黛安娜 | 巨神峰 || 潘森 | 巨神峰 || 阿慈尔 | 恕瑞玛 || 阿木木 | 恕瑞玛 || 艾瑞利亚 | 艾欧尼亚 || 易 | 艾欧尼亚 |+--------------+-----------------+23 rows in set (0.00 sec)mysql> select name as 名字, county as 国家 from lol;+--------------+-----------------+| 名字 | 国家 |+--------------+-----------------+| 盖伦 | 德玛西亚 || 赵信 | 德玛西亚 || VN | 德玛西亚 || 嘉文四世 | 德玛西亚 || 菲兹 | 德玛西亚 || 金克斯 | 祖安 || 布里茨 | 祖安 || 沃里克 | 祖安 || 迦娜 | 祖安 || 艾克 | 祖安 || 凯特琳 | 皮尔特沃夫 || 伊泽瑞尔 | 皮尔特沃夫 || 杰斯 | 皮尔特沃夫 || 蔚 | 皮尔特沃夫 || 奥丽安娜 | 皮尔特沃夫 || 伊芙琳 | 暗影岛 || 蕾奥娜 | 巨神峰 || 黛安娜 | 巨神峰 || 潘森 | 巨神峰 || 阿慈尔 | 恕瑞玛 || 阿木木 | 恕瑞玛 || 艾瑞利亚 | 艾欧尼亚 || 易 | 艾欧尼亚 |+--------------+-----------------+23 rows in set (0.00 sec)

where 约束:

where字句中可以使用:

1. 比较运算符:> < >= <= <> !=

2. between 80 and 100 值在10到20之间
3. in(80,90,100) 值是10或20或30
4. like 'egon%'
    pattern可以是%或_,
    %表示任意多字符
    _表示一个字符 
5. 逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not

# 1. 单条件查询mysql> select name from lol where id=1;+--------+| name   |+--------+| 盖伦   |+--------+1 row in set (0.00 sec)# 多条件查询 and or notmysql> select name,age from lol where price=6300 and age=18;+-----------+------+| name      | age  |+-----------+------+| VN        |   18 || 金克斯    |   18 || 迦娜      |   18 || 伊芙琳    |   18 |+-----------+------+4 rows in set (0.00 sec)mysql> select name,age from lol where price=6300 or age=18;+-----------+------+| name      | age  |+-----------+------+| VN        |   18 || 金克斯    |   18 || 迦娜      |   18 || 艾克      |   35 || 凯特琳    |   18 || 蔚        |   18 || 伊芙琳    |   18 || 阿慈尔    | 1000 |+-----------+------+8 rows in set (0.00 sec)mysql> select name,count_comment from lol where not count_comment is null;+--------------+-----------------------------------------------------------+| name         | count_comment                                             |+--------------+-----------------------------------------------------------+| 盖伦         | 德玛西亚是一个实力雄厚、奉公守法的国家                    || 赵信         | 德玛西亚是一个实力雄厚、奉公守法的国家                    || VN           | 德玛西亚是一个实力雄厚、奉公守法的国家                    || 嘉文四世     | 德玛西亚是一个实力雄厚、奉公守法的国家                    || 菲兹         | 德玛西亚是一个实力雄厚、奉公守法的国家                    || 金克斯       | 祖安是一片庞大的地下城区                                  || 布里茨       | 祖安是一片庞大的地下城区                                  || 沃里克       | 祖安是一片庞大的地下城区                                  || 迦娜         | 祖安是一片庞大的地下城区                                  || 艾克         | 祖安是一片庞大的地下城区                                  || 凯特琳       | 皮尔特沃夫是一座繁荣进步的城市                            || 伊泽瑞尔     | 皮尔特沃夫是一座繁荣进步的城市                            || 杰斯         | 皮尔特沃夫是一座繁荣进步的城市                            || 蔚           | 皮尔特沃夫是一座繁荣进步的城市                            || 奥丽安娜     | 皮尔特沃夫是一座繁荣进步的城市                            || 伊芙琳       | 暗影岛的这片土地曾经是环境优美的岛屿                      || 蕾奥娜       | 巨神峰符文大陆的世界之巅                                  || 黛安娜       | 巨神峰符文大陆的世界之巅                                  || 潘森         | 巨神峰符文大陆的世界之巅                                  || 阿慈尔       | 恕瑞玛帝国曾经是一个繁荣昌盛的文明                        || 阿木木       | 恕瑞玛帝国曾经是一个繁荣昌盛的文明                        |+--------------+-----------------------------------------------------------+21 rows in set (0.00 sec)# 关键字 between and mysql> select name,price from lol where price between 4800 and 6300;+--------------+-------+| name         | price |+--------------+-------+| VN           |  6300 || 嘉文四世     |  4800 || 菲兹         |  4800 || 金克斯       |  6300 || 迦娜         |  6300 || 艾克         |  6300 || 伊芙琳       |  6300 || 蕾奥娜       |  4800 || 黛安娜       |  4800 || 阿慈尔       |  6300 |+--------------+-------+10 rows in set (0.00 sec)# 关键字 is null (判断某个字段是否为NULL不能用等号,需要用IS)mysql> select name,count_comment from lol where count_comment='';   # 用这种方式并不能判断字段内容是否为空Empty set (0.00 sec)mysql> select name,count_comment from lol where count_comment is null;+--------------+---------------+| name         | count_comment |+--------------+---------------+| 艾瑞利亚     | NULL          || 易           | NULL          |+--------------+---------------+2 rows in set (0.00 sec)# 关键字 in 集合查询mysql> select name,date_time from lol where date_time in    -> ('2017-10-11', '2014-10-09', '2012-12-12');+-----------+------------+| name      | date_time  |+-----------+------------+| 赵信      | 2017-10-11 || VN        | 2017-10-11 || 金克斯    | 2012-12-12 || 凯特琳    | 2014-10-09 || 蕾奥娜    | 2014-10-09 || 易        | 2017-10-11 |+-----------+------------+6 rows in set (0.00 sec)# 关键字like 模糊查询 %(任意所有字符)   _(任意一个字符)mysql> select * from lol where name like '金%';+----+-----------+------+------+------------+--------+--------------------------------------+-------+| id | name      | sex  | age  | date_time  | county | count_comment                        | price |+----+-----------+------+------+------------+--------+--------------------------------------+-------+|  6 | 金克斯    | 女   |   18 | 2012-12-12 | 祖安   | 祖安是一片庞大的地下城区             |  6300 |+----+-----------+------+------+------------+--------+--------------------------------------+-------+1 row in set (0.00 sec)mysql> select * from lol where name like '金克_';+----+-----------+------+------+------------+--------+--------------------------------------+-------+| id | name      | sex  | age  | date_time  | county | count_comment                        | price |+----+-----------+------+------+------------+--------+--------------------------------------+-------+|  6 | 金克斯    | 女   |   18 | 2012-12-12 | 祖安   | 祖安是一片庞大的地下城区             |  6300 |+----+-----------+------+------+------------+--------+--------------------------------------+-------+1 row in set (0.00 sec)mysql> select * from lol where name like '___';+----+-----------+--------+------+------------+-----------------+--------------------------------------------------------+-------+| id | name      | sex    | age  | date_time  | county          | count_comment                                          | price |+----+-----------+--------+------+------------+-----------------+--------------------------------------------------------+-------+|  6 | 金克斯    | 女     |   18 | 2012-12-12 | 祖安            | 祖安是一片庞大的地下城区                               |  6300 ||  7 | 布里茨    | 无性   |   99 | 2013-03-10 | 祖安            | 祖安是一片庞大的地下城区                               |  3150 ||  8 | 沃里克    | 男     |   25 | 2013-11-11 | 祖安            | 祖安是一片庞大的地下城区                               |  4180 || 11 | 凯特琳    | 女     |   18 | 2014-10-09 | 皮尔特沃夫      | 皮尔特沃夫是一座繁荣进步的城市                         |  4180 || 16 | 伊芙琳    | 女     |   18 | 2015-11-09 | 暗影岛          | 暗影岛的这片土地曾经是环境优美的岛屿                   |  6300 || 17 | 蕾奥娜    | 女     |   15 | 2014-10-09 | 巨神峰          | 巨神峰符文大陆的世界之巅                               |  4800 || 18 | 黛安娜    | 女     |   15 | 2014-08-19 | 巨神峰          | 巨神峰符文大陆的世界之巅                               |  4800 || 20 | 阿慈尔    | 男     | 1000 | 2017-03-10 | 恕瑞玛          | 恕瑞玛帝国曾经是一个繁荣昌盛的文明                     |  6300 || 21 | 阿木木    | 无性   |  400 | 2017-12-01 | 恕瑞玛          | 恕瑞玛帝国曾经是一个繁荣昌盛的文明                     |  3100 |+----+-----------+--------+------+------------+-----------------+--------------------------------------------------------+-------+9 rows in set (0.00 sec)

group by 分组查询:

#1、首先明确一点:分组发生在where之后,即分组是基于where之后得到的记录而进行的#2、分组指的是:将所有记录按照某个相同字段进行归类,比如针对员工信息表的职位分组,或者按照性别进行分组等#3.  可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数
#查看MySQL 5.7默认的sql_mode如下:mysql> select @@global.sql_mode;ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION#!!!注意ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在ONLY_FULL_GROUP_BY模式下,target list中的值要么是来自于聚集函数的结果,要么是来自于group by list中的表达式的值。#设置sql_mole如下操作(我们可以去掉ONLY_FULL_GROUP_BY模式):mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
!!!SQL_MODE设置!!!
# 使用 group bymysql> select county from lol group by county;+-----------------+| county          |+-----------------+| 巨神峰          || 德玛西亚        || 恕瑞玛          || 暗影岛          || 皮尔特沃夫      || 祖安            || 艾欧尼亚        |+-----------------+7 rows in set (0.00 sec)mysql> select county,name from lol group by county;+-----------------+--------------+| county          | name         |+-----------------+--------------+| 巨神峰          | 蕾奥娜       || 德玛西亚        | 盖伦         || 恕瑞玛          | 阿慈尔       || 暗影岛          | 伊芙琳       || 皮尔特沃夫      | 凯特琳       || 祖安            | 金克斯       || 艾欧尼亚        | 艾瑞利亚     |+-----------------+--------------+7 rows in set (0.00 sec)# 如上 你会发现 name字段显示有问题,默认都是组内的第一条记录,但其实这是没有意义的 可以用sql_mode 设置为严格模式,再使用这种查法就会报错
#强调:聚合函数聚合的是组的内容,若是没有分组,则默认一组# count(), max(), min(), avg(), sum(),  group_concat()# count()mysql> select county,count(id) from lol group by county;+-----------------+-----------+| county          | count(id) |+-----------------+-----------+| 巨神峰          |         3 || 德玛西亚        |         5 || 恕瑞玛          |         2 || 暗影岛          |         1 || 皮尔特沃夫      |         5 || 祖安            |         5 || 艾欧尼亚        |         2 |+-----------------+-----------+7 rows in set (0.00 sec)# max()mysql> select county,max(price) from lol group by county;+-----------------+------------+| county          | max(price) |+-----------------+------------+| 巨神峰          |       4800 || 德玛西亚        |       6300 || 恕瑞玛          |       6300 || 暗影岛          |       6300 || 皮尔特沃夫      |       4180 || 祖安            |       6300 || 艾欧尼亚        |       3000 |+-----------------+------------+7 rows in set (0.00 sec)# min()mysql> select county,min(price) from lol group by county;+-----------------+------------+| county          | min(price) |+-----------------+------------+| 巨神峰          |       3100 || 德玛西亚        |       3150 || 恕瑞玛          |       3100 || 暗影岛          |       6300 || 皮尔特沃夫      |       1000 || 祖安            |       3150 || 艾欧尼亚        |       1500 |+-----------------+------------+7 rows in set (0.00 sec)# avg()mysql> select county,avg(price) from lol group by county;+-----------------+------------+| county          | avg(price) |+-----------------+------------+| 巨神峰          |  4233.3333 || 德玛西亚        |  4440.0000 || 恕瑞玛          |  4700.0000 || 暗影岛          |  6300.0000 || 皮尔特沃夫      |  2802.0000 || 祖安            |  5246.0000 || 艾欧尼亚        |  2250.0000 |+-----------------+------------+7 rows in set (0.00 sec)# sum()mysql> select county,sum(price) from lol group by county;+-----------------+------------+| county          | sum(price) |+-----------------+------------+| 巨神峰          |      12700 || 德玛西亚        |      22200 || 恕瑞玛          |       9400 || 暗影岛          |       6300 || 皮尔特沃夫      |      14010 || 祖安            |      26230 || 艾欧尼亚        |       4500 |+-----------------+------------+7 rows in set (0.00 sec)# group_concat()mysql> select county,group_concat(name) from lol group by county;+-----------------+------------------------------------------------+| county          | group_concat(name)                             |+-----------------+------------------------------------------------+| 巨神峰          | 蕾奥娜,黛安娜,潘森                             || 德玛西亚        | 盖伦,赵信,VN,嘉文四世,菲兹                     || 恕瑞玛          | 阿慈尔,阿木木                                  || 暗影岛          | 伊芙琳                                         || 皮尔特沃夫      | 奥丽安娜,蔚,杰斯,伊泽瑞尔,凯特琳               || 祖安            | 金克斯,布里茨,沃里克,迦娜,艾克                 || 艾欧尼亚        | 艾瑞利亚,易                                    |+-----------------+------------------------------------------------+7 rows in set (0.00 sec)
聚合函数

having 过滤:

# having 与 where区别# 1. where 执行优先级在 group by 之前, having在group by 之后# 2. 因为having发生在分组之后,所以只能使用聚合函数
mysql> select county,max(price) from lol group by county having max(price)=6300;+--------------+------------+| county       | max(price) |+--------------+------------+| 德玛西亚     |       6300 || 恕瑞玛       |       6300 || 暗影岛       |       6300 || 祖安         |       6300 |+--------------+------------+4 rows in set (0.00 sec)mysql> select county,max(price) from lol group by county having price=6300;  ERROR 1054 (42S22): Unknown column 'price' in 'having clause'# 如上可以看出 如果不使用聚合函数的话 ,会报错
实例

distinct 去重:

# 注意# 1. 执行到distinct这个关键字时,意味着字段信息已经找到, 并且生成了虚拟表# 2. 优先级比distinct低的关键字只能按照这个虚拟表在做规则。
mysql> select distinct county as 国家 from lol;+-----------------+| 国家            |+-----------------+| 德玛西亚        || 祖安            || 皮尔特沃夫      || 暗影岛          || 巨神峰          || 恕瑞玛          || 艾欧尼亚        |+-----------------+7 rows in set (0.00 sec)# 验证mysql> select distinct county as 国家 from lol order by 国家 asc;+-----------------+| 国家            |+-----------------+| 巨神峰          || 德玛西亚        || 恕瑞玛          || 暗影岛          || 皮尔特沃夫      || 祖安            || 艾欧尼亚        |+-----------------+7 rows in set (0.00 sec)# 如上 , order by可以用国家进行排序,就证明order by 发生在distinct之后
实例

order by 查询排序:

# asc(升序) desc (降序)mysql> select id,name from lol order by id asc;+----+--------------+| id | name         |+----+--------------+|  1 | 盖伦         ||  2 | 赵信         ||  3 | VN           ||  4 | 嘉文四世     ||  5 | 菲兹         ||  6 | 金克斯       ||  7 | 布里茨       ||  8 | 沃里克       ||  9 | 迦娜         |....mysql> select id,name from lol order by id; # 默认是升序+----+--------------+| id | name         |+----+--------------+|  1 | 盖伦         ||  2 | 赵信         ||  3 | VN           ||  4 | 嘉文四世     ||  5 | 菲兹         ||  6 | 金克斯       ||  7 | 布里茨       ||  8 | 沃里克       ||  9 | 迦娜         || 10 | 艾克         || 11 | 凯特琳       || 12 | 伊泽瑞尔     |...mysql> select id,name from lol order by id desc;+----+--------------+| id | name         |+----+--------------+| 23 | 易           || 22 | 艾瑞利亚     || 21 | 阿木木       || 20 | 阿慈尔       || 19 | 潘森         || 18 | 黛安娜       || 17 | 蕾奥娜       || 16 | 伊芙琳       || 15 | 奥丽安娜     || 14 | 蔚           || 13 | 杰斯         || 12 | 伊泽瑞尔     || 11 | 凯特琳       || 10 | 艾克         ||  9 | 迦娜         |...# 多列查询# 先按照 age进行升序,如果age相同按照price进行升序,如果price相同按照name进行降序mysql> select name,age,price from lol order by age, price, name desc;+--------------+------+-------+| name         | age  | price |+--------------+------+-------+| 奥丽安娜     |   15 |  1500 || 黛安娜       |   15 |  4800 || 蕾奥娜       |   15 |  4800 || 蔚           |   18 |  4180 || 凯特琳       |   18 |  4180 || 金克斯       |   18 |  6300 || 迦娜         |   18 |  6300 || 伊芙琳       |   18 |  6300 || VN           |   18 |  6300 || 伊泽瑞尔     |   21 |  3150 || 艾瑞利亚     |   25 |  3000 |...

limit 限制查询的记录数:

# 示例mysql> select name,county from lol limit 3;+--------+--------------+| name   | county       |+--------+--------------+| 盖伦   | 德玛西亚     || 赵信   | 德玛西亚     || VN     | 德玛西亚     |+--------+--------------+3 rows in set (0.00 sec)# 设置 起始路径与步长# select 字段 from 表名 limit 起始 步长mysql> select id,name,county from lol limit 0, 3;+----+--------+--------------+| id | name   | county       |+----+--------+--------------+|  1 | 盖伦   | 德玛西亚     ||  2 | 赵信   | 德玛西亚     ||  3 | VN     | 德玛西亚     |+----+--------+--------------+3 rows in set (0.00 sec)mysql> select id,name,county from lol limit 3, 3;+----+--------------+--------------+| id | name         | county       |+----+--------------+--------------+|  4 | 嘉文四世     | 德玛西亚     ||  5 | 菲兹         | 德玛西亚     ||  6 | 金克斯       | 祖安         |+----+--------------+--------------+3 rows in set (0.00 sec)mysql> select id,name,county from lol limit 6, 3;+----+-----------+--------+| id | name      | county |+----+-----------+--------+|  7 | 布里茨    | 祖安   ||  8 | 沃里克    | 祖安   ||  9 | 迦娜      | 祖安   |+----+-----------+--------+3 rows in set (0.00 sec)

regexp正则方式查询:

mysql> select id,name,county from lol where name regexp '^金';+----+-----------+--------+| id | name      | county |+----+-----------+--------+|  6 | 金克斯    | 祖安   |+----+-----------+--------+1 row in set (0.00 sec)mysql> select id,name,county from lol where county regexp '亚$';+----+--------------+--------------+| id | name         | county       |+----+--------------+--------------+|  1 | 盖伦         | 德玛西亚     ||  2 | 赵信         | 德玛西亚     ||  3 | VN           | 德玛西亚     ||  4 | 嘉文四世     | 德玛西亚     ||  5 | 菲兹         | 德玛西亚     || 22 | 艾瑞利亚     | 艾欧尼亚     || 23 | 易           | 艾欧尼亚     |+----+--------------+--------------+7 rows in set (0.00 sec)mysql> select name,date_time from lol where date_time regexp '1{2}';+--------------+------------+| name         | date_time  |+--------------+------------+| 赵信         | 2017-10-11 || VN           | 2017-10-11 || 嘉文四世     | 2017-08-11 || 沃里克       | 2013-11-11 || 伊泽瑞尔     | 2011-11-11 || 杰斯         | 2011-07-01 || 蔚           | 2011-11-11 || 伊芙琳       | 2015-11-09 || 易           | 2017-10-11 |+--------------+------------+9 rows in set (0.00 sec)
# 对字符串匹配的方式# 1. where name = 'xxx'  # 2. where name like 'xxx'  (%/_)# 3. where name regexp 'xxx'

关键字的执行优先级:

  from -> where -> group by -> having -> distinct -> order by -> limit

多表查询


 

#建表create table department(id int,name varchar(20) );create table employee(id int primary key auto_increment,name varchar(20),sex enum('male','female') not null default 'male',age int,dep_id int);#插入数据insert into department values(200,'技术'),(201,'人力资源'),(202,'销售'),(203,'运营');insert into employee(name,sex,age,dep_id) values('egon','male',18,200),('alex','female',48,201),('wupeiqi','male',38,201),('yuanhao','female',28,202),('liwenzhou','male',18,200),('jingliyang','female',18,204);#查看表结构和数据mysql> desc department;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || name | varchar(20) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+mysql> desc employee;+--------+-----------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+--------+-----------------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(20) | YES | | NULL | || sex | enum('male','female') | NO | | male | || age | int(11) | YES | | NULL | || dep_id | int(11) | YES | | NULL | |+--------+-----------------------+------+-----+---------+----------------+mysql> select * from department;+------+--------------+| id | name |+------+--------------+| 200 | 技术 || 201 | 人力资源 || 202 | 销售 || 203 | 运营 |+------+--------------+mysql> select * from employee;+----+------------+--------+------+--------+| id | name | sex | age | dep_id |+----+------------+--------+------+--------+| 1 | egon | male | 18 | 200 || 2 | alex | female | 48 | 201 || 3 | wupeiqi | male | 38 | 201 || 4 | yuanhao | female | 28 | 202 || 5 | liwenzhou | male | 18 | 200 || 6 | jingliyang | female | 18 | 204 |+----+------------+--------+------+--------+
准备工作

多表连接查询

#重点:外链接语法SELECT 字段列表    FROM 表1 INNER|LEFT|RIGHT JOIN 表2    ON 表1.字段 = 表2.字段;# INNER 内链接 只连接匹配的行# LEFT 左连接 优先显示左表全部记录# RIGHT 右连接 优先显示右表全部记录

交叉连接(不适合任何匹配条件, 生成笛卡儿积)

mysql> select * from employee,department;+----+------------+--------+------+--------+------+--------------+| id | name       | sex    | age  | dep_id | id   | name         |+----+------------+--------+------+--------+------+--------------+|  1 | egon       | male   |   18 |    200 |  200 | 技术         ||  1 | egon       | male   |   18 |    200 |  201 | 人力资源     ||  1 | egon       | male   |   18 |    200 |  202 | 销售         ||  1 | egon       | male   |   18 |    200 |  203 | 运营         ||  2 | alex       | female |   48 |    201 |  200 | 技术         ||  2 | alex       | female |   48 |    201 |  201 | 人力资源     ||  2 | alex       | female |   48 |    201 |  202 | 销售         ||  2 | alex       | female |   48 |    201 |  203 | 运营         ||  3 | wupeiqi    | male   |   38 |    201 |  200 | 技术         ||  3 | wupeiqi    | male   |   38 |    201 |  201 | 人力资源     ||  3 | wupeiqi    | male   |   38 |    201 |  202 | 销售         ||  3 | wupeiqi    | male   |   38 |    201 |  203 | 运营         ||  4 | yuanhao    | female |   28 |    202 |  200 | 技术         ||  4 | yuanhao    | female |   28 |    202 |  201 | 人力资源     ||  4 | yuanhao    | female |   28 |    202 |  202 | 销售         ||  4 | yuanhao    | female |   28 |    202 |  203 | 运营         ||  5 | liwenzhou  | male   |   18 |    200 |  200 | 技术         ||  5 | liwenzhou  | male   |   18 |    200 |  201 | 人力资源     ||  5 | liwenzhou  | male   |   18 |    200 |  202 | 销售         ||  5 | liwenzhou  | male   |   18 |    200 |  203 | 运营         ||  6 | jingliyang | female |   18 |    204 |  200 | 技术         ||  6 | jingliyang | female |   18 |    204 |  201 | 人力资源     ||  6 | jingliyang | female |   18 |    204 |  202 | 销售         ||  6 | jingliyang | female |   18 |    204 |  203 | 运营         |+----+------------+--------+------+--------+------+--------------+
View Code

内连接(INNER JOIN)

#找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果#department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来mysql> select employee.id,employee.name,employee.age,employee.sex,department.name from employee inner join department on employee.dep_id=department.id; +----+-----------+------+--------+--------------+| id | name      | age  | sex    | name         |+----+-----------+------+--------+--------------+|  1 | egon      |   18 | male   | 技术         ||  2 | alex      |   48 | female | 人力资源     ||  3 | wupeiqi   |   38 | male   | 人力资源     ||  4 | yuanhao   |   28 | female | 销售         ||  5 | liwenzhou |   18 | male   | 技术         |+----+-----------+------+--------+--------------+#上述sql等同于mysql> select employee.id,employee.name,employee.age,employee.sex,department.name from employee,department where employee.dep_id=department.id;
View Code

外连接->左连接(LEFT JOIN)

#以左表为准,即找出所有员工信息,当然包括没有部门的员工#本质就是:在内连接的基础上增加左边有右边没有的结果mysql> select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id;+----+------------+--------------+| id | name       | depart_name  |+----+------------+--------------+|  1 | egon       | 技术         ||  5 | liwenzhou  | 技术         ||  2 | alex       | 人力资源     ||  3 | wupeiqi    | 人力资源     ||  4 | yuanhao    | 销售         ||  6 | jingliyang | NULL         |+----+------------+--------------+
View Code

外连接->右连接(RIGHT JOIN)

#以右表为准,即找出所有部门信息,包括没有员工的部门#本质就是:在内连接的基础上增加右边有左边没有的结果mysql> select employee.id,employee.name,department.name as depart_name from employee right join department on employee.dep_id=department.id;+------+-----------+--------------+| id   | name      | depart_name  |+------+-----------+--------------+|    1 | egon      | 技术         ||    2 | alex      | 人力资源     ||    3 | wupeiqi   | 人力资源     ||    4 | yuanhao   | 销售         ||    5 | liwenzhou | 技术         || NULL | NULL      | 运营         |+------+-----------+--------------+
View Code

全外连接(UNION)

全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果#注意:mysql不支持全外连接 full JOIN#强调:mysql可以使用此种方式间接实现全外连接select * from employee left join department on employee.dep_id = department.idunionselect * from employee right join department on employee.dep_id = department.id;#查看结果+------+------------+--------+------+--------+------+--------------+| id   | name       | sex    | age  | dep_id | id   | name         |+------+------------+--------+------+--------+------+--------------+|    1 | egon       | male   |   18 |    200 |  200 | 技术         ||    5 | liwenzhou  | male   |   18 |    200 |  200 | 技术         ||    2 | alex       | female |   48 |    201 |  201 | 人力资源     ||    3 | wupeiqi    | male   |   38 |    201 |  201 | 人力资源     ||    4 | yuanhao    | female |   28 |    202 |  202 | 销售         ||    6 | jingliyang | female |   18 |    204 | NULL | NULL         || NULL | NULL       | NULL   | NULL |   NULL |  203 | 运营         |+------+------------+--------+------+--------+------+--------------+#注意 union与union all的区别:union会去掉相同的纪录
View Code

符合条件连接查询

#示例1:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,即找出公司所有部门中年龄大于25岁的员工select employee.name,employee.age from employee,department    where employee.dep_id = department.id    and age > 25;#示例2:以内连接的方式查询employee和department表,并且以age字段的升序方式显示select employee.id,employee.name,employee.age,department.name from employee,department    where employee.dep_id = department.id    and age > 25    order by age asc;
View Code

子查询:

#1:子查询是将一个查询语句嵌套在另一个查询语句中。#2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。#3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字#4:还可以包含比较运算符:= 、 !=、> 、

IN

#查询employee表,但dep_id必须在department表中出现过select * from employee    where dep_id in        (select id from department);
View Code

比较运算符

#比较运算符:=、!=、>、>=、<、<=、<>#查询平均年龄在25岁以上的部门名select id,name from department    where id in         (select dep_id from employee group by dep_id having avg(age) > 25);#查看技术部员工姓名select name from employee    where dep_id in         (select id from department where name='技术');#查看不足1人的部门名select name from department    where id in         (select dep_id from employee group by dep_id having count(id) <=1);
View Code

EXISTS

# EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回# 查询的记录。# 而是返回一个真假值。True或False# 当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语# 句不进行查询#department表中存在dept_id=203,Turemysql> select * from employee    ->     where exists    ->         (select id from department where id=200);+----+------------+--------+------+--------+| id | name       | sex    | age  | dep_id |+----+------------+--------+------+--------+|  1 | egon       | male   |   18 |    200 ||  2 | alex       | female |   48 |    201 ||  3 | wupeiqi    | male   |   38 |    201 ||  4 | yuanhao    | female |   28 |    202 ||  5 | liwenzhou  | male   |   18 |    200 ||  6 | jingliyang | female |   18 |    204 |+----+------------+--------+------+--------+#department表中存在dept_id=205,Falsemysql> select * from employee    ->     where exists    ->         (select id from department where id=204);Empty set (0.00 sec)
View Code

转载于:https://www.cnblogs.com/wangyuanming/p/7731892.html

你可能感兴趣的文章
Git 笔记 - section 1
查看>>
2018 Multi-University Training Contest 10 - TeaTree
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
《人人都是产品经理》书籍目录
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
Fireworks基本使用
查看>>
两台电脑间的消息传输
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
iOS并发编程笔记【转】
查看>>
08号团队-团队任务5:项目总结会
查看>>
SQL2005 删除空白行null
查看>>
mysql备份与恢复
查看>>