select语句 8.22

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值