mysql怎么进行单表查询_MySQL之单表查询

更新时间:2023-05-05 14:03:07 阅读: 评论:0

mysql怎么进⾏单表查询_MySQL之单表查询⼀、单表查询的语法
SELECT 字段1,字段2...
FROM 表名
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
⼆、关键字的执⾏顺序
1.找到表:from
2.拿着where指定的约束条件,去⽂件/表中取出⼀条条记录
3.将取出的⼀条条记录进⾏分组group by,如果没有group by,则整体作为⼀组
4.将分组的结果进⾏having过滤
5.执⾏lect
6.去重
7.将结果按条件排序:order by
8.限制结果的显⽰条数
SELECT 字段1,字段2... ⑤
FROM 表名     ①
WHERE 条件 ②
GROUP BY field ③
HAVING 筛选    ④
ORDER BY field  ⑥
LIMIT 限制条数 ⑦
三、简单查询
#简单查询
SELECT id,name,x,age,hire_date,post,post_comment,salary,office,depart_id
FROM employee;
SELECT * FROM employee;
SELECT name,salary FROM employee;
#避免重复DISTINCT
SELECT DISTINCT post FROM employee;
#通过四则运算查询
SELECT name, salary*12 FROM employee;
SELECT name, salary*12 AS Annual_salary FROM employee; SELECT name, salary*12 Annual_salary FROM employee;
#定义显⽰格式
CONCAT() 函数⽤于连接字符串
SELECT CONCAT('姓名: ',name,' 年薪: ', salary*12) AS Annual_salary FROM employee;
CONCAT_WS() 第⼀个参数为分隔符
SELECT CONCAT_WS(':',name,salary*12) AS Annual_salary
FROM employee;
结合CASE语句:
SELECT
(
CASE
WHEN NAME = 'egon' THEN
NAME
WHEN NAME = 'alex' THEN
CONCAT(name,'_BIGSB')
ELSE
concat(NAME, 'SB')
END
) as new_name
FROM
emp;
四、where约束
where字句中可以使⽤:
1. ⽐较运算符:> < >= <= <> !=
2. between 80 and 100 值在10到20之间
3. in(80,90,100) 值是10或20或30
4. like 'egon%' pattern可以是%或_, %表⽰任意多字符 _表⽰⼀个字符
5. 逻辑运算符:在多个条件直接可以使⽤逻辑运算符 and or not
#1:单条件查询
SELECT name FROM employee
WHERE post='sale';
#2:多条件查询
SELECT name,salary FROM employee
WHERE post='teacher' AND salary>10000;
#3:关键字BETWEEN AND
SELECT name,salary FROM employee
WHERE salary BETWEEN 10000 AND 20000;
SELECT name,salary FROM employee
WHERE salary NOT BETWEEN 10000 AND 20000;
#4:关键字IS NULL(判断某个字段是否为NULL不能⽤等号,需要⽤IS)
SELECT name,post_comment FROM employee
WHERE post_comment IS NULL;
SELECT name,post_comment FROM employee
WHERE post_comment IS NOT NULL;
SELECT name,post_comment FROM employee
WHERE post_comment=''; 注意''是空字符串,不是null
ps:
执⾏
update employee t post_comment='' where id=2;
再⽤上条查看,就会有结果了
#5:关键字IN集合查询
SELECT name,salary FROM employee
WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ; SELECT name,salary FROM employee
WHERE salary IN (3000,3500,4000,9000) ;
SELECT name,salary FROM employee
WHERE salary NOT IN (3000,3500,4000,9000) ;
#6:关键字LIKE模糊查询
通配符’%’
SELECT * FROM employee
WHERE name LIKE 'eg%';
通配符’_’
SELECT * FROM employee
WHERE name LIKE 'al__';
五 分组查询:GROUP BY
1 什么是分组?为什么要分组?
#1、⾸先明确⼀点:分组发⽣在where之后,即分组是基于where之后得到的记录⽽进⾏的
#2、分组指的是:将所有记录按照某个相同字段进⾏归类,⽐如针对员⼯信息表的职位分组,或者按照性别进⾏分组等
#3、为何要分组呢?
取每个部门的最⾼⼯资
取每个部门的员⼯数
取男⼈数和⼥⼈数
⼩窍门:‘每’这个字后⾯的字段,就是我们分组的依据#4、⼤前提:
可以按照任意字段分组,但是分组完毕后,⽐如group by post,只能查看post字段,如果想查看组内信息,需要借助于聚合函数2 GROUP BY
单独使⽤GROUP BY关键字分组
SELECT post FROM employee GROUP BY post;
注意:我们按照post字段分组,那么lect查询的字段只能是post,想要获取组内的其他相关信息,需要借助函数
GROUP BY关键字和GROUP_CONCAT()函数⼀起使⽤
SELECT post,GROUP_CONCAT(name) FROM employee GROUP BY post;#按照岗位分组,并查看组内成员名
SELECT post,GROUP_CONCAT(name) as emp_members FROM employee GROUP BY post;
GROUP BY与聚合函数⼀起使⽤
lect post,count(id) as countfrom employee group by post;#按照岗位分组,并查看每个组有多少⼈
强调:
如果我们⽤unique的字段作为分组的依据,则每⼀条记录⾃成⼀组,这种分组没有意义
多条记录之间的某个字段值相同,该字段通常⽤来作为分组的依据
3 聚合函数
#强调:聚合函数聚合的是组的内容,若是没有分组,则默认⼀组
⽰例:
SELECT COUNT(*) FROM employee;
SELECT COUNT(*) FROM employee WHERE depart_id=1;
SELECT MAX(salary) FROM employee;
SELECT MIN(salary) FROM employee;
SELECT AVG(salary) FROM employee;
SELECT SUM(salary) FROM employee;
SELECT SUM(salary) FROM employee WHERE depart_id=3;
4 HAVING过滤
HAVING与WHERE不⼀样的地⽅在于
#执⾏优先级从⾼到低:where > group by > having#1. Where 发⽣在分组group by之前,因⽽Where中可以有任意字段,但是绝对不能使⽤聚合函数。
#2. Having发⽣在分组group by之后,因⽽Having中可以使⽤分组的字段,⽆法直接取到其他字段,可以使⽤聚合函数
mysql>lect @@sql_mode;+--------------------+
| @@sql_mode |
+--------------------+
| ONLY_FULL_GROUP_BY |
+--------------------+
1 row in t (0.00c)
mysql> lect * from emp where salary > 100000;+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+
| id | name | x | age | hire_date | post | post_comment | salary | office | depart_id |
+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+
| 2 | alex | male | 78 | 2015-03-02 | teacher | NULL | 1000000.31 | 401 | 1 |
+----+------+------+-----+------------+---------+--------------+------------+--------+-----------+
1 row in t (0.00c)
mysql> lect * from emp having salary > 100000;
ERROR1463 (42000): Non-grouping field 'salary' is ud inHAVING clau
mysql> lect post,group_concat(name) from emp group by post having salary > 10000;#错误,分组后⽆法直接取到salary字段
ERROR 1054 (42S22): Unknown column 'salary' in 'having clau'mysql> lect post,group_concat(
name) from emp group by post having avg(salary) > 10000;+-----------+-------------------------------------------------------+
| post | group_concat(name) |
+-----------+-------------------------------------------------------+
| operation | 程咬铁,程咬铜,程咬银,程咬⾦,张野 |
| teacher | 成龙,jinxin,jingliyang,liwenzhou,yuanhao,wupeiqi,alex |
+-----------+-------------------------------------------------------+
2 rows in t (0.00 c)
验证
六 查询排序:ORDER BY
按单列排序
SELECT * FROM employee ORDER BY salary;
SELECT * FROM employee ORDER BY salary ASC;
SELECT * FROM employee ORDER BY salary DESC;
按多列排序:先按照age排序,如果年纪相同,则按照薪资排序

本文发布于:2023-05-05 14:03:07,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/532498.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分组   字段   查询
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图