慕课网视频笔记
插入记录INSERT:
方式1:
INSERT [INFO] tbl_name [(col_name,...)] {VALUSES|VALUE} ({expr|DEFAULT},...),(),...
insert users values(1,23,"Tom"),(2,23,"Jeo"); #同时插入两条数据
附注:如果省略列名,则需要为每个列赋值,其中如果不给自增字段赋值或者其赋值为NULL,或为其赋值为DEFAULT,都不改变其规则。INSERT users(username,passwd,age,sex) VALUES('TOM','123','25',1);
这时id是自增字段,所以可以不为其赋值,或者INSERT users VALUES(NULL,'TOM','123','25',1);
就是上面说的赋值为NULL时候,不改变其规则,还是1,2,3这样的自增形式。
非自增字段,我们可以这样写:INSERT users VALUES(3,'','132','22',0);
这时候第二列的值就是空值了。
方式2:
INSERT [INFO] tbl_name se col_name={expr|DEFAULT},... #与第一种方式的区别在于,此方法可以使用子查询(SubQuery),但是这种方法一次只能插入一条记录。
insert users SET username="Ben",password="456";
方式3:
-- INSERT...SELECT
INSERT [INTO] tbl_name [(col_name,...)] SELECT ... //此方法可以将查询结果插入到指定数据表。
表单更新记录UPDATE:
#更新记录(单表更新)
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition]
update users set age = age + 5;
update users set age = age - id,sex = 0;
update users set age = age + 5 where id % 2 = 0; //id是偶数时,年龄增加。
表单删除记录DELETE:
#删除记录(单表删除)
DELETE FROM tbl_name [WHERE where_condition]
DELETE FROM users WHERE id = 6;
再插入数据时,尽管id = 6的数据删除了,但是再插入时,id是7了(对于id自增的)。
查询表达式解析:
查找记录:
SELECT select_expr [,select_expr...]
[
FROM table_references
[WHERE where_condition]
[GROUP BY {col_name|position} [ASC|DESC],... ]
[HAVONG where_condition]
[ORDER BY {col_name|expr|positiob} [ASC|DESC], ...]
[LIMIT {[offset,]row_conut|row_count OFFSET offset}]
]
查询表达式:
- 每个表达式表示想要的一列,必须有至少一个。
- 多个列之间以英文逗号分隔。
- 星号(*)表示所有列。
tbl_name.*
可以表示命名表的所有列。 - 查询表达式可以使用[ AS ] alias_name为其赋予别名。
- 别名可用于GROUP BY,ORDER BY 或HAVING字句。
SELECT id,username FROM users;
SELECT username,id FROM users;(输出结果不一样)
//bl_name.
SELECT users.id,users.username FROM users; (对于多表来说,可以很清楚对应的数据表)
//AS alias_name
SELECT id AS userId,username AS uname FROM users;(输出结果是显示userId、uname)
ELECT id username FROM users;(会输出id,但是是显示username,因为as可以省略,username作为id的别名)
WHERE语句进行条件查询:
条件表达式:对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
在WHERE表达式中,可以使用MySQL支持的函数或运算符。
MySQL group by语句对查询结果分组:
[GROUP BY {col_name|position} [ASC|DESC],... ] #ASC是升序,DESC是降序。
SELECT * FROM users;
//按照性别分组
SELECT sex FROM users GROUP BY sex ;
//按照位置分组
SELECT sex FROM users GROUP BY 1; #1是指SELECT后面跟着的第一个列名.
SELECT sex,username FROM users GROUP BY 2; #就是指查找users中的username。
SELECT id,username,age,sex FROM users BY sex; #推荐使用这种
HAVING语句设置分组条件:
上面GROUP BY是对所有数据做分组,但是可以利用HAVING只其中对一部分数据分组。
[HAVONG where_condition]
SELECT sex,age FROM users GROUP BY 1 HAVING age > 30 ;
SELECT sex FROM users GROUP BY 1 HAVING count(id) >= 2; //看sex的值,获取相同的sex放在一个合集(组)里,合集里面的个数如果大于2个,就获取出来。
注:
- having 和where 都是用来筛选用的。
- having 是筛选组 而where是筛选记录。
- 用having就一定要和group by连用。
- 用group by不一定有having(它只是一个筛选条件用的)
order by语句对查询结果排序:
[ORDER BY {col_name|expr|positiob} [ASC|DESC], ...] #ASC是升序,DESC是降序。
SELECT * FROM users ORDER BY id DESC;
SELECT * FROM users ORDER BY age,id DESC; #默认是升序,如果你想进一步排序,可以用,再加上条件。
limit限制查询结果返回的数量:
[LIMIT {[offset,]row_conut|row_count OFFSET offset}]
SELECT * FROM users LIMIT 2;
SELECT * FROM users LIMIT 3,2; #返回从3开始的两个数据,但是数据是从0开始的,所以是4,5两个数据
注:返回数量并不与id的值有关系,只是按照id顺序,从第一个开始数。
Insert into Table2(a, c, d) select a,c,5 from Table1
本章总结:
记录操作
- INSERT
- UPDATE
- DELETE
- SELECT