马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、增加
1、添加信息 insert
语法
insert into table_name (列名) values (列数据1,列数据2,列数据3...)
若插入时主键或唯一键冲突就无法插入。
但假如我们就是要修改一列信息也可以用insert
insert into table_name (列名) values (列数据1,列数据2,列数据3...) on duplicate key update colum=value...
举例
2、更换 replace
语法
replace into table_name (列名) values (列数据1,列数据2,列数据3...)
岂论是否冲突直接更换,所以上面提到的insert插入操作可以用replace
举例
二、查询
1、查询表信息 select
语法
(1)select * from table_name;
查看表中全部列信息
(2)select 列名 from table_name;
查看表中指定列信息(列名之后用as或空格可以让打印出来的列名修改)
上图中 id, name, math 表示想要查询多列信息用逗号隔开。
(3)select 表达式 from table_name;
上图中chinese+math+english就是表达式,select自动帮我们计算好了。
(4)select distinct 列名 from table_name;
查看去重之后列中数据
2、where子句
在上面的select用法中我们只是查看一列列完整的信息,但是除了对列筛选,还要对列中的信息举行筛选,所以就要用到where子句。
运算符先容
运算符 | 说明 | > < >= <= | 大于 小于 大于等于 小于等于 | = | 比较相等,但是无法比较null | <=> | 比较相等,可以比较null
| != <> | 比较不相等,前者不能比较null后者能 | between a0 and a1 | 范围匹配数据从a0到a1 | in (option1,2...) | 匹配圆括号中任意一个数据 | is null | 是否为null(推荐使用) | is not null | 是否不是null | like | 模糊匹配,%表示匹配任意多
_符号个数表示匹配多少字符
| and | 逻辑与 | or | 逻辑或 | not | 逻辑取反 | 上述符号使用时支持()圆括号优先级修改。
举例
上文我们提到列名背面跟空格可以修改打印的列名,但是为什么这里会报错呢?
这语句可以分成三部分:select,from,where,分别代表三个阶段:表现数据,选择表,筛选数据。
所以按次序应该是from where select ,所以上图中在最后一个阶段定义的“总分”是不能出现在筛选数据阶段的。
3、结果排序
语法
asc 升序
desc 降序
默认asc
select .... from table_name order by 列名 asc/desc
没有order by返回表中次序
null比任何值小
举例
上图中为什么可以重命名呢?
因为分成三个阶段:select,from,order by,分别代表:表现 选择表 排序
次序应该是先选择表,表现数据,最后排序,所以在排序之前定义的名称就可以用。
4、筛选分页结果
语法
(1)select ... from table_name limit n;
从表中开始取n行表现。
(2)select ... from table_name limit n,m;
从表中第n+1行(因为表行从0开始)开始取m行表现。
(3)select ... from table_name limit n offset m;
从表中m+1行开始表现n行。
limit不是条件筛选,本质是表现。
举例
三、更新
语法
update table_name set column = 表达式.... 查询语句[where][order by][limit];
对查询结果举行列值更新,一样平常加上where子句查询,否则就修改一列。
举例
表达式不支持 += *= ....
四、删除
语法
用查询语句就能准确找到要删除值
delete from table_name 查询语句[where][order by][limit];
删除整表
dalete from table_name;
举例
五、插入查询结果
语法
insert into table_name [column...] select....;
举例
删除一张表中的重复数据
1、先复制原表结构 create table table_name like table_name;
2、用插入查询结果举行不重复数据的插入
insert into no_duplicate_table select distinct * from duplicate_table;
3、最后把目的表重命名
rename table duplicate_table to old_table, no_duplicate_table to duplicate_table;
思索:为什么最后要重命名,不能一开始就把文件要的数据直接写入?
在Linux上面,一样平常上传文件都不是原子的,就导致速度慢。但是放入临时文件里面举行操作,最后重命名就是原子的,速度快。
六、聚合函数
函数 | 说明 | count ([distinct] 表达式) | 查询到的数据个数 | sum ([distinct] 表达式) | 查询到的数据总和 | avg ([distinct] 表达式) | 查询到的数据平均数 | max ([distinct] 表达式) | 查询到的数据最大值 | min ([distinct] 表达式) | 查询到的数据最小值 | 要保证数据是可聚合的,不是数字是无意义的。
举例
七、分组查询 group by子句
分组的目的就是为了分组之后方便聚合统计。
语法
select column1,column2,column3... from table_name group by column;
语法理解
1、从table_name中举行分组查询,指定column列名,根据列名中不同的行数据举行分组,相同的行数据就会聚合统计。
2、分组就像一张表在按条件逻辑上举行拆分成多张子表,分别对多张子表举行聚合统计。
举例
现在我们有一个数据库里面存放三张表,分别是emp(员工表),dept(部分表),salgrade(薪资表)
1、表现每个部分平均、最高工资
2、表现每个部分每个职业平均、最低工资
但是我们发现上图想表现一下员工名字就报错了,这是为什么呢?
因为名字是不相同的没有办法分组聚合,而且大原则是只有在group by 之后的列名才能在select之后表现,当然聚合函数也是在select背面表现。
至于想加上名字就不应该用聚合函数来实现,应该用where子句等方式筛选。
3、表现平均工资低于2000的部分和他的平均工资
我们发现这个问题有对聚合出来的数据举行筛选,所以我们使用having子句来实现。
4、hanving子句和where子句的区别与理解
次序如下图
所以where子句是对任意列举行条件筛选,但是having子句专门对聚合数据举行条件筛选,虽然两者都有条件筛选,但好坏常不建议混用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |