mysql用到的查询语句补充

本文通过具体SQL语句展示了如何从数据中筛选特定条件的记录、计算不同城市的职位数量及各行业中电子商务行业的职位占比,并介绍了时间间隔计算及文本清洗的方法。

部分数据内容如下:
在这里插入图片描述

括号划分优先级

:找出上海本科的职位信息和北京硕士的职位信息

select * from DataAnalyst
where (city = '上海' and education= '本科') 
   or (city = '北京' and education = '硕士')

去重计数

:找出每个城市的职位数

select city,count(distinct positionId) from DataAnalyst
group by city

使用函数,字段运算,concat,round转换小数

:找出每个城市的职位数以及电子商务行业的职位数和占比

select city,
       count(distinct positionId) as '职位数',
       count(distinct if(industryField like '%电子商务%',positionId,null)) as '电商行业',
		CONCAT(ROUND(count(distinct if(industryField like '%电子商务%',positionId,null)) *100/count(distinct positionId),2),'%') as '电商行业占比'
from mydf2
group by city

在这里插入图片描述

时间间隔

select date_add(date(now()) ,interval 1 day)
select date_add(date(now()) ,interval 1 WEEK)

可以改变1为负数,达到减法的目的,也能更改day为week、year等,进行其他时间间隔的运算。如果是求两个时间的间隔,则是datediff(date1,date2)或者timediff(time1,time2)。

文本清洗函数

MySQL支持left、right、mid等函数
locate函数查找位置

select left(salary,locate("K",salary)-1) as bottomSalary,
             substr(salary,locate("-",salary)+1,length(salary)- locate("-",salary)-1) as topSalary,
             city,positionId,workYear
      from DataAnalyst
      where salary not like '%以上%'

在这里插入图片描述
参考:
https://zhuanlan.zhihu.com/p/25203710

<think>嗯,用户想了解常用的MySQL查询语句及其用法。首先,我需要回顾一下自己掌握的MySQL知识,确保信息准确。然后,根据用户提供的三个引用内容,整理出基础查询、条件查询、排序、分页、聚合函数、子查询、连接查询、分组查询、插入、更新、删除这些部分。 首先,基础查询部分,应该包括SELECT *和指定列的查询,用户引用[1]里提到了这些,所以需要先列出。然后是条件查询,WHERE子句和运算符,比如AND、OR,还有IN和BETWEEN,这些在引用[1]和引用[3]都有例子,要确保涵盖。 接下来是排序和分页,引用[3]里有ORDER BY和LIMIT的示例,特别是分页的写法,比如LIMIT 5 OFFSET 10,或者简写成LIMIT 10,5,需要解释清楚。这部分用户可能需要知道如何实现分页功能,所以得详细说明。 聚合函数方面,引用[2]提到了子查询中的AVG(),还有COUNT、SUM、MAX、MIN这些常用函数,应该分别举例说明,比如计算总数、平均值等。 子查询部分,引用[2]和引用[3]都涉及到了,特别是作为条件或数据源的情况,比如查询大于平均年龄的学生,需要展示子查询的嵌套用法。 连接查询可能用户也会用到,比如INNER JOIN和LEFT JOIN,虽然引用中没有直接提到,但这是常用部分,应该补充,给出示例说明如何连接两个表。 分组查询中的GROUP BY和HAVING,引用[3]里可能有相关的例子,需要结合聚合函数一起讲解,比如按性别分组统计人数,并筛选出数量大于5的组。 数据操作部分,插入、更新、删除这些基础操作,虽然用户主要问查询,但可能也需要了解,所以简要提及,但重点放在查询语句上。 另外,用户提供的引用里提到了一些高级查询,比如子查询作为数据源,还有ROW_NUMBER()的使用,虽然ROW_NUMBER()是窗口函数,可能在MySQL 8.0以上支持,需要注明版本。但考虑到用户可能使用的是较新版本,还是可以包括进去,但可能作为扩展内容。 最后,要确保所有示例都符合MySQL的语法,使用正确的符号,比如字符串用单引号,条件语句的正确格式。同时,注意用户提到的LaTeX格式要求,所有行内数学表达式用$...$,不过这次回答主要涉及SQL语句,可能用不上数学公式,但需要注意代码块的使用,用三个反引号包围。 需要检查是否有遗漏的部分,比如联合查询UNION,或者DISTINCT关键字去重,这些在基础查询中也很重要,应该加入。例如,查询不重复的国家列表,可以用SELECT DISTINCT country FROM users;。 另外,用户可能对性能优化感兴趣,比如索引的使用,但在常用查询语句中可能不需要深入,不过可以提到在WHERE或JOIN的列上使用索引来提高查询速度。 最后,生成相关问题,考虑用户接下来可能会问如何优化查询、索引的使用、事务处理,或者更复杂的连接查询示例,所以相关问题可以包括这些方面。 总结一下,回答的结构应该是分点列出各个查询类型,每个类型下给出示例和解释,确保覆盖基础到稍微高级的内容,同时参考用户提供的引用内容,保持示例简洁明了。同时,注意使用中文,避免使用Markdown格式,但代码块需要用反引号包围,并正确标注引用来源。</think>### 常用 MySQL 查询语句及示例 #### 一、基础查询 1. **查询所有字段** ```sql SELECT * FROM 表名; -- 例如:SELECT * FROM students; ``` 2. **查询指定字段** ```sql SELECT 列名1, 列名2 FROM 表名; -- 例如:SELECT name, age FROM students; ``` #### 二、条件查询 1. **简单条件筛选** ```sql SELECT * FROM 表名 WHERE 条件; -- 示例:查询年龄大于18的学生 SELECT * FROM students WHERE age > 18; ``` 2. **多条件组合** ```sql -- 使用 AND/OR SELECT * FROM students WHERE gender=1 AND is_delete=0; -- 查询未删除的男生[^3] ``` 3. **范围查询** ```sql SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2; -- 例如:查询年龄在18-25之间的学生 SELECT * FROM students WHERE age BETWEEN 18 AND 25; SELECT * FROM 表名 WHERE 列名 IN (值1, 值2); -- 例如:查询特定ID的学生 SELECT * FROM students WHERE id IN (1, 3, 5); ``` #### 三、排序与分页 1. **排序(ORDER BY)** ```sql -- 按年龄降序,身高升序 SELECT * FROM students ORDER BY age DESC, height ASC; [^3] ``` 2. **分页(LIMIT)** ```sql -- 跳过前10条,取5条(第11-15条) SELECT * FROM students LIMIT 5 OFFSET 10; -- 简写:SELECT * FROM students LIMIT 10,5; ``` #### 四、聚合函数 1. **统计与计算** ```sql SELECT COUNT(*) FROM students; -- 统计总记录数 SELECT AVG(age) FROM students; -- 计算平均年龄[^2] SELECT MAX(score), MIN(score) FROM exams; -- 查询最高/最低分 ``` #### 五、子查询 1. **作为条件** ```sql -- 查询年龄大于平均年龄的学生 SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students); [^2] ``` 2. **作为数据源** ```sql -- 从子查询结果中筛选 SELECT * FROM (SELECT * FROM students WHERE gender=1) AS male_students; ``` #### 六、连接查询 1. **内连接(INNER JOIN)** ```sql -- 查询学生及其课程成绩 SELECT s.name, c.score FROM students s INNER JOIN courses c ON s.id = c.student_id; ``` 2. **左连接(LEFT JOIN)** ```sql -- 查询所有学生(包括未选课的学生) SELECT s.name, c.score FROM students s LEFT JOIN courses c ON s.id = c.student_id; ``` #### 七、分组查询(GROUP BY) 1. **基础分组** ```sql -- 按性别统计人数 SELECT gender, COUNT(*) FROM students GROUP BY gender; ``` 2. **分组后筛选(HAVING)** ```sql -- 筛选人数大于5的组 SELECT gender, COUNT(*) AS count FROM students GROUP BY gender HAVING count > 5; ``` #### 八、数据操作 1. **插入数据** ```sql INSERT INTO 表名 (列1, 列2) VALUES (值1, 值2); -- 示例:INSERT INTO students (name, age) VALUES ('张三', 20); ``` 2. **更新数据** ```sql UPDATE 表名 SET 列名=新值 WHERE 条件; -- 示例:UPDATE students SET age=21 WHERE id=1; ``` 3. **删除数据** ```sql DELETE FROM 表名 WHERE 条件; -- 示例:DELETE FROM students WHERE is_delete=1; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值