mysql(8)多表查询

聚合函数:

max ,min,avg,sum,count

最高分:

同时查询多表:
1.

mysql> select * from user;
+----+----------+------+---------+--------------+
| id | username | sex  | id_card | python_grade |
+----+----------+------+---------+--------------+
|  1 | caomei   | girl | 1001    |           90 |
|  2 | ruirui   | girl | 1002    |           70 |
|  3 | heihei   | girl | 1003    |           50 |
+----+----------+------+---------+--------------+
3 rows in set (0.00 sec)

mysql> select username from user;
+----------+
| username |
+----------+
| caomei   |
| ruirui   |
| heihei   |
+----------+
3 rows in set (0.00 sec)

mysql> select min(python_grade ) from user;
+--------------------+
| min(python_grade ) |
+--------------------+
|                 50 |
+--------------------+
1 row in set (0.01 sec)
select *  
from1 ,表2,表n 
where 条件

(表1和表2完全可以是同一张表!!!)

select max(python_grade) from user; (虚表,假表)

select username from users where python_grade =90;

mysql(8)多表查询_第1张图片

u和temp(虚表)是两张表, u有除了最低分以外的信息,temp有最低分;
但u里面的信息包括最低分;
所以条件 ,当u里面的最低分==temp表的最低分时,条件就筛选出来了;

	->select * 
    -> from user u, (select min(python_grade) as min from user ) temp
    -> where u.python_grade=temp.min;
+----+----------+------+---------+--------------+------+
| id | username | sex  | id_card | python_grade | min  |
+----+----------+------+---------+--------------+------+
|  3 | heihei   | girl | 1003    |           50 |   50 |
+----+----------+------+---------+--------------+------+
1 row in set (0.00 sec)
	->select u.username ,temp.min
    -> from user u , (select min(python_grade ) as min from user ) temp
    -> where u.python_grade =temp.min;
+----------+------+
| username | min  |
+----------+------+
| heihei   |   50 |
+----------+------+
1 row in set (0.01 sec)
  1. 例子:
    如何让两张表产生关联?
    mysql(8)多表查询_第2张图片
    方法:在员工表后面加字段!
    员工和部门是 1对多;
    所以在员工后面加一个表字段;若在部门加字段会有错混乱。
    mysql(8)多表查询_第3张图片

mysql(8)多表查询_第4张图片

mysql(8)多表查询_第5张图片
select +‘的’ 后面了 需要查找的东西
from + 表 表匿名,表 表匿名
where +找出‘ 开发部’/所有部门 + 关联字段,

select d.deptName ,e.empName ,e.salary
  from dept d, emp e 
  where d.id=e.deptId and d.deptName IN('开发部','测试部') ;
select d.deptName ,e.empName ,e.salary
  from dept d, emp e 
  where d.id=e.deptId and d.deptName ='开发部'or d.deptName= '测试部' 

union 联合:
a表一样的字段;
b表一样的字段;
两个连接起来称为一个表。
union把一个表内重复的去掉了
union all 把一个表内 重复的显示出来。
mysql(8)多表查询_第6张图片

多表查询条件:
select * from 表1 表2 表n where 条件
*代表字段。

多表查询方式:

内连接: 表1 inner join 表2 on 条件:
on后面的条件是 多个表之间有关联的条件。
a表有的字段,
b表有的字段,
两个表横着平成一块,
select * from dept d, emp e where d.id=e.depId;

select *
from dept d(表1) inner join emp e(表2)
on d.id=e.depId;()

select *
from dept d(表1) inner join emp e(表2)
on d.id=e.depId where d.deptName= ‘开发部’
条件1 :和两个表有关系 条件2:和两个表没有关联。

外连接:
左连接:
右连接:

模糊查询:
查询books中以王字开头的所有书:
select * from book where B_AUTHOR like ‘王%’;

select * from book where B_AUTHOR like ‘%a’;
以a结尾。

查询所有中包含‘a’的书籍;
select * from book where B_AUTHOR like ‘%a%’

内连接:inner join
select 字段1 字段n from 表1 别名 ,表2 别名 inner join
on条件 where 条件
mysql(8)多表查询_第7张图片

外连接:

左外连接 : left join
以左边的表为准: 剩下右边表没有的字段补充null;

select *from 左表 left join 右表 on 条件。
mysql(8)多表查询_第8张图片

右连接: right join

总结内外连接的区别:

内连接 : on之后的条件,只有同时满足左右两边的表,才可以查找出来,才可以。

mysql(8)多表查询_第9张图片

MySQL limit 2种写法

NeedFSpeeed 2018-03-13 14:55:25 7947 收藏 2
展开
LIMIT 语法
1.limit 1,3 从1位置向后取3条记录。
2.limit 3 offset 1 等价于 limit 1,3

你可能感兴趣的:(Mysql)