mysql基础--Select语句-单表查询
Select语句-单表
基本
-
语法
SELECT [DISTINCT] *|{column1, column2,column3..} FROM tablename;
-
注意事项
- Select指定查询哪些列的数据
- column指定列名
- *代表查询所有列
- FROM指定查询哪张表
- DISTINCT可选,显示结果是否去重
-
使用表达式堆查询的列进行运算
SELECT *|{column1 | expression, column2 | expression, ....} FROM tablename
-
使用as语句
SELECT columnname as 别名 from 表名
-
WHERE子句
-
ORDER BY子句
SELECT column1,column2,column3.. FROM table; order by column asc|desc, ...
- Order by指定排序的列,排序的列既可以时表中的列名,也可以是select语句后as的列名
- Asc升序(默认)、Desc降序
- ORDER BY 子句应位于SELECT语句的结尾
-
GROUP BY子句
SELECT column1,column2,column3.. FROM table; group by column
-
对查询结果分组统计(类似把源数据拆分不同地方,再做统计,返回结果),支持多列,注意多列时嵌套分组
-
having 子句
SELECT column1,column2,column3.. FROM table; group by column having ....
- HAVING 限制分组显示结果
-
函数
-
亚元表
-
系统表,可以作为测试表使用,主要辅助函数使用在select语句中
-
合计/统计函数
注意NULL值不会统计
-
count
Select count(*) | count(列名) from tablename [where where_definition]
- count(*) 返回满足条件的记录行数
- count(列名) 统计满足条件的某列有多少个,但是会排除null
-
SUM:合计
-
AVG:平均
-
MAX:最大
-
MIN:最小
-
-
字符串函数
- charser(string):返回字符串字符集
- concat(string[,...]):链接字符串
- instr(string, substring):返回substring在string中出现的位置,没有返回0
- ucase(string):转换大写
- lcase(string):转换小写
- left(string,length):从string左边起取length个字符
- rigth(string,length):从string右边起取length个字符
- char_length()/character_length() :string字符长度
- length(string): string字节长度
- replace(string,search_string, replace_string):在string中用replace_string替换search_string
- strcmp(string1,string2):逐个字符比较两个字串大小
- substring(string,position[,length]):从string的position开始[从1开始计算],取length个字符
- ltrim(string):去除前空格
- rtrim(string):去除后空格
- trim(string):去除前后空格
-
数学函数
- ABS(num):绝对值
- BIN(decimal_number): 十进制转二进制
- ceiling(num) : 向上取整,得到比num大的最小整数
- floor(num):向下取整,得到比num小的最大整数
- conv(number,from_base, to_base):进制转换
- format(num, decimal_places):保留小数位
- HEX(decimal_places):转十六进制
- LEAST(number, number2[,....]):求最小值
- MOD(numerator,denominator):求余
- Rand([seed]):其范围为0<=v<=1.0
-
时间日期函数
- current_date() : 当前日期
- current_time() : 当前时间
- current_tomestamp() : 当前时间戳
- date(datetime) :返回datetime的日期部分
- date_add(date, interval d_value d_type) : 在date中加上日期或时间;d_value 是数量,d_type是单位,可以有:year minute second hour day等
- date_sub(date, interval d_value d_type):在date上减去一个时间;d_value 是数量,d_type是单位,可以有:year minute second hour day等
- datediff(date1,date2):两个日期差(结果是天);date1减去date2,可以取负数
- timediff(date1,date2):两个日期差(结果是小时分钟秒);date1减去date2,可以取负数
- now() : 当前时间
- last_day(now()): 获取日期中月份的最后一天
- Year|Month|DATE(datetime):取出年、月、日
- unix_timestamp() :返回1970-1-1到现在的秒数
- from_unixtime(123456426, ‘%Y-%m-%d %H:%i:%s’) :将时间戳转换为固定格式(用于使用整数来存储时间)
-
加密与系统函数
- user(): 查询用户
- database(): 查询数据库名称
- MD5(str):为字符串算出一个MD5 32的字符串,用户密码加密
- password(str):从原文密码str计算返回密码字符串,通常用于堆mysql数据库的用户密码加密
-
流程控制函数
- IF(expr1,expr2,expr3): 如果expr1为True,则返回expr2否则返回expr3
- IFNULL(expr1,expr2):如果expr1不为空null,则返回expr1,否则返回expr2
- select case when expr1 then expr2 when expr3 then expr4 else expr5 END:如果expr1为true,则返回expr2,如果expr3为真,返回expr4,否则返回expr5
增强
-
日期类型可以直接比较,需要注意格式:select * from emp where hiredate > '1992-01-01'
-
like操作符支持模糊查询,%-表示0到多个字符,_-表示单个字符:select ename sal from emp where ename like '_S%'
-
判断值是否为null,使用 is null
-
DESC 表名,来查询表结构
-
ORDER BY可以嵌套排序索引:order by column1 asc|desc, column2 asc|desc
-
分页查询
Select ... limit start, rows 表示从start+1行开始取,取出rows行,start从0开始计算
- 公式:limit 每页显示记录数*(第几页-1) , 每页显示记录数
-
由于SQL非常灵活,需要我们动脑筋,实际应用将各个函数进行灵活组合,技巧:尝试写-》修改-》尝试
-
多子句查询顺序
select column1.... from table group by column having column order by column limit start, rows;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!