MySQL刷题相关简单语法集合

  1. 去重 distinct 关键字

    eg. :select distinct university from user_profile

  2. 返回行数限制 : limit关键字

    eg. :select device_id from user_profile limit 2

  3. 返回列重命名 :as 关键字

    eg.:select device_id as user_infos_example from user_profile limit 2

  4. 指定关键字排序 :order by 关键字(ASC升序,DESC降序):

    eg:select device_id,age from user_profile order by age asc

  5. 统计总数 + 模糊条件筛选 : count + where + like

    eg.:

sql 复制代码
select
   count(distinct device_id) as did_cnt,
   count(question_id) as question_cnt
from question_practice_detail
where date like "2021-08%"
  1. 判断非空 : is not null

    eg.:select device_id,gender,age,university from user_profile where age is not null

  2. 多条件判断 : where in / not in

    eg.:

sql 复制代码
select device_id, gender, age ,university, gpa
    from user_profile 
    where university in ('北京大学','复旦大学','山东大学')
  1. 正则表达式 :使用regexp 进行正则匹配
    正则表达式匹配的字符类:
    . :匹配任意单个字符。
    ^ :匹配字符串的开始。
    $ :匹配字符串的结束。
    *****:匹配零个或多个前面的元素。
    + :匹配一个或多个前面的元素。
    ? :匹配零个或一个前面的元素。
    [abc] :匹配字符集中的任意一个字符。
    [^abc] :匹配除了字符集中的任意一个字符以外的字符。
    [a-z] :匹配范围内的任意一个小写字母。
    [0-9] :匹配一个数字字符。
    \w :匹配一个字母数字字符(包括下划线)。
    \s:匹配一个空白字符。

eg.:

sql 复制代码
select id,name,phone_number
    from contacts
    where phone_number regexp '^[1-9][0-9]{2}-?[0-9]{4}-?[0-9]{4}$'
  1. 取最大值 : max

    eg.:select max(gpa) as gpa from user_profile where university = '复旦大学'

  2. 规定小数点位数及统计平均值 : round + avg

    ROUND 函数用于把数值字段舍入为指定的小数位数。

    用法为:SELECT ROUND(column_name,decimals) FROM table_name

    eg.:

sql 复制代码
select count(gender) as male_num,
       round(avg(gpa),1) as avg_gpa
from user_profile 
where gender = 'male'
  1. 分组查询 : group by
    eg.
sql 复制代码
select gender,university,
        count(device_id) as user_num, 
        round(avg(active_days_within_30),1) as avg_active_day,
        round(avg(question_cnt),1) as avg_question_cnt
    from user_profile
    group by gender,university
    order by gender asc,
            university asc

注意: 由于group by后的输出不可预估,因此在笔试时可能会出现仅使用group by 无法通过测试用例的情况,此时需按用例示范追加 order by !!!

  1. 分组后条件过滤 : having
    eg.:
sql 复制代码
 select university,
    round(avg(question_cnt),1) as avg_question_cnt,
    round(avg(answer_cnt),1) as avg_answer_cnt
from user_profile 
    group by university
    having avg_question_cnt < 5 or avg_answer_cnt < 20
  1. 多表查询- 内连接 :inner join ,注意应指定列。
    eg.:
sql 复制代码
select q.device_id,q.question_id,q.result 
    from question_practice_detail as q
        inner join user_profile as up
    on q.device_id = up.device_id and up.university = '浙江大学'
相关推荐
时序数据说2 小时前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
戒不掉的伤怀2 小时前
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
服务器·数据库·mysql
cv高级工程师YKY2 小时前
服务器 - - QPS与TPS介绍
数据库
nbsaas-boot2 小时前
高可扩展属性建模设计:架构师的全局思考与落地方案
数据库
爱上语文2 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
陈敬雷-充电了么-CEO兼CTO3 小时前
推荐算法系统系列>推荐数据仓库集市的ETL数据处理
大数据·数据库·数据仓库·数据挖掘·数据分析·etl·推荐算法
MeshddY3 小时前
(超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
c语言·数据库·单片机
wuxinyan1233 小时前
Java面试题033:一文深入了解MySQL(5)
java·数据库·mysql·面试
笑衬人心。3 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
萧曵 丶4 小时前
Spring @TransactionalEventListener
java·数据库·spring·事务·transactional·异步