单表查询
语法:
# 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或304. 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';
# 使用 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 | 运营 |+----+------------+--------+------+--------+------+--------------+
内连接(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;
外连接->左连接(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 |+----+------------+--------------+
外连接->右连接(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 | 运营 |+------+-----------+--------------+
全外连接(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会去掉相同的纪录
符合条件连接查询:
#示例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;
子查询:
#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);
比较运算符
#比较运算符:=、!=、>、>=、<、<=、<>#查询平均年龄在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);
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)