记录的查询语法
-- 单表查询
select <字段...>from <库名>.<表名>
where <条件>
group by <分组条件>
having <过滤条件>
order by <排序字段> {ASC | DESC} -- 默认升序ASC
limit <显示条数>;
-- 创建表
create table user(
id int primary key auto_increment,
name varchar(15) not null,
gender enum('male','female')default 'male',
age int not null default 18,
salary int not null,
dep varchar(15)
);
-- 插入数据
INSERT INTO user (name, gender, age, salary, dep) VALUES
('张三', 'male', 30, 5000, 'IT部门'),
('李四', 'female', 28, 5500, '财务部'),
('王五', 'male', 35, 6000, '市场部'),
('赵六', 'female', 32, 4800, '人力资源部'),
('钱七', 'male', 29, 4500, '研发部'),
('孙八', 'male', 26, 5200, 'IT部门'),
('周九', 'female', 24, 5300, '财务部'),
('吴十', 'male', 31, 5500, '市场部'),
('郑十一', 'female', 29, 5000, '人力资源部'),
('王十二', 'male', 27, 5100, '研发部'),
('冯十三', 'female', 25, 5400, 'IT部门'),
('陈十四', 'male', 33, 5600, '财务部'),
('楚十五', 'female', 30, 5700, '市场部');
【1】去重(distinct)
-- 用去重的方法查看部门
select distinct dep from user;
+-----------------+
| dep |
+-----------------+
| IT部门 |
| 财务部 |
| 市场部 |
| 人力资源部 |
| 研发部 |
+-----------------+
【2】四则运算
-- 查看每个人的年薪
select name,salary*12 from user;
+-----------+-----------+
| name | salary*12 |
+-----------+-----------+
| 张三 | 60000 |
| 李四 | 66000 |
| 王五 | 72000 |
| 赵六 | 57600 |
| 钱七 | 54000 |
| 孙八 | 62400 |
| 周九 | 63600 |
| 吴十 | 66000 |
| 郑十一 | 60000 |
| 王十二 | 61200 |
| 冯十三 | 64800 |
| 陈十四 | 67200 |
| 楚十五 | 68400 |
+-----------+-----------+
-- 取别名
select name,salary*12 as year_salary from user;
+-----------+-------------+
| name | year_salary |
+-----------+-------------+
| 张三 | 60000 |
| 李四 | 66000 |
| 王五 | 72000 |
| 赵六 | 57600 |
| 钱七 | 54000 |
| 孙八 | 62400 |
| 周九 | 63600 |
| 吴十 | 66000 |
| 郑十一 | 60000 |
| 王十二 | 61200 |
| 冯十三 | 64800 |
| 陈十四 | 67200 |
| 楚十五 | 68400 |
+-----------+-------------+
【3】设置显示格式concat
-- 设置显示格式(姓名:>>>张三 年龄:>>>20 薪资:>>>8000)
select concat('姓名:>>>',name,'年龄:>>>',age,'薪资:>>>',salary) from user;
-- 给字段名取名字
select concat('姓名:>>>',name,'年龄:>>>',age)as 'name age',concat('薪资:>>>',salary) as 'salary' from user;
-- 拼接
select concat_ws('-',name,age,salary) as 'name-age-salary' from user;
【4】where
-- 查询id为3-6之间的数据
select * from user where id between 3 and 6;
+----+--------+--------+-----+--------+-----------------+
| id | name | gender | age | salary | dep |
+----+--------+--------+-----+--------+-----------------+
| 3 | 王五 | male | 35 | 6000 | 市场部 |
| 4 | 赵六 | female | 32 | 4800 | 人力资源部 |
| 5 | 钱七 | male | 29 | 4500 | 研发部 |
| 6 | 孙八 | male | 26 | 5200 | IT部门 |
+----+--------+--------+-----+--------+-----------------+
-- 查询薪资为3000,5000,6000的人
select * from user where salary in(3000,5000,6000);
+----+-----------+--------+-----+--------+-----------------+
| id | name | gender | age | salary | dep |
+----+-----------+--------+-----+--------+-----------------+
| 1 | 张三 | male | 30 | 5000 | IT部门 |
| 3 | 王五 | male | 35 | 6000 | 市场部 |
| 9 | 郑十一 | female | 29 | 5000 | 人力资源部 |
+----+-----------+--------+-----+--------+-----------------+
-- 查询 员工姓名中包含三的姓名和薪资
select name,salary from user where name like'%三%';
+-----------+--------+
| name | salary |
+-----------+--------+
| 张三 | 5000 |
| 冯十三 | 5400 |
+-----------+--------+
-- 查询员工姓名是由三个字符组成的姓名和薪资
select name,salary from user where char_length(name) = 3;
select name,salary from user where name like '___';
+-----------+--------+
| name | salary |
+-----------+--------+
| 郑十一 | 5000 |
| 王十二 | 5100 |
| 冯十三 | 5400 |
| 陈十四 | 5600 |
| 楚十五 | 5700 |
+-----------+--------+
-- 查询岗位描述为空的员工姓名和岗位名
select name,dep from user where dep_desc is null ;
+-----------+-----------------+
| name | dep |
+-----------+-----------------+
| 李四 | 财务部 |
| 王五 | 市场部 |
| 赵六 | 人力资源部 |
| 钱七 | 研发部 |
| 周九 | 财务部 |
| 吴十 | 市场部 |
| 郑十一 | 人力资源部 |
| 王十二 | 研发部 |
| 陈十四 | 财务部 |
| 楚十五 | 市场部 |
+-----------+-----------------+
【5】group by
-- 获取每个部门的最高薪资(max)
select dep,max(salary) from user group by dep;
+-----------------+-------------+
| dep | max(salary) |
+-----------------+-------------+
| IT部门 | 5400 |
| 人力资源部 | 5000 |
| 市场部 | 6000 |
| 研发部 | 5100 |
| 财务部 | 5600 |
+-----------------+-------------+
-- 获取每个部门的最低薪资(min)
select dep , min(salary) from user group by dep;
+-----------------+-------------+
| dep | min(salary) |
+-----------------+-------------+
| IT部门 | 5000 |
| 人力资源部 | 4800 |
| 市场部 | 5500 |
| 研发部 | 4500 |
| 财务部 | 5300 |
+-----------------+-------------+
-- 获取每个部门的平均薪资(avg)
select dep, avg(salary) from user group by dep;
+-----------------+-------------+
| dep | avg(salary) |
+-----------------+-------------+
| IT部门 | 5200.0000 |
| 人力资源部 | 4900.0000 |
| 市场部 | 5733.3333 |
| 研发部 | 4800.0000 |
| 财务部 | 5466.6667 |
+-----------------+-------------+
-- 获取每个部门的薪资总和(sum)
select dep, sum(salary) from user group by dep;
+-----------------+-------------+
| dep | sum(salary) |
+-----------------+-------------+
| IT部门 | 15600 |
| 人力资源部 | 9800 |
| 市场部 | 17200 |
| 研发部 | 9600 |
| 财务部 | 16400 |
+-----------------+-------------+
-- 获取每个部门的人数(count)
select dep, count(id) from user group by dep;
+-----------------+------------+
| dep | count(dep) |
+-----------------+------------+
| IT部门 | 3 |
| 人力资源部 | 2 |
| 市场部 | 3 |
| 研发部 | 2 |
| 财务部 | 3 |
+-----------------+------------+
-- 查询分组之后的部门名称和每个部门下所有的员工姓名(group_concat)
select dep,group_concat(name) from user group by dep;
+-----------------+-------------------------+
| dep | group_concat(name) |
+-----------------+-------------------------+
| IT部门 | 张三,孙八,冯十三 |
| 人力资源部 | 赵六,郑十一 |
| 市场部 | 王五,吴十,楚十五 |
| 研发部 | 钱七,王十二 |
| 财务部 | 李四,周九,陈十四 |
+-----------------+-------------------------+
【6】having
-- 查询所有部门内,员工数量小于3的部门名,以及该部门内的员工名和员工数量
select dep,group_concat(name),count(id)from user group by dep having count(id)<3;
+-----------------+--------------------+-----------+
| dep | group_concat(name) | count(id) |
+-----------------+--------------------+-----------+
| 人力资源部 | 赵六,郑十一 | 2 |
| 研发部 | 钱七,王十二 | 2 |
+-----------------+--------------------+-----------+
-- 查询各部门年龄大于20,且员工数量大于2的部门名,以及人数
select dep, count(id) from user where age > 20 group by dep having count(id)>2;
+-----------+-----------+
| dep | count(id) |
+-----------+-----------+
| IT部门 | 3 |
| 市场部 | 3 |
| 财务部 | 3 |
+-----------+-----------+
【7】order by
- order by是排序,默认是升序 desc是降序,升序是asc
-- 对所有员工按照工资进行降序排列
select * from user order by salary desc;
+----+-----------+--------+-----+--------+-----------------+----------+
| id | name | gender | age | salary | dep | dep_desc |
+----+-----------+--------+-----+--------+-----------------+----------+
| 3 | 王五 | male | 35 | 6000 | 市场部 | NULL |
| 13 | 楚十五 | female | 30 | 5700 | 市场部 | NULL |
| 12 | 陈十四 | male | 33 | 5600 | 财务部 | NULL |
| 2 | 李四 | female | 28 | 5500 | 财务部 | NULL |
| 8 | 吴十 | male | 31 | 5500 | 市场部 | NULL |
| 11 | 冯十三 | female | 25 | 5400 | IT部门 | 牛逼 |
| 7 | 周九 | female | 24 | 5300 | 财务部 | NULL |
| 6 | 孙八 | male | 26 | 5200 | IT部门 | 牛逼 |
| 10 | 王十二 | male | 27 | 5100 | 研发部 | NULL |
| 1 | 张三 | male | 30 | 5000 | IT部门 | 牛逼 |
| 9 | 郑十一 | female | 29 | 5000 | 人力资源部 | NULL |
| 4 | 赵六 | female | 32 | 4800 | 人力资源部 | NULL |
| 5 | 钱七 | male | 29 | 4500 | 研发部 | NULL |
+----+-----------+--------+-----+--------+-----------------+----------+
- 可以指定第二个排序条件,比如说如果工资相同,再指定一个以id排序
select * from user order by salary desc, id desc;
+----+-----------+--------+-----+--------+-----------------+----------+
| id | name | gender | age | salary | dep | dep_desc |
+----+-----------+--------+-----+--------+-----------------+----------+
| 3 | 王五 | male | 35 | 6000 | 市场部 | NULL |
| 13 | 楚十五 | female | 30 | 5700 | 市场部 | NULL |
| 12 | 陈十四 | male | 33 | 5600 | 财务部 | NULL |
| 8 | 吴十 | male | 31 | 5500 | 市场部 | NULL |
| 2 | 李四 | female | 28 | 5500 | 财务部 | NULL |
| 11 | 冯十三 | female | 25 | 5400 | IT部门 | 牛逼 |
| 7 | 周九 | female | 24 | 5300 | 财务部 | NULL |
| 6 | 孙八 | male | 26 | 5200 | IT部门 | 牛逼 |
| 10 | 王十二 | male | 27 | 5100 | 研发部 | NULL |
| 9 | 郑十一 | female | 29 | 5000 | 人力资源部 | NULL |
| 1 | 张三 | male | 30 | 5000 | IT部门 | 牛逼 |
| 4 | 赵六 | female | 32 | 4800 | 人力资源部 | NULL |
| 5 | 钱七 | male | 29 | 4500 | 研发部 | NULL |
+----+-----------+--------+-----+--------+-----------------+----------+
【8】limit
-- 查询工资前五的数据
select * from user order by salary limit 5;
+----+-----------+--------+-----+--------+-----------------+----------+
| id | name | gender | age | salary | dep | dep_desc |
+----+-----------+--------+-----+--------+-----------------+----------+
| 5 | 钱七 | male | 29 | 4500 | 研发部 | NULL |
| 4 | 赵六 | female | 32 | 4800 | 人力资源部 | NULL |
| 1 | 张三 | male | 30 | 5000 | IT部门 | 牛逼 |
| 9 | 郑十一 | female | 29 | 5000 | 人力资源部 | NULL |
| 10 | 王十二 | male | 27 | 5100 | 研发部 | NULL |
+----+-----------+--------+-----+--------+-----------------+----------+