select基本语句
select 查询字段 from 表名;
查询的字段指的是你要检索的内容
SELECT id,name from person;
如果你要查询所有信息,在sql中可以使用*
SELECT * from person ;
这种形式是select语句的最基础形式,再此基础上,可以使用其他的关键字,使得查询结果多样化,添加where关键字,指定以某种条件进行查询。
SELECT * from person WHERE id>3;
条件查询
用where表示查询的条件
where语句是用来作为条件判断的语句,多个条件之间用and或者or连接,返回结果是where语句中为True的结果。
SELECT id,name,age ,sex from person where id BETWEEN 1 and 10
SELECT id,name,age ,sex from person where id>5 and sex='男'
SELECT id,name,age ,sex from person where id>5 or sex='男'
模糊查询
%匹配0或多个字符,一般不用左模糊(%放在左边,导致索引失效,降低查询效率)
_代表匹配一个字符
SELECT ~name~FROM person WHERE name LIKE'路人%';
SELECT~name~FROM person WHERE name LIKE'_人_';
分页查询
当数据量过大时,在一页中查看数据是一件非常麻烦的事情
SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句,在MySQL数据库中使用LIMIT子句进行分页查询
分页查询第m页,每页展示n 条数据 limit (m-1)*n, n
SELECT id,name,age,dept FROM person LIMIT 0,5;
SELECT id,name,age,deptFROM person LIMIT 5,5;
SELECT id,name,age,deptFROM person LIMIT 10,5;
SELECT id,name,age,deptFROM person LIMIT 15,5;
排序
排序 order by 字段名 (ASC 升序,DESC降序)
SELECT id,name,age,dept FROM person ORDER BY age ASC;
SELECT id,name,age,dept FROM person ORDER BY age DESC;
聚合函数
- count() 查询有多少条记录
- sum() 查询某个字段的和
- avg() 查询某个字段的平均数
- max() 查询某个字段的最大值
- min()查询某个字段的最小值
- CAST(avg(age) as decimal(10,0)) 保留几位小数
SELECT COUNT(0) FROM person;SELECT SUM(age) FROM person;
SELECT AVG(age) FROM person;SELECT MIN(age) FROM person;
SELECT MAX(age) FROM person;
SELECT CAST(avg(age) as decimal(10,@)) as avg from person;
分组查询
在MySQL中,分组查询是一种用于对数据进行分组和聚合操作的查询方式。它允许您根据指定的列对数据进行分组,并对每个组应用聚合函数来计算汇总结果。
SELECT sex,count(0),avg(age) from person GROUP BY sex;
由于 sql_mode 默认设置为 only_full_group_by 所以它无法通过字段进行分组但将 sql_mode 设置为非 only_full_group_by 模式就行了,例如设置为:
SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SELECT id,name,dept, age FROM person GROUP BY dept;
分组也可以附加上条件
having条件查询 where分组前,having分组后的条件
SELECT id, name, dept, age ,AVG(age)FROM person WHERE age>20 GROUP BY dept HAVING AVG(age)>30;
子查询
子查询就是把查询到的结果当作另一个查询的条件
SELECT id,'name',dept,age FROM person WHERE dept in (SELECT d FROM dept WHERE name'='研发部');
内连接
MySQL中的内连接(Inner Join)用于从多个表中检索满足连接条件的记录。内连接基于两个或多个表之间的共享列,将它们连接在一起,并返回满足连接条件的记录。
笛卡尔积 查询出来的结果没有意义
select * from person,dept;
显示内连接 inner可以省略
SELECT * FROM person INNER JOIN dept on person.id=dept.id;
SELECT * FROM person JOIN dept on person.dept=dept.id;
隐式内连接
SELECT person,id,person.name,dept."name' ,age FROM person ,dept WHERE person,dept-dept.id;
注意:可以表名起别名,如果两个表中有相同的字段名称,那么需要用别名+点号来区别,否则报错。
外连接
外连接(Outer Join)是MySQL中的一种连接操作,它用于从两个或多个表中检索满足连接条件的记录,同时也包括未匹配的记录。
在外连接中,如果一个表的记录没有与另一个表的记录匹配,仍然会返回该表的记录,并用NULL值填充未匹配的列。
左外连接 left [outer] join 查询的是左边表的所有部分和右边表的交集
SELECT person.id, person.name, dept.name '部门',person,age FROM person LEFT OUTER JoIN dept oN person.dept = dept.id;
右外连接 right [outer] join 查询的是右边表的所有部分和左边表的交集
SELECT person.id, person.name, dept.name '部门',person,age FROM person RIGHT OUTER JoIN dept oN person.dept = dept.id;