• Mysql之select查询


    单表查询


    语法:

    # 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 |
    +----+--------------+--------+------+------------+-----------------+-----------------------------------------------------------+-------+
    
    # 创建表 lol
    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
    );
    
    
    # 插入数据 
    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: 0
    
    mysql> 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: 0
    
    mysql> 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)
    
    # 别名 as
    mysql> 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 not
    mysql> 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 by
    
    mysql> 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.id
    union
    select * 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,Ture
    mysql> 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,False
    mysql> select * from employee
        ->     where exists
        ->         (select id from department where id=204);
    Empty set (0.00 sec)
    View Code
  • 相关阅读:
    apache的并发
    PHP 文件上传
    打包备份3天
    dz改写CSS
    linux cifs自动挂载远程windows硬盘或文件夹
    C++面向对象
    "i++"和"++i"
    《程序员面试宝典》一个程序
    《程序员面试宝典》强制转换,内存地址
    《程序员面试宝典》编程技巧--位运算
  • 原文地址:https://www.cnblogs.com/wangyuanming/p/7731892.html
Copyright © 2020-2023  润新知