基本查询
# 基本查询 配符查询以后去了公司不能用。
select * from person
# 可以用as给字段起别名,as也可以省略。
SELECT id ,name '名字',age as '年龄',sex from person
条件查询
-- 条件查询
-- 查询id是1到10之间的数据
SELECT id,name,age ,sex from person where id BETWEEN 1 and 10
-- 查询id大于5和性别是男的数据
SELECT id,name,age ,sex from person where id>5 and sex='男'
-- 查询id大于5或者性别是男的数据
SELECT id,name,age ,sex from person where id>5 or sex='男'
# %匹配0或多个字符,一般不用左模糊(%放在左边,导致索引失效,降低查询效率)
-- 查询名字最后一个子是韬的人
SELECT id,name,age ,sex from person where name like '%韬'
-- 查询名字是两个字的且最后一个字是璐的人
SELECT id,name,age ,sex from person where name like '_璐'
-- 查询名字中间为子的人
SELECT id,name,age ,sex from person where name like '%子%'
分页查询
-- 分页查询
# 语法 limit 起始索引,个数
# 分页查询第m页,每页展示n 条数据 limit (m-1)*n, n
SELECT id,name,age ,sex from person limit 0,5;
SELECT id,name,age ,sex from person limit 5,5;
SELECT id,name,age ,sex from person limit 10,5;
SELECT id,name,age ,sex from person limit 15,5;
SELECT id,name,age ,sex from person limit 20,5;
SELECT id,name,age ,sex from person limit 25,5;
-- 排序
# 排序 order by 字段名 (ASC 升序,DESC降序) 默认为升序
SELECT id,name,age ,sex from person ORDER BY age ASC;
SELECT id,name,age ,sex from person ORDER BY age DESC;
聚合函数
-- 聚合函数
-- count() sum() avg() max() min()
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 -- 求最大值
-- CAST(expr AS type) 四舍五入的意思
SELECT CAST(avg(age) as decimal(10,0)) as avg from person
分组查询
-- 分组查询
# 分组查询 group by 字段
SELECT sex,count(0),avg(age) from person GROUP BY sex;
# having条件查询 where分组前,having分组后的条件
SELECT sex,count(0),avg(age) from person where age>8 GROUP BY sex having avg(age)>20;
子查询
-- 子查询
# 把查询到的结果当作另一个查询的条件
SELECT id, name, age, sex
FROM person
WHERE birth IN (SELECT dept_id FROM dept WHERE dept_name='生产部');
内连接
-- 内连接
# 笛卡尔积 查询出来的结果没有意义
select * from person,dept
# 显示内连接 inner可以省略
select person.id,`name`,age,sex,dept_name '部门名称' from person INNER JOIN dept on birth=dept_id
# 隐式内连接
select person.id,`name`,age,sex,dept_name '部门名称' from person,dept where birth=dept_id
外连接
# 左外连接 left [outer] join 查询的是左边表的所有部分和右边表的交集
SELECT
id,
name,
age,
sex,
dept_name
FROM
person
LEFT OUTER JOIN
dept
ON
birth=dept_id
# 右外连接 right [outer] join 查询的是右边表的所有部分和左边表的交集
SELECT
id,
name,
age,
sex,
dept_name
FROM
person
right OUTER JOIN
dept
ON
birth=dept_id
-- 左外连接和右外连接的区别:
-- 左外是以左边的表为主表,查询的结果只关注左表,不在乎右边