-
分组条件:
[HAVING when where_condition]
用在group by后面追加条件,判断式中的字段是必须出现在前面select中的 或者是可以包含没有出现在前面查询中的字段的一个聚合函数count(),max()等等。
SELECT sex FROM users GROUP BY 1 HAVING age>35; //有错
SELECT sex, age FROM users GROUP BY 1 HAVING age>35;
SELECT sex FROM users GROUP BY 1 HAVING count(id)>=2;(这条指令,指按照sex分组,分成了两组sex=0和sex=NULL,条件id数大于2的留下显示,显然sex=0个数有8>2故留下,而sex=NULL个数为1,不满足条件,故不显示。如果条件改成count(id)>=1,则会显示sex为0和NULL两个分组。)
聚合函数永远只有一个返回结果。
count记录个数。查看全部 -
对查询结果进行分组:
[GROUP BY {col_name|position} [ASC|DESC],...]
默认为ASC升序,DESC为降序。
一般去指定字段名称而非位置。
查看全部 -
条件表达式
对记录进行过滤,如果没有指定WHERE子句,则显示所有记录
在WHERE表达式中,可以使用MySQL支持的函数或运算符
查看全部 -
查找记录:
SELECT select_expr [,select_expr...]
[
FROM table_references
[WHERE where_condition]
[GROUP BY {col_name|position}] [ASC|DESC],...]
[HAVING where_condition]
[ORDER BY{col_name|expr|position}[ASC|DESC],...]
[LIMIT{[offset,]row_count|row_count OFFSET offset}]
]
1、查询表达式中列的顺序可以与原表中的顺序不一致,查询字段的顺序和别名会影响结果集出现的顺序和别名。
SELECT username,id FROM users;
2、查询时,可以用数据表名.列名更加强了确定性(防止后期多表连接时有列名重复)
SELECT users.username FROM users;
3、查询时,若原字段(列)的名字较复杂,可以使用别名来称呼原字段。原名 AS 新名,原名1 AS 新名1。
SELECT id AS userid FROM users;
查看全部 -
删除记录(单表):
DELETE FROM tbl_name [WHERE where_condition];
删除单条记录后,新增的记录仍然按最大序号继续排列,不会去补齐被删除的记录号。
若不添加WHERE条件,则全部删除。
查看全部 -
更改字段值(单表更新):
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr|DEFAULT}[,col_name2={expr|DEFAULT}]...[WHERE where_condition]
如果不加where,则所有记录全部更新。
UPDATE users set age=age+5; //所有记录年龄加5
UPDATE users set age=age-id ,sex=0; //同时更新age和sex字段
UPDATE users set age=age+10 where id%2=0; //偶数记录的年龄更新
查看全部 -
SET查询:
可以使用子查询,但一次只能插入一条记录。
INSERT users SET username='BEN',password='456';【其余字段有默认值或者允许为空】
查看全部 -
插入记录:
INSERT [INTO] table_name [(col_name,...) {VALUES | VALUE} ({expr | DEFAULT},...),(...),...; //自动递增的字段,可赋值NULL/DEFAULT。整型字段,可赋值为数学表达式。有默认约束的字段,可赋值为DEFAULT。md5()函数编码后的字长为32位。同时插入多条记录,多条记录括号间用逗号隔开。
INSERT users VALUES(DEFAULT,'Tom','123',3*7-5,1),(NULL,'Rose',md5('123'),DEFAULT,0);
查看全部 -
<span>多表更新之一步到位 建表、查询、写入三合一: CREATE TABLE tdb_goods_brands ( brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, brand_name VARCHAR(40) NOT NULL ) SELECT brand_name FROM tdb_goods GROUP BY brand_name; 多表更新: UPDATE tdb_goods AS g INNER JOIN tdb_goods_brands AS b ON g.brand_name = b.brand_name SET g.brand_name = b.brand_id; 通过ALTER TABLE语句修改数据表结构 ALTER TABLE tdb_goods CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL, CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL; PS: 外键,不一定是物理的外键,逻辑的外键也行,当然,物理外键更能保证数据的完整性和一致性。 数字类型的字段占用的空间更小,查询的效率也更高。</span>查看全部
-
<span >多表更新: UPDATE table_references SET col_name1={expr1 | DEFAULT} [,col_name2={expr2 | DEFAULT}]... [WHERE where_condition] INNER JOIN,内连接 在MySQL中,JOIN, CROSS JOIN 和 INNER JOIN 是等价的。 LEFT [OUTER] JOIN ,左外连接 RIGHT [OUTER] JOIN,右外连接 update tdb_goods inner join tdb_goods_cates on goods_cate=cate_name set goods_cate=cate_id; tdb_goods:想要更改的表名 inner join: 内连接 tdb_goods_cates: 关联的附表 goods_cate=cate_name 两个表对应列的关系 goods_cate=cate_id; 设置 值</span>查看全部
-
<span >INSERT [INTO] tbl_name SET col_name={exprDEFAULT},...//可以使用子查询 INSERT [INTO] tbl_name [(col_name,...)] SELECT ...//将查询结果写入数据表 Eg: INSERT INTO table_name [(column_name)] SELECT column_name2 FROM table_name2 GROUP BY column_name3; CREATE TABLE IF NOT EXISTS tdb_goods_cates( cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, cate_name VARCHAR(40) NOT NULL ); SELECT goods_cate FROM tdb_goods GROUP BY goods_cate; //列出所有品牌cate DESC tdb_goods_cates; //显示出tdb_goods_cates表中的项目名称,与SHOW COLUMNS FROM tdb_goods_cates;作用相同 INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;//在表tdb_goods_cates中插入tdb_goods中的cate</span>查看全部
-
多表删除:
查看全部 -
无限级分类表设计:
type_id
type_name
parent_id
自身连接实现查询操作
查看全部 -
外连接说明:
查看全部 -
外连接说明:
查看全部
举报