mysql--select--part1

格式:
SELECT select_expr,… FROM tbl_name
[WHERE]
[GROUP BY {col_name|position} HAVING 二次筛选]
[ORDER BY {col_name|position|expr}[ASC|DESC]]
[LIMIT 限制结果的显示条数]

一、基本形式
查询表中的所有记录,或者指定字段信息
–当前库下的数据表
SELECT * FROM tbl_name;
SELECT 字段名称,… FROM tbl_name;

–在当前库下查询其他库中的数据表
SELECT * FROM database1.peng;
SELECT tbl_name.col_name,… FROM tbl_name;
SELECT 字段名称,… FROM database.table;

–给字段取别名不写库既默认当前库()
SELECT 字段名称 [AS] 别名名称,..FROM db_name.tbl_name;

–给数据表别名
SELECT 字段名称,… FROM tbl_name [AS] 别名;

二、where条件
例子:创建一个用户表,插入3个用户
CREATE TABLE user(
id TINYINT UNSIGNED AUTO_INCREMENT KEY COMMENT编号,
username VARCHAR(20) NOT NULL COMMENT姓名,
age TINYINT UNSIGNED DEFAULT =0 COMMENT年龄,
email VARCHAR(30) UNIQUE DEFAULT =’ ‘,
sex ENUM(‘男’,’女’,’保密’) NOT NULL DEFAULT =’保密’
);
INSERT user(username,age,sex) VALUES(‘卑鄙’,10,’女’);
INSERT user(username,age,sex) VALUES(‘烦人’,21,’男’);
INSERT user(username,age) VALUES(‘彭东西’,23);

1、比较运算符
特殊的有
不等于:“”<>“”、”!=”
等于:“=”、“<=>”(这个等于可以结合NULL进行比较)

2、带条件查询
–查询id、username、age,条件id=2的用户
SELECT id,username,age FROM user;
WHERE id=2;

–查询年龄小于等于20
SELECT id,username,age FROM user;
WHERE age<=20;

–更新id<=2的用户 email=’pengfanren@icloud.com’
UPDATE user SET email=’pengfanren@icloud.com’
WHERE id<=2;

3、指定范围 【[NOT]BETWEEN…AND】
–查询年龄在18~30之间的用户
SELECT id,username,age,sex FROM uesr
WHERE age BETWEEN 18 AND 30;

4、指定集合 【[NOT]IN(值,…)】
–查询表中的女性
SELECT id,username,age,sex FROM uesr
WHERE sex IN(‘女’);

5、逻辑and or
–查询性别为男,并且年龄大于等于20
SELECT id,username,age,sex FROM uesr
WHERE sex=’男’ AND age>=20;

6、模糊查询
%:任意长度字符串
_ :任意一个字符

–要求用户名中包含“烦”的信息
SELECT id,username,age,sex FROM uesr
WHERE username LIKE ‘%烦%’;

–要求名字三个字的用户
SELECT id,username,age,sex FROM uesr
WHERE username LIKE ‘_ _ _’;

三、【GROUP BY 分组】
把值相同的放到一个组中,最终查询出的结果只会显示组中的一条记录。
回显会把相同的分到一个组,回显不能看到组内的详细信息,查看组内详细信息,则GROUP配合使用GROUP_CONTACT

–按照性别分组,既是sex字段
SELECT id,username,age,sex FROM user
GROUP BY sex;

–以性别分组,查看组内用户名详细信息
SELECT GROUP_CONCAT(username),age,sex FROM user
GROUP BY sex;

四、聚合函数
1、函数分类
COUNT() 统计记录总数,但是不统计NULL值
SUM() 求和
MAX() 求最大值 MIN()
AVG() 求平均值

2、基本语法
–统计表中的总记录数
SELECT COUNT(*) [AS 别名] FROM tbl_name;

–指定字段
SELECT COUNT(id) [AS 别名] FROM tbl_name;

3、【星号和字段的区别】
字段的统计,不纪录空值(NULL),反之,星号会记录

4、应用
–按照性别分组,得到用户详情,并且分别组中的人数
SELECT id,GROUP_CONCAT(username),age,sex ,COUNT(*) AS totalnum FROM user
GROUP BY sex;

–按照age分组,得到用户名的详情,总人数;得到组中年龄的总和,age的最大值和最小值,平均值
SELECT COUNT(*)AS totalnum ,id,age,
GROUP_CONCAT(username) AS usersdetail,
MAX(age),MIN(age),AVG(age),SUM(age),addr
FROM user
GROUP BY age;
注意:GROUP BY age,这里的age可以根据建表的位置写数据,比如user中age的位置为3.SO,GROUP BY age等价于GROUP BY 3;

5、WITH ROLLUP,会在记录末尾添加一条记录,是上面所有记录的总和

五、HAVING 对分组结果二次筛选
–sex分组,统计人数;组中人数大于等于3的
SELECT sex
GROUP_CONCAT(username) AS usersdetail,
COUNT(*)AS totalnum
FROM user
GROUP BY sex
HAVING COUNT(*)>=3;【或者这里用别名】 #这里我有点疑问,请教下老师去##这里我问了,表达式对的。那么我理解这里的二次筛选是对上一条起作用!!

六、ORDER BY 实现排序
1、基本语法
ORDER BY 字段名称 ASC|DESC 默认增
2、应用
–查询性别,总人数,id升序排列
SELECT sex ,id,COUNT(*)AS totalnum
FROM user
ORDER BY id ASC;

–实现随机记录
SELECT id,age
FROM peng
ORDER BY RAND( );

七、LIMIT 限制结果集的显示条数
1、基本语法
LIMIT 值 显示结果集的前几条记录
LIMIT offset,row_count 显示结果集从offset的记录。
偏移量是从0开始。3,3:则是从第四条开始,以后的3条(4,5,6条)

2、应用
–删除前3条,删除和更新的时候只能用 LIMIT 值 这种格式
DELETE FROM peng
LIMIT 3;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL ,你可以使用 `SUBSTRING_INDEX()` 函数和 `REPLACE()` 函数来截取出 "101"、"1054" 和 "102"。 假设你有一个字符串 "101-1054-102",你想从截取出个部分,可以按照以下步骤进行操作: 1. 使用 `SUBSTRING_INDEX()` 函数截取第一个部分 "101",具体语句如下: ```sql SELECT SUBSTRING_INDEX('101-1054-102', '-', 1) AS part_1; ``` 这将返回 "101"。 2. 使用 `REPLACE()` 函数将第一个部分替换为空格,具体语句如下: ```sql SELECT REPLACE('101-1054-102', CONCAT(SUBSTRING_INDEX('101-1054-102', '-', 1), '-'), '') AS part_2; ``` 这将返回 "1054-102"。 3. 重复上述步骤,使用 `SUBSTRING_INDEX()` 函数截取第二个部分 "1054",具体语句如下: ```sql SELECT SUBSTRING_INDEX(REPLACE('101-1054-102', CONCAT(SUBSTRING_INDEX('101-1054-102', '-', 1), '-'), ''), '-', 1) AS part_2; ``` 这将返回 "1054"。 4. 再次使用 `REPLACE()` 函数将第二个部分替换为空格,具体语句如下: ```sql SELECT REPLACE(SUBSTRING_INDEX(REPLACE('101-1054-102', CONCAT(SUBSTRING_INDEX('101-1054-102', '-', 1), '-'), ''), '-', 1), CONCAT(SUBSTRING_INDEX(REPLACE('101-1054-102', CONCAT(SUBSTRING_INDEX('101-1054-102', '-', 1), '-'), ''), '-', 1), '-'), '') AS part_3; ``` 这将返回 "102"。 通过以上步骤,你可以得到个部分 "101"、"1054" 和 "102"。请注意,这种方法假设字符串的分隔符 "-" 是固定的,如果分隔符是可变的,你可能需要使用更复杂的逻辑来实现截取。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值