mysql 高级查询总结_MySQL高级查询总结

(一)模糊查询

- 1、-like:

mysql> select name as "姓名" from score where name like '张%';

+--------+

| 姓名|

+--------+

| 张三|

| 张玉洁|

| 张三|

| 张三|

| 张三|

| 张玉洁|

| 张玉洁|

| 张玉洁|

+--------+

8 rows in set

2、is null

mysql> select name as "姓名" from score where name is null;

Empty set

3、between

mysql>  select name , score from score where score between 80 and 100;

+--------+-------+

| name   | score |

+--------+-------+

| 张玉洁|    98 |

| 张三|    86 |

| 张三|    97 |

| 张玉洁|    98 |

| 李一|    80 |

+--------+-------+

5 rows in set

4、in

mysql> select name,score from score where score in (97,98);

+--------+-------+

| name   | score |

+--------+-------+

| 张玉洁|    98 |

| 张三|    97 |

| 张玉洁|    98 |

+--------+-------+

3 rows in set

(二)聚合函数

1、sum()

mysql> select sum(score) as "李一总成绩" from score where name="李一";

+------------+

| 李一总成绩|

+------------+

| 223        |

+------------+

1 row in set

2、avg()

mysql> select avg(score) as "李一平均成绩" from score where name="李一";

+--------------+

| 李一平均成绩|

+--------------+

| 74.3333      |

+--------------+

1 row in set

3.max() min()

mysql> select max(score) from score;

+------------+

| max(score) |

+------------+

|         98 |

+------------+

1 row in set

4.count()

mysql> select count(score) as "大于70分的成绩个数" from score where score > 70;

+--------------------+

| 大于70分的成绩个数|

+--------------------+

|                  6 |

+--------------------+

1 row in set

(三)分组查询:

mysql> select name,avg(score),courseName from score group by name,courseName;

+--------+------------+------------+

| name   | avg(score) | courseName |

+--------+------------+------------+

| 张三| 97.0000    |数学|

| 张三| 67.0000    |英语|

| 张三| 60.0000    |语文|

| 张玉洁| 43.0000    |数学|

| 张玉洁| 98.0000    |英语|

| 张玉洁| 98.0000    |语文|

| 李一| 80.0000    |数学|

| 李一| 66.0000    |英语|

| 李一| 77.0000    |语文|

+--------+------------+------------+

mysql> select name,avg(score),courseName from score group by name,courseName having count(courseName)>1;

+--------+------------+------------+

| name   | avg(score) | courseName |

+--------+------------+------------+

| 张三| 60.0000    |语文|

| 张玉洁| 43.0000    |数学|

+--------+------------+------------+

2 rows in set

分组查询总结:

1.WHERE子句从数据源中去掉不符合其搜索条件的数据

2.GROUP BY子句搜集数据行到各个组中

3.统计函数为各个组计算统计值

4.HAVING子句去掉不符合其组搜索条件的各组数据行

5使用GROUP BY时,select后面出现的内容要么为聚合函数,要么为group by后面出现的内容

(四)多表链接查询:

1.内连接:

(1)用inner join 但这种方法不常用 常用第二种;

mysql> select username,starname from users as u inner join star as s on u.starid=s.starid;

+----------+----------+

| username | starname |

+----------+----------+

| 张一|白羊座|

| 李二|金牛座|

| 王三|双子座|

| 张四|巨蟹座|

| 李五|狮子座|

| 张八|处女座|

| 王九|天秤座|

| 张言|天蝎座|

| 李志|射手座|

| 王月|水瓶座|

| 张欣|双鱼座|

+----------+----------+

11 rows in set

(2)from where

select username,starname from users as u,star s where u.starid=s.starid;

+----------+----------+

| username | starname |

+----------+----------+

| 张一|白羊座|

| 李二|金牛座|

| 王三|双子座|

| 张四|巨蟹座|

| 李五|狮子座|

| 张八|处女座|

| 王九|天秤座|

| 张言|天蝎座|

| 李志|射手座|

| 王月|水瓶座|

| 张欣|双鱼座|

+----------+----------+

11 rows in set

2.外连接:

(1)左连接,返回左表的所有数据以及右表对应的数据。  Left join

mysql> select starname,username from users as u left join star s on u.starid=s.starid;

+----------+----------+

| starname | username |

+----------+----------+

| 白羊座|张一|

| 金牛座|李二|

| 双子座|王三|

| 巨蟹座|张四|

| 狮子座|李五|

| 处女座|张八|

| 天秤座|王九|

| 天蝎座|张言|

| 射手座|李志|

| 水瓶座|王月|

| 双鱼座|张欣|

+----------+----------+

11 rows in set

(2)右连接,返回右表的所有数据以及左表相对应的数据。Right join

(五)子查询

在某些特定的业务需求下,当进行查询的时候,需要的条件是另外一个 select语句的结果,这个时候,就要用到子查询。

用于子查询的关键字主要包括 in、not in、=、!=、exists、not exists……

1. 比较运算符  >   

mysql> select username,height from users where height >(select height from users where username="张四");

+----------+--------+

| username | height |

+----------+--------+

| 李二|    155 |

| 王三|    160 |

| 李五|    160 |

| 张八|    168 |

| 王九|    170 |

| 张言|    176 |

| 李志|    180 |

| 王月|    176 |

| 张欣|    180 |

+----------+--------+

9 rows in set

2. 子查询 in

mysql> select starid,username,height from users where starid in(select starid from users where height>170);

+--------+----------+--------+

| starid | username | height |

+--------+----------+--------+

|      8 | 张言|    176 |

|      9 | 李志|    180 |

|     11 | 王月|    176 |

|     12 | 张欣|    180 |

+--------+----------+--------+

4 rows in set

3. Exists

(1)mysql> select starname from star where exists(select * from star where starid=13);

Empty set

(2) mysql> select starname from star where exists(select * from star where starid<13);

+----------+

| starname |

+----------+

| 白羊座|

| 金牛座|

| 双子座|

| 巨蟹座|

| 狮子座|

| 处女座|

| 天秤座|

| 天蝎座|

| 射手座|

| 摩羯座|

| 水瓶座|

| 双鱼座|

+----------+

12 rows in set

Exists()括号内为真 则前面的语句执行,为假则前面的语句不执行;EXISTS也可以作为WHERE语句的子查询,但一般都能用IN子查询替换。

4. not exists

与exists刚好是反的。

5. mysql> select sum(avg_score) from(select avg(score) as avg_score from score group by name) as t1;

+----------------+

| sum(avg_score) |

+----------------+

| 215.8333       |

+----------------+

1 row in set

mysql>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值