格式:
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;