一、SQL语句“数据行”操作补充
增
1 insert into tb1(name,age) values('peng',20); 增加一条数据
2
3 insert into tb1(name,age) values('peng',20),('sheng',19); 增加多条数据,用逗号隔开
4
5 insert into tb2(name,age) select name,age from tb1; 将t2表的name,age列全部插入到t1表中
删
1 delete from tb1;
2
3 delete from db1 where id>5; where后面是条件语句,在很多地方都适用
4
5 delete from db1 where id!=5 ; 在MySQL中不等号的另外一种写法: id<>5
6
7 delete from db1 where id<5 or name='jack';
改
1 update tb2 set name='jack' where id>5 and name='lucy';
2
3 update tb12 set name='robert',age=19 where id>12 and name='xx'
查
1 select * from tb1;
2
3 select name,age from tb1;
4
5 select where id>2 name='jack';
6
7 select id,name as cname from tb12 where id > 10 or name ='xxx'; # 加个as表示给表头取一个别名,但是里面的内容不会变(name as cname)只是name取了别名
8
9 select name,age,11 from tb12; # 写一个常量(11)表示加了一列,并且这一列都是11
关于‘查’的其他:
1 select * from tb1 where id!=1;
2
3 select * from tb1 where id<>1;
4
5 select * from tb1 where id in (1,5,12);
6
7 select * from tb1 where id not in (1,5,12);
8
9 select * from tb1 where id between 2 and 6; # 闭区间
10
11 select * from tb12 where id in (select id from tb11) # in里面还可以去别的表查 会先执行括号里面的语句
通配符:下划线和百分号
以a开头 两种写法:
1、a% 表示%后面可以有任意多的字符 (ab,abc,acbhsjhj)
2、a_ 表示后面只能有一个位置(ab,ac)
拓展:%a%表示中间包含a的(只要有a就行)
select * from tb12 where name like "a%" 表示以a开头的
select * from tb12 where name like "%a" 表示以a结尾的
select * from tb12 where name like "a_"
分页:(翻页查看,比如百度查阅)limit
1 select * from tb3 limit 10; 查看前十条数据
2
3 select * from tb3 limit 0,10;0表示起始位置,10表示查看多少条数据
4
5 select * from tb12 limit 10 offset 20; offset表示从哪开始,limit后面表示取多少条(这条代码和上面那条功能是一样的)
排序:order by desc asc
1 select * from 表 order by 列 asc - 根据 “列” 从小到大排列
2 select * from 表 order by 列 desc - 根据 “列” 从大到小排列
3 select * from 表 order by 列1 desc,列2 asc - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序
4
5
6 select * from tb12 order by id desc; 大到小 by后面表示通过id排列
7 select * from tb12 order by id asc; 小到大
8 记忆方法:abcd a在前面--asc从小到大排, d在后面--desc从大到小排。
9
10 select * from tb12 order by age desc,id desc; ★优先按age排,age如果重复的话再根据id --》desc排
11
12 取后10条数据:
13 select * from tb12 order by id desc limit 10;
分组:group by
1 select count(id),max(id),part_id from userinfo5 group by part_id; 【group by表示根据谁分组 max(id)重合的话取最大的id拿过来】
2 聚合函数:把相同的放一块
3 count 计数
4 max
5 min
6 sum
7 avg
8
9 ***** 如果对于聚合函数结果进行二次筛选时?必须使用having关键字,不能用where *****
10 elect count(id),part_id from userinfo5 group by part_id having count(id) > 1; where里面一定不能出现聚合函数
11
12 select count(id),part_id from userinfo5 where id > 0 group by part_id having count(id) > 1;
连表操作:重要
两个表或多张表放在一起查看
1 连表操作(重要): 两个表或多张表放在一起查看
2
3 select * from userinfo5,department5; # 把两张表都拿出来,但没有告诉两张表的关系
4 写法1:
5 select * from userinfo5,department5 where userinfo5.part_id = department5.id; # 建立关系userinfo5.part_id = department5.id
6
7 写法2:(推荐)
8 select * from userinfo5 left join department5 on userinfo5.part_id = department5.id; # left join 左连接 两张表关系用on
9 # userinfo5左边全部显示 左边是userinfo5
10 select * from department5 left join userinfo5 on userinfo5.part_id = department5.id;
11 #相当与伪造了一个右连接 左边是department5
12
13
14 # select * from userinfo5 right join department5 on userinfo5.part_id = department5.id;
15 # department5右边全部显示 右边是department5
16
17
18 inner:
19 select * from userinfo5 inner join department5 on userinfo5.part_id = department5.id;
20 将出现null时的一行隐藏
对于自增补充:
1 2 desc t10; 看每个字段什么意思
3
4 show create table t10; 查看这个表是怎么创建的 是横的显示
5
6 show create table t10 \G; 竖的显示 看的更好
7
8 alter table t10 AUTO_INCREMENT=20; 修改自增值
9
10
11
12 MySQL: 自增步长
13 基于会话级别: (一次登录就是一个会话)
14 show session variables like 'auto_inc%'; ----> 查看全局变量
15 set session auto_increment_increment=2; ----> 设置会话步长
16 # set session auto_increment_offset=10;
17 基于全局级别:
18 show global variables like 'auto_inc%'; 查看全局变量
19 set global auto_increment_increment=2; 设置会话步长
20 # set global auto_increment_offset=10;
21
22
23 SqlServer:自增步长:
24 基础表级别:
25 CREATE TABLE `t5` (
26 `nid` int(11) NOT NULL AUTO_INCREMENT,
27 `pid` int(11) NOT NULL,
28 `num` int(11) DEFAULT NULL,
29 PRIMARY KEY (`nid`,`pid`)
30 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8
31
32 CREATE TABLE `t6` (
33 `nid` int(11) NOT NULL AUTO_INCREMENT,
34 `pid` int(11) NOT NULL,
35 `num` int(11) DEFAULT NULL,
36 PRIMARY KEY (`nid`,`pid`)
37 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8
1 desc t10; 看每个字段什么意思
2
3 show create table t10; 查看这个表是怎么创建的 是横的显示
4
5 show create table t10 \G; 竖的显示 看的更好
6
7 alter table t10 AUTO_INCREMENT=20; 修改自增值
8
9 MySQL: 自增步长
10 基于会话级别: (一次登录就是一个会话)
11 show session variables like 'auto_inc%'; ----> 查看全局变量
12 set session auto_increment_increment=2; ----> 设置会话步长
13 # set session auto_increment_offset=10;
14 基于全局级别:
15 show global variables like 'auto_inc%'; 查看全局变量
16 set global auto_increment_increment=2; 设置会话步长
17 # set global auto_increment_offset=10;
18
19
20 SqlServer:自增步长:
21 基础表级别:
22 CREATE TABLE `t5` (
23 `nid` int(11) NOT NULL AUTO_INCREMENT,
24 `pid` int(11) NOT NULL,
25 `num` int(11) DEFAULT NULL,
26 PRIMARY KEY (`nid`,`pid`)
27 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8
28
29 CREATE TABLE `t6` (
30 `nid` int(11) NOT NULL AUTO_INCREMENT,
31 `pid` int(11) NOT NULL,
32 `num` int(11) DEFAULT NULL,
33 PRIMARY KEY (`nid`,`pid`)
34 ) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8
单列唯一索引和联合唯一索引
唯一索引:1、约束 2、加速查找 (索引就是为了加速查找)
唯一索引:单列唯一索引和联合唯一索引
create table t1(
id int ....,
num int,
xx int,
unique 唯一索引名称 (列名,列名), # 限制这个列名是唯一的 (联合唯一:这两个值不能完全一样) 只写一个列名是单列的唯一
constraint ....
)
唯一:
约束不能重复(可以为空)
PS: 主键不能重复(不能为空)
加速查找
1653

被折叠的 条评论
为什么被折叠?



