MySql数据查询

数据查询

选择:where

投影:select

from 数据源

group by 分组

order by 排序 【asc/desc】

having 筛选组

distinct:筛除掉找出的重复部分,放在select后面

2、使用语句

给列取别名: 列名 as ‘别名’

计算列:1、数值±*/%加减乘除等运算

​ 2、字符列 concat(a,b,c,…) 使得不同字符连接起来,例如:

SELECT Sname AS '姓名',Sage AS '年龄' 
FROM student;


SELECT ProductName,price*Stocks AS '总价'
FROM products;


SELECT CONCAT(Sname,'的年龄是',Sage,'岁')
FROM student;

​ 3、函数:year() :取年

​ curdata():当前日期

​ data():年月日

​ cast():强制类型转换

例如 :

CAST (sage AS CHAR)

​ right() :只取字符串的右侧

​ month():日期中只取月

例题:显示销售的姓名和年龄,计算销售的年龄(比较年月日)

SELECT SaleName,Birthday,YEAR(CURDATE())-YEAR(Birthday)-(RIGHT(CURDATE(),5)<RIGHT(DATE(Birthday),5))AS 年龄
FROM salers;

3、关键词

where:筛选行

​ 1、单条件筛选

​ 2、多条件筛选 优先级:not >and > or

对同一个列多次比较在一个范围用 between and

​ 在一个散落的范围点用 in[]

模糊匹配

like 基于整个字符串进行匹配 (%代表任意字符,_代表一个字符)

rlike(又名REGEXP):

模式字符含义
^匹配字符串的开始部分
$匹配字符串的结束部分
.匹配字符串中的任意一个字符
[字符集合]匹配字符集合中任意一个字符
[^字符集合]匹配字符集合外的任意一个字符
str1|str2|str3匹配str1,str2,str3中的任意一个字符串
*匹配0到多个他前面的字符
+匹配1到多个他前面的字符
匹配0个或者1个他前面的字符
字符串{N}字符串出现N次
字符串(M,N)字符串出现至少M次,最多N次
例如检索学生联系方式中以15开头或者18开头,且后面跟着9位数字的学生信息。

SELECT * FROM student 
WHERE phone RLIKE '^1[58][0-9]{9}';

--查询姓‘张’的学生的详细信息。
 --查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。
 --查询名字中第2个字为‘小’或‘大’字的学生的姓名和学号。
--查询名字是2个字的学生的信息
--查询名字包含小字的学生的信息
 --查询所有不姓“刘”的学生。
 --从学生表中查询学号的最后一位不是2、3、5的学生情况



SELECT * FROM student
WHERE sname RLIKE '^张';

SELECT * FROM student
WHERE sname RLIKE '^(张|李|刘)';

SELECT sname,sno FROM student
WHERE sname RLIKE '^.[小大]';

SELECT * FROM student 
WHERE sname RLIKE '^..$';

SELECT sname,sno FROM student
WHERE sname RLIKE '.*小.*';

SELECT sname FROM student
WHERE sname RLIKE '^[^刘]';

SELECT sname,sno FROM student
WHERE sno RLIKE '.*[^235]$';

空值:is null 非空:is not null

排序order by:(一般和limit配合使用)

limit 起始位置 返回数量:第一个参数可以不写默认为0

SELECT * FROM student
WHERE sdept='计算机系'OR sdept='外语系'
ORDER BY sage DESC LIMIT 3;

SELECT * FROM student 
WHERE sage IS NOT NULL
ORDER BY sage  LIMIT 1;

聚合函数(对一列的数据进行操作):放在select后面或者分组后的having与order by后面使用

count():计数

sum():求和

avg():计算平均值

max():该列最大值

min():该列最小值

SELECT COUNT(DISTINCT sdept) FROM student;

分组:group by

单独使用显示每个组的第一个值,意义不大

与聚合函数一起使用

与group_concat()函数一起使用;明细汇总

与 having 一起使用(现在输出的结果)

与with rollup 一起使用(最后加入一个总和行)


SELECT * FROM student 
WHERE sage IS NOT NULL
ORDER BY sage  LIMIT 1;

SELECT COUNT(DISTINCT sdept) FROM student;

-- 查询平均分大于70的学生的学号。


SELECT sdept ,GROUP_CONCAT(sname),AVG(sage)
FROM student 
GROUP BY sdept
WITH ROLLUP;

-- 查询男同学人数最多的系,以及该系学生姓名的明细
SELECT sdept,GROUP_CONCAT(sname) FROM student
WHERE ssex='男'
GROUP BY sdept 
ORDER BY COUNT(*)DESC
LIMIT 1;

-- 查询每个系年龄最大的男同学的名字
SELECT student.sname,student.sdept
FROM student JOIN(
SELECT MAX(sage) AS 'maxsage',sdept
FROM student
GROUP BY sdept) s
ON student.sdept=s.sdept 
WHERE student.sage=s.maxsage AND student.ssex='男'

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值